Tizen 2.0 Release
[apps/home/settings.git] / setting-font / src / setting-font-font-size.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
18 #include <setting-font-font-size.h>
19
20 typedef struct {
21         const char* key_font_name;
22         int font_size;
23 } settings_font_size_table;
24
25 static char* result_str_arr[] = {"Small","Normal","Large","Huge","Giant"};
26 static const settings_font_size_table font_size_table[] = {
27                                 {"IDS_EMAIL_POP_GIANT_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_GIANT},
28                                 {"IDS_EMAIL_OPT_HUGE_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_HUGE},
29                                 {"IDS_ST_BODY_TEXTSTYLE_LARGE", SYSTEM_SETTINGS_FONT_SIZE_LARGE},
30                                 {"IDS_ST_BODY_NORMAL_T_PROFILE", SYSTEM_SETTINGS_FONT_SIZE_NORMAL},
31                                 {"IDS_ST_BODY_SMALL_M_TEXTSIZE", SYSTEM_SETTINGS_FONT_SIZE_SMALL},
32                                 {NULL, 0}
33                         };
34
35 #define STR_FONT_SIZE_CHANGING "IDS_ST_BODY_CHANGING_THE_FONT_SIZE_IN_ACCESSIBILITY_SETTINGS_WILL_OVERRIDE_THE_FONT_SIZE_IN_EACH_APPLICATION"
36
37 static void __setting_font_font_size_click_softkey_back_cb(void *data, Evas_Object * obj, void *event_info);
38
39 static int setting_font_font_size_create(void *cb);
40 static int setting_font_font_size_destroy(void *cb);
41 static int setting_font_font_size_update(void *cb);
42 static int setting_font_font_size_cleanup(void *cb);
43
44 setting_view setting_view_font_font_size = {
45         .create = setting_font_font_size_create,
46         .destroy = setting_font_font_size_destroy,
47         .update = setting_font_font_size_update,
48         .cleanup = setting_font_font_size_cleanup,
49 };
50
51 /* ***************************************************
52 **
53 ** basic func
54 **
55 ** **************************************************/
56 static void __process_after_item_realized(void *data, Evas_Object *obj, void *event_info)
57 {
58         SETTING_TRACE_BEGIN;
59         SettingFontUG *ad = data;
60         if (ad->popup)
61         {
62                 evas_object_del(ad->popup);
63                 ad->popup = NULL;
64         }
65 }
66
67 static int setting_font_font_size_create(void *cb)
68 {
69         SETTING_TRACE_BEGIN;
70         //error check
71         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
72
73         SettingFontUG *ad = (SettingFontUG *) cb;
74         Evas_Object *scroller;
75
76         retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
77                  "win_main_layout is NULL");
78
79         // create a navigation bar
80         if (ad->view_to_load == &setting_view_font_font_size) {
81                 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout,
82                                                 ad->win_get,
83                                                 _("IDS_ST_MBODY_FONT_SIZE"),
84                                                 _("IDS_COM_BODY_BACK"), NULL,
85                                                 __setting_font_font_size_click_softkey_back_cb, NULL,
86                                                 ad, &scroller, &ad->navibar);
87         } else {
88                 setting_push_layout_navi_bar_genlist(ad->win_main_layout,
89                                                 ad->win_get,
90                                                 _("IDS_ST_MBODY_FONT_SIZE"),
91                                                 _("IDS_COM_BODY_BACK"),
92                                                 NULL,
93                                                 __setting_font_font_size_click_softkey_back_cb,
94                                                 NULL,
95                                                 ad, &scroller, ad->navibar);
96         }
97
98         // [UI] separator
99         Elm_Object_Item *item =
100             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
101                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
102         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
103
104         // [UI] create the font list
105         ad->size_rdg = elm_radio_add(scroller);
106         elm_radio_state_value_set(ad->size_rdg, -1);
107
108         int idx = 0;
109         Setting_GenGroupItem_Data *item_data;
110         while(font_size_table[idx].key_font_name) {
111                 item_data = setting_create_Gendial_field_1radio(scroller, &(ad->itc_1text_1icon_2),
112                                                         setting_font_font_size_list_mouse_up_cb,
113                                                         ad->size_rdg,
114                                                         SWALLOW_Type_1RADIO_1LABLE,
115                                                         ad->size_rdg, font_size_table[idx].font_size,
116                                                         font_size_table[idx].key_font_name,
117                                                         NULL);
118                 if(item_data)   {
119                         item_data->userdata = ad;
120                 } else {
121                         SETTING_TRACE_ERROR("item_data is null");
122                         return SETTING_RETURN_FAIL;
123                 }
124                 idx++;
125         }
126
127         // [UI] help text
128         setting_create_Gendial_field_def(scroller, &(ad->itc_bg_1icon), NULL,
129                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
130                                          NULL, NULL, 0, STR_FONT_SIZE_CHANGING, NULL,
131                                          NULL);
132
133         // update check status - init values
134         setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
135         setting_view_font_font_size.is_create = 1;
136         evas_object_smart_callback_add(scroller, "realized", __process_after_item_realized, ad);
137         return SETTING_RETURN_SUCCESS;
138 }
139
140 static int setting_font_font_size_destroy(void *cb)
141 {
142         SETTING_TRACE_BEGIN;
143         //error check
144         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
145         SettingFontUG *ad = (SettingFontUG *) cb;
146
147         if (ad->popup) {
148                 evas_object_del(ad->popup);
149                 ad->popup = NULL;
150         }
151
152         if (ad->view_to_load == &setting_view_font_font_size) {
153                 if (ad->ly_main) {
154                         evas_object_del(ad->ly_main);
155                         ad->ly_main = NULL;
156                 }
157         } else {
158                 elm_naviframe_item_pop(ad->navibar);
159         }
160         setting_view_font_font_size.is_create = 0;
161
162         return SETTING_RETURN_SUCCESS;
163 }
164
165 static int setting_font_font_size_update(void *cb)
166 {
167         SETTING_TRACE_BEGIN;
168         // do nothing here
169         return SETTING_RETURN_SUCCESS;
170 }
171
172 static int setting_font_font_size_cleanup(void *cb)
173 {
174         //error check
175         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
176         setting_font_font_size_destroy(cb);
177
178         return SETTING_RETURN_SUCCESS;
179 }
180
181 /* ***************************************************
182 **
183 ** general func
184 **
185 ** **************************************************/
186
187 /* ***************************************************
188 **
189 ** call back func
190 **
191 ** **************************************************/
192
193 static void __setting_font_font_size_click_softkey_back_cb(void *data, Evas_Object * obj, void *event_info)
194 {
195         //error check
196         ret_if(data == NULL);
197         SettingFontUG *ad = (SettingFontUG *) data;
198
199         if (ad->view_to_load == &setting_view_font_font_size) {
200
201                 int err = 0;
202                 int value = 0;
203                 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
204                 setting_retm_if(ret != 0, "fail to get vconf");
205
206                 service_h svc;
207                 if (service_create(&svc)) return;
208
209                 service_add_extra_data(svc, "category", "FontSize");
210                 service_add_extra_data(svc, "FontSize", result_str_arr[value]);
211
212                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontSize");
213                 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontSize", result_str_arr[value]);
214
215                 ug_send_result(ad->ug, svc);
216                 service_destroy(svc);
217
218                 ug_destroy_me(ad->ug);
219         } else {
220                 setting_view_change(&setting_view_font_font_size, &setting_view_font_main, ad);
221         }
222 }
223
224 static void setting_font_font_size_list_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
225 {
226         /* error check */
227         SETTING_TRACE_BEGIN;
228         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
229         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
230         elm_genlist_item_selected_set(item, 0);
231         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
232
233         setting_retm_if(data == NULL, "Data parameter is NULL");
234
235         SettingFontUG *ad = list_item->userdata;
236         Evas_Object *radio = data;
237         elm_radio_value_set(radio, list_item->chk_status);
238         int err = 0;
239         int ret = 0;
240         int old_value = -1;
241         ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &old_value, &err);
242
243         if (old_value == list_item->chk_status) return;
244
245         //Due to long time taken by font Setting, add the block code when font is Setting.
246         if (ad->popup) {
247                 evas_object_del(ad->popup);
248                 ad->popup = NULL;
249         }
250         ad->popup = setting_create_popup_with_progressbar(ad, ad->win_get,
251                                  "pending_list",
252                                  NULL, NULL, NULL, 0, TRUE, TRUE);
253
254         ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, list_item->chk_status, &err);
255         setting_retm_if(ret == -1, "Failed to set vconf");
256         font_size_set();
257  }
258