Tizen 2.1 base
[apps/home/call-setting.git] / src / cst-widget.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <stdio.h>
18 #include <appcore-efl.h>
19 #include <Elementary.h>
20 #include <Evas.h>
21 #include <vconf.h>
22
23 #include "cst-common.h"
24 #include "cst-widget.h"
25 #include "cst-common-string.h"
26 #include "cst-debug.h"
27 #include "cst-reject-msg.h"
28 #include "cst-prefix-dial.h"
29 #include "cst-forwarding.h"
30 #include "cst-barring.h"
31 #include "cst-util.h"
32 #include "cst-widget.h"
33 #include "cst-delete-list.h"
34 #include "cst-answering.h"
35 #include "cst-more-call-setting.h"
36 #include "cst-status-tone.h"
37 #include "cst-waiting.h"
38
39 static Elm_Genlist_Item_Class *itc_seperator = NULL;
40 static Elm_Genlist_Item_Class *itc_seperator_no_line = NULL;
41 static Elm_Genlist_Item_Class *itc_underline = NULL;
42 static Elm_Genlist_Item_Class *itc_1text = NULL;
43 static Elm_Genlist_Item_Class *itc_2text_expand = NULL;
44 static Elm_Genlist_Item_Class *itc_sub_expand = NULL;
45 static Elm_Genlist_Item_Class *itc_help = NULL;
46 static Elm_Genlist_Item_Class *itc_title = NULL;
47 #ifdef _CALL_SET_OPERATOR_DOCOMO
48 static Elm_Genlist_Item_Class *itc_1text_popup = NULL;
49 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;
50 static Elm_Genlist_Item_Class *itc_2text_1icon_7 = NULL;
51 #endif
52
53 static void __cst_2btn_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info);
54
55 static void
56 _cst_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text)
57 {
58         ret_if(text == NULL || *text == NULL);
59
60         char *utf8_text = NULL;
61         char *convert_text = NULL;
62
63         DBG("text [%s]", *text);
64
65         utf8_text  = elm_entry_markup_to_utf8(*text);
66         if (utf8_text) {
67                 convert_text = elm_entry_utf8_to_markup(utf8_text);
68                 if (convert_text) {
69                         free(*text);
70                         *text = strdup(convert_text);
71                         free(convert_text);
72                 }
73                 free(utf8_text);
74         }
75 }
76
77 /* This callback is for showing(hiding) X marked button. */
78 static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
79 {
80         DBG("");
81         if (elm_object_focus_get(data)) {
82                 if (elm_entry_is_empty(obj)) {
83                         DBG("");
84                         elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
85                 } else {
86                         DBG("");
87                         elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
88                 }
89         }
90 }
91
92 /* Focused callback will show X marked button and hide guidetext. */
93 static void _focused_cb(void *data, Evas_Object *obj, void *event_info)
94 {
95         DBG("");
96         if (!elm_entry_is_empty(obj)) {
97                 DBG("");
98                 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
99         }
100         elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
101 }
102
103 /* Unfocused callback will show guidetext and hide X marked button. */
104 static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info)
105 {
106         DBG("");
107         if (elm_entry_is_empty(obj)) {
108                 DBG("");
109                 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
110         }
111         elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
112 }
113
114 /* When X marked button clicked, make string as empty. */
115 static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
116 {
117         DBG("");
118         elm_entry_entry_set(data, "");
119 }
120
121 Evas_Object *_cst_create_progressbar(Evas_Object *parent)
122 {
123         ENTER(_cst_create_progressbar);
124         retv_if(NULL == parent, NULL);
125         Evas_Object *progressbar;
126         progressbar = elm_progressbar_add(parent);
127         elm_object_style_set(progressbar, "list_process");
128         evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
129         evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
130         evas_object_show(progressbar);
131         elm_progressbar_pulse(progressbar, EINA_TRUE);
132
133         return progressbar;
134 }
135
136 static void __cst_get_error_string(int error, char *msg)
137 {
138         switch (error) {
139         case CST_ERROR_INCORRECT_OPERATION:
140                 snprintf(msg, 100, "%s", T_(CST_STR_INCORRECT_OPERATION));
141                 break;
142         case CST_ERROR_INVALID_PASSWORD:
143                 snprintf(msg, 100, "%s", T_(CST_STR_INVALID_PASSWORD));
144                 break;
145         case CST_ERROR_PASSWORD_BLOCKED:
146                 snprintf(msg, 100, "%s", T_(CST_STR_PASSWORD_BLOCKED));
147                 break;
148         case CST_ERROR_SERVICE_UNAVAILABLE:
149                 snprintf(msg, 100, "%s", T_(CST_STR_SERVICE_UNAVAILABLE));
150                 break;
151         case CST_ERROR_UNKNOWN:
152                 snprintf(msg, 100, "%s", T_(CST_STR_REJECTED_BY_NETWORK));
153                 break;
154         case CST_ERROR_ENTER_NUMBER:
155                 snprintf(msg, 100, "%s", T_(CST_STR_ENTER_NUMBER));
156                 break;
157         case CST_ERROR_ENTER_MESSAGE:
158                 snprintf(msg, 100, "%s", T_(CST_STR_ENTER_MESSAGE));
159                 break;
160         case CST_ERROR_SELECT_VALID_ENTRY:
161                 snprintf(msg, 100, "%s", T_(CST_STR_SELECT_VALID_ENTRY));
162                 break;
163         case CST_ERROR_REJECTED_BY_NETWORK:
164                 snprintf(msg, 100, "%s", T_(CST_STR_REJECTED_BY_NETWORK));
165                 break;
166         case CST_ERROR_DUPLICATE_MESSAGE:
167                 snprintf(msg, 100, "%s", T_(CST_STR_ENTER_DUPLICATE_MESSAGE));
168                 break;
169         case CST_ERROR_INSERT_SIM_CARD:
170                 snprintf(msg, 100, "%s", T_(CST_STR_INSERT_SIM_CARD));
171                 break;
172         case CST_ERROR_CHANGE_FLIGHT_MODE:
173                 snprintf(msg, 100, "%s", T_(CST_STR_CHNAGE_FLIGHT_MODE_MESSAGE));
174                 break;
175         case CST_ERROR_AUL_LAUNCH_ERROR:
176                 snprintf(msg, 100, "%s", T_(CST_STR_APP_NOT_INSTALLED));
177                 break;
178         default:
179                 snprintf(msg, 100, "%s", T_(CST_STR_UNKNOWN_OPERATION));
180                 break;
181         }
182 }
183
184 Evas_Object *_cst_create_error_popup(Evas_Object *parent, int error)
185 {
186         retv_if(error < 0, NULL);
187
188         char error_msg[100];
189         __cst_get_error_string(error, error_msg);
190         DBG("Error message=%s", error_msg);
191
192         Evas_Object *popup;
193         popup = elm_popup_add(parent);
194         elm_popup_timeout_set(popup, 1.5);
195         elm_object_text_set(popup, error_msg);
196         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
197
198         return popup;
199 }
200
201 Evas_Object *_cst_create_duplicate_msg_popup(Evas_Object *parent, const char *string)
202 {
203         retv_if(string == NULL, NULL);
204
205         char error_msg[500] = {0, };
206         snprintf(error_msg, sizeof(error_msg), T_(CST_STR_ALREADY_IN_USE), string);
207         DBG("Error message=%s", error_msg);
208
209         Evas_Object *popup;
210         popup = elm_popup_add(parent);
211         elm_popup_timeout_set(popup, 1.5);
212         elm_object_text_set(popup, error_msg);
213         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
214
215         return popup;
216 }
217
218 static void __cst_2btn_popup_ok_cb(void *data, Evas_Object *obj, void *event_info)
219 {
220         ret_if(data == NULL);
221         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
222         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
223
224         switch (item_data->str_id) {
225         case CST_STR_UNABLE_TO_TURN_OFF_PROXIMITY:
226                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, EINA_FALSE);
227                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, EINA_FALSE);
228                 break;
229         case CST_STR_UNABLE_TO_SET_POWER_KEY_END_CALL:
230                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_POWER_KEY_ENDS_CALL_BOOL, EINA_TRUE);
231                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_PROXIMITY_SENSOR_BOOL, EINA_TRUE);
232                 break;
233         default:
234                 DBG("__cst_2btn_popup_response_cb() error");
235                 break;
236         }
237         elm_genlist_item_update(item_data->gl_item);
238         evas_object_del(ugd->popup);
239         ugd->popup = NULL;
240 }
241
242 static void __cst_2btn_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
243 {
244         ret_if(data == NULL);
245         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
246         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
247
248         if (ugd->popup) {
249                 evas_object_del(ugd->popup);
250                 ugd->popup = NULL;
251         }
252 }
253
254 Evas_Object *_cst_create_2btn_popup(Evas_Object *parent, CstGlItemData_t *item_data)
255 {
256         retv_if((parent == NULL) || (item_data == NULL), NULL);
257
258         Evas_Object *popup, *btn1, *btn2;
259         popup = elm_popup_add(parent);
260         elm_object_text_set(popup, T_(item_data->str_id));
261         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
262
263         btn1 = elm_button_add(popup);
264         elm_object_text_set(btn1, T_(CST_STR_OK));
265         elm_object_part_content_set(popup, "button1", btn1);
266         evas_object_smart_callback_add(btn1, "clicked", __cst_2btn_popup_ok_cb, (void *)item_data);
267
268         btn2 = elm_button_add(popup);
269         elm_object_text_set(btn2, T_(CST_STR_POP_CANCEL));
270         elm_object_part_content_set(popup, "button2", btn2);
271         evas_object_smart_callback_add(btn2, "clicked", __cst_2btn_popup_cancel_cb, (void *)item_data);
272
273         return popup;
274 }
275
276 Evas_Object *_cst_get_navifr_prev_btn(Evas_Object *nf)
277 {
278         ENTER(_cst_get_navifr_prev_btn);
279         Elm_Object_Item *top_it = elm_naviframe_top_item_get(nf);
280         retv_if(top_it == NULL, NULL);
281         Evas_Object *btn = elm_object_item_part_content_get(top_it, "prev_btn");
282         retv_if(btn == NULL, NULL);
283
284         return btn;
285 }
286
287 static Evas_Object *_cst_create_toolbar_btn(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
288 {
289         retv_if(NULL == parent, NULL);
290         Evas_Object *btn = elm_button_add(parent);
291         elm_object_style_set(btn, "naviframe/toolbar/default");
292         elm_object_text_set(btn, text);
293         evas_object_smart_callback_add(btn, "clicked", func, data);
294         evas_object_show(btn);
295         return btn;
296 }
297
298 void _cst_create_navi_control_bar(Evas_Object *parent,
299                 char *label1, const char *icon1, Evas_Smart_Cb cb1,
300                 char *label2, const char *icon2, Evas_Smart_Cb cb2,
301                 void *data, Elm_Object_Item *navi_it,
302                 Evas_Object **c_item)
303 {
304         ENTER(_cst_create_navi_control_bar);
305         ret_if(NULL == parent);
306
307         ret_if(label1 == NULL);
308
309         if (label1) {
310                 elm_object_item_part_content_set(navi_it, "toolbar_button1", NULL);
311                 c_item[0] = _cst_create_toolbar_btn(parent, label1, cb1, data);
312                 elm_object_item_part_content_set(navi_it, "toolbar_button1", c_item[0]);
313         }
314
315         if (label2) {
316                 elm_object_item_part_content_set(navi_it, "toolbar_button2", NULL);
317                 c_item[1] = _cst_create_toolbar_btn(parent, label2, cb2, data);
318                 elm_object_item_part_content_set(navi_it, "toolbar_button2", c_item[1]);
319         }
320 }
321
322 #ifdef _CALL_SET_OLD_SEPERATOR
323 static void __cst_gl_del_seperator(void *data, Evas_Object *obj)
324 {
325         ret_if(data == NULL);
326         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
327         if (item_data) {
328                 free(item_data);
329         }
330         return;
331 }
332 #endif
333
334 void _cst_create_genlist_separator(Evas_Object *genlist, Eina_Bool need_item_data)
335 {
336 #ifdef _CALL_SET_OLD_SEPERATOR
337         Elm_Object_Item *item = NULL;
338         Elm_Genlist_Item_Class *itc_seperator =  _cst_get_genlist_item_class(CST_ITC_SEPERATOR);
339
340         if (need_item_data) {
341                 CstGlItemData_t *item_data;
342                 itc_seperator->func.del = __cst_gl_del_seperator;
343                 item_data = calloc(1, sizeof(CstGlItemData_t));
344                 ret_if(NULL == item_data);
345                 item_data->index = -1;
346                 item = elm_genlist_item_append(genlist, itc_seperator, item_data, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
347                 item_data->gl_item = item;
348         } else {
349                 itc_seperator->func.del = NULL;
350                 item = elm_genlist_item_append(genlist, itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
351         }
352         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
353 #endif
354 }
355
356 void _cst_create_genlist_separator_no_line(Evas_Object *genlist)
357 {
358 #ifdef _CALL_SET_OLD_SEPERATOR
359         ret_if(NULL == genlist);
360         Elm_Object_Item *item = NULL;
361         Elm_Genlist_Item_Class *itc_seperator_no_line =  _cst_get_genlist_item_class(CST_ITC_SEPERATOR_NO_LINE);
362
363         item = elm_genlist_item_append(genlist, itc_seperator_no_line, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
364         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
365 #endif
366 }
367
368 void _cst_create_genlist_underline(Evas_Object *genlist)
369 {
370 #ifdef _CALL_SET_OLD_SEPERATOR
371         ret_if(NULL == genlist);
372         Elm_Object_Item *item = NULL;
373         Elm_Genlist_Item_Class *itc_underline =  _cst_get_genlist_item_class(CST_ITC_UNDERLINE);
374
375         item = elm_genlist_item_append(genlist, itc_underline, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
376         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
377 #endif
378 }
379
380 Eina_Bool _cst_hide_selectinfo_cb(void *data)
381 {
382         ENTER(_cst_hide_selectinfo_cb);
383         retv_if(data == NULL, ECORE_CALLBACK_CANCEL);
384
385         CstUgData_t *ugd = (CstUgData_t *)data;
386
387         if (ugd->selectinfo != NULL) {
388                 evas_object_hide(ugd->selectinfo);
389                 evas_object_del(ugd->selectinfo);
390
391                 ugd->selectinfo_layout = NULL;
392                 ugd->select_backup = NULL;
393                 ugd->selectinfo = NULL;
394         }
395         return ECORE_CALLBACK_CANCEL;
396 }
397
398 void _cst_create_selectinfo(CstUgData_t *ugd, Evas_Object *layout, const char *label)
399 {
400         ENTER(_cst_create_selectinfo);
401         ret_if(ugd == NULL);
402
403         if (!ugd->selectinfo) {
404                 ugd->select_backup = layout;
405                 ugd->selectinfo = elm_notify_add(ugd->select_backup);
406                 elm_notify_align_set(ugd->selectinfo, ELM_NOTIFY_ALIGN_FILL, 1.0);
407
408                 ugd->selectinfo_layout = elm_layout_add(ugd->select_backup);
409
410                 elm_layout_theme_set(ugd->selectinfo_layout,
411                                                          "standard", "selectioninfo", "center_text");
412
413                 elm_object_content_set(ugd->selectinfo, ugd->selectinfo_layout);
414         }
415
416         if (label == NULL) {
417                 evas_object_hide(ugd->selectinfo);
418                 return;
419         }
420
421         DBG("Input label : %s", label);
422         edje_object_part_text_set(_EDJ(ugd->selectinfo_layout), "elm.text", label);
423
424         evas_object_show(ugd->selectinfo);
425 }
426
427 void _cst_del_selectinfo(CstUgData_t *ugd)
428 {
429         ret_if(ugd == NULL);
430
431         if (ugd->selectinfo_layout) {
432                 evas_object_del(ugd->selectinfo_layout);
433         }
434         if (ugd->selectinfo) {
435                 evas_object_del(ugd->selectinfo);
436         }
437
438         ugd->selectinfo_layout = NULL;
439         ugd->selectinfo = NULL;
440 }
441
442 Evas_Object *_cst_create_onoff_button(Evas_Object *obj,
443                                                                           int state_value, Evas_Smart_Cb cb_func, void *cb_data)
444 {
445         retv_if(NULL == obj, NULL);
446
447         Evas_Object *icon = elm_check_add(obj);
448         elm_object_style_set(icon, "on&off");
449         elm_check_state_set(icon, state_value);
450         if (cb_func) {
451                 evas_object_smart_callback_add(icon, "changed",
452                                                                            cb_func, cb_data);
453         }
454         evas_object_propagate_events_set(icon, EINA_FALSE);
455
456         return icon;
457 }
458
459 Evas_Object *_cst_create_radio_icon(Evas_Object *obj,
460                                                                         Evas_Object *rdg, int value, int offset, const char *vconf_key)
461 {
462         retv_if(NULL == obj, NULL);
463
464         int rd_value = 0;
465         Evas_Object *radio = elm_radio_add(obj);
466         elm_radio_state_value_set(radio, value);
467         elm_radio_group_add(radio, rdg);
468         if (vconf_key == NULL) {
469                 elm_radio_value_set(rdg, offset);
470         } else {
471                 _cst_vconf_get_int(vconf_key, &rd_value);
472                 elm_radio_value_set(rdg, (rd_value + offset));
473         }
474
475         return radio;
476 }
477
478 Evas_Object *_cst_create_title_btn(Evas_Object *parent,
479                                                                    const char *text, Evas_Smart_Cb func, void *data)
480 {
481         retv_if(NULL == parent, NULL);
482
483         Evas_Object *btn = elm_button_add(parent);
484         if (!btn) {
485                 return NULL;
486         }
487         if (strcmp(text,(char *)T_(CST_STR_CANCEL)) == 0)
488                 elm_object_style_set(btn, "naviframe/back_btn/default");
489         else {
490                 Evas_Object *ic = NULL;
491                 elm_object_style_set(btn, "naviframe/title_icon");
492                 ic = elm_icon_add(parent);
493                 if (strcmp(text,(char *)T_(CST_STR_SAVE)) == 0) {
494                         elm_icon_file_set(ic, CST_TITLE_BTN_ICON_PLUS, NULL);
495                 } else {
496                         elm_icon_file_set(ic, CST_TITLE_BTN_ICON_EDIT, NULL);
497                 }
498                 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1 , 1);
499                 elm_icon_resizable_set(ic, EINA_TRUE, EINA_TRUE);
500                 elm_object_part_content_set(btn, "icon", ic);
501         }
502         evas_object_smart_callback_add(btn, "clicked", func, data);
503         return btn;
504 }
505
506 static void __cst_trans_finished(void *data, Evas_Object *obj, void *event_info)
507 {
508         ret_if(NULL == obj);
509         elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE);
510         evas_object_smart_callback_del(obj, "transition,finished", __cst_trans_finished);
511 }
512
513 void _cst_remove_naviframe(Evas_Object *nf)
514 {
515         ret_if(NULL == nf);
516         elm_naviframe_prev_btn_auto_pushed_set(nf, EINA_FALSE);
517         evas_object_smart_callback_add(nf, "transition,finished",
518                                                                    __cst_trans_finished, NULL);
519 }
520
521 Evas_Object *_cst_create_ime_editfield(CstUgData_t *ugd,
522                                                                            Evas_Object *parent, CstImeType_t ime_type, char *input_string)
523 {
524         retv_if((NULL == ugd || NULL == parent), NULL);
525
526         Ecore_IMF_Input_Panel_Layout panel_layout;
527         Evas_Object *layout = elm_layout_add(parent);
528         Elm_Entry_Filter_Limit_Size limit_filter_data;
529         Elm_Entry_Filter_Accept_Set digits_filter_data;
530         Ecore_IMF_Context *imf_context;
531         void (*input_panel_cb)() = NULL;
532         void (*entry_changed_cb)() = NULL;
533         Eina_Bool ret = EINA_FALSE;
534 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT
535         int value = 0;
536 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */
537
538         ret = elm_layout_file_set(layout, EDJ_NAME, CST_ELM_lAYOUT_EDITFIELD_CALLSETTING);
539         if (ret == EINA_FALSE) {
540                 DBG("elm_layout_file_set() failed");
541                 evas_object_del(layout);
542                 return NULL;
543         }
544
545         ugd->dg_entry = elm_entry_add(layout);
546         elm_object_part_content_set(layout, "elm.swallow.content", ugd->dg_entry);
547
548         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
549         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
550
551         evas_object_size_hint_weight_set(ugd->dg_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
552         evas_object_size_hint_align_set(ugd->dg_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
553
554         evas_object_smart_callback_add(ugd->dg_entry, "changed", _changed_cb, layout);
555         evas_object_smart_callback_add(ugd->dg_entry, "preedit,changed", _changed_cb, layout);
556         evas_object_smart_callback_add(ugd->dg_entry, "focused", _focused_cb, layout);
557         evas_object_smart_callback_add(ugd->dg_entry, "unfocused", _unfocused_cb, layout);
558         elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, ugd->dg_entry);
559
560         switch (ime_type) {
561 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT
562         case CST_IME_PREFIX_DIAL:
563                 elm_entry_single_line_set(ugd->dg_entry, EINA_TRUE);
564                 elm_entry_scrollable_set(ugd->dg_entry, EINA_TRUE);
565                 elm_object_part_text_set(layout, "elm.text", T_(CST_STR_ENTER_NUMBER));
566                 panel_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_PHONENUMBER;
567                 elm_entry_input_panel_layout_set(ugd->dg_entry, panel_layout);
568                 limit_filter_data.max_char_count = 0;
569                 limit_filter_data.max_byte_count = CST_MAX_PREFIX_NUMBER_LEN;
570                 digits_filter_data.accepted = "0123456789+*#";
571                 digits_filter_data.rejected = NULL;
572                 elm_entry_markup_filter_append(ugd->dg_entry,
573                                                                            elm_entry_filter_accept_set, &digits_filter_data);
574                 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &value);
575                 input_panel_cb = _cst_prefix_dialling_input_panel_event_callback;
576                 entry_changed_cb = _cst_call_prefix_dialling_entry_changed_cb;
577                 break;
578 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */
579
580         case CST_IME_REJECT_MSG:
581                 elm_object_part_text_set(layout, "elm.text", T_(CST_STR_ENTER_MESSAGE));
582                 panel_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_NORMAL;
583                 elm_entry_input_panel_layout_set(ugd->dg_entry, panel_layout);
584                 limit_filter_data.max_char_count = 0;
585                 limit_filter_data.max_byte_count = CST_MAX_ITEM_TEXT_BUFFER_LEN - 1;
586                 elm_entry_markup_filter_append(ugd->dg_entry, _cst_entry_filter_remove_markup, ugd);
587                 input_panel_cb = _cst_reject_msg_input_panel_event_callback;
588                 entry_changed_cb = _cst_reject_msg_changed_editfield_cb;
589                 break;
590         case CST_IME_CALL_FORWARD:
591                 elm_entry_single_line_set(ugd->dg_entry, EINA_TRUE);
592                 elm_entry_scrollable_set(ugd->dg_entry, EINA_TRUE);
593                 elm_object_part_text_set(layout, "elm.text", T_(CST_STR_ENTER_NUMBER));
594                 panel_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_PHONENUMBER;
595                 elm_entry_input_panel_layout_set(ugd->dg_entry, panel_layout);
596                 limit_filter_data.max_char_count = 0;
597                 limit_filter_data.max_byte_count = CST_MAX_PHONE_NUMBER_LEN;
598                 digits_filter_data.accepted = "0123456789+*#";
599                 digits_filter_data.rejected = NULL;
600                 elm_entry_markup_filter_append(ugd->dg_entry,
601                                                                            elm_entry_filter_accept_set, &digits_filter_data);
602                 input_panel_cb = _cst_call_forwarding_input_panel_event_callback;
603                 entry_changed_cb = _cst_call_forward_entry_changed_cb;
604                 break;
605
606 #ifdef _CALL_SET_BARRING_SUPPORT
607         case CST_IME_CALL_BAR:
608                 elm_entry_single_line_set(ugd->dg_entry, EINA_TRUE);
609                 elm_entry_scrollable_set(ugd->dg_entry, EINA_TRUE);
610                 elm_object_part_text_set(layout, "elm.text", T_(CST_STR_ENTER_PASSWORD));
611                 panel_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_NUMBERONLY;
612                 elm_entry_input_panel_layout_set(ugd->dg_entry, panel_layout);
613                 elm_entry_password_set(ugd->dg_entry, EINA_TRUE);
614                 limit_filter_data.max_char_count = 0;
615                 limit_filter_data.max_byte_count = CST_MAX_PASSWORD_LEN;
616                 input_panel_cb = _cst_call_barring_input_panel_event_callback;
617                 entry_changed_cb = _cst_call_barring_entry_changed_cb;
618                 break;
619 #endif  /* _CALL_SET_BARRING_SUPPORT */
620
621         default:
622                 ERR("Invalid ime type.");
623                 return NULL;
624         }
625
626         elm_entry_markup_filter_append(ugd->dg_entry,
627                                                                    elm_entry_filter_limit_size, &limit_filter_data);
628
629         elm_entry_cnp_mode_set(ugd->dg_entry, ELM_CNP_MODE_PLAINTEXT);
630
631         if (input_string != NULL) {
632                 elm_entry_entry_set(ugd->dg_entry, input_string);
633         }
634
635         elm_entry_cursor_end_set(ugd->dg_entry);
636
637         imf_context = elm_entry_imf_context_get(ugd->dg_entry);
638
639         DBG("ugd->entry = 0x%x, imf_context = 0x%x", ugd->dg_entry, imf_context);
640
641         if (imf_context) {
642                 ecore_imf_context_input_panel_event_callback_add (imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, input_panel_cb, ugd);
643 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT
644                 if (ime_type == CST_IME_PREFIX_DIAL) {
645                         if (0 > ugd->genlist_editfield_initialized) {
646                                 ecore_imf_context_input_panel_enabled_set(imf_context, EINA_FALSE);
647                                 ugd->genlist_editfield_initialized++;
648                         } else {
649                                 ecore_imf_context_input_panel_enabled_set(imf_context, EINA_TRUE);
650                         }
651                 }
652 #endif
653         }
654
655         if (NULL != entry_changed_cb) {
656                 DBG("entry_changed_cb = 0x%x", entry_changed_cb);
657                 evas_object_smart_callback_add(ugd->dg_entry, "changed", entry_changed_cb, ugd);
658                 evas_object_smart_callback_add(ugd->dg_entry, "preedit,changed", entry_changed_cb, ugd);
659         }
660
661         evas_object_show(ugd->dg_entry);
662
663         elm_object_focus_set(ugd->dg_entry, EINA_TRUE);
664
665         return layout;
666 }
667
668 Evas_Object *_cst_create_ime_btn_layout(Evas_Object *parent,
669                                                                                 Evas_Object *ef, Evas_Smart_Cb cb, void *cb_data)
670 {
671         retv_if((NULL == ef || NULL == parent), NULL);
672
673         Evas_Object *ly = NULL;
674         Evas_Object *btn = NULL;
675         Evas_Object *icon = NULL;
676         Eina_Bool ret = EINA_FALSE;
677
678         ly = elm_layout_add(parent);
679         retv_if(NULL == ly, NULL);
680
681         ret = elm_layout_file_set(ly, EDJ_NAME, "dialoguegroup/contact");
682         if (ret == EINA_FALSE) {
683                 DBG("elm_layout_file_set() failed");
684                 evas_object_del(ly);
685                 return NULL;
686         }
687
688         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
689         evas_object_show(ly);
690
691         elm_object_part_content_set(ly, "editfield/sw", ef);
692
693         btn = elm_button_add(ly);
694         if (!btn) {
695                 DBG("elm_button_add() failed");
696                 evas_object_del(ly);
697                 return NULL;
698         }
699
700         icon = elm_icon_add(ly);
701         if (!icon) {
702                 DBG("elm_icon_add() failed");
703                 evas_object_del(ly);
704                 evas_object_del(btn);
705                 return NULL;
706         }
707
708         elm_icon_file_set(icon, CST_CTRL_ICON_CONTACTS, NULL);
709         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
710         elm_icon_resizable_set(icon, EINA_TRUE, EINA_TRUE);
711         elm_object_part_content_set(btn, "icon", icon);
712         elm_object_part_content_set(ly, "button/sw", btn);
713         elm_object_focus_set(ef, EINA_TRUE);
714         evas_object_smart_callback_add(btn, "clicked",
715                                                                    cb, cb_data);
716
717         return ly;
718 }
719
720 void _cst_create_all_genlist_item_class(void)
721 {
722         itc_seperator = elm_genlist_item_class_new();
723         itc_seperator->item_style = "dialogue/separator";
724         itc_seperator->func.text_get = NULL;
725         itc_seperator->func.content_get = NULL;
726         itc_seperator->func.state_get = NULL;
727         itc_seperator->func.del = NULL;
728
729         itc_seperator_no_line = elm_genlist_item_class_new();
730         itc_seperator_no_line->item_style = "dialogue/separator/end";
731         itc_seperator_no_line->func.text_get = NULL;
732         itc_seperator_no_line->func.content_get = NULL;
733         itc_seperator_no_line->func.state_get = NULL;
734         itc_seperator_no_line->func.del = NULL;
735
736         itc_underline = elm_genlist_item_class_new();
737         itc_underline->item_style = "dialogue/separator/1/with_line";
738         itc_underline->func.text_get = NULL;
739         itc_underline->func.content_get = NULL;
740         itc_underline->func.state_get = NULL;
741         itc_underline->func.del = NULL;
742
743         itc_1text = elm_genlist_item_class_new();
744         itc_1text->item_style = "dialogue/1text";
745         itc_1text->func.text_get = NULL;
746         itc_1text->func.content_get = NULL;
747         itc_1text->func.state_get = NULL;
748         itc_1text->func.del = NULL;
749
750         itc_2text_expand = elm_genlist_item_class_new();
751         itc_2text_expand->item_style = "dialogue/2text.3/expandable";
752         itc_2text_expand->func.text_get = NULL;
753         itc_2text_expand->func.content_get = NULL;
754         itc_2text_expand->func.state_get = NULL;
755         itc_2text_expand->func.del = NULL;
756
757         itc_sub_expand = elm_genlist_item_class_new();
758         itc_sub_expand->item_style = "dialogue/1text.1icon/expandable2";
759         itc_sub_expand->func.text_get = NULL;
760         itc_sub_expand->func.content_get = NULL;
761         itc_sub_expand->func.state_get = NULL;
762         itc_sub_expand->func.del = NULL;
763
764         itc_help = elm_genlist_item_class_new();
765         itc_help->item_style = "multiline/1text";
766         itc_help->func.text_get = NULL;
767         itc_help->func.content_get = NULL;
768         itc_help->func.state_get = NULL;
769         itc_help->func.del = NULL;
770
771         itc_title = elm_genlist_item_class_new();
772         itc_title->item_style = "dialogue/grouptitle";
773         itc_title->func.text_get = NULL;
774         itc_title->func.content_get = NULL;
775         itc_title->func.state_get = NULL;
776         itc_title->func.del = NULL;
777
778 }
779
780 void _cst_destroy_all_genlist_item_class(void)
781 {
782         if (itc_seperator) {
783                 elm_genlist_item_class_free(itc_seperator);
784                 itc_seperator = NULL;
785         }
786         if (itc_seperator_no_line) {
787                 elm_genlist_item_class_free(itc_seperator_no_line);
788                 itc_seperator_no_line = NULL;
789         }
790         if (itc_underline) {
791                 elm_genlist_item_class_free(itc_underline);
792                 itc_underline = NULL;
793         }
794         if (itc_1text) {
795                 elm_genlist_item_class_free(itc_1text);
796                 itc_1text = NULL;
797         }
798         if (itc_2text_expand) {
799                 elm_genlist_item_class_free(itc_2text_expand);
800                 itc_2text_expand = NULL;
801         }
802         if (itc_sub_expand) {
803                 elm_genlist_item_class_free(itc_sub_expand);
804                 itc_sub_expand = NULL;
805         }
806         if (itc_help) {
807                 elm_genlist_item_class_free(itc_help);
808                 itc_help = NULL;
809         }
810         if (itc_title) {
811                 elm_genlist_item_class_free(itc_title);
812                 itc_title = NULL;
813         }
814 }
815
816 Elm_Genlist_Item_Class *_cst_get_genlist_item_class(cst_genlist_item_class item)
817 {
818         switch (item) {
819         case CST_ITC_SEPERATOR:
820                 return itc_seperator;
821         case CST_ITC_SEPERATOR_NO_LINE:
822                 return itc_seperator_no_line;
823         case CST_ITC_UNDERLINE:
824                 return itc_underline;
825         case CST_ITC_1TEXT:
826                 return itc_1text;
827         case CST_ITC_2TEXT_EXPAND:
828                 return itc_2text_expand;
829         case CST_ITC_SUB_EXPAND:
830                 return itc_sub_expand;
831         case CST_ITC_HELP:
832                 return itc_help;
833         case CST_ITC_TITLE:
834                 return itc_title;
835         default:
836                 DBG("invalid item class (%d)", item);
837                 return NULL;
838         }
839 }
840
841 void _cst_set_function_genlist_item_class(cst_genlist_item_class item, Elm_Gen_Item_Text_Get_Cb text_get_fn,
842                 Elm_Gen_Item_Content_Get_Cb content_get_fn, Elm_Gen_Item_State_Get_Cb state_get_fn, Elm_Gen_Item_Del_Cb del_fn)
843 {
844         Elm_Genlist_Item_Class *itc = NULL;
845         switch (item) {
846         case CST_ITC_SEPERATOR:
847                 itc = itc_seperator;
848                 break;
849         case CST_ITC_SEPERATOR_NO_LINE:
850                 itc = itc_seperator_no_line;
851                 break;
852         case CST_ITC_UNDERLINE:
853                 itc = itc_underline;
854                 break;
855         case CST_ITC_1TEXT:
856                 itc = itc_1text;
857                 break;
858         case CST_ITC_2TEXT_EXPAND:
859                 itc = itc_2text_expand;
860                 break;
861         case CST_ITC_SUB_EXPAND:
862                 itc = itc_sub_expand;
863                 break;
864         case CST_ITC_HELP:
865                 itc = itc_help;
866                 break;
867         case CST_ITC_TITLE:
868                 itc = itc_title;
869                 break;
870         default:
871                 DBG("invalid item class (%d)", item);
872                 return;
873         }
874
875         itc->func.text_get = text_get_fn;
876         itc->func.content_get = content_get_fn;
877         itc->func.state_get = state_get_fn;
878         itc->func.del = del_fn;
879 }
880
881 void _cst_destroy_all_items(CstUgData_t *ugd)
882 {
883         ret_if(ugd == NULL);
884
885         _cst_destroy_answering_call();
886         _cst_destroy_delete_list();
887         _cst_destroy_call_forwarding();
888         _cst_destroy_more_call_setting();
889         _cst_destroy_reject_message(ugd);
890         _cst_destroy_call_status_tone();
891         _cst_destroy_call_waiting();
892 #ifdef _CALL_SET_BARRING_SUPPORT
893         _cst_destroy_call_barring();
894 #endif  /* _CALL_SET_BARRING_SUPPORT */
895 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT
896         _cst_destroy_prefix_dialling();
897 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */
898 }
899