1137f001e66c006cf0e4e4d599f31f7969fee588
[apps/core/preloaded/calendar.git] / common / save-cancel.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://floralicense.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 #include "save-cancel.h"
19 #include "cld.h"
20
21 typedef struct {
22         Evas_Object *naviframe;
23         Elm_Object_Item *navi_item;
24
25         Evas_Object *conformant;
26
27         Evas_Object *tabbar;
28
29         Evas_Object *title_save_button;
30         Evas_Object *title_cancel_button;
31
32         Evas_Object *bottom_save_button;
33         Evas_Object *bottom_cancel_button;
34
35         save_cancel_cb save_callback;
36         save_cancel_cb cancel_callback;
37         void *callback_data;
38 } cal_save_cancel_s;
39
40 static void __cal_save_cancel_show_title_toolbar(void *data, Evas_Object *obj, void *event_info)
41 {
42         CAL_FN_START;
43
44         c_ret_if(!data);
45
46         cal_save_cancel_s* p = data;
47
48         Elm_Object_Item *navi_item = p->navi_item;
49
50         Evas_Object *tabbar = elm_object_item_part_content_unset(navi_item, "tabbar");
51
52         if (tabbar != NULL) {
53
54                 evas_object_hide(tabbar);
55
56                 Evas_Object *bottom_save_button = elm_object_item_part_content_unset(navi_item, "toolbar_button1");
57                 evas_object_hide(bottom_save_button);
58
59                 Evas_Object *bottom_cancel_button = elm_object_item_part_content_unset(navi_item, "prev_btn");
60                 evas_object_hide(bottom_cancel_button);
61
62                 p->tabbar = tabbar;
63         }
64
65         elm_object_item_signal_emit(navi_item, "elm,state,sip,shown", "");
66 }
67
68 static void __cal_save_cancel_hide_title_toolbar(void *data, Evas_Object *obj, void *event_info)
69 {
70         CAL_FN_START;
71
72         c_ret_if(!data);
73
74         cal_save_cancel_s* p = data;
75
76         Elm_Object_Item *navi_item = p->navi_item;
77
78         if (p->tabbar != NULL) {
79
80                 elm_object_item_part_content_set(navi_item, "tabbar", p->tabbar);
81
82                 evas_object_show(p->tabbar);
83
84                 elm_object_item_part_content_set(navi_item, "toolbar_button1", p->bottom_save_button);
85                 evas_object_show(p->bottom_save_button);
86
87                 elm_object_item_part_content_set(navi_item, "prev_btn", p->bottom_cancel_button);
88                 evas_object_show(p->bottom_cancel_button);
89
90                 p->tabbar = NULL;
91         }
92
93         elm_object_item_signal_emit(navi_item, "elm,state,sip,hidden", "");
94 }
95
96 static void __cal_save_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
97 {
98         c_ret_if(!data);
99
100         cal_save_cancel_s* p = data;
101
102         __cal_save_cancel_hide_title_toolbar(p, obj, event_info);
103 }
104
105 static void __cal_save_cancel_title_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
106 {
107         c_ret_if(!data);
108
109         cal_save_cancel_s* p = data;
110
111         __cal_save_cancel_button_callback(data, obj, event_info);
112
113         if (p->cancel_callback)
114                 p->cancel_callback(p->callback_data, obj, event_info);
115
116         elm_naviframe_item_pop(p->naviframe);
117 }
118
119 static void __cal_save_cancel_bottom_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
120 {
121         c_ret_if(!data);
122
123         cal_save_cancel_s* p = data;
124
125         __cal_save_cancel_button_callback(data, obj, event_info);
126
127         if (p->cancel_callback)
128                 p->cancel_callback(p->callback_data, obj, event_info);
129 }
130
131 static void __cal_save_cancel_save_button_callback(void *data, Evas_Object *obj, void *event_info)
132 {
133         c_ret_if(!data);
134
135         cal_save_cancel_s* p = data;
136
137         __cal_save_cancel_button_callback(data, obj, event_info);
138
139         p->save_callback(p->callback_data, obj, event_info);
140 }
141
142 static void __cal_save_cancel_input_panel_state_callback(void *data, Ecore_IMF_Context *imf_context, int value)
143 {
144         c_ret_if(!data);
145
146         if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
147                 __cal_save_cancel_show_title_toolbar(data, NULL, NULL);
148         else
149                 __cal_save_cancel_hide_title_toolbar(data, NULL, NULL);
150 }
151
152 void cal_save_cancel_set_input_panel_callback_for_ug(cal_save_cancel_h info, Evas_Object *entry)
153 {
154         c_ret_if(!info);
155         c_ret_if(!entry);
156
157         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
158
159         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry);
160         c_ret_if(!imf_context);
161
162         ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, __cal_save_cancel_input_panel_state_callback, p);
163 }
164
165 void cal_save_cancel_unset_input_panel_callback_for_ug(Evas_Object *entry)
166 {
167         c_ret_if(!entry);
168
169         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(entry);
170         c_ret_if(!imf_context);
171
172         ecore_imf_context_input_panel_event_callback_del(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, __cal_save_cancel_input_panel_state_callback);
173 }
174
175 cal_save_cancel_h cal_save_cancel_create(Evas_Object *naviframe, Evas_Object *conformant, save_cancel_cb save_cb, save_cancel_cb cancel_cb, void* data)
176 {
177         CAL_FN_START;
178
179         c_retv_if(!naviframe, NULL);
180
181         Elm_Object_Item *navi_item = elm_naviframe_top_item_get(naviframe);
182         c_retv_if(!navi_item, NULL);
183
184         cal_save_cancel_s* p = (cal_save_cancel_s*)calloc(sizeof(cal_save_cancel_s), 1);
185         c_retv_if(!p, NULL);
186
187         p->save_callback = save_cb;
188         p->cancel_callback = cancel_cb;
189         p->callback_data = data;
190
191         Evas_Object *button = NULL;
192
193         if (save_cb) {
194
195                 button = cal_util_add_toolbar_button(naviframe, "toolbar_button1", S_("IDS_COM_OPT_SAVE"), __cal_save_cancel_save_button_callback, p);
196                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
197
198                 p->bottom_save_button = button;
199
200                 button = cal_util_add_toolbar_button(naviframe, "title_toolbar_button1", S_("IDS_COM_OPT_SAVE"), __cal_save_cancel_save_button_callback, p);
201                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
202
203                 p->title_save_button = button;
204
205         }
206
207         button = elm_object_item_part_content_get(navi_item, "prev_btn");
208         if (!button) {
209
210                 button = cal_util_add_toolbar_button(naviframe, "prev_btn", NULL, __cal_save_cancel_bottom_cancel_button_callback, p);
211                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
212
213                 elm_object_style_set(button, "naviframe/end_btn/default");
214
215         } else
216                 if (cancel_cb)
217                         evas_object_smart_callback_add(button, "clicked", cancel_cb, data);
218
219         p->bottom_cancel_button = button;
220
221         button = cal_util_add_toolbar_button(naviframe, "title_prev_btn", NULL, __cal_save_cancel_title_cancel_button_callback, p);
222         c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
223
224         p->title_cancel_button = button;
225
226         elm_object_style_set(button, "naviframe/end_btn/default");
227
228         p->naviframe = naviframe;
229         p->navi_item = navi_item;
230
231         if (conformant) {
232                 p->conformant = conformant;
233
234                 evas_object_smart_callback_add(conformant, "virtualkeypad,state,on", __cal_save_cancel_show_title_toolbar, p);
235                 evas_object_smart_callback_add(conformant, "virtualkeypad,state,off", __cal_save_cancel_hide_title_toolbar, p);
236         }
237
238         return p;
239 }
240
241 void cal_save_cancel_destroy(cal_save_cancel_h info)
242 {
243         CAL_FN_START;
244
245         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
246         c_retm_if(!p, "p is null");
247
248         evas_object_smart_callback_del(p->conformant, "virtualkeypad,state,on", __cal_save_cancel_show_title_toolbar);
249         evas_object_smart_callback_del(p->conformant, "virtualkeypad,state,off", __cal_save_cancel_hide_title_toolbar);
250
251         if (p->title_save_button)
252                 evas_object_del(p->title_save_button);
253
254         if (p->title_cancel_button)
255                 evas_object_del(p->title_cancel_button);
256
257         if (p->bottom_save_button)
258                 evas_object_del(p->bottom_save_button);
259
260         if (p->bottom_cancel_button)
261                 evas_object_del(p->bottom_cancel_button);
262
263         free(p);
264 }
265
266 void cal_save_cancel_set_button_text(cal_save_cancel_h info, const char *save_button_text, const char *cancel_button_text)
267 {
268         CAL_FN_START;
269
270         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
271         c_ret_if(!p);
272
273         if (CAL_STRLEN(save_button_text)) {
274
275                 if (p->title_save_button)
276                         elm_object_text_set(p->title_save_button, save_button_text);
277
278                 if (p->bottom_save_button)
279                         elm_object_text_set(p->bottom_save_button, save_button_text);
280         }
281
282         if (CAL_STRLEN(cancel_button_text)) {
283
284                 if (p->title_cancel_button)
285                         elm_object_text_set(p->title_cancel_button, save_button_text);
286
287                 if (p->bottom_cancel_button)
288                         elm_object_text_set(p->bottom_cancel_button, save_button_text);
289         }
290 }
291
292 void cal_save_cancel_set_disabled(cal_save_cancel_h info, Eina_Bool is_disabled_save, Eina_Bool is_disabled_cancel)
293 {
294         CAL_FN_START;
295
296         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
297         c_ret_if(!p);
298
299         if (p->title_save_button)
300                 elm_object_disabled_set(p->title_save_button, is_disabled_save);
301
302         if (p->bottom_save_button)
303                 elm_object_disabled_set(p->bottom_save_button, is_disabled_save);
304
305         if (p->title_cancel_button)
306                 elm_object_disabled_set(p->title_cancel_button, is_disabled_cancel);
307
308         if (p->bottom_cancel_button)
309                 elm_object_disabled_set(p->bottom_cancel_button, is_disabled_cancel);
310 }