Tizen 2.0 Release
[apps/home/settings.git] / setting-phone / src / setting-phone-language-region.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-phone-language-region.h>
18
19 static int setting_phone_language_region_create(void *cb);
20 static int setting_phone_language_region_destroy(void *cb);
21 static int setting_phone_language_region_update(void *cb);
22 static int setting_phone_language_region_cleanup(void *cb);
23
24 setting_view setting_view_phone_language_region = {
25         .create = setting_phone_language_region_create,
26         .destroy = setting_phone_language_region_destroy,
27         .update = setting_phone_language_region_update,
28         .cleanup = setting_phone_language_region_cleanup,
29 };
30
31 static void setting_phone_lang_click_softkey_cancel_cb(void *data,
32                                                        Evas_Object *obj,
33                                                        void *event_info);
34 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
35                                                         Evas_Object *obj,
36                                                         void *event_info);
37
38
39 /* ***************************************************
40  *
41  *basic func
42  *
43  ***************************************************/
44
45 static int setting_phone_language_region_create(void *cb)
46 {
47         SETTING_TRACE_BEGIN;
48         /* error check */
49         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
50
51         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
52         Evas_Object *scroller = NULL;
53
54         char *title = _(KeyStr_LanguageRegion);
55         ad->ly_language =
56             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
57                                                    ad->win_get, title,
58                                                    _("IDS_COM_BODY_BACK"),
59                                                    NULL,
60                                                    setting_phone_lang_click_softkey_cancel_cb,
61                                                    NULL, ad, &scroller,
62                                                    &(ad->navi_bar));
63         retv_if(ad->ly_language == NULL, SETTING_RETURN_FAIL);
64         ad->gl_lang_region = scroller;
65
66         Elm_Object_Item *item = NULL;
67         item =
68             elm_genlist_item_append(scroller, &(ad->itc_seperator),
69                                     NULL, NULL, ELM_GENLIST_ITEM_NONE,
70                                     NULL, NULL);
71         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
72
73         char* pa_display_lang = get_pa_display_language_str();
74         ad->data_display_language =
75             setting_create_Gendial_field_def(scroller,
76                                              &(ad->itc_2text_2),
77                                              setting_phone_lang_item_Gendial_mouse_up_cb,
78                                              ad, SWALLOW_Type_INVALID,
79                                              NULL, NULL, 0,
80                                              "IDS_ST_HEADER_DISPLAY_LANGUAGE",
81                                              pa_display_lang,
82                                              NULL);
83         if (ad->data_display_language) {
84                 ad->data_display_language->userdata = ad;
85         } else {
86                 SETTING_TRACE_ERROR("ad->data_display_language is NULL");
87         }
88         G_FREE(pa_display_lang);
89
90         char *pa_region = vconf_get_str(VCONFKEY_REGIONFORMAT);
91         if (pa_region == NULL) {
92                 SETTING_TRACE_ERROR
93                     ("[Error] get value of VCONFKEY_REGIONFORMAT fail.");
94         }
95         ad->prev_locale = (char *)g_strdup(pa_region);
96         ad->data_region_fmt =
97             setting_create_Gendial_field_def(scroller,
98                                              &(ad->itc_2text_2),
99                                              setting_phone_lang_item_Gendial_mouse_up_cb,
100                                              ad, SWALLOW_Type_INVALID,
101                                              NULL, NULL, 0,
102                                              "IDS_ST_BODY_REGION",
103                                              setting_phone_lang_get_region_str
104                                              (pa_region), NULL);
105         if (ad->data_region_fmt) {
106                 ad->data_region_fmt->userdata = ad;
107         } else {
108                 SETTING_TRACE_ERROR("ad->data_region_fmt is NULL");
109         }
110
111         char *example_desc =
112             setting_phone_lang_get_example_desc(pa_region, ad);
113         ad->data_region_fmt_example =
114             setting_create_Gendial_field_def(scroller,
115                                              &(ad->itc_bg_1icon), NULL,
116                                              ad,
117                                              SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
118                                              NULL, NULL, 0,
119                                              example_desc, NULL, NULL);
120         if (pa_region) {
121                 FREE(pa_region);
122         }
123         if (example_desc) {
124                 FREE(example_desc);
125         }
126
127         setting_view_phone_language_region.is_create = 1;
128         return SETTING_RETURN_SUCCESS;
129 }
130
131 static int setting_phone_language_region_destroy(void *cb)
132 {
133         SETTING_TRACE_BEGIN;
134         /* error check */
135         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
136
137         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
138
139         if (ad->ly_language != NULL) {
140                 evas_object_del(ad->ly_language);
141                 ad->ly_language = NULL;
142
143                 if (ad->pattern_generator) {
144                         udatpg_close(ad->pattern_generator);
145                         ad->pattern_generator = NULL;
146                 }
147                 setting_view_phone_language_region.is_create = 0;
148         }
149
150         return SETTING_RETURN_SUCCESS;
151 }
152
153 static int setting_phone_language_region_update(void *cb)
154 {
155         SETTING_TRACE_BEGIN;
156         /* error check */
157         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
158
159         SettingPhoneUG *ad = (SettingPhoneUG *) cb;
160
161         if (ad->ly_language != NULL) {
162                 evas_object_show(ad->ly_language);
163
164                 /* setting_update_chk_status(ad->chk_lang, INT_SLP_SETTING_LANG); */
165         }
166
167         return SETTING_RETURN_SUCCESS;
168 }
169
170 static int setting_phone_language_region_cleanup(void *cb)
171 {
172         SETTING_TRACE_BEGIN;
173         return SETTING_RETURN_SUCCESS;
174 }
175
176 /* ***************************************************
177  *
178  *general func
179  *
180  ***************************************************/
181
182 /* ***************************************************
183  *
184  *call back func
185  *
186  ***************************************************/
187
188 static void
189 setting_phone_lang_click_softkey_cancel_cb(void *data, Evas_Object *obj,
190                                            void *event_info)
191 {
192         SETTING_TRACE_BEGIN;
193         /* error check */
194         retm_if(data == NULL, "Data parameter is NULL");
195
196         SettingPhoneUG *ad = (SettingPhoneUG *) data;
197
198         ug_destroy_me(ad->ug);
199 }
200
201 // 0 : automatic
202 void setting_phone_lang_change_lang_value(int ichk)
203 {
204         SETTING_TRACE_BEGIN;
205         int err, ret;
206
207         /** @todo  ASSERT ( SCOPE CHECK )  */
208
209         Eina_List* list = setting_get_language_list();
210         Eina_List* elist = NULL;
211         setting_lang_entry* pnode;
212
213         char locale[128] = {0,};
214
215     EINA_LIST_FOREACH( list, elist, pnode)
216     {
217                 if (pnode->number == ichk) {
218                         snprintf(locale, 128, "%s", pnode->locale);
219                 }
220     }
221
222         SETTING_TRACE("table . locale >>>>>> :: %s ", locale);          //en_US.UTF8
223
224         //if (ichk > 0) {
225                 // CHECK 'AUTO' HERE
226         ret = setting_set_int_slp_key(INT_SLP_SETTING_LANG, ichk, &err);
227
228         if (ichk > 0)
229                 ret = vconf_set_str(VCONFKEY_LANGSET, locale);
230 }
231
232 static void setting_phone_lang_item_Gendial_mouse_up_cb(void *data,
233                                                 Evas_Object *obj,
234                                                 void *event_info)
235 {
236         SETTING_TRACE_BEGIN;
237         /* error check */
238         setting_retm_if(data == NULL, "Data parameter is NULL");
239         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
240         elm_genlist_item_selected_set(item, 0);
241         Setting_GenGroupItem_Data *list_item =
242             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
243         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
244
245         SettingPhoneUG *ad = (SettingPhoneUG *) data;
246
247         int ret = SETTING_RETURN_SUCCESS;
248         if(!safeStrCmp("IDS_ST_HEADER_DISPLAY_LANGUAGE", list_item->keyStr)) 
249         {
250                 ret =
251                     setting_view_change(&setting_view_phone_language_region,
252                                         &setting_view_phone_display_language,
253                                         ad);
254         }
255         else if(!safeStrCmp("IDS_ST_BODY_REGION", list_item->keyStr)) 
256         {
257                 ret =
258                     setting_view_change(&setting_view_phone_language_region,
259                                         &setting_view_phone_region_format, ad);
260         }
261 }
262