Tizen 2.1 base
[apps/home/call-setting.git] / src / cst-more-call-setting.c
1 /*\r
2  * Copyright 2012  Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://floralicense.org/license/\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 #include <vconf.h>\r
18 #include "cst-common.h"\r
19 #include "cst-common-string.h"\r
20 #include "cst-more-call-setting.h"\r
21 #include "cst-widget.h"\r
22 #include "cst-util.h"\r
23 #include "cst-barring.h"\r
24 #include "cst-waiting.h"\r
25 #include "cst-status-tone.h"\r
26 #include "cst-prefix-dial.h"\r
27 \r
28 static Elm_Genlist_Item_Class *itc_1text = NULL;\r
29 static Elm_Genlist_Item_Class *itc_2text_expand = NULL;\r
30 static Elm_Genlist_Item_Class *itc_sub_expand = NULL;\r
31 static Elm_Genlist_Item_Class *itc_help = NULL;\r
32 static Elm_Genlist_Item_Class *itc_2text_1icon = NULL;\r
33 \r
34 static Evas_Object *morecallsetting_gl = NULL;\r
35 \r
36 static void __cst_set_genlist_item_styles_more_cst(void);\r
37 static void __cst_destroy_genlist_item_styles(void);\r
38 static void __cst_on_click_expanded(void *data, Evas *evas, Evas_Object *obj, void *event_info);\r
39 static void __cst_on_click_more_call_setting_back_button(void *data, Evas_Object *obj, void *event_info);\r
40 \r
41 #ifdef _CALL_SET_NOISE_REDUCTION\r
42 static Elm_Genlist_Item_Class *itc_1text_1icon = NULL;\r
43 static void __cst_on_click_noise_reduction(void *data, Evas *evas, Evas_Object *obj, void *event_info);\r
44 #endif  /* _CALL_SET_NOISE_REDUCTION */\r
45 \r
46 static CstGlItemDisplayInfo_t list_more_call_setting[] = {\r
47         {1, CST_STR_SHOW_MY_CALLER_ID, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_EXPANDABLE, __cst_on_click_expanded},\r
48 #ifdef _CALL_SET_BARRING_SUPPORT\r
49         {1, CST_STR_CALL_BARRING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_barring},\r
50 #endif  /* _CALL_SET_BARRING_SUPPORT */\r
51         {1, CST_STR_CALL_WAITING, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_waiting},\r
52         {1, CST_STR_DURING_CALL_NOTIFY_ME, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},\r
53         {1, CST_STR_CALL_STATUS_TONES, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_TEXT, _cst_on_click_call_status_tone},\r
54         {1, CST_STR_EDIT_SOUND_SETTINGS_DURING_CALL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},\r
55         {1, CST_STR_ALERTS_ON_CALL, ELM_GENLIST_ITEM_TREE, CST_GL_ITEM_EXPANDABLE, __cst_on_click_expanded},\r
56 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
57         {1, CST_STR_AUTO_AREA_CODE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_2TEXT_ONOFF, _cst_on_click_prefix_dialling},\r
58         {1, CST_STR_AUTOMATICALLY_ADD_AREA_CODE_TO_NUMBER_DISPLAY_PANEL, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_HELP_TEXT, NULL},\r
59 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
60         {1, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},\r
61 };\r
62 \r
63 static CstGlItemDisplayInfo_t list_dep2_show_my_number[] = {\r
64         {2, CST_STR_BY_NETWORK, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_BY_NETWORK},\r
65         {2, CST_STR_SHOW, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_SHOW},\r
66         {2, CST_STR_HIDE, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_CLI_HIDE},\r
67         {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},\r
68 };\r
69 \r
70 static CstGlItemDisplayInfo_t list_dep2_alerts_on_call[] = {\r
71         {2, CST_STR_OFF, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_OFF},\r
72         {2, CST_STR_SOUND, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_SOUND},\r
73         {2, CST_STR_VIBRATION, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_RADIO_1TEXT, (void *)CST_ALERTS_ON_CALL_VIBRATION},\r
74         {2, -1, ELM_GENLIST_ITEM_NONE, CST_GL_ITEM_NONE, NULL},\r
75 };\r
76 \r
77 static void __cst_destroy_genlist_item_styles(void)\r
78 {\r
79         ENTER(__cst_destroy_genlist_item_styles);\r
80 \r
81         if (itc_1text) {\r
82                 elm_genlist_item_class_free(itc_1text);\r
83                 itc_1text = NULL;\r
84         }\r
85         if (itc_2text_expand) {\r
86                 elm_genlist_item_class_free(itc_2text_expand);\r
87                 itc_2text_expand = NULL;\r
88         }\r
89         if (itc_sub_expand) {\r
90                 elm_genlist_item_class_free(itc_sub_expand);\r
91                 itc_sub_expand = NULL;\r
92         }\r
93         if (itc_help) {\r
94                 elm_genlist_item_class_free(itc_help);\r
95                 itc_help = NULL;\r
96         }\r
97         if (itc_2text_1icon) {\r
98                 elm_genlist_item_class_free(itc_2text_1icon);\r
99                 itc_2text_1icon = NULL;\r
100         }\r
101 #ifdef _CALL_SET_NOISE_REDUCTION\r
102         if (itc_1text_1icon) {\r
103                 elm_genlist_item_class_free(itc_1text_1icon);\r
104                 itc_1text_1icon = NULL;\r
105         }\r
106 #endif  /* _CALL_SET_NOISE_REDUCTION */\r
107 }\r
108 \r
109 static void __cst_on_click_more_call_setting_back_button(void *data, Evas_Object *obj, void *event_info)\r
110 {\r
111         ENTER(__cst_on_click_more_call_setting_back_button);\r
112 \r
113         _cst_destroy_more_call_setting();\r
114 }\r
115 \r
116 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
117 static void __cst_on_changed_auto_area_code_check(void *data, Evas_Object *obj, void *event_info)\r
118 {\r
119         ret_if(NULL == data);\r
120         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
121 \r
122         Eina_Bool check_state = elm_check_state_get(obj);\r
123         DBG("check_state = %d, text = %s", check_state, _cst_get_prefix_dialling_list(CST_ITEM_1));\r
124 \r
125         if (EINA_TRUE == check_state && 0 == strcmp(_cst_get_prefix_dialling_list(CST_ITEM_1),"")) {\r
126                 DBG("");\r
127                 elm_check_state_set(obj, !check_state);\r
128                 _cst_on_click_prefix_dialling(item_data->ugd, NULL, NULL, NULL);\r
129         } else {\r
130                 _cst_vconf_set_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, check_state);\r
131         }\r
132 \r
133 }\r
134 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
135 \r
136 #ifdef _CALL_SET_NOISE_REDUCTION\r
137 static void __cst_on_changed_noise_reduction_check(void *data, Evas_Object *obj, void *event_info)\r
138 {\r
139         Eina_Bool check_state = elm_check_state_get(obj);\r
140 \r
141         _cst_vconf_set_bool(VCONFKEY_CISSAPPL_NOISE_REDUCTION_BOOL, check_state);\r
142 }\r
143 \r
144 static void __cst_on_click_noise_reduction(void *data, Evas *evas, Evas_Object *obj, void *event_info)\r
145 {\r
146         ret_if(NULL == data);\r
147         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
148         Eina_Bool check_state = elm_check_state_get(item_data->eo_check);\r
149         _cst_vconf_set_bool(VCONFKEY_CISSAPPL_NOISE_REDUCTION_BOOL, !check_state);\r
150         elm_genlist_item_update(item_data->gl_item);\r
151 }\r
152 #endif  /* _CALL_SET_NOISE_REDUCTION */\r
153 \r
154 static char *__cst_gl_label_get_more_cst(void *data, Evas_Object *obj, const char *part)\r
155 {\r
156         retv_if(NULL == data, NULL);\r
157         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
158 \r
159         if ((strcmp(part, "elm.text") == 0) ||\r
160                         (strcmp(part, "elm.text.1") == 0)) {\r
161                 if (list_more_call_setting[item_data->index].str_id != -1) {\r
162                         return strdup(T_(list_more_call_setting[item_data->index].str_id));\r
163                 }\r
164         }\r
165 \r
166 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
167         else if (!strcmp(part, "elm.text.2")) {\r
168                 if (list_more_call_setting[item_data->index].str_id == CST_STR_AUTO_AREA_CODE) {\r
169                         if (0 != strcmp(_cst_get_prefix_dialling_list(CST_ITEM_1),"")) {\r
170                                 return strdup(_cst_get_prefix_dialling_list(CST_ITEM_1));\r
171                         } else {\r
172                                 return strdup(T_(CST_STR_NOT_ASSIGNED));\r
173                         }\r
174                 }\r
175         }\r
176 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
177 \r
178         return NULL;\r
179 }\r
180 \r
181 static Evas_Object *__cst_gl_icon_get_more_cst(void *data, Evas_Object *obj, const char *part)\r
182 {\r
183         retv_if(NULL == data, NULL);\r
184         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
185 \r
186         if (!strcmp(part, "elm.icon")) {\r
187 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
188                 if (list_more_call_setting[item_data->index].style == CST_GL_ITEM_2TEXT_ONOFF) {\r
189                         if (CST_STR_AUTO_AREA_CODE == list_more_call_setting[item_data->index].str_id) {\r
190                                 int value = 0;\r
191                                 _cst_vconf_get_bool(VCONFKEY_CISSAPPL_PREFIX_DIAL_BOOL, &value);\r
192                                 item_data->eo_check = _cst_create_onoff_button(obj, value,\r
193                                                                           __cst_on_changed_auto_area_code_check, item_data);\r
194                         }\r
195                 }\r
196 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
197                 return item_data->eo_check;\r
198         }\r
199         return NULL;\r
200 }\r
201 \r
202 static void __cst_gl_del_more_cst(void *data, Evas_Object *obj)\r
203 {\r
204         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
205         if (item_data) {\r
206                 free(item_data);\r
207         }\r
208         return;\r
209 }\r
210 \r
211 static void __cst_gl_sel_more_cst(void *data, Evas_Object *obj, void *event_info)\r
212 {\r
213         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);\r
214         Elm_Object_Item *it = (Elm_Object_Item *)event_info;\r
215         CstGlItemData_t *item_data = (CstGlItemData_t *)elm_object_item_data_get(it);\r
216         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;\r
217 \r
218         if (list_more_call_setting[item_data->index].func) {\r
219                 if (list_more_call_setting[item_data->index].style == CST_GL_ITEM_1TEXT_ONOFF) {\r
220                         list_more_call_setting[item_data->index].func((void *)item_data, NULL, obj, event_info);\r
221                 } else {\r
222                         list_more_call_setting[item_data->index].func((void *)ugd, NULL, obj, event_info);\r
223                 }\r
224         }\r
225         return;\r
226 }\r
227 \r
228 static char *__cst_gl_label_get_expandable(void *data, Evas_Object *obj, const char *part)\r
229 {\r
230         retv_if(NULL == data, NULL);\r
231         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
232         if (!strcmp(part, "elm.text.1")) {\r
233                 if (list_more_call_setting[item_data->index].str_id != -1) {\r
234                         return strdup(T_(list_more_call_setting[item_data->index].str_id));\r
235                 }\r
236         } else if (!strcmp(part, "elm.text.2")) {\r
237                 int value = 0;\r
238                 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[item_data->index].str_id) {\r
239                         _cst_vconf_get_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT, &value);\r
240                         if (list_dep2_show_my_number[value].str_id != -1) {\r
241                                 return strdup(T_(list_dep2_show_my_number[value].str_id));\r
242                         }\r
243                 } else {\r
244                         _cst_vconf_get_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT, &value);\r
245                         if (list_dep2_alerts_on_call[value].str_id != -1) {\r
246                                 return strdup(T_(list_dep2_alerts_on_call[value].str_id));\r
247                         }\r
248                 }\r
249         }\r
250         return NULL;\r
251 }\r
252 \r
253 static void __cst_gl_sel_show_my_number(void *data, Evas_Object *obj, void *event_info)\r
254 {\r
255         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);\r
256         ret_if(NULL == data);\r
257         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
258         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;\r
259         _cst_vconf_set_int(VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT,\r
260                                            (int)list_dep2_show_my_number[item_data->index].func);\r
261         if (ugd->rdg_show_my_number) {\r
262                 elm_radio_value_set(ugd->rdg_show_my_number,\r
263                                                         (int)list_dep2_show_my_number[item_data->index].func);\r
264                 elm_genlist_item_update(item_data->parent_gl_item);\r
265         }\r
266         return;\r
267 }\r
268 \r
269 static char *__cst_gl_label_get_sub_exp(void *data, Evas_Object *obj, const char *part)\r
270 {\r
271         retv_if(NULL == data, NULL);\r
272         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
273         CstGlItemData_t *parent_item_data = (CstGlItemData_t *)elm_object_item_data_get(item_data->parent_gl_item);\r
274         if (strcmp(part, "elm.text") == 0) {\r
275                 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data->index].str_id) {\r
276                         return strdup(T_(list_dep2_show_my_number[item_data->index].str_id));\r
277                 } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data->index].str_id) {\r
278                         return strdup(T_(list_dep2_alerts_on_call[item_data->index].str_id));\r
279                 } else {\r
280                         DBG("Unknown parent");\r
281                         return NULL;\r
282                 }\r
283         }\r
284         return NULL;\r
285 }\r
286 \r
287 static Evas_Object *__cst_gl_icon_get_sub_exp(void *data, Evas_Object *obj, const char *part)\r
288 {\r
289         retv_if(NULL == data, NULL);\r
290         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
291         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;\r
292         retv_if(NULL == ugd, NULL);\r
293         CstGlItemData_t *parent_item_data = (CstGlItemData_t *)elm_object_item_data_get(item_data->parent_gl_item);\r
294 \r
295         if (!strcmp(part, "elm.icon")) {\r
296                 Evas_Object *radio;\r
297                 if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data->index].str_id) {\r
298                         if (NULL == ugd->rdg_show_my_number) {\r
299                                 ugd->rdg_show_my_number = elm_radio_add(obj);\r
300                                 elm_radio_value_set(ugd->rdg_show_my_number, -1);\r
301                         }\r
302 \r
303                         radio = _cst_create_radio_icon(obj, ugd->rdg_show_my_number,\r
304                                                                                    (int)list_dep2_show_my_number[item_data->index].func, 0,\r
305                                                                                    VCONFKEY_CISSAPPL_SHOW_MY_NUMBER_INT);\r
306                 } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data->index].str_id) {\r
307                         if (NULL == ugd->rdg_alerts_on_call) {\r
308                                 ugd->rdg_alerts_on_call = elm_radio_add(obj);\r
309                                 elm_radio_value_set(ugd->rdg_alerts_on_call, -1);\r
310                         }\r
311 \r
312                         radio = _cst_create_radio_icon(obj, ugd->rdg_alerts_on_call,\r
313                                                                                    (int)list_dep2_alerts_on_call[item_data->index].func, 0,\r
314                                                                                    VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT);\r
315                 } else {\r
316                         DBG("Unknown parent");\r
317                         return NULL;\r
318                 }\r
319                 return radio;\r
320         }\r
321         return NULL;\r
322 }\r
323 \r
324 static void __cst_gl_sel_alerts_on_call(void *data, Evas_Object *obj, void *event_info)\r
325 {\r
326         elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);\r
327         ret_if(NULL == data);\r
328         CstGlItemData_t *item_data = (CstGlItemData_t *)data;\r
329         CstUgData_t *ugd = (CstUgData_t *)item_data->ugd;\r
330         ret_if(NULL == ugd);\r
331         _cst_vconf_set_int(VCONFKEY_CISSAPPL_ALERT_ON_CALL_INT,\r
332                                            (int)list_dep2_alerts_on_call[item_data->index].func);\r
333         if (ugd->rdg_alerts_on_call) {\r
334                 elm_radio_value_set(ugd->rdg_alerts_on_call,\r
335                                                         (int)list_dep2_alerts_on_call[item_data->index].func);\r
336                 elm_genlist_item_update(item_data->parent_gl_item);\r
337         }\r
338         return;\r
339 }\r
340 \r
341 static void __cst_gl_con(void *data, Evas_Object *obj, void *event_info)\r
342 {\r
343         ENTER(__cst_gl_con);\r
344         Elm_Object_Item *item = event_info;\r
345         elm_genlist_item_subitems_clear(item);\r
346 }\r
347 \r
348 static void __cst_gl_exp_req(void *data, Evas_Object *obj, void *event_info)\r
349 {\r
350         ENTER(__cst_gl_exp_req);\r
351 \r
352         ret_if(NULL == data);\r
353 \r
354         Elm_Object_Item *item = event_info;\r
355         elm_genlist_item_expanded_set(item, 1);\r
356 }\r
357 \r
358 static void __cst_gl_con_req(void *data, Evas_Object *obj, void *event_info)\r
359 {\r
360         ENTER(__cst_gl_con_req);\r
361         Elm_Object_Item *item = (Elm_Object_Item *)event_info;\r
362         elm_genlist_item_expanded_set(item, 0);\r
363 }\r
364 \r
365 static void __cst_gl_exp(void *data, Evas_Object *obj, void *event_info)\r
366 {\r
367         ENTER(__cst_gl_exp);\r
368         ret_if(NULL == data);\r
369         CstUgData_t *ugd = (CstUgData_t *)data;\r
370         Elm_Object_Item *it = (Elm_Object_Item *)event_info;\r
371         ret_if(NULL == it);\r
372         CstGlItemData_t *parent_item_data1 = (CstGlItemData_t *)elm_object_item_data_get(it);\r
373         Evas_Object *genlist = elm_object_item_widget_get(it);\r
374         ret_if(NULL == parent_item_data1);\r
375         ret_if(NULL == genlist);\r
376 \r
377         CstGlItemData_t *sub_item_data;\r
378 \r
379         int i = 0;\r
380 \r
381         if (CST_STR_SHOW_MY_CALLER_ID == list_more_call_setting[parent_item_data1->index].str_id) {\r
382                 ugd->rdg_show_my_number = NULL;\r
383                 ugd->rdg_show_my_number = elm_radio_add(genlist);\r
384                 elm_radio_value_set(ugd->rdg_show_my_number, -1);\r
385                 for (i = 0; list_dep2_show_my_number[i].style != CST_GL_ITEM_NONE; ++i) {\r
386                         sub_item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));\r
387                         ret_if(sub_item_data == NULL);\r
388                         sub_item_data->index = i;\r
389                         sub_item_data->ugd = ugd;\r
390                         sub_item_data->parent_gl_item = it;\r
391                         elm_genlist_item_append(genlist, itc_sub_expand,\r
392                                                                         (void *)sub_item_data, it,\r
393                                                                         list_dep2_show_my_number[i].flags,\r
394                                                                         __cst_gl_sel_show_my_number, sub_item_data);\r
395                 }\r
396         } else if (CST_STR_ALERTS_ON_CALL == list_more_call_setting[parent_item_data1->index].str_id) {\r
397                 ugd->rdg_alerts_on_call = NULL;\r
398                 ugd->rdg_alerts_on_call = elm_radio_add(genlist);\r
399                 elm_radio_value_set(ugd->rdg_alerts_on_call, -1);\r
400                 for (i = 0; list_dep2_alerts_on_call[i].style != CST_GL_ITEM_NONE; ++i) {\r
401                         sub_item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));\r
402                         ret_if(sub_item_data == NULL);\r
403                         sub_item_data->index = i;\r
404                         sub_item_data->ugd = ugd;\r
405                         sub_item_data->parent_gl_item = it;\r
406                         elm_genlist_item_append(genlist, itc_sub_expand,\r
407                                                                         (void *)sub_item_data, it, list_dep2_alerts_on_call[i].flags,\r
408                                                                         __cst_gl_sel_alerts_on_call, sub_item_data);\r
409                 }\r
410         }\r
411 }\r
412 \r
413 static void __cst_on_click_expanded(void *data, Evas *evas, Evas_Object *obj, void *event_info)\r
414 {\r
415         ENTER(__cst_on_click_expanded);\r
416         ret_if(NULL == data);\r
417         Elm_Object_Item *item = (Elm_Object_Item *)event_info;\r
418         if (elm_genlist_item_expanded_get(item)) {\r
419                 __cst_gl_con_req(data, obj, event_info);\r
420                 __cst_gl_con(data, obj, event_info);\r
421         } else {\r
422                 __cst_gl_exp_req(data, obj, event_info);\r
423                 __cst_gl_exp(data, obj, event_info);\r
424         }\r
425 }\r
426 \r
427 static void __cst_navifr_updated_cb(void *data, Evas_Object *obj, void *event_info)\r
428 {\r
429         ret_if(NULL == data);\r
430         Elm_Object_Item *item = (Elm_Object_Item *)data;\r
431         elm_genlist_item_expanded_set(item, 0);\r
432         elm_genlist_item_subitems_clear(item);\r
433 }\r
434 \r
435 static void __cst_set_genlist_item_styles_more_cst(void)\r
436 {\r
437         ENTER(__cst_set_genlist_item_styles_more_cst);\r
438         if (!itc_1text) {\r
439                 itc_1text = elm_genlist_item_class_new();\r
440         }\r
441         if (!itc_2text_expand) {\r
442                 itc_2text_expand = elm_genlist_item_class_new();\r
443         }\r
444         if (!itc_sub_expand) {\r
445                 itc_sub_expand = elm_genlist_item_class_new();\r
446         }\r
447         if (!itc_help) {\r
448                 itc_help = elm_genlist_item_class_new();\r
449         }\r
450 \r
451         if (!itc_2text_1icon) {\r
452                 itc_2text_1icon = elm_genlist_item_class_new();\r
453         }\r
454 \r
455         itc_1text->item_style = "dialogue/1text";\r
456         itc_1text->func.text_get = __cst_gl_label_get_more_cst;\r
457         itc_1text->func.content_get = NULL;\r
458         itc_1text->func.state_get = NULL;\r
459         itc_1text->func.del = __cst_gl_del_more_cst;\r
460         itc_2text_expand->item_style = "dialogue/2text.3/expandable";\r
461         itc_2text_expand->func.text_get = __cst_gl_label_get_expandable;\r
462         itc_2text_expand->func.content_get = NULL;\r
463         itc_2text_expand->func.state_get = NULL;\r
464         itc_2text_expand->func.del = __cst_gl_del_more_cst;\r
465 \r
466         itc_help->item_style = "multiline/1text";\r
467         itc_help->func.text_get = __cst_gl_label_get_more_cst;\r
468         itc_help->func.content_get = NULL;\r
469         itc_help->func.state_get = NULL;\r
470         itc_help->func.del = __cst_gl_del_more_cst;\r
471 \r
472         itc_sub_expand->item_style = "dialogue/1text.1icon/expandable2";\r
473         itc_sub_expand->func.text_get = __cst_gl_label_get_sub_exp;\r
474         itc_sub_expand->func.content_get = __cst_gl_icon_get_sub_exp;\r
475         itc_sub_expand->func.state_get = NULL;\r
476         itc_sub_expand->func.del = __cst_gl_del_more_cst;\r
477 \r
478 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
479         itc_2text_1icon->item_style = "dialogue/2text.1icon.6";\r
480         itc_2text_1icon->func.text_get = __cst_gl_label_get_more_cst;\r
481         itc_2text_1icon->func.content_get = __cst_gl_icon_get_more_cst;\r
482         itc_2text_1icon->func.state_get = NULL;\r
483         itc_2text_1icon->func.del = __cst_gl_del_more_cst;\r
484 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
485 }\r
486 \r
487 static Evas_Object *__cst_create_genlist_more_cst(void *data)\r
488 {\r
489         ENTER(__cst_create_genlist_more_cst);\r
490         retv_if(NULL == data, NULL);\r
491         CstUgData_t *ugd = (CstUgData_t *)data;\r
492         CstGlItemData_t *item_data;\r
493         Evas_Object *genlist;\r
494         int i;\r
495 \r
496         genlist = elm_genlist_add(ugd->nf);\r
497         retv_if(NULL == genlist, NULL);\r
498         elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);\r
499 \r
500         _cst_create_genlist_separator(genlist, EINA_FALSE);\r
501         for (i = 0; list_more_call_setting[i].style != CST_GL_ITEM_NONE; ++i) {\r
502                 item_data = (CstGlItemData_t *)calloc(1, sizeof(CstGlItemData_t));\r
503                 retv_if(NULL == item_data, NULL);\r
504 \r
505                 item_data->index = i;\r
506                 item_data->ugd = ugd;\r
507                 if (list_more_call_setting[i].style == CST_GL_ITEM_TEXT) {\r
508                         item_data->gl_item = elm_genlist_item_append(genlist, itc_1text,\r
509                                                                  (void *)item_data, NULL, list_more_call_setting[i].flags,\r
510                                                                  __cst_gl_sel_more_cst, ugd);\r
511                 } else if (list_more_call_setting[i].style == CST_GL_ITEM_EXPANDABLE) {\r
512                         item_data->gl_item = elm_genlist_item_append(genlist, itc_2text_expand,\r
513                                                                  (void *)item_data, NULL, list_more_call_setting[i].flags,\r
514                                                                  __cst_gl_sel_more_cst, ugd);\r
515                         evas_object_smart_callback_add(ugd->nf, "transition,finished",\r
516                                                                                    __cst_navifr_updated_cb, item_data->gl_item);\r
517                 } else if (list_more_call_setting[i].style == CST_GL_ITEM_HELP_TEXT) {\r
518                         item_data->gl_item = elm_genlist_item_append(genlist, itc_help,\r
519                                                                  (void *)item_data, NULL, list_more_call_setting[i].flags,\r
520                                                                  NULL, NULL);\r
521                         elm_genlist_item_select_mode_set(item_data->gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);\r
522                         if (list_more_call_setting[i+1].style != CST_GL_ITEM_NONE) {\r
523                                 _cst_create_genlist_separator(genlist, EINA_FALSE);\r
524                         }\r
525                 }\r
526 \r
527 #ifdef _CALL_SET_AUTO_AREA_CODE_SUPPORT\r
528                 else if (list_more_call_setting[i].style == CST_GL_ITEM_2TEXT_ONOFF) {\r
529                         item_data->gl_item = elm_genlist_item_append(genlist, itc_2text_1icon,\r
530                                                                  (void *)item_data, NULL, list_more_call_setting[i].flags,\r
531                                                                  __cst_gl_sel_more_cst, ugd);\r
532                         ugd->vm_gl_item = item_data->gl_item;
533                 }\r
534 #endif  /* _CALL_SET_AUTO_AREA_CODE_SUPPORT */\r
535 \r
536                 else {\r
537                         DBG("No style");\r
538                         free(item_data);\r
539                         item_data = NULL;\r
540                         return NULL;\r
541                 }\r
542         }\r
543         _cst_create_genlist_separator_no_line(genlist);\r
544 \r
545         return genlist;\r
546 }\r
547 \r
548 void _cst_on_click_more_call_setting(void *data, Evas *evas, Evas_Object *obj, void *event_info)\r
549 {\r
550         ENTER(_cst_on_click_more_call_setting);\r
551         ret_if(NULL == data);\r
552         CstUgData_t *ugd = (CstUgData_t *)data;\r
553         Evas_Object *back_btn = NULL;\r
554         Elm_Object_Item *navi_it;\r
555 \r
556         __cst_set_genlist_item_styles_more_cst();\r
557         morecallsetting_gl = __cst_create_genlist_more_cst(ugd);\r
558 \r
559         navi_it = elm_naviframe_item_push(ugd->nf, T_(CST_STR_MORE_CALL_SETTINGS),\r
560                                                                           NULL, NULL, morecallsetting_gl, NULL);\r
561 \r
562         back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");\r
563         evas_object_smart_callback_add(back_btn, "clicked", __cst_on_click_more_call_setting_back_button, ugd);\r
564 \r
565         LEAVE();\r
566 }\r
567 \r
568 void _cst_destroy_more_call_setting(void)\r
569 {\r
570         ENTER(_cst_destroy_more_call_setting);\r
571 \r
572         __cst_destroy_genlist_item_styles();\r
573 \r
574         if (morecallsetting_gl != NULL) {\r
575                 elm_genlist_clear(morecallsetting_gl);\r
576                 evas_object_del(morecallsetting_gl);\r
577                 morecallsetting_gl = NULL;\r
578         }\r
579 }\r