4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-phone-display-language.h>
23 #include <setting-common-draw-widget.h>
26 static int setting_phone_display_language_create(void *cb);
27 static int setting_phone_display_language_destroy(void *cb);
28 static int setting_phone_display_language_cleanup(void *cb);
31 setting_view setting_view_phone_display_language = {
32 .create = setting_phone_display_language_create,
33 .destroy = setting_phone_display_language_destroy,
35 .cleanup = setting_phone_display_language_cleanup,
42 * @brief Callback of cancel button by caller
44 * @param data The view data passed between all callbacks
46 static void setting_phone_display_language_caller_exist_right_cb(void *data,
51 setting_retm_if(data == NULL, "Data parameter is NULL");
53 SettingPhoneUG *ad = (SettingPhoneUG *) data;
54 /* Create Bundle and send message */
56 if(app_control_create(&svc)) {
60 app_control_add_extra_data(svc, "result", "rbutton_click");
61 ug_send_result(ad->ug, svc);
63 app_control_destroy(svc);
65 ug_destroy_me(ad->ug);
71 * @brief Callback of cancel button
73 * @param data The view data passed between all callbacks
74 * @param it Naviframe item
76 static Eina_Bool setting_phone_display_language_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
79 retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
80 SettingPhoneUG *ad = (SettingPhoneUG *) data;
81 setting_view_change(&setting_view_phone_display_language, &setting_view_phone_language_region, ad);
89 * @brief Callback of pop_progress_lang timeout
91 * @param data The view data passed between all callbacks
93 void setting_phone_display_language_done_popup_resp_cb(void *data, Evas_Object *obj, void *event_info)
96 retm_if(data == NULL, "Data parameter is NULL");
97 SettingPhoneUG *ad = (SettingPhoneUG *) data;
99 if (ad->pop_progress_lang) {
100 evas_object_del(ad->pop_progress_lang);
101 ad->pop_progress_lang = NULL;
104 elm_naviframe_item_pop(ad->navi_bar);
105 setting_view_phone_display_language.is_create = 0;
111 * @brief function of item click
113 * @param data The view data passed between all callbacks
115 static void setting_phone_display_language_close_popup_ex(void *data)
118 setting_retm_if(data == NULL, "Data parameter is NULL");
119 SettingPhoneUG *ad = (SettingPhoneUG *) data;
121 if(ad->selected_locale == NULL) {
125 if(safeStrCmp(ad->selected_locale, "IDS_COM_BODY_AUTOMATIC") == 0) {
127 // [control] set automatic - TRUE
128 vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, TRUE);
130 // [control] set vconf language
131 if(ad->sim_lang != NULL) {
132 vconf_set_str(VCONFKEY_LANGSET, ad->sim_lang);
133 elm_language_set( ad->sim_lang);
134 SETTING_TRACE_DEBUG("select Automatic : sim_lang is %s", ad->sim_lang);
137 // create loop operation here
138 Eina_List* elist = NULL;
139 //Eina_List* tmplist = NULL;
140 setting_lang_entry* pnode = NULL;
142 // load language table from XML file
143 Eina_List* langlist = setting_get_language_list();
145 EINA_LIST_FOREACH( langlist, elist, pnode)
147 if( safeStrCmp(ad->selected_locale, pnode->title) == 0)
149 // [control] set automatic - TRUE
150 vconf_set_bool(VCONFKEY_SETAPPL_LANG_AUTOMATIC_BOOL, FALSE);
152 char temp[32] = {0,};
153 snprintf(temp, 32, "%s.UTF-8", pnode->locale);
154 // [control] set vconf language
155 vconf_set_str(VCONFKEY_LANGSET, temp);
156 elm_language_set(temp);
158 int region_automatic = 1;
159 vconf_get_bool(VCONFKEY_SETAPPL_REGION_AUTOMATIC_BOOL, ®ion_automatic);
160 if(region_automatic == 1) {
161 // [control] region format set - if 'automatic region'
162 vconf_set_str(VCONFKEY_REGIONFORMAT, temp);
163 int ret = setting_phone_region_format_set_dateformat(pnode->locale, ad);
164 if (ret == SETTING_RETURN_FAIL) {
165 SETTING_TRACE_ERROR("[Error] set date format fail");
168 SETTING_TRACE_DEBUG("selectd language is %s, its locale is %s", ad->selected_locale, pnode->locale);
173 FREE(ad->selected_locale);
175 // 2. GET SELECTED LANG
176 const char *pa_lang = vconf_get_str(VCONFKEY_LANGSET);
177 if (pa_lang) { /* remove the */
178 char *q = strchr(pa_lang, '.');
183 SETTING_TRACE("pa_lang:%s", pa_lang);
187 // default UI language
188 uloc_setDefault(pa_lang, &err);
191 app_control_h service = ad->bundle_data;
193 app_control_get_extra_data(service, "caller", &caller);
196 int ret = setting_phone_region_format_set_dateformat(pa_lang, ad);
197 if (ret == SETTING_RETURN_FAIL) {
198 SETTING_TRACE_ERROR("[Error] set date format fail");
201 const char *lang = vconf_get_str(VCONFKEY_LANGSET);
203 ret = vconf_set_str(VCONFKEY_REGIONFORMAT, lang);
205 SETTING_TRACE_ERROR("[Error] set value of VCONFKEY_REGIONFORMAT fail");
210 /* Create Bundle and send message */
212 if(app_control_create(&svc)) {
216 app_control_add_extra_data(svc, "result", "rbutton_click");
217 ug_send_result(ad->ug, svc);
219 app_control_destroy(svc);
221 ug_destroy_me(ad->ug);
225 ad->pop_progress_lang = setting_create_popup_with_progressbar_withobject(ad, ad->pop_progress_lang, ad->ly_language,
227 NULL, KeyStr_Loading, setting_phone_display_language_done_popup_resp_cb, 3/*0*/, TRUE, TRUE); // 3 seconds to wait in maximum
236 * @brief Callback of language item click event
238 * @param data The view data passed between all callbacks
239 * @param event_info The select genlist item
241 static void setting_phone_display_language_mouse_up_Gendial_list_radio_cb(void *data,
246 setting_retm_if(data == NULL, "Data parameter is NULL");
247 setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
248 SettingPhoneUG *ad = (SettingPhoneUG *)data;
249 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
251 elm_genlist_item_selected_set(item, 0);
252 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
254 ad->selected_locale = (char*)strdup(list_item->keyStr);
255 setting_phone_display_language_close_popup_ex(ad);
261 /* ***************************************************
265 ***************************************************/
268 * @brief Callback of view creating
270 * @param cb The view data passed between all callbacks
271 * @return #1 on success, else on failed
273 static int setting_phone_display_language_create(void *cb)
276 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
278 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
279 //char *title = "IDS_ST_HEADER_LANGUAGE_AND_INPUT";
280 char *title = "IDS_ST_HEADER_DISPLAY_LANGUAGE";
282 Evas_Object *scroller = NULL;
283 setting_call_back_func gl_sel_cb = NULL;
285 if (&setting_view_phone_display_language == ad->view_to_load) {
288 app_control_h service = ad->bundle_data;
290 app_control_get_extra_data(service, "caller", &caller);
294 ad->ly_language = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
297 "IDS_COM_BODY_BACK", NULL,
298 setting_phone_display_language_caller_exist_right_cb, NULL,
299 ad, &scroller, &ad->navi_bar);
300 gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
305 SETTING_TRACE_ERROR("[ERROR] caller is empty");
306 return SETTING_RETURN_FAIL;
309 /* add basic layout */
310 Elm_Object_Item *navi_it = setting_push_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get,
311 title, "IDS_COM_BODY_BACK",
314 NULL, ad, &scroller, ad->navi_bar);
315 elm_naviframe_item_pop_cb_set(navi_it, setting_phone_display_language_click_softkey_cancel_cb, ad);
316 gl_sel_cb = setting_phone_display_language_mouse_up_Gendial_list_radio_cb;
319 ad->gl_lang = scroller;
320 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
322 evas_object_smart_callback_add(ad->gl_lang, "realized", __gl_realized_cb, NULL);
324 Elm_Object_Item *item = NULL;
326 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
327 ELM_GENLIST_ITEM_NONE, NULL, NULL);
328 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
330 /* scroller is a genlist */
331 ad->chk_lang = elm_radio_add(scroller);
332 elm_radio_state_value_set(ad->chk_lang, -1);
334 // create loop operation here
335 Eina_List* elist = NULL;
336 setting_lang_entry* pnode = NULL;
337 int idx = SETTING_LANG_KOREA; // 2
339 Setting_GenGroupItem_Data *last_item = NULL;
340 Setting_GenGroupItem_Data *item_data = NULL;
342 // load language table from XML file
343 Eina_List* langlist = setting_get_language_list();
345 EINA_LIST_FOREACH( langlist, elist, pnode) {
347 setting_create_Gendial_field_def(scroller,
351 SWALLOW_Type_INVALID, NULL, NULL,
352 //idx, // <<< WARNING
354 pnode->title, NULL, NULL);
356 item_data->userdata = ad;
358 item_data->group_style = SETTING_GROUP_STYLE_TOP;
360 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
365 if (item_data->group_style == SETTING_GROUP_STYLE_TOP) {
366 elm_object_item_signal_emit(item_data->item, "elm,state,top", "");
367 } else if (item_data->group_style == SETTING_GROUP_STYLE_BOTTOM) {
368 elm_object_item_signal_emit(item_data->item, "elm,state,bottom", "");
369 } else if (item_data->group_style == SETTING_GROUP_STYLE_CENTER) {
370 elm_object_item_signal_emit(item_data->item, "elm,state,center", "");
372 elm_object_item_signal_emit(item_data->item, "elm,state,normal", "");
376 last_item = item_data;
378 SETTING_TRACE_ERROR("item_data is NULL");
383 last_item->group_style = SETTING_GROUP_STYLE_BOTTOM;
386 /*item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
387 ELM_GENLIST_ITEM_NONE, NULL, NULL);
388 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);*/
390 setting_view_phone_display_language.is_create = 1;
392 return SETTING_RETURN_SUCCESS;
398 * @brief Callback of view destroy
400 * @param cb The view data passed between all callbacks
401 * @return #1 on success, else on failed
403 static int setting_phone_display_language_destroy(void *cb)
407 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
408 SettingPhoneUG *ad = (SettingPhoneUG *) cb;
410 evas_object_smart_callback_del(ad->gl_lang, "realized", __gl_realized_cb);
412 /* FIXED : destroy only if it was created. */
413 if (setting_view_phone_display_language.is_create) {
414 if (ad->pop_progress_lang) {
415 evas_object_del(ad->pop_progress_lang);
416 ad->pop_progress_lang = NULL;
418 elm_naviframe_item_pop(ad->navi_bar);
419 setting_view_phone_display_language.is_create = 0;
421 setting_get_language_list_destroy();
424 return SETTING_RETURN_SUCCESS;
430 * @brief Callback of view cleanup
432 * @param cb The view data passed between all callbacks
433 * @return #1 on success, else on failed
435 static int setting_phone_display_language_cleanup(void *cb)
439 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
440 setting_phone_display_language_destroy(cb);
442 return SETTING_RETURN_SUCCESS;