f454882167628fda989cdb393efd7a527a7f12b0
[apps/home/settings.git] / setting-font / src / setting-font-font-size.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21
22 #include <setting-font-font-size.h>
23
24
25 #define STR_FONT_SIZE_CHANGING "IDS_ST_BODY_CHANGING_THE_FONT_SIZE_IN_ACCESSIBILITY_SETTINGS_WILL_OVERRIDE_THE_FONT_SIZE_IN_EACH_APPLICATION"
26
27 static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it);
28
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);
33
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,
39 };
40
41 static char *result_str_arr[] = {"Small", "Normal", "Large", "Huge", "Giant"};
42
43 static int convert_font_size(int size)
44 {
45         int font_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;
54         } else {
55                 font_size = LABEL_FONT_SIZE_NORMAL;
56         }
57         return font_size;
58 }
59
60 char *get_font_size_name_by_id(char *font_size_id)
61 {
62         SETTING_TRACE_BEGIN;
63         int i = 0;
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);
67                 }
68                 i++;
69         }
70         return NULL;
71
72 }
73 char *_item_text_font_size_keystr2_get(void *data, Evas_Object *obj, const char *part)
74 {
75         SETTING_TRACE_BEGIN;
76         setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
77         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
78
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);
83                 }
84         }
85         SETTING_TRACE_END;
86         return NULL;
87 }
88
89 /* ***************************************************
90 **
91 ** basic func
92 **
93 ** **************************************************/
94
95 static int setting_font_font_size_create(void *cb)
96 {
97         SETTING_TRACE_BEGIN;
98         /*error check */
99         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
100
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");
107
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,
111                                                                      ad->win_get,
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);
117         } else {
118                 ad->navi_it_font_size = setting_push_layout_navi_bar_genlist(ad->win_main_layout,
119                                                                              ad->win_get,
120                                                                              "IDS_ST_MBODY_FONT_SIZE",
121                                                                              _("IDS_COM_BODY_BACK"),
122                                                                              NULL,
123                                                                              (setting_call_back_func)__setting_font_font_size_click_softkey_back_cb,
124                                                                              NULL,
125                                                                              ad, &scroller, ad->navibar);
126         }
127
128         /* [UI] separator */
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);
133
134         /* [UI] create the font list */
135         ad->size_rdg = elm_radio_add(scroller);
136         elm_radio_state_value_set(ad->size_rdg, -1);
137
138         int idx = 0;
139
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,
143                                                         ad->size_rdg,
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),
147                                                         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;
157                 if (idx == 0) {
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;
161                 } else {
162                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
163                 }
164
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);
167
168                 idx++;
169         }
170
171
172         /* [UI] help text */
173         ADD_GL_HELP(scroller, STR_FONT_SIZE_CHANGING);
174
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;
180 }
181
182 static int setting_font_font_size_destroy(void *cb)
183 {
184         SETTING_TRACE_BEGIN;
185         /*error check */
186         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
187         SettingFontUG *ad = (SettingFontUG *) cb;
188
189
190         if (ad->view_to_load == &setting_view_font_font_size) {
191                 if (ad->ly_main) {
192                         evas_object_del(ad->ly_main);
193                         ad->ly_main = NULL;
194                 }
195         } else {
196                 elm_naviframe_item_pop(ad->navibar);
197         }
198         if (ad->navi_it_font_size) {
199                 ad->navi_it_font_size = NULL;
200         }
201         if (ad->size_rdg != NULL) {
202                 ad->size_rdg = NULL;
203         }
204         setting_view_font_font_size.is_create = 0;
205
206         return SETTING_RETURN_SUCCESS;
207 }
208
209 static int setting_font_font_size_update(void *cb)
210 {
211         SETTING_TRACE_BEGIN;
212         /* do nothing here */
213         return SETTING_RETURN_SUCCESS;
214 }
215
216 static int setting_font_font_size_cleanup(void *cb)
217 {
218         /*error check */
219         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
220         setting_font_font_size_destroy(cb);
221
222         return SETTING_RETURN_SUCCESS;
223 }
224
225 /* ***************************************************
226 **
227 ** general func
228 **
229 ** **************************************************/
230
231 /* ***************************************************
232 **
233 ** call back func
234 **
235 ** **************************************************/
236
237 static Eina_Bool __setting_font_font_size_click_softkey_back_cb(void *data, Elm_Object_Item *it)
238 {
239         /*error check */
240         retv_if(data == NULL, EINA_FALSE);
241         SettingFontUG *ad = (SettingFontUG *) data;
242
243         if (ad->view_to_load == &setting_view_font_font_size) {
244
245                 int value = 0;
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");
248
249                 app_control_h svc;
250                 if (app_control_create(&svc)) {
251                         return EINA_FALSE;
252                 }
253
254                 app_control_add_extra_data(svc, "category", "FontSize");
255                 app_control_add_extra_data(svc, "FontSize", result_str_arr[value]);
256
257                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "category", "FontSize");
258                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s", "FontSize", result_str_arr[value]);
259
260                 ug_send_result(ad->ug, svc);
261                 app_control_destroy(svc);
262
263                 ug_destroy_me(ad->ug);
264         } else {
265                 setting_view_change(&setting_view_font_font_size, &setting_view_font_main, ad);
266         }
267         return EINA_TRUE;
268 }
269 static void __setting_font_size_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
270 {
271         SETTING_TRACE_BEGIN;
272         SettingFontUG *ad = (SettingFontUG *) data;
273         if (ad->size_popup) {
274                 evas_object_del(ad->size_popup);
275                 ad->size_popup = NULL;
276         }
277
278         if (ad->font_size && ad->font_size->item) {
279                 elm_genlist_item_expanded_set(ad->font_size->item, FALSE);
280         }
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); */
286 }
287
288 static Eina_Bool __font_change_call(void *data)
289 {
290         SETTING_TRACE_BEGIN;
291         SettingFontUG *ad = (SettingFontUG *) data;
292
293         /* logic */
294         int ret;
295         ret = system_settings_set_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, ad->ret_font_size);
296         if (ret != 0) {
297                 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
298         }
299
300         /* finalize */
301         ad->font_size_idler = NULL;
302         return ECORE_CALLBACK_CANCEL;
303 }
304
305 void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
306 {
307         /* error check */
308         SETTING_TRACE_BEGIN;
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);
313
314         setting_retm_if(data == NULL, "Data parameter is NULL");
315
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);
320
321         int ret = 0;
322         int old_value = -1;
323         ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &old_value);
324         if (ret != 0) {
325                 SETTING_TRACE_ERROR("system call failed with error code %d", ret);
326         }
327         if (old_value == list_item->chk_status) {
328                 return;
329         }
330
331         ad->ret_font_size = list_item->chk_status;
332
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; */
337         /*} */
338 #if 1
339         /* original popup */
340         ad->size_rdg = NULL;
341         ad->size_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
342                                                                PROGRESSBAR_STYLE,
343                                                                NULL, KeyStr_Loading, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE);        /* 3 seconds to wait in maximum */
344 #else
345         setting_create_popup_with_progressbar_withobject(ad, ad->size_popup, ad->win_get,
346                                                          PROGRESSBAR_STYLE,
347                                                          NULL, NULL, __setting_font_size_progress_popup_cb, 3/*0*/, TRUE, TRUE);        /* 3 seconds to wait in maximum */
348
349         /*elm_config_all_flush(); */
350 #endif
351         ad->font_size_idler = ecore_timer_add(1, (Ecore_Task_Cb)__font_change_call, ad);
352 }
353