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-font-main.h>
22 #include <dd-deviced.h>
23 #include <fontconfig/fontconfig.h>
24 #include <unicode/uloc.h>
25 #include <libxml/xmlmemory.h>
26 #include <libxml/parser.h>
28 #include <setting-font-font-size.h>
31 #define SETTING_FONT_MAX_LEN 10
32 #define FONT_BUF_SIZE 256
34 static int setting_font_main_create(void *cb);
35 static int setting_font_main_destroy(void *cb);
36 static int setting_font_main_update(void *cb);
37 static int setting_font_main_cleanup(void *cb);
39 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
41 setting_view setting_view_font_main = {
42 .create = setting_font_main_create,
43 .destroy = setting_font_main_destroy,
44 .update = setting_font_main_update,
45 .cleanup = setting_font_main_cleanup,
47 static int format_font_name_by_id(char* font_data,char* font_name_id, char* temp, int bufsize)
49 retvm_if(font_data == NULL, 0, "Invalid argument: event info is NULL");
51 char* pos = font_data;
52 char new_name[bufsize];
57 //SETTING_TRACE(">>> %c", *pos);
60 SETTING_TRACE(">>> empty ' ' ");
61 new_name[count] = '\\';
63 new_name[count] = ' ';
65 new_name[count] = font_data[i];
72 new_name[count] = '\0';
73 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
74 if(safeStrCmp(font_name_id, "IDS_ST_BODY_CHOCO_COOKY") == 0) {
75 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
76 }else if(safeStrCmp(font_name_id, "IDS_ST_BODY_COOL_JAZZ") == 0) {
77 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
78 }else if(safeStrCmp(font_name_id, "IDS_ST_BODY_FONTSTYLE_ROSEMARY") == 0) {
79 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
80 }else if (safeStrCmp(font_name_id, "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME") == 0) {
81 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
82 }else if(safeStrCmp(font_name_id, "IDS_ST_BODY_MARUBERI_JPN_DCM") == 0) {
83 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
84 }else if(safeStrCmp(font_name_id, "IDS_ST_BODY_POP_JPN_DCM") == 0) {
85 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
86 }else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDMINCHO_JPN") == 0) {
87 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
88 }else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDRGOTHICM_JPN") == 0) {
89 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
90 }else if (safeStrCmp(font_name_id, "IDS_ST_BODY_UDGOTHIC_M_FONT") == 0) {
91 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
92 }else if (safeStrCmp(font_name_id, "IDS_ST_BODY_DEFAULT_FONT") == 0) {
93 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_DEFAULT_FONT"));
95 snprintf(trans_font_type_name, bufsize, "%s", font_name_id);
97 snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
101 char *_item_text_keystr2_get(void *data, Evas_Object *obj, const char *part)
103 setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
104 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
105 char *ret_str = NULL;
106 if (!strcmp(part, "elm.text.main.left")) {
107 if (item_data->keyStr2) {
108 char temp[FONT_BUF_SIZE] = {0,};
110 int ret = format_font_name_by_id(item_data->sub_desc,item_data->keyStr2, temp, FONT_BUF_SIZE);
112 if (ret == 0) { /* error condition */
113 SETTING_TRACE_ERROR("Error condition font");
116 SETTING_TRACE_DEBUG("temp : %s", (char*)temp);
117 ret_str = (char *)g_strdup(temp);
128 * [API] get a font list from current system
129 * REFACTORING: move this feature to system-settings
131 static Eina_List *__setting_font_main_available_list_get()
134 FcObjectSet *os = NULL;
135 FcFontSet *fs = NULL;
136 FcPattern *pat = NULL;
137 Eina_List *list = NULL;
138 FcConfig *font_config = NULL;
140 font_config = FcInitLoadConfigAndFonts();
142 setting_retvm_if(font_config == NULL, NULL, "Failed: FcInitLoadConfigAndFonts");
145 char *locale = setlocale(0, NULL);
147 pat = FcPatternCreate();
149 os = FcObjectSetBuild(FC_FAMILY, FC_FILE, FC_FAMILYLANG, (char *) 0);
152 fs = FcFontList(font_config, pat, os);
153 FcObjectSetDestroy(os);
158 FcPatternDestroy(pat);
164 SETTING_TRACE_DEBUG("fs->nfont = %d", fs->nfont);
166 for (j = 0; j < fs->nfont; j++) {
168 FcChar8 *family = NULL;
169 FcChar8 *file = NULL;
170 if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
171 //SETTING_TRACE_DEBUG("FC_FILE : %s\n", file);
172 int preload_path_len = safeStrLen(SETTING_FONT_PRELOAD_FONT_PATH);
173 int download_path_len = safeStrLen(SETTING_FONT_DOWNLOADED_FONT_PATH);
174 if (!safeStrNCmp((const char*)file, SETTING_FONT_PRELOAD_FONT_PATH, preload_path_len) ||
175 !safeStrNCmp((const char*)file, SETTING_FONT_DOWNLOADED_FONT_PATH, download_path_len)){
176 char *family_result = NULL;
177 FcChar8 *lang = NULL;
179 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch){
182 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch){
185 family_result = (char *)family;
187 // Find proper family name for current locale.
188 while (locale && family && lang) {
189 if (!strncmp(locale, (char *)lang, strlen((char *)lang))) {
190 family_result = (char *)family;
194 // I will set english as default family language.
195 // If there is no proper family language for current locale,
196 // we have to show the english family name.
197 if (!strcmp(lang, "en")){
198 family_result = (char *)family;
201 if (FcPatternGetString(fs->fonts[j], FC_FAMILY, id, &family) != FcResultMatch){
204 if (FcPatternGetString(fs->fonts[j], FC_FAMILYLANG, id, &lang) != FcResultMatch){
208 if (family_result && eina_list_data_find(list, family_result) == NULL) {
209 list = eina_list_append(list, family_result);
210 SETTING_TRACE_DEBUG("-------- ADDED FONT - family = %s", family_result);
211 /* list = eina_list_append(list, family_result); */
212 // for TEST because there's 1 font on target.
217 FcFontSetDestroy(fs);
221 FcConfigDestroy(font_config);
226 static void __setting_font_main_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info)
229 setting_retm_if(data == NULL, "Data parameter is NULL");
231 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
232 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
233 elm_genlist_item_selected_set(item, 0);
234 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
236 SettingFontUG *ad = (SettingFontUG *)data;
238 if (ad->font_size == list_item) {
239 setting_view_change(&setting_view_font_main, &setting_view_font_font_size, ad);
243 int get_font_name_id(char* font_data, char* temp, int bufsize)
245 //SETTING_TRACE("font data : %s", (char*)font_data);
246 //char trans_font_type_name[FONT_BUF_SIZE] = {0,};
247 //SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name);
248 if(safeStrCmp(font_data, "Choco cooky") == 0) {
249 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_CHOCO_COOKY");
250 }else if(safeStrCmp(font_data, "Cool jazz") == 0) {
251 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_COOL_JAZZ");
252 }else if(safeStrCmp(font_data, "Rosemary") == 0) {
253 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_FONTSTYLE_ROSEMARY");
254 }else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
255 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME");
256 }else if(safeStrCmp(font_data, "Maruberi") == 0) {
257 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_MARUBERI_JPN_DCM");
258 }else if(safeStrCmp(font_data, "POP") == 0) {
259 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_POP_JPN_DCM");
260 }else if (safeStrCmp(font_data, "UDMincho") == 0) {
261 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDMINCHO_JPN");
262 }else if (safeStrCmp(font_data, "UDRGothic") == 0) {
263 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDRGOTHICM_JPN");
264 }else if (safeStrCmp(font_data, "UDGothic") == 0) {
265 snprintf(temp, bufsize, "%s", "IDS_ST_BODY_UDGOTHIC_M_FONT");
267 snprintf(temp, bufsize, "%s", font_data);
273 int get_font_name_str(char* font_type_name, char* trans_font_type_name, int bufsize)
275 //SETTING_TRACE_BEGIN;
276 if(safeStrCmp(font_type_name, "Choco cooky") == 0){
277 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
278 //SETTING_TRACE("%s", trans_font_type_name);
280 else if(safeStrCmp(font_type_name, "Cool jazz") == 0){
281 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
282 //SETTING_TRACE("%s", trans_font_type_name);
284 else if(safeStrCmp(font_type_name, "Rosemary") == 0){
285 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
286 //SETTING_TRACE("%s", trans_font_type_name);
288 else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0){
289 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
290 //SETTING_TRACE("%s", trans_font_type_name);
292 else if(safeStrCmp(font_type_name, "Maruberi") == 0){
293 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
294 //SETTING_TRACE("%s", trans_font_type_name);
296 else if(safeStrCmp(font_type_name, "POP") == 0){
297 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
298 //SETTING_TRACE("%s", trans_font_type_name);
300 else if (safeStrCmp(font_type_name, "UDMincho") == 0){
301 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
302 //SETTING_TRACE("%s", trans_font_type_name);
304 else if (safeStrCmp(font_type_name, "UDRGothic") == 0){
305 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
306 //SETTING_TRACE("%s", trans_font_type_name);
309 snprintf(trans_font_type_name, bufsize, "%s", font_type_name);
310 //SETTING_TRACE("%s", trans_font_type_name);
314 void format_default_font(char* font_data, char* temp, int bufsize,char* real_value)
316 //SETTING_TRACE("real_value : %s", (char*)real_value);
318 char* pos = real_value;
319 char new_name[bufsize];
324 //SETTING_TRACE(">>> %c", *pos);
327 //SETTING_TRACE(">>> empty ' ' ");
328 new_name[count] = '\\';
330 new_name[count] = ' ';
332 new_name[count] = real_value[i];
339 new_name[count] = '\0';
340 snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, font_data);
343 int get_font_name_tag(char* font_data, char* temp, int bufsize)
345 //SETTING_TRACE("font data : %s", (char*)font_data);
347 char* pos = font_data;
348 char new_name[bufsize];
353 //SETTING_TRACE(">>> %c", *pos);
356 SETTING_TRACE(">>> empty ' ' ");
357 new_name[count] = '\\';
359 new_name[count] = ' ';
361 new_name[count] = font_data[i];
368 new_name[count] = '\0';
370 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
371 //SETTING_TRACE(">>> new_name length : %d : string : %s", count, (char*)new_name);
372 if(safeStrCmp(font_data, "Choco cooky") == 0) {
373 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
374 }else if(safeStrCmp(font_data, "Cool jazz") == 0) {
375 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
376 }else if(safeStrCmp(font_data, "Rosemary") == 0) {
377 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_FONTSTYLE_ROSEMARY"));
378 }else if (safeStrCmp(font_data, "HelveticaNeue") == 0) {
379 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
380 }else if(safeStrCmp(font_data, "Maruberi") == 0) {
381 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_MARUBERI_JPN_DCM"));
382 }else if(safeStrCmp(font_data, "POP") == 0) {
383 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_POP_JPN_DCM"));
384 }else if (safeStrCmp(font_data, "UDMincho") == 0) {
385 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDMINCHO_JPN"));
386 }else if (safeStrCmp(font_data, "UDRGothic") == 0) {
387 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDRGOTHICM_JPN"));
388 }else if (safeStrCmp(font_data, "UDGothic") == 0) {
389 snprintf(trans_font_type_name, bufsize, "%s", _("IDS_ST_BODY_UDGOTHIC_M_FONT"));
391 snprintf(trans_font_type_name, bufsize, "%s", font_data);
395 snprintf(temp, bufsize, "<font=%s>%s</font>", new_name, trans_font_type_name);
399 static void __setting_font_main_genlist_item_create(void *data)
402 setting_retm_if(NULL == data, "data is NULL");
404 SettingFontUG *ad = (SettingFontUG *)data;
405 Elm_Object_Item *item = NULL;
406 setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2_font_size));
407 ad->itc_1text_1icon_2_font_size.func.text_get = _item_text_font_size_keystr2_get;
408 if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SEL_VIEW_APPCONTROL) // font type only
411 item = elm_genlist_item_append(ad->genlist, &itc_seperator, NULL, NULL,
412 ELM_GENLIST_ITEM_NONE, NULL, NULL);
413 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
415 char *font_type_name = NULL;
416 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
418 SETTING_TRACE_ERROR("system-setting call failed with error code %d",ret);
420 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
423 char trans_font_type_name[256] = {0,};
424 if(safeStrCmp(font_type_name, "Choco cooky") == 0)
425 snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_CHOCO_COOKY"));
426 else if(safeStrCmp(font_type_name, "Cool jazz") == 0)
427 snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_COOL_JAZZ"));
428 else if (safeStrCmp(font_type_name, "HelveticaNeue") == 0)
429 snprintf(trans_font_type_name, 256, "%s", _("IDS_ST_BODY_HELVETICA_NEUE_M_FONT_NAME"));
431 snprintf(trans_font_type_name, 256, "%s", font_type_name);
433 char * default_font_name = NULL;
434 default_font_name = _get_default_font();
435 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
436 if(!safeStrCmp(default_font_name,font_type_name)){
437 snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
439 ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
442 SETTING_TRACE_DEBUG("current font : %s, trans font name: %s", font_type_name, trans_font_type_name);
444 ad->font_type = setting_create_Gendial_exp_parent_field(ad->genlist,
445 &(ad->itc_2text_3_parent),
447 SWALLOW_Type_INVALID,
448 SETTING_FONT_TYPE_STR,
449 trans_font_type_name,
450 SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_TOP);
452 ad->font_type->userdata = ad;
454 SETTING_TRACE_ERROR("ad->font_type is NULL");
456 G_FREE(ad->font_name);
457 ad->font_name = g_strdup(font_type_name);
458 G_FREE(font_type_name);
461 if (ad->viewmode == FONT_SIZE_AND_FONT_SEL_UG || ad->viewmode == FONT_SIZE_VIEW_APPCONTROL) // font size only
465 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
467 SETTING_TRACE_ERROR("get vconf failed");
470 ad->font_size = setting_create_Gendial_exp_parent_field(ad->genlist, &(ad->itc_2text_3_parent),
472 NULL, SWALLOW_Type_INVALID,
473 SETTING_FONT_SIZE_STR,
474 __get_font_size_str(ad->ret_font_size),
475 SETTING_GROUP_STYLE_CENTER, SETTING_GROUP_STYLE_BOTTOM);
477 ad->font_size->userdata = ad;
478 ad->font_size->group_style = SETTING_GROUP_STYLE_BOTTOM;
480 SETTING_TRACE_ERROR("ad->font_size is NULL");
484 ADD_GL_HELP(ad->genlist,SETTING_FONT_SIZE_DESC);
488 if(ad->font_expand_state == FONT_EXPAND_STATE_FONT_TYPE)
490 if(ad->font_type && ad->font_type->item){
491 elm_genlist_item_expanded_set(ad->font_type->item, TRUE);
493 } else if (ad->font_expand_state == FONT_EXPAND_STATE_FONT_SIZE){
494 if(ad->font_size && ad->font_size->item){
495 elm_genlist_item_expanded_set(ad->font_size->item, TRUE);
500 static void __setting_progress_popup_cb(void *data, Evas_Object *obj, void *event_info)
502 SettingFontUG *ad = (SettingFontUG *) data;
503 SETTING_TRACE("send ug_destroy_me by callback");
504 if (ad->main_popup) {
505 evas_object_del(ad->main_popup);
506 ad->main_popup = NULL;
508 ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
509 /*fix PLM issue P130606-3323, per tester's request, need to keep in current font veiw after change the font type*/
510 //ug_destroy_me(ad->ug);
511 if(ad->font_type && ad->font_type->item) {
512 elm_genlist_item_expanded_set(ad->font_type->item, FALSE);
516 static Eina_Bool __font_type_change_call(void *data)
519 SettingFontUG *ad = (SettingFontUG *) data;
522 system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, ad->font_name);
525 ad->font_type_timer = NULL;
526 return ECORE_CALLBACK_CANCEL;
530 static void __setting_font_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
533 setting_retm_if(data == NULL, "Data parameter is NULL");
534 SettingFontUG *ad = (SettingFontUG *) data;
536 switch (btn_type(obj)) {
537 case POPUP_RESPONSE_OK:
539 /* extract font name from tag mixed string */
540 SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
541 SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
543 /* set font name to font main and font config */
544 /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
545 /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
546 ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
547 elm_object_item_data_set(ad->font_type->item, ad->font_type);
548 elm_genlist_item_update(ad->font_type->item);
550 char *font_name = g_strdup(ad->subitem->sub_desc);
552 ad->prev_font = ad->subitem->chk_status;
553 G_FREE(ad->font_name);
554 ad->font_name = (char *)g_strdup(_(font_name));
555 SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
556 elm_radio_value_set(ad->subitem->rgd, ad->subitem->chk_status);
557 /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
558 if(ad->font_type_list != NULL ){
559 Setting_GenGroupItem_Data *font_type_subitem = NULL;
560 EINA_LIST_FREE(ad->font_type_list, font_type_subitem);
561 ad->font_type_list = NULL;
564 //vconf_set_str(VCONFKEY_SETAPPL_SETTING_FONT_NAME, font_name);
565 system_settings_set_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_name);
570 //Due to long time taken by font Setting, add the block code when font is Setting.
571 if (ad->main_popup) {
572 evas_object_del(ad->main_popup);
573 ad->main_popup = NULL;
577 ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
579 NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE); // 3 seconds to wait in maximum
581 // ecore timer for change actual font
582 ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
585 case POPUP_RESPONSE_CANCEL:
587 elm_radio_value_set(ad->subitem->rgd, ad->prev_font);
588 if (ad->main_popup) {
589 evas_object_del(ad->main_popup);
590 ad->main_popup = NULL;
592 ad->font_change_status = SELECTED_FONT_CHANGE_DONE;
602 static void __setting_font_main_popup(void *data)
605 setting_retm_if(data == NULL, "Data parameter is NULL");
606 SettingFontUG *ad = (SettingFontUG *) data;
608 char temp[FONT_BUF_SIZE] = {0,};
609 format_font_name_by_id(ad->subitem->sub_desc,ad->subitem->keyStr2, temp, FONT_BUF_SIZE);
610 char popup_desc[SETTING_STR_SLP_LEN + 1] = {0,};
611 snprintf(popup_desc, SETTING_STR_SLP_LEN, _(SETTING_FONT_POPUP_DESC), temp);
613 ad->main_popup = setting_create_popup_with_btn(ad, ad->win_get, NULL,
615 __setting_font_main_popup_cb, 0,
616 2, _("IDS_COM_SK_YES"),_("IDS_COM_SK_NO"));
622 * [UI][expandable list][event handler:selection][font change]
624 void __setting_font_main_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
628 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
629 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
630 elm_genlist_item_selected_set(subitem, 0);
631 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
632 ret_if(NULL == data_subItem);
634 SettingFontUG *ad = (SettingFontUG *) data;
637 /* if not change, return */
638 if (ad->prev_font == data_subItem->chk_status) {
639 SETTING_TRACE("NOT CHANGED ");
642 if(ad->font_change_status == SELECTED_FONT_CHANGE_IN_PROCESS){
645 ad->font_change_status = SELECTED_FONT_CHANGE_IN_PROCESS;
646 ad->subitem = data_subItem;
647 /* Fix PLM P131016-04680
648 when user check the option, make sure the radio button is checked for prev_font font item
649 the radio of new font item will be checked when user seleck "ok" on popup*/
650 elm_radio_value_set(ad->subitem->rgd, data_subItem->chk_status);
652 /* extract font name from tag mixed string */
653 SETTING_TRACE("??? --> popup - get FONT : %s ", ad->subitem->keyStr);
654 SETTING_TRACE("sub_desc --> popup - get FONT : %s ", ad->subitem->sub_desc);
656 /* set font name to font main and font config */
657 /*for mincho font type, need to display "Mincho",but need to update the real font with "UDMincho"*/
658 /*keyStr is used to store the string "Mincho", and sub_desc is used to store "UDMDu4"*/
659 ad->font_type->sub_desc = (char *)g_strdup(ad->subitem->keyStr);
660 elm_object_item_data_set(ad->font_type->item, ad->font_type);
661 elm_genlist_item_update(ad->font_type->item);
663 char *font_name = g_strdup(ad->subitem->sub_desc);
665 ad->prev_font = ad->subitem->chk_status;
666 G_FREE(ad->font_name);
667 ad->font_name = (char *)g_strdup(_(font_name));
668 SETTING_TRACE("ad->subitem->keyStr2 = %s", font_name);
670 /*when the expandlist item is NOT expanded, the subitem object is not existed,so need to clear the list*/
671 if(ad->font_type_list != NULL ){
672 eina_list_free(ad->font_type_list);
673 ad->font_type_list = NULL;
677 //Due to long time taken by font Setting, add the block code when font is Setting.
678 if (ad->main_popup) {
679 evas_object_del(ad->main_popup);
680 ad->main_popup = NULL;
682 ad->main_popup = setting_create_popup_with_progressbar(ad, ad->win_get,
684 NULL, KeyStr_Loading, __setting_progress_popup_cb, 3/*0*/, TRUE, TRUE); // 3 seconds to wait in maximum
686 // ecore timer for change actual font
687 ad->font_type_timer = ecore_timer_add(1, (Ecore_Task_Cb)__font_type_change_call, ad);
691 * @brief expandable list handler for font-type
697 static void __setting_font_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
699 ret_if(NULL == data || NULL == event_info);
701 SettingFontUG *ad = (SettingFontUG *) data;
702 Elm_Object_Item *parentItem = event_info; /* parent item */
703 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
704 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
706 Evas_Object *rgd = NULL;
708 int matched_font = -1;
709 G_FREE(ad->font_name);
711 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &(ad->font_name));
712 if(ret != SYSTEM_SETTINGS_ERROR_NONE){
713 SETTING_TRACE_ERROR("Failed to call system_settings_get_value_string with error cdoe %d",ret);
714 ad->font_name = _get_default_font();
716 if (data_parentItem == ad->font_type) {
717 rgd = elm_radio_add(scroller);
718 elm_radio_value_set(rgd, -1);
720 char * default_font_name = NULL;
721 default_font_name = _get_default_font();
722 if(NULL != default_font_name){
723 //char font_name_dispaly[FONT_BUF_SIZE] = {0,};
724 SETTING_TRACE_DEBUG("default_font_name:%s",default_font_name);
725 //format_default_font(SETTING_DEFAULT_FONT_TYPE, font_name_dispaly,FONT_BUF_SIZE, default_font_name);
726 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,sizeof(Setting_GenGroupItem_Data));
727 setting_retm_if(!item_data, "calloc failed");
728 item_data->keyStr2 = (char *)g_strdup(SETTING_DEFAULT_FONT_TYPE);//for display
729 item_data->keyStr = (char *)g_strdup(_(SETTING_DEFAULT_FONT_TYPE));//for tts reading
730 item_data->swallow_type = SWALLOW_Type_1RADIO;
731 item_data->chk_status = i;
732 item_data->rgd = rgd;
733 item_data->chk_change_cb = NULL;
734 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
735 item_data->sub_desc = strdup(default_font_name); //the real font type value
736 item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2), item_data, parentItem, ELM_GENLIST_ITEM_NONE, __setting_font_main_sub_list_sel_cb, ad);
739 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
740 item_data->userdata = ad;
741 if (!safeStrCmp(ad->font_name, (const char*)item_data->sub_desc)) {
746 ad->font_type_list = eina_list_append(ad->font_type_list,item_data);
749 Eina_List *font_list = NULL;
751 FcChar8 *font_data = NULL;
752 font_list = __setting_font_main_available_list_get();
753 EINA_LIST_FOREACH(font_list, l, font_data)
755 if(safeStrCmp(default_font_name, (char *)font_data) != 0){
756 char keyStr[FONT_BUF_SIZE] = {0,};
757 get_font_name_str((char*)font_data, keyStr, FONT_BUF_SIZE);
758 char temp[FONT_BUF_SIZE] = {0,};
759 //int ret = get_font_name_tag(font_data, temp, FONT_BUF_SIZE);
760 get_font_name_id((char*)font_data, temp, FONT_BUF_SIZE);
761 SETTING_TRACE_DEBUG("font data : %s", (char*)font_data);
762 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,sizeof(Setting_GenGroupItem_Data));
763 setting_retm_if(!item_data,"calloc failed");
764 item_data->keyStr2 = (char *)g_strdup(temp);//for display
765 item_data->keyStr = (char *)g_strdup(keyStr);//for tts reading
766 item_data->swallow_type = SWALLOW_Type_1RADIO;
767 item_data->chk_status = i;
768 item_data->rgd = rgd;
769 item_data->chk_change_cb = NULL;
770 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
771 item_data->sub_desc = strdup((char*)font_data);
772 item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2), item_data, parentItem, ELM_GENLIST_ITEM_NONE, __setting_font_main_sub_list_sel_cb, ad);
775 item_data->userdata = ad;
776 //if (!safeStrCmp(ad->font_name, (const char*)font_data)) {
777 if (!safeStrCmp(ad->font_name, (const char*)item_data->sub_desc)) {
782 ad->font_type_list = eina_list_append(ad->font_type_list,item_data);
786 /* update check status */
787 if (matched_font != -1) {
788 elm_radio_value_set(rgd, matched_font);
791 ad->prev_font = matched_font;
792 G_FREE(default_font_name);
793 }else if (data_parentItem == ad->font_size) {
794 // [UI] create the font list
795 ad->size_rdg = elm_radio_add(scroller);
796 elm_radio_state_value_set(ad->size_rdg, -1);
800 while(font_size_table[idx].key_font_name) {
801 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) calloc(1,sizeof(Setting_GenGroupItem_Data));
802 setting_retm_if(!item_data, "calloc failed");
803 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
804 item_data->keyStr = (char *)g_strdup(_(font_size_table[idx].key_font_name));//for tts feature;
805 item_data->swallow_type = SWALLOW_Type_1RADIO_1LABLE;
806 item_data->chk_status = font_size_table[idx].font_size;
807 item_data->chk_change_cb = NULL;
808 item_data->rgd = ad->size_rdg;
809 item_data->userdata = ad;
810 if(idx == sizeof(font_size_table)/sizeof(font_size_table[0])-2){
811 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
813 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
816 item_data->item = elm_genlist_item_append(scroller, &(ad->itc_1text_1icon_2_font_size), item_data, parentItem,
817 ELM_GENLIST_ITEM_NONE, setting_font_font_size_list_mouse_up_cb,ad->size_rdg);
821 setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
824 static void __setting_font_main_vconf_change_cb(keynode_t *key, void *data)
827 setting_retm_if(NULL == key, "key is NULL");
828 setting_retm_if(NULL == data, "data is NULL");
829 SettingFontUG *ad = (SettingFontUG *)data;
831 char *vconf_name = vconf_keynode_get_name(key);
833 if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)) {
836 char *font_type_name = NULL;
837 int ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_type_name);
839 SETTING_TRACE("system-setting call failed with error code %d", ret);
841 SETTING_TRACE("---------------- system-setting call : (%s) ", font_type_name);
842 char * default_font_name = NULL;
843 default_font_name = _get_default_font();
844 char trans_font_type_name[FONT_BUF_SIZE] = {0,};
845 if(!safeStrCmp(default_font_name,font_type_name)){
846 snprintf(trans_font_type_name, FONT_BUF_SIZE, "%s", SETTING_DEFAULT_FONT_TYPE);
848 ret = get_font_name_id(font_type_name, trans_font_type_name, FONT_BUF_SIZE);
852 G_FREE(ad->font_type->sub_desc);
853 ad->font_type->sub_desc = (char *)g_strdup(trans_font_type_name);
854 elm_object_item_data_set(ad->font_type->item, ad->font_type);
855 elm_genlist_item_update(ad->font_type->item);
856 SETTING_TRACE("ad->font_type->sub_desc:%s",trans_font_type_name);
858 if(elm_genlist_item_expanded_get(ad->font_type->item)){
860 Setting_GenGroupItem_Data *font_type_subitem;
861 EINA_LIST_FOREACH(ad->font_type_list, l, font_type_subitem) {
862 if (font_type_subitem && !safeStrCmp(font_type_subitem->sub_desc,font_type_name))
865 if(font_type_subitem&& font_type_subitem->rgd){
866 elm_radio_value_set(font_type_subitem->rgd, font_type_subitem->chk_status);
867 if(ad->font_change_status != SELECTED_FONT_CHANGE_IN_PROCESS ){
868 ad->subitem = font_type_subitem;
877 }else if(!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)){
880 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &ad->ret_font_size, &err);
882 SETTING_TRACE_ERROR("get vconf failed");
885 G_FREE(ad->font_size->sub_desc);
886 ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(ad->ret_font_size));
887 elm_object_item_data_set(ad->font_size->item, ad->font_size);
888 elm_genlist_item_update(ad->font_size->item);
890 if(elm_genlist_item_expanded_get(ad->font_size->item)){
892 setting_update_chk_status(ad->size_rdg, INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE);
898 SETTING_TRACE_ERROR("vconf_name is error");
904 /* ***************************************************
908 ***************************************************/
909 static int setting_font_main_create(void *cb)
913 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
915 SettingFontUG *ad = (SettingFontUG *) cb;
916 setting_create_Gendial_itc("1line", &(ad->itc_1text_1icon_2));
917 ad->itc_1text_1icon_2.func.text_get = _item_text_keystr2_get;
919 retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
920 "win_main_layout is NULL");
921 ad->font_change_status = SELECTED_FONT_CHANGE_NONE;
923 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
926 _("IDS_COM_BODY_BACK"),
928 (setting_call_back_func)__setting_font_main_click_softkey_back_cb,
930 ad, &ad->genlist, &ad->navibar);
931 ad->navi_it_font = elm_naviframe_top_item_get(ad->navibar);
932 elm_genlist_mode_set(ad->genlist, ELM_LIST_COMPRESS);
933 evas_object_smart_callback_add(ad->genlist, "realized", __gl_realized_cb, ad);
935 setting_enable_expandable_genlist(ad->genlist, ad, __setting_font_main_exp_cb, NULL);
936 int ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
937 __setting_font_main_vconf_change_cb, ad);
939 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
941 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
942 __setting_font_main_vconf_change_cb, ad);
944 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
946 __setting_font_main_genlist_item_create(ad);
950 setting_view_font_main.is_create = 1;
951 return SETTING_RETURN_SUCCESS;
954 static int setting_font_main_destroy(void *cb)
958 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
960 SettingFontUG *ad = (SettingFontUG *) cb;
961 int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
962 __setting_font_main_vconf_change_cb);
964 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
966 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
967 __setting_font_main_vconf_change_cb);
969 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
973 G_FREE(ad->font_name);
974 ad->font_name = NULL;
977 if (ad->main_popup) {
978 evas_object_del(ad->main_popup);
979 ad->main_popup = NULL;
982 if (ad->ly_main != NULL) {
983 evas_object_del(ad->ly_main);
986 if (ad->navi_it_font!= NULL){
987 ad->navi_it_font = NULL;
989 if(ad->font_type_list != NULL ){
990 eina_list_free(ad->font_type_list);
991 ad->font_type_list = NULL;
994 setting_view_font_main.is_create = 0;
996 return SETTING_RETURN_SUCCESS;
999 static int setting_font_main_update(void *cb)
1001 SETTING_TRACE_BEGIN;
1003 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1005 SettingFontUG *ad = (SettingFontUG *) cb;
1007 if (ad->ly_main != NULL) {
1008 evas_object_show(ad->ly_main);
1012 int ret = setting_get_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, &value, &err);
1014 SETTING_TRACE_ERROR("get vconf failed");
1017 if (ad->font_size) {
1018 G_FREE(ad->font_size->sub_desc);
1019 ad->font_size->sub_desc = (char *)g_strdup(__get_font_size_str(value));
1020 elm_object_item_data_set(ad->font_size->item, ad->font_size);
1021 elm_genlist_item_update(ad->font_size->item);
1023 // setting_font_update_vconf_key(ad, SETTING_VCONF_INT_TYPE, INT_SLP_SETTING_LCD_TIMEOUT_NORMAL);
1026 elm_genlist_item_update(ad->font_type->item);
1028 return SETTING_RETURN_SUCCESS;
1031 static int setting_font_main_cleanup(void *cb)
1034 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1036 SettingFontUG *ad = (SettingFontUG *) cb;
1038 if (ad->ly_main != NULL) {
1039 evas_object_hide(ad->ly_main);
1042 return SETTING_RETURN_SUCCESS;
1045 /* ***************************************************
1049 ***************************************************/
1051 static Eina_Bool __setting_font_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
1053 SETTING_TRACE_BEGIN;
1055 retv_if(data == NULL, EINA_FALSE);
1057 SettingFontUG *ad = (SettingFontUG *) data;
1059 if (ad->viewmode == FONT_SEL_VIEW_APPCONTROL)
1062 if (app_control_create(&svc)) {
1066 app_control_add_extra_data(svc, "category", "FontType");
1067 app_control_add_extra_data(svc, "FontType", ad->font_name);
1069 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontType");
1070 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontType", ad->font_name);
1073 ug_send_result(ad->ug, svc);
1074 app_control_destroy(svc);
1076 else if (ad->viewmode == FONT_SIZE_VIEW_APPCONTROL)
1081 int ret = setting_set_int_slp_key(INT_SLP_SETTING_ACCESSIBILITY_FONT_SIZE, ad->ret_font_size, &err);
1082 setting_retvm_if(ret == -1,EINA_FALSE, "Failed to set vconf");
1084 if (app_control_create(&svc)) {
1088 char font_size[SETTING_FONT_MAX_LEN] = {0,};
1089 snprintf(font_size, SETTING_FONT_MAX_LEN, "%d", ad->ret_font_size);
1091 app_control_add_extra_data(svc, "category", "FontSize");
1092 app_control_add_extra_data(svc, "FontSize", font_size);
1094 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","category", "FontSize");
1095 SETTING_TRACE(" SERVICE_ADD_EXTRA : %s %s","FontSize", font_size);
1098 ug_send_result(ad->ug, svc);
1099 app_control_destroy(svc);
1101 /* Send destroy request */
1102 ug_destroy_me(ad->ug);