d0b0c1a8b5528a1306e96517685233f0c8d1fa89
[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 *window;
23         Evas_Object *conformant;
24         Evas_Object *naviframe;
25
26         Elm_Object_Item *navi_item;
27
28         Evas_Object *tabbar;
29
30         Evas_Object *title_save_button;
31         Evas_Object *title_cancel_button;
32
33         Evas_Object *bottom_save_button;
34         Evas_Object *bottom_cancel_button;
35
36         save_cancel_cb save_callback;
37         save_cancel_cb cancel_callback;
38         void *callback_data;
39
40         Ecore_Timer *timer;
41         Ecore_IMF_Context *imf_context;
42
43
44 } cal_save_cancel_s;
45
46
47 static void __cal_save_cancel_show_title(void *data, Evas_Object *obj, void *event_info)
48 {
49         CAL_FN_START;
50
51         c_ret_if(!data);
52
53         cal_save_cancel_s* p = data;
54
55         elm_naviframe_item_title_visible_set(p->navi_item, EINA_TRUE);
56 }
57
58 static void __cal_save_cancel_hide_title(void *data, Evas_Object *obj, void *event_info)
59 {
60         CAL_FN_START;
61
62         c_ret_if(!data);
63
64         cal_save_cancel_s* p = data;
65
66         cal_window_rotation rotation = elm_win_rotation_get(p->window);
67
68         if (rotation == CAL_WINDOW_ROTATION_90 || rotation == CAL_WINDOW_ROTATION_270)
69                 elm_naviframe_item_title_visible_set(p->navi_item, EINA_FALSE);
70 }
71
72 static void __cal_save_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
73 {
74         c_ret_if(!data);
75
76         cal_save_cancel_s* p = data;
77 }
78
79 static void __cal_save_cancel_title_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
80 {
81         c_ret_if(!data);
82
83         cal_save_cancel_s* p = data;
84
85         __cal_save_cancel_button_callback(data, obj, event_info);
86
87         if (p->cancel_callback)
88                 p->cancel_callback(p->callback_data, obj, event_info);
89
90         elm_naviframe_item_pop(p->naviframe);
91 }
92
93 static void __cal_save_cancel_bottom_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
94 {
95         c_ret_if(!data);
96
97         cal_save_cancel_s* p = data;
98
99         __cal_save_cancel_button_callback(data, obj, event_info);
100
101         if (p->cancel_callback)
102                 p->cancel_callback(p->callback_data, obj, event_info);
103 }
104
105 static void __cal_save_cancel_save_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         p->save_callback(p->callback_data, obj, event_info);
114 }
115
116 cal_save_cancel_h cal_save_cancel_create(       Evas_Object *window, Evas_Object *conformant, Evas_Object *naviframe,
117         save_cancel_cb save_cb, save_cancel_cb cancel_cb, void* data)
118 {
119         CAL_FN_START;
120
121         c_retv_if(!naviframe, NULL);
122
123         Elm_Object_Item *navi_item = elm_naviframe_top_item_get(naviframe);
124         c_retv_if(!navi_item, NULL);
125
126         cal_save_cancel_s* p = (cal_save_cancel_s*)calloc(sizeof(cal_save_cancel_s), 1);
127         c_retv_if(!p, NULL);
128
129         p->save_callback = save_cb;
130         p->cancel_callback = cancel_cb;
131         p->callback_data = data;
132
133         Evas_Object *button = NULL;
134
135         if (save_cb) {
136
137                 button = cal_util_add_toolbar_button(naviframe, "toolbar_button1", S_("IDS_COM_OPT_SAVE"), __cal_save_cancel_save_button_callback, p);
138                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
139
140                 p->bottom_save_button = button;
141
142                 button = cal_util_add_toolbar_button(naviframe, "title_toolbar_button1", S_("IDS_COM_OPT_SAVE"), __cal_save_cancel_save_button_callback, p);
143                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
144
145                 p->title_save_button = button;
146
147         }
148         if (cancel_cb) {
149
150                 button = cal_util_add_toolbar_button(naviframe, "prev_btn", NULL, __cal_save_cancel_bottom_cancel_button_callback, p);
151                 c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
152
153                 elm_object_style_set(button, "naviframe/end_btn/default");
154
155                 p->bottom_cancel_button = button;
156         }
157
158
159         button = cal_util_add_toolbar_button(naviframe, "title_prev_btn", NULL, __cal_save_cancel_title_cancel_button_callback, p);
160         c_warn_if(!button, "cal_util_add_toolbar_button() is failed.");
161
162         p->title_cancel_button = button;
163
164         elm_object_style_set(button, "naviframe/end_btn/default");
165
166         p->window = window;
167         p->conformant = conformant;
168         p->naviframe = naviframe;
169         p->navi_item = navi_item;
170
171         evas_object_smart_callback_add(conformant, "virtualkeypad,state,on", __cal_save_cancel_hide_title, p);
172         evas_object_smart_callback_add(conformant, "virtualkeypad,state,off", __cal_save_cancel_show_title, p);
173
174         return p;
175 }
176
177 void cal_save_cancel_destroy(cal_save_cancel_h info)
178 {
179         CAL_FN_START;
180
181         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
182         c_retm_if(!p, "p is null");
183
184         if (p->title_save_button)
185                 evas_object_del(p->title_save_button);
186
187         if (p->title_cancel_button)
188                 evas_object_del(p->title_cancel_button);
189
190         if (p->bottom_save_button)
191                 evas_object_del(p->bottom_save_button);
192
193         if (p->bottom_cancel_button)
194                 evas_object_del(p->bottom_cancel_button);
195
196         evas_object_smart_callback_del(p->conformant, "virtualkeypad,state,on", __cal_save_cancel_hide_title);
197         evas_object_smart_callback_del(p->conformant, "virtualkeypad,state,off", __cal_save_cancel_show_title);
198
199         free(p);
200 }
201
202 void cal_save_cancel_set_button_text(cal_save_cancel_h info, const char *save_button_text, const char *cancel_button_text)
203 {
204         CAL_FN_START;
205
206         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
207         c_ret_if(!p);
208
209         if (CAL_STRLEN(save_button_text)) {
210
211                 if (p->title_save_button)
212                         elm_object_text_set(p->title_save_button, save_button_text);
213
214                 if (p->bottom_save_button)
215                         elm_object_text_set(p->bottom_save_button, save_button_text);
216         }
217
218         if (CAL_STRLEN(cancel_button_text)) {
219
220                 if (p->title_cancel_button)
221                         elm_object_text_set(p->title_cancel_button, save_button_text);
222
223                 if (p->bottom_cancel_button)
224                         elm_object_text_set(p->bottom_cancel_button, save_button_text);
225         }
226 }
227
228 void cal_save_cancel_set_disabled(cal_save_cancel_h info, Eina_Bool is_disabled_save, Eina_Bool is_disabled_cancel)
229 {
230         CAL_FN_START;
231
232         cal_save_cancel_s* p = (cal_save_cancel_s*)info;
233         c_ret_if(!p);
234
235         if (p->title_save_button)
236                 elm_object_disabled_set(p->title_save_button, is_disabled_save);
237
238         if (p->bottom_save_button)
239                 elm_object_disabled_set(p->bottom_save_button, is_disabled_save);
240
241         if (p->title_cancel_button)
242                 elm_object_disabled_set(p->title_cancel_button, is_disabled_cancel);
243
244         if (p->bottom_cancel_button)
245                 elm_object_disabled_set(p->bottom_cancel_button, is_disabled_cancel);
246 }