APPLY_RSA
[apps/home/ug-memo-efl.git] / src / edit.c
1 /*
2 *
3 * Copyright 2012  Samsung Electronics Co., Ltd
4 *
5 * Licensed under the Flora License, Version 1.0 (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
8 *
9 *    http://www.tizenopensource.org/license
10 *
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.
16 *
17 */
18
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <Elementary.h>
22 #include <dlog.h>
23 #include <ui-gadget-module.h>
24 #include <supplement.h>
25 #include <memo_string.h>
26 #include <gravel.h>
27 #include <extended-elm.h>
28 #include <memo-assist.h>
29 #include <memo_text_editor.h>
30 #include <memo_doodle_editor.h>
31 #include <memo-efl.h>
32 #include <memo-genlist.h>
33
34 typedef struct __edit_view_t {
35     ug_data_t *ugd;
36     Evas_Object *navigator;
37     Elm_Object_Item *navi_it;
38     Evas_Object *ctrl_bar;
39     Evas_Object *body_main;    /* content */
40     Evas_Object *l_btn;
41     Evas_Object *r_btn;
42     Eina_Bool drawing;    /* drawing or text mode */
43
44     /* add more variables here */
45     void *h_ed;
46 } edit_view_t;
47
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;
51
52 static void _on_left_btn_clicked(void *data, Evas_Object *obj, void *event_info)
53 {
54     edit_view_t *ev = (edit_view_t *)data;
55     if (ev->drawing) {
56         memo_doodle_editor_cancel(ev->h_ed);
57     } else {
58         memo_text_editor_cancel(ev->h_ed);
59     }
60 }
61
62 static void _on_right_btn_clicked(void *data, Evas_Object *obj, void *event_info)
63 {
64     edit_view_t *ev = (edit_view_t *)data;
65     if (ev->drawing) {
66         memo_doodle_editor_save(ev->h_ed);
67     } else {
68         memo_text_editor_save(ev->h_ed);
69     }
70 }
71 static void _text_editor_callback(void *data, const char *msg, void *event)
72 {
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;
91         }
92 }
93
94 static void _doodle_editor_callback(void *data, const char *msg, void *event)
95 {
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;
112     }
113 }
114
115 static void _create_edit_layout(edit_view_t *ev, service_h data)
116 {
117         ug_data_t *ugd = ev->ugd;
118
119         /* add navigationbar */
120         ev->navigator = elm_naviframe_add(ugd->base);
121         elm_object_part_content_set(ugd->base, "elm.swallow.content", ev->navigator);
122
123         /* custom body main here */
124         ev->body_main = elm_layout_create(ev->navigator, EDJ_FILE, "empty_layout");
125         /* compose */
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;
129         /* buttons */
130         ev->l_btn = elm_navigator_btn_create(ev->navigator, MEMO_I18N_CANCEL,
131                                                 ICONDIR "/01_header_icon_cancel.png", "navigationbar_control/left",
132                                                 _on_left_btn_clicked, ev);
133         elm_object_item_part_content_set(navi_it, "title_left_btn", ev->l_btn);
134         ev->r_btn = elm_navigator_btn_create(ev->navigator, MEMO_I18N_DONE,
135                                                 ICONDIR "/01_header_icon_done.png", "navigationbar_control/right",
136                                                 _on_right_btn_clicked, ev);
137         elm_object_item_part_content_set(navi_it, "title_right_btn", ev->r_btn);
138
139         /* load editor */
140         service_h service = NULL;
141         service_create(&service);
142
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;
147         } else {
148                 char *str = NULL;
149                 service_get_extra_data(data, "text", &str);
150                 if (str != NULL) { /* set init string */
151                         service_add_extra_data(service, "init_str", str);
152                         SFREE(str);
153                 }
154                 ev->h_ed = memo_load_text_editor(ug_get_window(), ev->body_main, service, _text_editor_callback, ev);
155                 ev->drawing = EINA_FALSE;
156         }
157         service_destroy(service);
158 }
159
160 Eina_Bool edit_view_pre_condition_check(service_h service)
161 {
162         char *str = NULL;
163         service_get_extra_data(service, "type", &str);
164         if (str != NULL) {
165                 if (!strcmp(str, "edit")) {
166                         SFREE(str);
167                         return EINA_TRUE;
168                 } else if (!strcmp(str, "draw")) {
169                         SFREE(str);
170                         return EINA_TRUE;
171                 }
172                 SFREE(str);
173         }
174         return EINA_FALSE;
175 }
176
177 void *memo_load_edit_view(ug_data_t *ugd, service_h service)
178 {
179     edit_view_t *ev = SMALLOC(edit_view_t);
180     RETVIF(ev == NULL, NULL);
181     ev->ugd = ugd;
182
183     _create_edit_layout(ev, service);
184     return (void *)ev;
185 }
186
187 void memo_del_edit_view(void *h_ev)
188 {
189     edit_view_t *ev = (edit_view_t *) h_ev;
190     elm_object_part_content_unset(ev->body_main, "elm.swallow.content");
191     if (ev->drawing) {
192         memo_destroy_doodle_editor(ev->h_ed);
193     } else {
194         memo_destroy_text_editor(ev->h_ed);
195     }
196     evas_object_del(ev->navigator);
197     SFREE(ev);
198 }
199