Tizen release 1.0
[apps/home/settings.git] / setting-phone / src / setting-phone-language-region.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved 
5  *
6  * This file is part of org.tizen.setting
7  * Written by Hyejin Kim <hyejin0906.kim@samsung.com>
8  *
9  * PROPRIETARY/CONFIDENTIAL
10  * 
11  * This software is the confidential and proprietary information of 
12  * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
13  * disclose such Confidential Information and shall use it only in
14  * accordance with the terms of the license agreement you entered
15  * into with SAMSUNG ELECTRONICS.
16  *
17  * SAMSUNG make no representations or warranties about the suitability 
18  * of the software, either express or implied, including but not limited
19  * to the implied warranties of merchantability, fitness for a particular
20  * purpose, or non-infringement. SAMSUNG shall not be liable for any
21  * damages suffered by licensee as a result of using, modifying or
22  * distributing this software or its derivatives.
23  *
24  */
25 #include <setting-phone-language-region.h>
26
27 static int setting_phone_language_region_create(void *cb);
28 static int setting_phone_language_region_destroy(void *cb);
29 static int setting_phone_language_region_update(void *cb);
30 static int setting_phone_language_region_cleanup(void *cb);
31
32 setting_view setting_view_phone_language_region = {
33         .create = setting_phone_language_region_create,
34         .destroy = setting_phone_language_region_destroy,
35         .update = setting_phone_language_region_update,
36         .cleanup = setting_phone_language_region_cleanup,
37 };
38
39 static void setting_phone_lang_click_softkey_cancel_cb(void *data,
40                                                        Evas_Object *obj,
41                                                        void *event_info);
42 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
43                                                         Evas_Object *obj,
44                                                         void *event_info);
45
46
47 /* ***************************************************
48  *
49  *basic func
50  *
51  ***************************************************/
52
53 static int setting_phone_language_region_create(void *cb)
54 {
55         SETTING_TRACE_BEGIN;
56         /* error check */
57         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
58
59         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
60         Evas_Object *scroller = NULL;
61
62         char *title = _(KeyStr_LanguageRegion);
63         ad->ly_language =
64             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
65                                                    ad->win_get, title,
66                                                    _("IDS_COM_BODY_BACK"),
67                                                    NULL,
68                                                    setting_phone_lang_click_softkey_cancel_cb,
69                                                    NULL, ad, &scroller,
70                                                    &(ad->navi_bar));
71         retv_if(ad->ly_language == NULL, SETTING_RETURN_FAIL);
72         ad->gl_lang_region = scroller;
73
74         Elm_Object_Item *item = NULL;
75         item =
76             elm_genlist_item_append(scroller, &(ad->itc_seperator),
77                                     NULL, NULL, ELM_GENLIST_ITEM_NONE,
78                                     NULL, NULL);
79         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
80
81         char* pa_display_lang = get_pa_display_language_str();
82         ad->data_display_language =
83             setting_create_Gendial_field_def(scroller,
84                                              &(ad->itc_2text_2),
85                                              setting_phone_lang_item_Gendial_mouse_up_cb,
86                                              ad, SWALLOW_Type_INVALID,
87                                              NULL, NULL, 0,
88                                              "IDS_ST_HEADER_DISPLAY_LANGUAGE",
89                                              pa_display_lang,
90                                              NULL);
91         if (ad->data_display_language) {
92                 ad->data_display_language->userdata = ad;
93         } else {
94                 SETTING_TRACE_ERROR("ad->data_display_language is NULL");
95         }
96         G_FREE(pa_display_lang);
97
98         char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
99         if (pa_region == NULL) {
100                 SETTING_TRACE_ERROR
101                     ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
102         }
103         ad->prev_locale = (char *)g_strdup(pa_region);
104         ad->data_region_fmt =
105             setting_create_Gendial_field_def(scroller,
106                                              &(ad->itc_2text_2),
107                                              setting_phone_lang_item_Gendial_mouse_up_cb,
108                                              ad, SWALLOW_Type_INVALID,
109                                              NULL, NULL, 0,
110                                              "IDS_ST_BODY_REGION",
111                                              setting_phone_lang_get_region_str
112                                              (pa_region), NULL);
113         if (ad->data_region_fmt) {
114                 ad->data_region_fmt->userdata = ad;
115         } else {
116                 SETTING_TRACE_ERROR("ad->data_region_fmt is NULL");
117         }
118
119         char *example_desc =
120             setting_phone_lang_get_example_desc(pa_region, ad);
121         ad->data_region_fmt_example =
122             setting_create_Gendial_field_def(scroller,
123                                              &(ad->itc_bg_1icon), NULL,
124                                              ad,
125                                              SWALLOW_Type_LAYOUT_SPECIALIZTION,
126                                              NULL, NULL, 0,
127                                              example_desc, NULL, NULL);
128         if (pa_region) {
129                 FREE(pa_region);
130         }
131         if (example_desc) {
132                 FREE(example_desc);
133         }
134
135         setting_view_phone_language_region.is_create = 1;
136         return SETTING_RETURN_SUCCESS;
137 }
138
139 static int setting_phone_language_region_destroy(void *cb)
140 {
141         SETTING_TRACE_BEGIN;
142         /* error check */
143         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
144
145         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
146
147         if (ad->ly_language != NULL) {
148                 evas_object_del(ad->ly_language);
149                 ad->ly_language = NULL;
150
151                 if (ad->pattern_generator) {
152                         udatpg_close(ad->pattern_generator);
153                         ad->pattern_generator = NULL;
154                 }
155                 setting_view_phone_language_region.is_create = 0;
156         }
157
158         return SETTING_RETURN_SUCCESS;
159 }
160
161 static int setting_phone_language_region_update(void *cb)
162 {
163         SETTING_TRACE_BEGIN;
164         /* error check */
165         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
166
167         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
168
169         if (ad->ly_language != NULL) {
170                 evas_object_show(ad->ly_language);
171         }
172
173         return SETTING_RETURN_SUCCESS;
174 }
175
176 static int setting_phone_language_region_cleanup(void *cb)
177 {
178         SETTING_TRACE_BEGIN;
179         return SETTING_RETURN_SUCCESS;
180 }
181
182 /* ***************************************************
183  *
184  *general func
185  *
186  ***************************************************/
187
188 /* ***************************************************
189  *
190  *call back func
191  *
192  ***************************************************/
193
194 static void
195 setting_phone_lang_click_softkey_cancel_cb(void *data, Evas_Object *obj,
196                                            void *event_info)
197 {
198         SETTING_TRACE_BEGIN;
199         /* error check */
200         retm_if(data == NULL, "Data parameter is NULL");
201
202         SettingPhoneUG *ad = (SettingPhoneUG *) data;
203
204         ug_destroy_me(ad->ug);
205 }
206
207 // 0 : automatic 
208 void setting_phone_lang_change_lang_value(int cur_chk_lang)
209 {
210         SETTING_TRACE_BEGIN;
211         int err, ret;
212
213         /** @todo  ASSERT ( SCOPE CHECK )  */
214         setting_lang_entry* table = setting_get_language_table();
215         char* locale = table[cur_chk_lang].locale;
216         SETTING_TRACE("table . locale >>>>>> :: %s ", locale);
217
218         //if (cur_chk_lang > 0) {
219                 // CHECK 'AUTO' HERE 
220         ret = setting_set_int_slp_key(INT_SLP_SETTING_LANG, cur_chk_lang, &err);
221         ret = vconf_set_str(VCONFKEY_LANGSET, locale);
222         //}
223         // do nothing on 'auto'
224 }
225
226 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
227                                                 Evas_Object *obj,
228                                                 void *event_info)
229 {
230         SETTING_TRACE_BEGIN;
231         /* error check */
232         setting_retm_if(data == NULL, "Data parameter is NULL");
233         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
234         elm_genlist_item_selected_set(item, 0);
235         Setting_GenGroupItem_Data *list_item =
236             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
237         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
238
239         SettingPhoneUG *ad = (SettingPhoneUG *) data;
240
241         int ret = SETTING_RETURN_SUCCESS;
242         if (!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr)) {
243                 ret =
244                     setting_view_change(&setting_view_phone_language_region,
245                                         &setting_view_phone_display_language,
246                                         ad);
247         } else if (!safeStrCmp("IDS_ST_BODY_REGION", list_item->keyStr)) {
248                 ret =
249                     setting_view_change(&setting_view_phone_language_region,
250                                         &setting_view_phone_region_format, ad);
251         }
252 }
253