8340aa022c4385b89f39511f8547051f13245da9
[apps/home/call-setting.git] / src / cst-prefix-dial.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://www.tizenopensource.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 <Elementary.h>
18 #include <bundle.h>
19 #include <vconf.h>
20 #include "cst-common.h"
21 #include "cst-common-string.h"
22 #include "cst-widget.h"
23 #include "cst-call-setting.h"
24
25 #include "cst-prefix-dial.h"
26 #include "cst-prefix-dial-ime.h"
27 #include "cst-delete-list.h"
28 #include "cst-util.h"
29
30 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;
31 static Elm_Genlist_Item_Class *itc_2text = NULL;
32 static Elm_Genlist_Item_Class *itc_1text_1icon2 = NULL;
33 static Elm_Genlist_Item_Class *itc_help = NULL;
34 Elm_Object_Item *ec_item[3];
35
36 static void __cst_on_click_prefix_dialling_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info);
37 static void __cst_on_click_prefix_dialling_list(void *data, Evas *evas, Evas_Object *obj, void *event_info);
38
39 static CstGlItemDisplayInfo_t list_dep1_prefix_dialling[] = {
40         {1, CST_STR_ENABLE_PREFIX_DIALLING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_1TEXT_ONOFF, __cst_on_click_prefix_dialling_onoff},
41         {1, CST_STR_MANAGE_PREFIX_DIALING_NUMBERS, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},
42         {1, CST_STR_PREFIX_DIALLING_LIST, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_SUB_TEXT, __cst_on_click_prefix_dialling_list},
43         {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},
44 };
45
46 static void __cst_clicked_prefix_back(void *data, Evas_Object *obj, void *event_info)
47 {
48         ENTER(__cst_clicked_prefix_back);
49         ret_if(NULL == data);
50         CstUgData_t *ugd = (CstUgData_t *)data;
51
52         if (ugd->backup_genlist) {
53                 ugd->backup_genlist = NULL;
54         }
55
56         if (ugd->backup_layout) {
57                 ugd->backup_layout = NULL;
58         }
59         _cst_del_selectinfo(ugd);
60 }
61
62 void _cst_set_active_prefix_vconf(int i)
63 {
64         _cst_vconf_set_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_VALUE_INT, i);
65 }
66
67 static int __cst_get_active_prefix_list()
68 {
69         int index;
70         _cst_vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_VALUE_INT, &index);
71         return index;
72 }
73
74 void _cst_set_prefix_dialling_list(int index, char *number)
75 {
76         ENTER(_cst_set_prefix_dialling_list);
77
78         ret_if(number == NULL);
79         switch (index) {
80         case 0:
81                 _cst_vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR,
82                         number);
83                 break;
84         case 1:
85                 _cst_vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR,
86                         number);
87                 break;
88         case 2:
89                 _cst_vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR,
90                         number);
91                 break;
92         case 3:
93                 _cst_vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR,
94                         number);
95                 break;
96         case 4:
97                 _cst_vconf_set_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR,
98                         number);
99                 break;
100         default:
101                 DBG("Error set prefix dialling list");
102                 break;
103         }
104 }
105
106 char *_cst_get_prefix_dialling_list(int index)
107 {
108         ENTER(_cst_get_prefix_dialling_list);
109         char *number = NULL;
110
111         switch (index) {
112         case CST_ITEM_1:
113                 number = _cst_vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM1_STR);
114                 break;
115         case CST_ITEM_2:
116                 number = _cst_vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM2_STR);
117                 break;
118         case CST_ITEM_3:
119                 number = _cst_vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM3_STR);
120                 break;
121         case CST_ITEM_4:
122                 number = _cst_vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM4_STR);
123                 break;
124         case CST_ITEM_5:
125                 number = _cst_vconf_get_str(VCONFKEY_CISSAPPL_PREFIX_DIAL_NUM5_STR);
126                 break;
127         }
128         retv_if(NULL == number, NULL);
129         return number;
130 }
131
132 void _cst_set_num_of_prefix_dialling_list(int i)
133 {
134         ENTER(_cst_set_num_of_prefix_dialling_list);
135         _cst_vconf_set_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, i);
136
137         if (ec_item[0] != NULL) {
138                 if (i == 0) {
139                         elm_object_item_disabled_set(ec_item[0], EINA_TRUE);
140                 } else {
141                         elm_object_item_disabled_set(ec_item[0], EINA_FALSE);
142                 }
143         }
144         if (ec_item[1] != NULL) {
145                 if (i == 5) {
146                         elm_object_item_disabled_set(ec_item[1], EINA_TRUE);
147                 } else {
148                         elm_object_item_disabled_set(ec_item[1], EINA_FALSE);
149                 }
150         }
151 }
152
153 int _cst_get_num_of_prefix_dialling_list(void)
154 {
155         int cnt;
156         _cst_vconf_get_int(VCONFKEY_CISSAPPL_PREFIX_DIAL_INT, &cnt);
157         return cnt;
158 }
159
160 static Eina_Bool __cst_prefix_check_same_data(void *data, const char *string)
161 {
162         ENTER(__cst_prefix_check_same_data);
163         CstUgData_t *ugd = (CstUgData_t *)data;
164         char *buf;
165         int i, prefix_entries;
166         Eina_Bool value = EINA_FALSE;
167         Evas_Object *error;
168
169         prefix_entries = _cst_get_num_of_prefix_dialling_list();
170
171         DBG("the value of the string is %s (%d) \n", string, prefix_entries);
172
173         for (i = 0; i < prefix_entries; i++) {
174                 buf = _cst_get_prefix_dialling_list(i);
175                 if (buf) {
176                         DBG("buf : %s", buf);
177                         if (strcmp(buf, string) == 0) {
178                                 error = _cst_create_error_popup(ugd->nf,
179                                         CST_ERROR_DUPLICATE_MESSAGE);
180                                 ugd->popup = error;
181                                 evas_object_show(error);
182                                 value = EINA_TRUE;
183                         }
184                         free(buf);
185                         buf = NULL;
186                 }
187         }
188
189         return value;
190 }
191
192 static char *__cst_gl_label_get_dialling_list(void *data,
193                 Evas_Object *obj,
194                 const char *part)
195 {
196         retv_if(NULL == data, NULL);
197         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
198
199         if (!strcmp(part, "elm.text"))
200                 return strdup(item_data->label);
201         return NULL;
202 }
203
204 static void __cst_gl_radio_del_dialling_cb(void *data,
205                 Evas *evas,
206                 Evas_Object *obj,
207                 void *event_info)
208 {
209         ret_if(data == NULL);
210         CstUgData_t *ugd = (CstUgData_t *)data;
211
212         ugd->prefix_rdg = NULL;
213 }
214
215 static Evas_Object *__cst_gl_icon_get_dialling_list(void *data,
216                 Evas_Object *obj,
217                 const char *part)
218 {
219         Evas_Object *radio;
220
221         retv_if(NULL == data, NULL);
222         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
223         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
224         retv_if(NULL == ugd, NULL);
225         retv_if(NULL == ugd->backup_genlist, NULL);
226
227         if (!strcmp(part, "elm.swallow.icon") || !strncmp(part, "elm.icon", 8)) {
228                 if (NULL == ugd->prefix_rdg) {
229                         ugd->prefix_rdg = elm_radio_add(obj);
230                         elm_radio_value_set(ugd->prefix_rdg, - 1);
231                 }
232                 radio = elm_radio_add(obj);
233                 elm_radio_state_value_set(radio, item_data->index);
234                 elm_radio_group_add(radio, ugd->prefix_rdg);
235                 elm_radio_value_set(ugd->prefix_rdg,
236                 __cst_get_active_prefix_list());
237                 return radio;
238         }
239         return NULL;
240 }
241
242 static void __cst_gl_del_dialling_list(void *data, Evas_Object *obj)
243 {
244         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
245         if (item_data) {
246                 if (item_data->label)
247                         free(item_data->label);
248                 free(item_data);
249         }
250 }
251
252 static void __cst_gl_sel_dialling_list(void *data,
253                 Evas_Object *obj,
254                 void *event_info)
255 {
256
257         ENTER(__cst_gl_sel_dialling_list);
258         elm_genlist_item_selected_set((Elm_Object_Item *)event_info,
259                 EINA_FALSE);
260         if (_cst_get_num_of_prefix_dialling_list() == 0)
261                 return;
262
263         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
264         ret_if(NULL == data);
265         CstUgData_t *ugd = (CstUgData_t *)data;
266         CstGlItemData_t *item_data =
267                 (CstGlItemData_t *)elm_object_item_data_get(item);
268
269         _cst_set_active_prefix_vconf(item_data->index);
270         if(ugd->prefix_gl_list_item != NULL)
271                 elm_genlist_item_update(ugd->prefix_gl_list_item);
272         elm_radio_value_set(ugd->prefix_rdg, item_data->index);
273         return;
274 }
275
276 static void __cst_click_prefix_create_cancel(void *data,
277                 Evas_Object *obj,
278                 void *event_info)
279 {
280         ENTER(__cst_click_prefix_create_cancel);
281         ret_if(!data);
282         CstUgData_t *ugd = (CstUgData_t *)data;
283
284         memset(ugd->c_item, 0, sizeof(ugd->c_item));
285         elm_naviframe_item_pop(ugd->nf);
286 }
287
288 static void __cst_click_prefix_create_done(void *data,
289                 Evas_Object *obj,
290                 void *event_info)
291 {
292         ENTER(__cst_click_prefix_create_done);
293         ret_if(!data);
294
295         CstUgData_t *ugd = (CstUgData_t *)data;
296         const char *number;
297         int num_of_prefix_dialling_list;
298
299         num_of_prefix_dialling_list = _cst_get_num_of_prefix_dialling_list();
300
301         if (num_of_prefix_dialling_list > 4) {
302                 DBG("Error popup is needed, Maximum number of messages is 5");
303                 return;
304         }
305
306         number = elm_entry_entry_get(ugd->dg_entry);
307         DBG("number : %s ", number);
308         if (0 == strlen(number)) {
309                 Evas_Object *error;
310
311                 DBG("No new number");
312                 error = _cst_create_error_popup(ugd->nf,
313                         CST_ERROR_ENTER_NUMBER);
314                 ugd->popup = error;
315                 evas_object_show(error);
316                 return;
317         }
318
319         if (__cst_prefix_check_same_data(ugd, number) == EINA_TRUE) {
320                 DBG("same number exist");
321                 return;
322         }
323
324         _cst_set_prefix_dialling_list(num_of_prefix_dialling_list,
325                 (char *)number);
326         _cst_set_active_prefix_vconf(num_of_prefix_dialling_list);
327         if(ugd->prefix_gl_list_item != NULL)
328                 elm_genlist_item_update(ugd->prefix_gl_list_item);
329         _cst_set_num_of_prefix_dialling_list(num_of_prefix_dialling_list + 1);
330         elm_genlist_clear(ugd->backup_genlist);
331         _cst_genlist_append_dialling_list_item(ugd, ugd->backup_genlist);
332
333         elm_radio_value_set(ugd->prefix_rdg, __cst_get_active_prefix_list());
334         memset(ugd->c_item, 0, sizeof(ugd->c_item));
335         elm_naviframe_item_pop(ugd->nf);
336 }
337
338 static void __cst_on_click_prefix_dialling_list_add_button(void *data,
339                 Evas_Object *obj,
340                 void *event_info)
341 {
342         ENTER(__cst_on_click_prefix_dialling_list_add_button);
343         ret_if(!data);
344         CstUgData_t *ugd = (CstUgData_t *)data;
345         Evas_Object *eo;
346         Elm_Object_Item *navi_it;
347         Evas_Object *btn;
348
349         ugd->popup = NULL;
350         eo = _cst_create_prefix_dialling_ime(ugd->nf, NULL, ugd);
351         evas_object_show(eo);
352
353         _cst_remove_naviframe(ugd->nf);
354         navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_PREFIX_DIALLING_NUMBER),
355                 NULL, NULL, eo, "1line");
356
357         btn = _cst_create_title_btn(ugd->nf, (char *)T_(CST_STR_CANCEL),
358                 __cst_click_prefix_create_cancel, (void *)ugd);
359         elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
360         
361         btn = _cst_create_title_btn(ugd->nf, (char *)T_(CST_STR_SAVE),
362                 __cst_click_prefix_create_done, (void *)ugd);
363         elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
364         elm_object_disabled_set(btn, EINA_TRUE);
365 }
366
367 static void __cst_set_genlist_item_styles_dialling_list(void)
368 {
369         ENTER(__cst_set_genlist_item_styles_dialling_list);
370
371         if (!itc_1text_1icon2)
372                 itc_1text_1icon2 = elm_genlist_item_class_new();
373
374         itc_1text_1icon2->item_style = "dialogue/1text.1icon.2";
375         itc_1text_1icon2->func.text_get = __cst_gl_label_get_dialling_list;
376         itc_1text_1icon2->func.content_get = __cst_gl_icon_get_dialling_list;
377         itc_1text_1icon2->func.del = __cst_gl_del_dialling_list;
378         itc_1text_1icon2->func.state_get = NULL;
379 }
380
381 void _cst_genlist_append_dialling_list_item(CstUgData_t *ugd, Evas_Object *genlist)
382 {
383         ENTER(_cst_genlist_append_dialling_list_item);
384         ret_if(NULL == ugd);
385         Elm_Object_Item *item;
386         int num_of_prefix_dialling_list;
387         CstGlItemData_t *item_data;
388         int index = 0;
389
390         num_of_prefix_dialling_list = _cst_get_num_of_prefix_dialling_list();
391
392         if (num_of_prefix_dialling_list == 0) {
393                 edje_object_signal_emit(_EDJ(ugd->backup_layout),
394                         "show,content2", "code");
395         } else {
396                 _cst_create_genlist_seperator(genlist, EINA_TRUE);
397                 ugd->prefix_rdg = NULL;
398                 ugd->prefix_rdg = elm_radio_add(genlist);
399                 elm_radio_value_set(ugd->prefix_rdg, -1);
400                 for (index = 0; index < num_of_prefix_dialling_list; index++) {
401
402                         item_data = calloc(1, sizeof(CstGlItemData_t));
403                         ret_if(item_data == NULL);
404                         item_data->index = index;
405                         item_data->ugd = (void *)ugd;
406
407                         item_data->label = _cst_get_prefix_dialling_list(index);
408                         item = elm_genlist_item_append(genlist, itc_1text_1icon2,
409                                 (void *)item_data, NULL, ELM_GENLIST_ITEM_NONE,
410                                 __cst_gl_sel_dialling_list, ugd);
411
412                         item_data->gl_item = item;
413                 }
414                 edje_object_signal_emit(_EDJ(ugd->backup_layout),
415                         "show,content1", "code");
416         }
417 }
418
419 static Evas_Object *__cst_create_genlist_dialling_list(CstUgData_t *ugd)
420 {
421         ENTER(__cst_create_genlist_dialling_list);
422         retv_if(NULL == ugd, NULL);
423         Evas_Object *genlist;
424         genlist = elm_genlist_add(ugd->nf);
425
426         elm_genlist_tree_effect_enabled_set(genlist, EINA_TRUE);
427         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
428         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
429
430         _cst_genlist_append_dialling_list_item(ugd, genlist);
431
432         return genlist;
433 }
434
435 static Evas_Object *__cst_create_nocontents_layout(CstUgData_t *ugd)
436 {
437         ENTER(__cst_create_nocontents_layout);
438         retv_if(NULL == ugd, NULL);
439         Evas_Object *layout;
440
441         layout = elm_layout_add(ugd->nf);
442         elm_layout_file_set(layout, EDJ_NAME, "nocontents");
443         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
444         elm_layout_theme_set(layout, "layout", "nocontents", "text");
445         elm_object_part_text_set(layout, "elm.text", (char *)T_(CST_STR_NO_NUMBERS));
446
447         return layout;
448 }
449
450 static void __cst_create_dialling_list(Evas_Object *parent, void *data)
451 {
452         ENTER(__cst_create_dialling_list);
453
454         Evas_Object *layout, *back_btn, *nocontent, *cbar;
455         CstUgData_t *ugd = (CstUgData_t *)data;
456         Elm_Object_Item *navi_it;
457         ret_if(ugd == NULL);
458         __cst_set_genlist_item_styles_dialling_list();
459
460         /*Create layout */
461         layout = elm_layout_add(ugd->nf);
462         ugd->backup_layout = layout;
463         elm_layout_file_set(layout, EDJ_NAME, "toolbar");
464         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
465         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
466         nocontent = __cst_create_nocontents_layout(ugd);
467
468         ugd->backup_genlist = __cst_create_genlist_dialling_list(ugd);
469         elm_object_part_content_set(layout, "elm.swallow.contents", ugd->backup_genlist);
470         elm_object_part_content_set(layout, "elm.swallow.contents2", nocontent);
471         navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_PREFIX_DIALLING_LIST),
472                 NULL, NULL, layout, "1line");
473         back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
474         evas_object_smart_callback_add(back_btn, "clicked",
475                 __cst_clicked_prefix_back, ugd);
476         cbar = _cst_create_navi_control_bar(ugd->nf,
477                         (char *)T_(CST_STR_DELETE), CST_CTRL_ICON_EDIT,
478                         _cst_create_delete_list,
479                         (char *)T_(CST_STR_ADD), CST_CTRL_ICON_CREATE,
480                         __cst_on_click_prefix_dialling_list_add_button,
481                         (void *)ugd, navi_it,
482                         ec_item);
483         ret_if(NULL == cbar);
484         _cst_set_num_of_prefix_dialling_list(_cst_get_num_of_prefix_dialling_list());
485 }
486
487 static void __cst_on_click_prefix_dialling_list(void *data, Evas *evas, Evas_Object *obj, void *event_info)
488 {
489         ret_if(NULL == data);
490         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
491         CstUgData_t *ugd = item_data->ugd;
492         __cst_create_dialling_list(ugd->nf, ugd);
493 }
494
495 static void __cst_on_click_prefix_dialling_onoff(void *data, Evas *evas, Evas_Object *obj, void *event_info)
496 {
497         ret_if(NULL == data);
498         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
499         CstUgData_t *ugd = item_data->ugd;
500         Eina_Bool check_state = elm_check_state_get(item_data->eo_check);
501         if (CST_STR_ENABLE_PREFIX_DIALLING == list_dep1_prefix_dialling[item_data->index].str_id) {
502                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, !check_state);
503                 if (ugd->prefix_gl_list_item != NULL)
504                         elm_object_item_disabled_set(ugd->prefix_gl_list_item, check_state);
505         }
506         elm_genlist_item_update(item_data->gl_item);
507 }
508
509 static void __cst_on_changed_enable_prefix_dialling_check(void *data, Evas_Object *obj, void *event_info)
510 {
511         ret_if(NULL == data);
512         Evas_Object *eo;
513         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
514         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;
515         Eina_Bool check_state;
516         check_state = elm_check_state_get(obj);
517
518         _cst_vconf_set_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, check_state);
519         if (ugd->prefix_gl_list_item != NULL)
520                 elm_object_item_disabled_set(ugd->prefix_gl_list_item, !(check_state));
521 }
522
523 static Evas_Object *__cst_gl_icon_get_prefix_dailling(void *data, Evas_Object *obj, const char *part)
524 {
525         retv_if(NULL == data, NULL);
526         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
527
528         if (!strcmp(part, "elm.icon")) {
529                 if (CST_STR_ENABLE_PREFIX_DIALLING == list_dep1_prefix_dialling[item_data->index].str_id) {
530                         int value = 0;
531                         _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &value);
532                         item_data->eo_check = _cst_create_onoff_button(obj, value,
533                                 __cst_on_changed_enable_prefix_dialling_check, item_data);
534                 }
535                 return item_data->eo_check;
536         }
537         return NULL;
538 }
539
540 static char *__cst_gl_label_get_prefix_dailling(void *data, Evas_Object *obj, const char *part)
541 {
542         retv_if(NULL == data, NULL);
543         CstGlItemData_t *item_data = (CstGlItemData_t *)data;
544
545         if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) {
546                 return strdup(T_(list_dep1_prefix_dialling[item_data->index].str_id));
547         } else if (!strcmp(part, "elm.text.2")) {
548                 int num_of_prefix_dialling_list = _cst_get_num_of_prefix_dialling_list();
549
550                 if (num_of_prefix_dialling_list == 0)
551                         return strdup(T_(CST_STR_NO_NUMBERS));
552                 else {
553                         int index = __cst_get_active_prefix_list();
554                         char *number = _cst_get_prefix_dialling_list(index);
555                         return number;
556                 }
557         } else
558                 return NULL;
559 }
560
561 static void __cst_gl_del_prefix_dailling(void *data, Evas_Object *obj)
562 {
563         return;
564 }
565
566 static void __cst_gl_sel_prefix_dailling(void *data, Evas_Object *obj, void *event_info)
567 {
568         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
569         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
570         CstGlItemData_t *item_data = (CstGlItemData_t *)elm_object_item_data_get(item);
571
572         if (list_dep1_prefix_dialling[item_data->index].func)
573                 list_dep1_prefix_dialling[item_data->index].func(item_data, NULL, obj, event_info);
574         return;
575 }
576
577 static void __cst_set_genlist_item_styles_prefix_dialling(void)
578 {
579         ENTER(__cst_set_genlist_item_styles_prefix_dialling);
580         
581         if (!itc_1text_1icon)
582                 itc_1text_1icon = elm_genlist_item_class_new();
583         if (!itc_help)
584                 itc_help = elm_genlist_item_class_new();
585         if (!itc_2text)
586                 itc_2text = elm_genlist_item_class_new();
587         
588         itc_1text_1icon->item_style = "dialogue/1text.1icon";
589         itc_1text_1icon->func.text_get = __cst_gl_label_get_prefix_dailling;
590         itc_1text_1icon->func.content_get = __cst_gl_icon_get_prefix_dailling;
591         itc_1text_1icon->func.state_get = NULL;
592         itc_1text_1icon->func.del = __cst_gl_del_prefix_dailling;
593
594         itc_2text->item_style = "dialogue/2text.3";
595         itc_2text->func.text_get = __cst_gl_label_get_prefix_dailling;
596         itc_2text->func.content_get = NULL;
597         itc_2text->func.state_get = NULL;
598         itc_2text->func.del = __cst_gl_del_prefix_dailling;
599
600         itc_help->item_style = "multiline/1text";
601         itc_help->func.text_get = __cst_gl_label_get_prefix_dailling;
602         itc_help->func.content_get = NULL;
603         itc_help->func.state_get = NULL;
604         itc_help->func.del = __cst_gl_del_prefix_dailling;
605 }
606
607 static Evas_Object *__cst_create_genlist_prefix_dialling(void *data)
608 {
609         ENTER(__cst_create_genlist_prefix_dialling);
610         retv_if(NULL == data, NULL);
611         CstUgData_t *ugd = (CstUgData_t *)data;
612         int index = 0;
613         Evas_Object *genlist;
614         Elm_Object_Item *item;
615         CstGlItemData_t *item_data;
616
617         genlist = elm_genlist_add(ugd->nf);
618
619         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
620         _cst_create_genlist_seperator(genlist, EINA_FALSE);
621
622         for (index = 0; list_dep1_prefix_dialling[index].style != CST_GL_ITEM_NONE; ++index) {
623                 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));
624                 retv_if(item_data == NULL, NULL);
625                 item_data->index = index;
626                 item_data->ugd = ugd;
627                 if (list_dep1_prefix_dialling[index].style == CST_GL_ITEM_SUB_TEXT) {
628                         int value = 0;
629                         item = elm_genlist_item_append(genlist, itc_2text,
630                                 (void *)item_data, NULL, list_dep1_prefix_dialling[index].flags,
631                                 __cst_gl_sel_prefix_dailling, ugd);
632                         ugd->prefix_gl_list_item = item;
633                         _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &value);
634                         elm_object_item_disabled_set(item, !(value));
635                 } else if (list_dep1_prefix_dialling[index].style == CST_GL_ITEM_1TEXT_ONOFF) {
636                         item = elm_genlist_item_append(genlist, itc_1text_1icon,
637                                 (void *)item_data, NULL, list_dep1_prefix_dialling[index].flags,
638                                 __cst_gl_sel_prefix_dailling, ugd);
639                 } else if (list_dep1_prefix_dialling[index].style == CST_GL_ITEM_HELP_TEXT) {
640                         item = elm_genlist_item_append(genlist, itc_help,
641                                 (void *)item_data, NULL, list_dep1_prefix_dialling[index].flags,
642                                 NULL, NULL);
643                         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
644                         _cst_create_genlist_underline(genlist);
645                 } else {
646                         DBG("No style");
647                         free(item_data);
648                         item_data = NULL;
649                         return;
650                 }
651                 item_data->gl_item = item;
652         }
653
654         return genlist;
655 }
656
657 static void __cst_create_prefix_dialling(Evas_Object *parent, void *data)
658 {
659         ENTER(__cst_create_prefix_dialling);
660         Evas_Object *genlist;
661         CstUgData_t *ugd = data;
662         ret_if(ugd == NULL);
663
664         __cst_set_genlist_item_styles_prefix_dialling();
665         genlist = __cst_create_genlist_prefix_dialling(ugd);
666         ugd->kind_of_delete_list = CST_DL_PREFIX_DIALING;
667
668         elm_naviframe_item_push(ugd->nf, T_(CST_STR_PREFIX_DIALLING),
669                 NULL, NULL, genlist, NULL);
670 }
671
672 void _cst_on_click_prefix_dialling(void *data, Evas *evas, Evas_Object *obj, void *event_info)
673 {
674         ENTER(_cst_on_click_prefix_dialling);
675         ret_if(NULL == data);
676         CstUgData_t *ugd = (CstUgData_t *)data;
677         __cst_create_prefix_dialling(ugd->nf, ugd);
678 }