Enlightenment CVS committal
Author : devilhorns
Project : e17
Module : apps/e
Dir : e17/apps/e/src/bin
Modified Files:
e_int_config_intl.c
Log Message:
Some work on intl config dialog.
-Sorted language & region lists.
-Better ilist sizes.
-Resizable Basic/Advanced dialogs.
-General code formatting/cleanup.
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_intl.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_int_config_intl.c 26 Sep 2006 16:00:13 -0000 1.6
+++ e_int_config_intl.c 27 Sep 2006 10:45:44 -0000 1.7
@@ -7,35 +7,36 @@
typedef struct _E_Intl_Langauge_Node E_Intl_Language_Node;
typedef struct _E_Intl_Region_Node E_Intl_Region_Node;
-static void *_create_data(E_Config_Dialog *cfd);
-static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
-static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data
*cfdata);
-static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata);
-static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data
*cfdata);
-static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata);
-
-static void _ilist_basic_language_cb_change(void *data, Evas_Object *obj);
-
-static void _ilist_language_cb_change(void *data, Evas_Object *obj);
-static void _ilist_region_cb_change(void *data, Evas_Object *obj);
-static void _ilist_codeset_cb_change(void *data, Evas_Object *obj);
-static void _ilist_modifier_cb_change(void *data, Evas_Object *obj);
+static void *_create_data (E_Config_Dialog *cfd);
+static void _free_data (E_Config_Dialog *cfd,
E_Config_Dialog_Data *cfdata);
+static int _advanced_apply_data (E_Config_Dialog *cfd,
E_Config_Dialog_Data *cfdata);
+static Evas_Object *_advanced_create_widgets (E_Config_Dialog *cfd, Evas
*evas, E_Config_Dialog_Data *cfdata);
+static int _basic_apply_data (E_Config_Dialog *cfd,
E_Config_Dialog_Data *cfdata);
+static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas
*evas, E_Config_Dialog_Data *cfdata);
+
+static void _ilist_basic_language_cb_change (void *data, Evas_Object *obj);
+static void _ilist_language_cb_change (void *data, Evas_Object *obj);
+static void _ilist_region_cb_change (void *data, Evas_Object *obj);
+static void _ilist_codeset_cb_change (void *data, Evas_Object *obj);
+static void _ilist_modifier_cb_change (void *data, Evas_Object *obj);
+static int _lang_list_sort (void *data1, void *data2);
+static void _lang_list_load (void *data);
+static int _region_list_sort (void *data1, void *data2);
+static void _region_list_load (void *data);
/* Fill the clear lists, fill with language, select */
/* Update lanague */
-static void _cfdata_language_go(const char *lang, const char *region, const
char *codeset, const char *modifier, E_Config_Dialog_Data *cfdata);
-static Evas_Bool _lang_hash_cb(Evas_Hash *hash, const char *key, void *data,
void *fdata);
-static Evas_Bool _region_hash_cb(Evas_Hash *hash, const char *key, void *data,
void *fdata);
-
-static Evas_Bool _language_hash_free_cb(Evas_Hash *hash, const char *key, void
*data, void *fdata);
-static Evas_Bool _region_hash_free_cb(Evas_Hash *hash, const char *key, void
*data, void *fdata);
-
-static void _intl_current_locale_setup(E_Config_Dialog_Data *cfdata);
+static void _cfdata_language_go (const char *lang, const char
*region, const char *codeset, const char *modifier, E_Config_Dialog_Data
*cfdata);
+static Evas_Bool _lang_hash_cb (Evas_Hash *hash, const char *key,
void *data, void *fdata);
+static Evas_Bool _region_hash_cb (Evas_Hash *hash, const char *key,
void *data, void *fdata);
+static Evas_Bool _language_hash_free_cb (Evas_Hash *hash, const char *key,
void *data, void *fdata);
+static Evas_Bool _region_hash_free_cb (Evas_Hash *hash, const char *key,
void *data, void *fdata);
+static void _intl_current_locale_setup (E_Config_Dialog_Data *cfdata);
struct _E_Intl_Pair
{
- const char *locale_key;
- const char *locale_translation;
+ const char *locale_key;
+ const char *locale_translation;
};
/* We need to store a map of languages -> Countries -> Extra
@@ -79,7 +80,9 @@
int lang_dirty;
Evas_Hash *locale_hash;
-
+ Evas_List *lang_list;
+ Evas_List *region_list;
+
struct
{
Evas_Object *blang_list;
@@ -95,29 +98,29 @@
};
const E_Intl_Pair basic_language_predefined_pairs[ ] = {
- {"en_US.UTF-8", N_("English")},
- {"ja_JP.UTF-8", N_("Japanese")},
- {"fr_FR.UTF-8", N_("French")},
- {"es_AR.UTF-8", N_("Spanish")},
- {"pt_BR.UTF-8", N_("Portuguese")},
- {"fi_FI.UTF-8", N_("Finnish")},
- {"ru_RU.UTF-8", N_("Russian")},
- {"bg_BG.UTF-8", N_("Bulgarian")},
- {"de_DE.UTF-8", N_("German")},
- {"pl_PL.UTF-8", N_("Polish")},
- {"zh_CN.UTF-8", N_("Simplified Chinese")},
- {"zh_TW.UTF-8", N_("Traditional Chinese")},
- {"hu_HU.UTF-8", N_("Hungarian")},
- {"sl_SI.UTF-8", N_("Slovenian")},
- {"it_IT.UTF-8", N_("Italian")},
- {"cs_CZ.UTF-8", N_("Czech")},
- {"da_DK.UTF-8", N_("Danish")},
- {"sk_SK.UTF-8", N_("Slovak")},
- {"sv_SE.UTF-8", N_("Swedish")},
- {"nb_NO.UTF-8", N_("Norwegian Bokmål")},
- {"nl_NL.UTF-8", N_("Dutch")},
- {"ko_KR.UTF-8", N_("Korean")},
- { NULL, NULL }
+ {"bg_BG.UTF-8", N_("Bulgarian")},
+ {"zh_CN.UTF-8", N_("Chinese (Simplified)")},
+ {"zh_TW.UTF-8", N_("Chinese (Traditional)")},
+ {"cs_CZ.UTF-8", N_("Czech")},
+ {"da_DK.UTF-8", N_("Danish")},
+ {"nl_NL.UTF-8", N_("Dutch")},
+ {"en_US.UTF-8", N_("English")},
+ {"fi_FI.UTF-8", N_("Finnish")},
+ {"fr_FR.UTF-8", N_("French")},
+ {"de_DE.UTF-8", N_("German")},
+ {"hu_HU.UTF-8", N_("Hungarian")},
+ {"it_IT.UTF-8", N_("Italian")},
+ {"ja_JP.UTF-8", N_("Japanese")},
+ {"ko_KR.UTF-8", N_("Korean")},
+ {"nb_NO.UTF-8", N_("Norwegian Bokmål")},
+ {"pl_PL.UTF-8", N_("Polish")},
+ {"pt_BR.UTF-8", N_("Portuguese")},
+ {"ru_RU.UTF-8", N_("Russian")},
+ {"sk_SK.UTF-8", N_("Slovak")},
+ {"sl_SI.UTF-8", N_("Slovenian")},
+ {"es_AR.UTF-8", N_("Spanish")},
+ {"sv_SE.UTF-8", N_("Swedish")},
+ { NULL, NULL }
};
const E_Intl_Pair language_predefined_pairs[ ] = {
@@ -550,7 +553,7 @@
if ( output )
{
char line[32];
- while ( fscanf(output, "%[^\n]\n", line) == 1)
+ while (fscanf(output, "%[^\n]\n", line) == 1)
{
char *language;
@@ -710,6 +713,12 @@
evas_hash_foreach(cfdata->locale_hash, _language_hash_free_cb, NULL);
evas_hash_free(cfdata->locale_hash);
+
+ cfdata->lang_list = evas_list_free(cfdata->lang_list);
+ cfdata->lang_list = NULL;
+
+ cfdata->region_list = evas_list_free(cfdata->region_list);
+ cfdata->region_list = NULL;
free(cfdata);
}
@@ -788,7 +797,7 @@
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
*cfdata)
{
- Evas_Object *o, *of, *ob;
+ Evas_Object *o, *of, *ob, *ot;
const char *cur_sig_loc;
int i;
@@ -800,6 +809,7 @@
/* Language List */
ob = e_widget_ilist_add(evas, 16, 16, &(cfdata->cur_blang));
+ e_widget_min_size_set(ob, 175, 175);
e_widget_on_change_hook_set(ob, _ilist_basic_language_cb_change, cfdata);
cfdata->gui.blang_list = ob;
@@ -809,9 +819,7 @@
E_INTL_LOC_LANG | E_INTL_LOC_REGION);
}
else
- {
- cur_sig_loc = NULL;
- }
+ cur_sig_loc = NULL;
i = 0;
while (basic_language_predefined_pairs[i].locale_key)
@@ -823,36 +831,36 @@
trans = _(basic_language_predefined_pairs[i].locale_translation);
e_widget_ilist_append(cfdata->gui.blang_list, NULL, trans, NULL, NULL,
key);
if (cur_sig_loc && !strncmp(key, cur_sig_loc, strlen(cur_sig_loc)))
- {
- e_widget_ilist_selected_set(cfdata->gui.blang_list, i);
- }
+ e_widget_ilist_selected_set(cfdata->gui.blang_list, i);
i++;
}
e_widget_ilist_go(ob);
- e_widget_min_size_set(ob, 100, 100);
e_widget_frametable_object_append(of, ob, 0, 0, 2, 6, 1, 1, 1, 1);
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* Locale selector */
- of = e_widget_frametable_add(evas, _("Locale Selected"), 0);
+ ot = e_widget_table_add(evas, 0);
+ of = e_widget_framelist_add(evas, _("Locale Selected"), 0);
ob = e_widget_label_add(evas, _("Locale"));
- e_widget_frametable_object_append( of,
- ob,
- 0, 0, 1, 1,
- 1, 1, 1, 1);
+ e_widget_table_object_append(ot, ob,
+ 0, 0, 1, 1,
+ 1, 1, 1, 1);
cfdata->gui.locale_entry = e_widget_entry_add(evas,
&(cfdata->cur_language));
e_widget_disabled_set(cfdata->gui.locale_entry, 1);
e_widget_min_size_set(cfdata->gui.locale_entry, 100, 25);
- e_widget_frametable_object_append(of, cfdata->gui.locale_entry,
- 0, 1, 1, 1,
- 1, 1, 1, 1);
-
- e_widget_list_object_append(o, of, 1, 1, 0.5);
+ e_widget_table_object_append(ot, cfdata->gui.locale_entry,
+ 0, 1, 1, 1,
+ 1, 1, 1, 1);
+ e_widget_framelist_object_append(of, ot);
+ e_widget_framelist_content_align_set(of, 0.0, 0.0);
+ e_widget_list_object_append(o, of, 1, 1, 0.5);
+
+ e_dialog_resizable_set(cfd->dia, 1);
return o;
}
@@ -860,7 +868,7 @@
static Evas_Object *
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
E_Config_Dialog_Data *cfdata)
{
- Evas_Object *o, *of, *ob;
+ Evas_Object *o, *of, *ob, *ot;
cfdata->evas = evas;
@@ -875,9 +883,16 @@
cfdata->gui.lang_list = ob;
evas_hash_foreach(cfdata->locale_hash, _lang_hash_cb, cfdata);
-
+ if (cfdata->lang_list)
+ {
+ cfdata->lang_list = evas_list_sort(cfdata->lang_list,
+ evas_list_count(cfdata->lang_list),
+ _lang_list_sort);
+ _lang_list_load(cfdata);
+ }
+
e_widget_ilist_go(ob);
- e_widget_min_size_set(ob, 100, 100);
+ e_widget_min_size_set(ob, 140, 200);
e_widget_frametable_object_append(of, ob, 0, 0, 1, 4, 1, 1, 1, 1);
/* Region List */
@@ -907,21 +922,22 @@
e_widget_list_object_append(o, of, 1, 1, 0.5);
/* Locale selector */
- of = e_widget_frametable_add(evas, _("Locale Selected"), 0);
+ ot = e_widget_table_add(evas, 0);
+ of = e_widget_framelist_add(evas, _("Locale Selected"), 0);
ob = e_widget_label_add(evas, _("Locale"));
- e_widget_frametable_object_append( of,
- ob,
- 0, 0, 1, 1,
- 1, 1, 1, 1);
+ e_widget_table_object_append(ot, ob,
+ 0, 0, 1, 1,
+ 1, 1, 1, 1);
cfdata->gui.locale_entry = e_widget_entry_add(evas,
&(cfdata->cur_language));
e_widget_disabled_set(cfdata->gui.locale_entry, 1);
e_widget_min_size_set(cfdata->gui.locale_entry, 100, 25);
- e_widget_frametable_object_append(of, cfdata->gui.locale_entry,
- 0, 1, 1, 1,
- 1, 1, 1, 1);
-
+ e_widget_table_object_append(ot, cfdata->gui.locale_entry,
+ 0, 1, 1, 1,
+ 1, 1, 1, 1);
+ e_widget_framelist_object_append(of, ot);
+ e_widget_framelist_content_align_set(of, 0.0, 0.0);
e_widget_list_object_append(o, of, 1, 1, 0.5);
_cfdata_language_go(cfdata->cur_lang, cfdata->cur_reg, cfdata->cur_cs,
cfdata->cur_mod, cfdata);
@@ -931,6 +947,7 @@
e_widget_on_change_hook_set(cfdata->gui.cs_list, _ilist_codeset_cb_change,
cfdata);
e_widget_on_change_hook_set(cfdata->gui.mod_list,
_ilist_modifier_cb_change, cfdata);
+ e_dialog_resizable_set(cfd->dia, 1);
return o;
}
@@ -983,33 +1000,26 @@
cfdata = data;
if (cfdata->cur_mod)
- {
- sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang,
cfdata->cur_reg, cfdata->cur_cs, cfdata->cur_mod);
- }
+ sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang, cfdata->cur_reg,
cfdata->cur_cs, cfdata->cur_mod);
else
- {
- sprintf(locale, "%s_%s.%s", cfdata->cur_lang, cfdata->cur_reg,
cfdata->cur_cs);
- }
- e_widget_entry_text_set(cfdata->gui.locale_entry, locale);
+ sprintf(locale, "%s_%s.%s", cfdata->cur_lang, cfdata->cur_reg,
cfdata->cur_cs);
+
+ e_widget_entry_text_set(cfdata->gui.locale_entry, locale);
}
static void
_ilist_modifier_cb_change(void *data, Evas_Object *obj)
{
- E_Config_Dialog_Data * cfdata;
- char locale[32];
+ E_Config_Dialog_Data * cfdata;
+ char locale[32];
+
+ cfdata = data;
+ if (cfdata->cur_cs)
+ sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang, cfdata->cur_reg,
cfdata->cur_cs, cfdata->cur_mod);
+ else
+ sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang, cfdata->cur_reg,
cfdata->cur_mod);
- cfdata = data;
- if (cfdata->cur_cs)
- {
- sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang,
cfdata->cur_reg, cfdata->cur_cs, cfdata->cur_mod);
- }
- else
- {
- sprintf(locale, "[EMAIL PROTECTED]", cfdata->cur_lang,
cfdata->cur_reg, cfdata->cur_mod);
- }
- e_widget_entry_text_set(cfdata->gui.locale_entry, locale);
-
+ e_widget_entry_text_set(cfdata->gui.locale_entry, locale);
}
static void
@@ -1048,12 +1058,17 @@
if (lang_update)
{
e_widget_ilist_clear(cfdata->gui.reg_list);
+ cfdata->region_list = evas_list_free(cfdata->region_list);
evas_hash_foreach(lang_node->region_hash, _region_hash_cb,
cfdata);
+ cfdata->region_list = evas_list_sort(cfdata->region_list,
+
evas_list_count(cfdata->region_list),
+ _region_list_sort);
+ _region_list_load(cfdata);
}
if (region && region_update)
{
E_Intl_Region_Node *reg_node;
-
+
reg_node = evas_hash_find(lang_node->region_hash, region);
if (reg_node)
{
@@ -1096,7 +1111,6 @@
}
e_widget_ilist_go(cfdata->gui.reg_list);
}
-
}
static Evas_Bool
@@ -1104,41 +1118,12 @@
{
E_Config_Dialog_Data *cfdata;
E_Intl_Language_Node *lang_node;
- const char *trans;
cfdata = fdata;
lang_node = data;
- if (lang_node->lang_name)
- {
- trans = lang_node->lang_name;
- }
- else
- {
- trans = key;
- }
+ cfdata->lang_list = evas_list_append(cfdata->lang_list, lang_node);
- if (lang_node->lang_available)
- {
- Evas_Object *ic;
-
- ic = edje_object_add(cfdata->evas);
- e_util_edje_icon_set(ic, "enlightenment/e");
- e_widget_ilist_append(cfdata->gui.lang_list, ic, trans, NULL, NULL,
key);
- }
- else
- {
- e_widget_ilist_append(cfdata->gui.lang_list, NULL, trans, NULL, NULL,
key);
- }
-
- if (cfdata->cur_lang && !strcmp(cfdata->cur_lang, key))
- {
- int count;
-
- count = e_widget_ilist_count(cfdata->gui.lang_list);
- e_widget_ilist_selected_set(cfdata->gui.lang_list, count - 1);
- }
-
return 1;
}
@@ -1147,30 +1132,12 @@
{
E_Config_Dialog_Data *cfdata;
E_Intl_Region_Node *reg_node;
- const char *trans;
-
+
cfdata = fdata;
reg_node = data;
- if (reg_node->region_name)
- {
- trans = reg_node->region_name;
- }
- else
- {
- trans = key;
- }
-
- e_widget_ilist_append(cfdata->gui.reg_list, NULL, trans, NULL, NULL, key);
+ cfdata->region_list = evas_list_append(cfdata->region_list, reg_node);
- if (cfdata->cur_reg && !strcmp(cfdata->cur_reg, key))
- {
- int count;
-
- count = e_widget_ilist_count(cfdata->gui.reg_list);
- e_widget_ilist_selected_set(cfdata->gui.reg_list, count - 1);
- }
-
return 1;
}
@@ -1224,4 +1191,127 @@
E_FREE(modifier);
cfdata->lang_dirty = 1;
+}
+
+static int
+_lang_list_sort(void *data1, void *data2)
+{
+ E_Intl_Language_Node *ln1, *ln2;
+ const char *trans1;
+ const char *trans2;
+
+ if (!data1) return 1;
+ if (!data2) return -1;
+
+ ln1 = data1;
+ ln2 = data2;
+
+ if (!ln1->lang_name) return 1;
+ trans1 = ln1->lang_name;
+
+ if (!ln2->lang_name) return -1;
+ trans2 = ln2->lang_name;
+
+ return (strcmp((const char *)trans1, (const char *)trans2));
+}
+
+static void
+_lang_list_load(void *data)
+{
+ E_Config_Dialog_Data *cfdata;
+ Evas_List *l;
+
+ if (!data) return;
+
+ cfdata = data;
+ if (!cfdata->lang_list) return;
+
+ for (l = cfdata->lang_list; l; l = l->next)
+ {
+ E_Intl_Language_Node *ln;
+ const char *trans;
+
+ ln = l->data;
+ if (!ln) continue;
+ if (ln->lang_name)
+ trans = ln->lang_name;
+ else
+ trans = ln->lang_code;
+
+ if (ln->lang_available)
+ {
+ Evas_Object *ic;
+
+ ic = edje_object_add(cfdata->evas);
+ e_util_edje_icon_set(ic, "enlightenment/e");
+ e_widget_ilist_append(cfdata->gui.lang_list, ic, trans, NULL,
NULL, ln->lang_code);
+ }
+ else
+ e_widget_ilist_append(cfdata->gui.lang_list, NULL, trans, NULL, NULL,
ln->lang_code);
+
+ if (cfdata->cur_lang && !strcmp(cfdata->cur_lang, ln->lang_code))
+ {
+ int count;
+
+ count = e_widget_ilist_count(cfdata->gui.lang_list);
+ e_widget_ilist_selected_set(cfdata->gui.lang_list, count - 1);
+ }
+ }
+}
+
+static int
+_region_list_sort(void *data1, void *data2)
+{
+ E_Intl_Region_Node *rn1, *rn2;
+ const char *trans1;
+ const char *trans2;
+
+ if (!data1) return 1;
+ if (!data2) return -1;
+
+ rn1 = data1;
+ rn2 = data2;
+
+ if (!rn1->region_name) return 1;
+ trans1 = rn1->region_name;
+
+ if (!rn2->region_name) return -1;
+ trans2 = rn2->region_name;
+
+ return (strcmp((const char *)trans1, (const char *)trans2));
+}
+
+static void
+_region_list_load(void *data)
+{
+ E_Config_Dialog_Data *cfdata;
+ Evas_List *l;
+
+ if (!data) return;
+
+ cfdata = data;
+ if (!cfdata->region_list) return;
+
+ for (l = cfdata->region_list; l; l = l->next)
+ {
+ E_Intl_Region_Node *rn;
+ const char *trans;
+
+ rn = l->data;
+ if (!rn) continue;
+ if (rn->region_name)
+ trans = rn->region_name;
+ else
+ trans = rn->region_code;
+
+ e_widget_ilist_append(cfdata->gui.reg_list, NULL, trans, NULL, NULL,
rn->region_code);
+
+ if (cfdata->cur_reg && !strcmp(cfdata->cur_reg, rn->region_code))
+ {
+ int count;
+
+ count = e_widget_ilist_count(cfdata->gui.reg_list);
+ e_widget_ilist_selected_set(cfdata->gui.reg_list, count - 1);
+ }
+ }
}
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs