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.
22 #include <setting-font-font-size.h>
25 #define STR_FONT_SIZE_CHANGING "IDS_ST_BODY_CHANGING_THE_FONT_SIZE_IN_ACCESSIBILITY_SETTINGS_WILL_OVERRIDE_THE_FONT_SIZE_IN_EACH_APPLICATION"
27 static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it);
29 static int setting_font_font_size_create(void *cb);
30 static int setting_font_font_size_destroy(void *cb);
31 static int setting_font_font_size_update(void *cb);
32 static int setting_font_font_size_cleanup(void *cb);
34 setting_view setting_view_font_font_size = {
35 .create = setting_font_font_size_create,
36 .destroy = setting_font_font_size_destroy,
37 .update = setting_font_font_size_update,
38 .cleanup = setting_font_font_size_cleanup,
41 static char *result_str_arr[] = {"Small", "Normal", "Large", "Huge", "Giant"};
43 static int convert_font_size(int size)
46 if (SYSTEM_SETTINGS_FONT_SIZE_SMALL == size) {
47 font_size = LABEL_FONT_SIZE_SMALL;
48 } else if (SYSTEM_SETTINGS_FONT_SIZE_LARGE == size) {
49 font_size = LABEL_FONT_SIZE_LARGE;
50 } else if (SYSTEM_SETTINGS_FONT_SIZE_HUGE == size) {
51 font_size = LABEL_FONT_SIZE_HUGE;
52 } else if (SYSTEM_SETTINGS_FONT_SIZE_GIANT == size) {
53 font_size = LABEL_FONT_SIZE_GIANT;
55 font_size = LABEL_FONT_SIZE_NORMAL;
60 char *get_font_size_name_by_id(char *font_size_id)
64 while (font_size_table[i].key_font_name) {
65 if (!safeStrCmp(font_size_table[i].key_font_name, font_size_id)) {
66 return setting_customize_text(_(font_size_table[i].key_font_name), convert_font_size(font_size_table[i].font_size), NULL, NULL);
73 char *_item_text_font_size_keystr2_get(void *data, Evas_Object *obj, const char *part)
76 setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
77 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
79 if (!strcmp(part, "elm.text.main.left")) {
80 if (item_data->keyStr2) {
81 /*SETTING_TRACE("gl update item_data->keyStr2[%s]",item_data->keyStr2); */
82 return get_font_size_name_by_id(item_data->keyStr2);
89 /* ***************************************************
93 ** **************************************************/
95 static int setting_font_font_size_create(void *cb)
99 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
101 SettingFontUG *ad = (SettingFontUG *) cb;
102 Evas_Object *scroller;
103 setting_create_Gendial_itc("dialogue/1text.1icon.3.tb", &(ad->itc_1text_1icon_2_font_size));
104 ad->itc_1text_1icon_2_font_size.func.text_get = _item_text_font_size_keystr2_get;
105 retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
106 "win_main_layout is NULL");
108 /* create a navigation bar */
109 if (ad->view_to_load == &setting_view_font_font_size) {
110 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
112 "IDS_ST_MBODY_FONT_SIZE",
113 _("IDS_COM_BODY_BACK"), NULL,
114 (setting_call_back_func)__setting_font_font_size_click_softkey_back_cb, NULL,
115 ad, &scroller, &ad->navibar);
116 ad->navi_it_font_size = elm_naviframe_top_item_get(ad->navibar);
118 ad->navi_it_font_size = setting_push_layout_navi_bar_genlist(ad->win_main_layout,
120 "IDS_ST_MBODY_FONT_SIZE",
121 _("IDS_COM_BODY_BACK"),
123 (setting_call_back_func)__setting_font_font_size_click_softkey_back_cb,
125 ad, &scroller, ad->navibar);
129 Elm_Object_Item *item =
130 elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
131 ELM_GENLIST_ITEM_NONE, NULL, NULL);
132 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
134 /* [UI] create the font list */
135 ad->size_rdg = elm_radio_add(scroller);
136 elm_radio_state_value_set(ad->size_rdg, -1);
140 while (font_size_table[idx].key_font_name) {
141 /*item_data = setting_create_Gendial_field_1radio(scroller, &(ad->itc_1text_1icon_2),
142 setting_font_font_size_list_mouse_up_cb,
144 SWALLOW_Type_1RADIO_1LABLE,
145 ad->size_rdg, font_size_table[idx].font_size,
146 setting_customize_text(_(font_size_table[idx].key_font_name), convert_font_size(font_size_table[idx].font_size),NULL,NULL),
148 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1, sizeof(Setting_GenGroupItem_Data));
149 setting_retvm_if(!item_data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "calloc failed");
150 item_data->keyStr2 = (char *)g_strdup(font_size_table[idx].key_font_name);/*setting_customize_text(_(font_size_table[idx].key_font_name), convert_font_size(font_size_table[idx].font_size),NULL,NULL);//for display */
151 item_data->keyStr = (char *)g_strdup(_(font_size_table[idx].key_font_name));/*for tts feature; */
152 item_data->swallow_type = SWALLOW_Type_1RADIO_1LABLE;
153 item_data->chk_status = font_size_table[idx].font_size;
154 item_data->chk_change_cb = NULL;
155 item_data->rgd = ad->size_rdg;
156 item_data->userdata = ad;
158 item_data->group_style = SETTING_GROUP_STYLE_TOP;
159 } else if (idx == sizeof(font_size_table) / sizeof(font_size_table[0]) - 1) {
160 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
162 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
165 item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2_font_size), item_data, NULL,
166 ELM_GENLIST_ITEM_NONE, setting_font_font_size_list_mouse_up_cb, ad->size_rdg);
173 ADD_GL_HELP(scroller, STR_FONT_SIZE_CHANGING);
175 /* update check status - init values */
176 setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
177 setting_view_font_font_size.is_create = 1;
178 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, ad);
179 return SETTING_RETURN_SUCCESS;
182 static int setting_font_font_size_destroy(void *cb)
186 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
187 SettingFontUG *ad = (SettingFontUG *) cb;
190 if (ad->view_to_load == &setting_view_font_font_size) {
192 evas_object_del(ad->ly_main);
196 elm_naviframe_item_pop(ad->navibar);
198 if (ad->navi_it_font_size) {
199 ad->navi_it_font_size = NULL;
201 if (ad->size_rdg != NULL) {
204 setting_view_font_font_size.is_create = 0;
206 return SETTING_RETURN_SUCCESS;
209 static int setting_font_font_size_update(void *cb)
212 /* do nothing here */
213 return SETTING_RETURN_SUCCESS;
216 static int setting_font_font_size_cleanup(void *cb)
219 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
220 setting_font_font_size_destroy(cb);
222 return SETTING_RETURN_SUCCESS;
225 /* ***************************************************
229 ** **************************************************/
231 /* ***************************************************
235 ** **************************************************/
237 static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it)
240 retv_if(data == NULL, EINA_FALSE);
241 SettingFontUG *ad = (SettingFontUG *) data;
243 if (ad->view_to_load == &setting_view_font_font_size) {
246 int ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &value);
247 setting_retvm_if(ret != 0, EINA_FALSE, "fail to get vconf");
250 if (app_control_create(&svc)) {
254 app_control_add_extra_data(svc, "category", "FontSize");
255 app_control_add_extra_data(svc, "FontSize", result_str_arr[value]);
257 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
258 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", result_str_arr[value]);
260 ug_send_result(ad->ug, svc);
261 app_control_destroy(svc);
263 ug_destroy_me(ad->ug);
265 setting_view_change(&setting_view_font_font_size, &setting_view_font_main, ad);
269 static void __setting_font_size_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
272 SettingFontUG *ad = (SettingFontUG *) data;
273 if (ad->size_popup) {
274 evas_object_del(ad->size_popup);
275 ad->size_popup = NULL;
278 if (ad->font_size && ad->font_size->item) {
279 elm_genlist_item_expanded_set(ad->font_size->item, FALSE);
281 /*set focus for TTS. */
282 /*retm_if(ad->cur_focus_item == NULL, "ad->cur_focus_item is NULL"); */
283 /*Evas_Object *eo = elm_object_item_access_object_get(ad->cur_focus_item); */
284 /*retm_if(eo == NULL, "eo is NULL"); */
285 /*elm_access_highlight_set(eo); */
288 static Eina_Bool __font_change_call(void *data)
291 SettingFontUG *ad = (SettingFontUG *) data;
295 ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
297 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
301 ad->font_size_idler = NULL;
302 return ECORE_CALLBACK_CANCEL;
305 void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
309 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
310 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
311 elm_genlist_item_selected_set(item, 0);
312 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
314 setting_retm_if(data == NULL, "Data parameter is NULL");
316 SettingFontUG *ad = list_item->userdata;
317 ad->cur_focus_item = item;
318 Evas_Object *radio = data;
319 elm_radio_value_set(radio, list_item->chk_status);
323 ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &old_value);
325 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
327 if (old_value == list_item->chk_status) {
331 ad->ret_font_size = list_item->chk_status;
333 /*Due to long time taken by font Setting, add the block code when font is Setting. */
334 /*if (ad->size_popup) { */
335 /* evas_object_del(ad->size_popup); */
336 /* ad->size_popup = NULL; */
341 ad->size_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
343 NULL, KeyStr_Loading, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE); /* 3 seconds to wait in maximum */
345 setting_create_popup_with_progressbar_withobject(ad, ad->size_popup, ad->win_get,
347 NULL, NULL, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE); /* 3 seconds to wait in maximum */
349 /*elm_config_all_flush(); */
351 ad->font_size_idler = ecore_timer_add(1, (Ecore_Task_Cb)__font_change_call, ad);