3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.1 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 #include <Elementary.h>
23 #include <ui-gadget-module.h>
24 #include <supplement.h>
25 #include <memo_string.h>
27 #include <extended-elm.h>
28 #include <memo-assist.h>
29 #include <memo_text_editor.h>
30 #include <memo_doodle_editor.h>
32 #include <memo-genlist.h>
34 typedef struct __edit_view_t {
36 Evas_Object *navigator;
37 Elm_Object_Item *navi_it;
38 Evas_Object *ctrl_bar;
39 Evas_Object *body_main; /* content */
42 Eina_Bool drawing; /* drawing or text mode */
44 /* add more variables here */
48 static void _text_editor_callback(void *data, const char *msg, void *event);
49 static void _doodle_editor_callback(void *data, const char *msg, void *event);
50 extern service_h text_service;
52 static void _on_left_btn_clicked(void *data, Evas_Object *obj, void *event_info)
54 edit_view_t *ev = (edit_view_t *)data;
56 memo_doodle_editor_save(ev->h_ed);
58 memo_text_editor_save(ev->h_ed);
62 static void _on_right_btn_clicked(void *data, Evas_Object *obj, void *event_info)
64 edit_view_t *ev = (edit_view_t *)data;
66 memo_doodle_editor_cancel(ev->h_ed);
68 memo_text_editor_cancel(ev->h_ed);
71 static void _text_editor_callback(void *data, const char *msg, void *event)
73 edit_view_t *ev = (edit_view_t *)data;
74 if (strcmp(msg, "layout") == 0) {
75 elm_object_part_content_set(ev->body_main, "elm.swallow.content", (Evas_Object *)event);
76 } else if (strcmp(msg, "title") == 0) {
77 elm_object_item_text_set(ev->navi_it, (const char *)event);
78 } else if (strcmp(msg, "savable") == 0) {
79 elm_object_disabled_set(ev->r_btn, (int)event==0? EINA_TRUE:EINA_FALSE);
80 } else if (strcmp(msg, "save") == 0) {
81 ug_send_result(ev->ugd->ug,text_service);
82 service_destroy(text_service);
83 ug_destroy_me(ev->ugd->ug);
84 } else if (strcmp(msg, "cancel") == 0) {
85 ug_destroy_me(ev->ugd->ug);
86 } else if (strcmp(msg, "drawing") == 0) {
87 elm_object_part_content_unset(ev->body_main, "elm.swallow.content");
88 memo_destroy_text_editor(ev->h_ed);
89 ev->h_ed = memo_load_doodle_editor(ug_get_window(), ev->body_main, NULL, _doodle_editor_callback, ev);
90 ev->drawing = EINA_TRUE;
94 static void _doodle_editor_callback(void *data, const char *msg, void *event)
96 edit_view_t *ev = (edit_view_t *)data;
97 if (strcmp(msg, "layout") == 0) {
98 elm_object_part_content_set(ev->body_main, "elm.swallow.content", (Evas_Object *)event);
99 } else if (strcmp(msg, "title") == 0) {
100 elm_object_item_text_set(ev->navi_it, (const char *)event);
101 } else if (strcmp(msg, "savable") == 0) {
102 elm_object_disabled_set(ev->r_btn, (int)event==0? EINA_TRUE:EINA_FALSE);
103 } else if (strcmp(msg, "save") == 0) {
104 ug_destroy_me(ev->ugd->ug);
105 } else if (strcmp(msg, "cancel") == 0) {
106 ug_destroy_me(ev->ugd->ug);
107 } else if (strcmp(msg, "text") == 0) {
108 elm_object_part_content_unset(ev->body_main, "elm.swallow.content");
109 memo_destroy_doodle_editor(ev->h_ed);
110 ev->h_ed = memo_load_text_editor(ug_get_window(), ev->body_main, NULL, _text_editor_callback, ev);
111 ev->drawing = EINA_FALSE;
115 static void _create_edit_layout(edit_view_t *ev, service_h data)
117 ug_data_t *ugd = ev->ugd;
119 /* add navigationbar */
120 ev->navigator = elm_naviframe_add(ugd->base);
121 elm_object_part_content_set(ugd->base, "elm.swallow.content", ev->navigator);
123 /* custom body main here */
124 ev->body_main = elm_layout_create(ev->navigator, EDJ_FILE, "empty_layout");
126 elm_naviframe_prev_btn_auto_pushed_set(ev->navigator, EINA_FALSE);
127 Elm_Object_Item *navi_it = elm_naviframe_item_push(ev->navigator, MEMO_I18N_MEMO, NULL, NULL, ev->body_main, NULL);
128 ev->navi_it = navi_it;
130 ev->r_btn = elm_button_create(ev->navigator, MEMO_I18N_CANCEL,
131 _on_right_btn_clicked, ev);
132 elm_object_style_set(ev->r_btn, "naviframe/back_btn/default");
133 elm_object_item_part_content_set(navi_it, "title_right_btn", ev->r_btn);
134 ev->l_btn = elm_button_create(ev->navigator, MEMO_I18N_DONE,
135 _on_left_btn_clicked, ev);
136 elm_object_style_set(ev->l_btn, "naviframe/title/icon/edit");
137 elm_object_item_part_content_set(navi_it, "title_left_btn", ev->l_btn);
140 service_h service = NULL;
141 service_create(&service);
143 service_add_extra_data(service, "toggle", "disable");
144 if (service_key_check(data, "type", "draw")) {
145 ev->h_ed = memo_load_doodle_editor(ug_get_window(), ev->body_main, service, _doodle_editor_callback, ev);
146 ev->drawing = EINA_TRUE;
149 service_get_extra_data(data, "text", &str);
150 if (str != NULL) { /* set init string */
151 service_add_extra_data(service, "init_str", str);
154 ev->h_ed = memo_load_text_editor(ug_get_window(), ev->body_main, service, _text_editor_callback, ev);
155 ev->drawing = EINA_FALSE;
157 service_destroy(service);
160 Eina_Bool edit_view_pre_condition_check(service_h service)
163 service_get_extra_data(service, "type", &str);
165 if (!strcmp(str, "edit")) {
168 } else if (!strcmp(str, "draw")) {
177 void *memo_load_edit_view(ug_data_t *ugd, service_h service)
179 edit_view_t *ev = SMALLOC(edit_view_t);
180 RETVIF(ev == NULL, NULL);
183 _create_edit_layout(ev, service);
187 void memo_del_edit_view(void *h_ev)
189 edit_view_t *ev = (edit_view_t *) h_ev;
190 elm_object_part_content_unset(ev->body_main, "elm.swallow.content");
192 memo_destroy_doodle_editor(ev->h_ed);
194 memo_destroy_text_editor(ev->h_ed);
196 evas_object_del(ev->navigator);