2007-09-14 09:57:01 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
#include "e.h"
|
|
|
|
#include "e_mod_main.h"
|
|
|
|
|
2008-10-24 23:54:38 -07:00
|
|
|
typedef struct _E_Intl_Pair E_Intl_Pair;
|
|
|
|
|
|
|
|
static int _basic_lang_list_sort(const void *data1, const void *data2);
|
|
|
|
|
|
|
|
struct _E_Intl_Pair
|
|
|
|
{
|
|
|
|
const char *locale_key;
|
2008-10-25 01:53:44 -07:00
|
|
|
const char *locale_icon;
|
2008-10-24 23:54:38 -07:00
|
|
|
const char *locale_translation;
|
|
|
|
};
|
|
|
|
|
|
|
|
const E_Intl_Pair basic_language_predefined_pairs[ ] = {
|
2008-11-01 20:46:16 -07:00
|
|
|
{"bg_BG.UTF-8", "lang-bg_BG.png", "Български"},
|
|
|
|
{"ca_ES.UTF-8", "lang-ca_ES.png", "Català"},
|
|
|
|
{"zh_CN.UTF-8", "lang-zh_CN.png", "Chinese (Simplified)"},
|
|
|
|
{"zh_TW.UTF-8", "lang-zh_TW.png", "Chinese (Traditional)"},
|
|
|
|
{"cs_CZ.UTF-8", "lang-cs_CZ.png", "Čeština"},
|
|
|
|
{"da_DK.UTF-8", "lang-da_DK.png", "Dansk"},
|
|
|
|
{"nl_NL.UTF-8", "lang-nl_NL.png", "Nederlands"},
|
2008-10-25 01:53:44 -07:00
|
|
|
{"en_US.UTF-8", "lang-en_US.png", "English"},
|
2008-11-01 20:46:16 -07:00
|
|
|
{"fi_FI.UTF-8", "lang-fi_FI.png", "Suomi"},
|
2008-11-01 19:54:09 -07:00
|
|
|
{"fr_FR.UTF-8", "lang-fr_FR.png", "Français"},
|
2008-11-01 20:46:16 -07:00
|
|
|
{"de_DE.UTF-8", "lang-de_DE.png", "Deutsch"},
|
|
|
|
{"hu_HU.UTF-8", "lang-hu_HU.png", "Magyar"},
|
2008-10-25 01:53:44 -07:00
|
|
|
{"it_IT.UTF-8", "lang-it_IT.png", "Italiano"},
|
|
|
|
{"ja_JP.UTF-8", "lang-ja_JP.png", "日本語"},
|
|
|
|
{"ko_KR.UTF-8", "lang-ko_KR.png", "한국어"},
|
2008-11-01 19:54:09 -07:00
|
|
|
{"nb_NO.UTF-8", "lang-nb_NO.png", "Norsk Bokmål"},
|
2008-11-01 20:46:16 -07:00
|
|
|
{"pl_PL.UTF-8", "lang-pl_PL.png", "Polski"},
|
|
|
|
{"pt_BR.UTF-8", "lang-pt_BR.png", "Português"},
|
|
|
|
{"ru_RU.UTF-8", "lang-ru_RU.png", "Русский"},
|
2008-10-25 01:53:44 -07:00
|
|
|
{"sk_SK.UTF-8", "lang-sk_SK.png", "Slovenčina"},
|
|
|
|
{"sl_SI.UTF-8", "lang-sl_SI.png", "Slovenščina"},
|
2008-11-01 20:46:16 -07:00
|
|
|
{"es_AR.UTF-8", "lang-es_AR.png", "Español"},
|
|
|
|
{"sv_SE.UTF-8", "lang-sv_SE.png", "Svenska"},
|
2008-10-25 01:53:44 -07:00
|
|
|
{ NULL, NULL, NULL }
|
2008-10-24 23:54:38 -07:00
|
|
|
};
|
|
|
|
|
2007-09-17 05:03:47 -07:00
|
|
|
static char *lang = NULL;
|
2008-10-24 23:54:38 -07:00
|
|
|
static Eina_List *blang_list = NULL;
|
|
|
|
|
|
|
|
static int
|
|
|
|
_basic_lang_list_sort(const void *data1, const void *data2)
|
|
|
|
{
|
|
|
|
E_Intl_Pair *ln1, *ln2;
|
|
|
|
const char *trans1;
|
|
|
|
const char *trans2;
|
|
|
|
|
|
|
|
if (!data1) return 1;
|
|
|
|
if (!data2) return -1;
|
|
|
|
|
|
|
|
ln1 = (E_Intl_Pair *)data1;
|
|
|
|
ln2 = (E_Intl_Pair *)data2;
|
|
|
|
|
|
|
|
if (!ln1->locale_translation) return 1;
|
|
|
|
trans1 = ln1->locale_translation;
|
|
|
|
|
|
|
|
if (!ln2->locale_translation) return -1;
|
|
|
|
trans2 = ln2->locale_translation;
|
|
|
|
|
|
|
|
return (strcmp(trans1, trans2));
|
|
|
|
}
|
2007-09-16 11:32:32 -07:00
|
|
|
|
2007-09-14 09:57:01 -07:00
|
|
|
EAPI int
|
|
|
|
wizard_page_init(E_Wizard_Page *pg)
|
|
|
|
{
|
2008-10-24 23:54:38 -07:00
|
|
|
FILE *output;
|
|
|
|
|
|
|
|
output = popen("locale -a", "r");
|
|
|
|
if (output)
|
|
|
|
{
|
|
|
|
char line[32];
|
|
|
|
|
|
|
|
while (fscanf(output, "%[^\n]\n", line) == 1)
|
|
|
|
{
|
|
|
|
E_Locale_Parts *locale_parts;
|
|
|
|
|
|
|
|
locale_parts = e_intl_locale_parts_get(line);
|
|
|
|
if (locale_parts)
|
|
|
|
{
|
|
|
|
char *basic_language;
|
|
|
|
|
|
|
|
basic_language =
|
|
|
|
e_intl_locale_parts_combine
|
|
|
|
(locale_parts, E_INTL_LOC_LANG | E_INTL_LOC_REGION);
|
|
|
|
if (basic_language)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
while (basic_language_predefined_pairs[i].locale_key)
|
|
|
|
{
|
|
|
|
/* if basic language is supported by E and System*/
|
|
|
|
if (!strncmp
|
|
|
|
(basic_language_predefined_pairs[i].locale_key,
|
|
|
|
basic_language, strlen(basic_language)))
|
|
|
|
{
|
|
|
|
if (!eina_list_data_find
|
|
|
|
(blang_list,
|
|
|
|
&basic_language_predefined_pairs[i]))
|
|
|
|
blang_list = eina_list_append
|
|
|
|
(blang_list,
|
|
|
|
&basic_language_predefined_pairs[i]);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
E_FREE(basic_language);
|
|
|
|
e_intl_locale_parts_free(locale_parts);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* Sort basic languages */
|
|
|
|
blang_list = eina_list_sort(blang_list, eina_list_count(blang_list), _basic_lang_list_sort);
|
|
|
|
pclose(output);
|
|
|
|
}
|
2007-09-14 09:57:01 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
EAPI int
|
|
|
|
wizard_page_shutdown(E_Wizard_Page *pg)
|
|
|
|
{
|
2008-10-24 23:54:38 -07:00
|
|
|
// FIXME: free blang_list
|
2007-09-14 09:57:01 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
EAPI int
|
|
|
|
wizard_page_show(E_Wizard_Page *pg)
|
|
|
|
{
|
2007-09-17 05:03:47 -07:00
|
|
|
Evas_Object *o, *of, *ob;
|
2008-10-24 23:54:38 -07:00
|
|
|
Eina_List *l;
|
|
|
|
int i, sel = -1;
|
|
|
|
|
2007-09-17 05:03:47 -07:00
|
|
|
o = e_widget_list_add(pg->evas, 1, 0);
|
2008-10-24 23:54:38 -07:00
|
|
|
e_wizard_title_set(_("Language"));
|
2008-10-25 01:53:44 -07:00
|
|
|
of = e_widget_framelist_add(pg->evas, _("Select one"), 0);
|
2008-10-24 23:54:38 -07:00
|
|
|
ob = e_widget_ilist_add(pg->evas, 32 * e_scale, 32 * e_scale, &lang);
|
|
|
|
e_widget_min_size_set(ob, 140 * e_scale, 140 * e_scale);
|
|
|
|
|
|
|
|
e_widget_ilist_freeze(ob);
|
|
|
|
|
|
|
|
for (i = 0, l = blang_list; l; l = l->next, i++)
|
|
|
|
{
|
|
|
|
E_Intl_Pair *pair;
|
2008-10-25 01:53:44 -07:00
|
|
|
Evas_Object *ic;
|
2008-10-27 04:35:56 -07:00
|
|
|
char buf[PATH_MAX];
|
|
|
|
const char *dir;
|
2008-10-24 23:54:38 -07:00
|
|
|
|
|
|
|
pair = l->data;
|
2008-10-25 01:53:44 -07:00
|
|
|
dir = e_prefix_data_get();
|
|
|
|
snprintf(buf, sizeof(buf), "%s/data/images/%s", dir, pair->locale_icon);
|
|
|
|
ic = e_util_icon_add(buf, pg->evas);
|
|
|
|
e_widget_ilist_append(ob, ic, _(pair->locale_translation),
|
2008-10-24 23:54:38 -07:00
|
|
|
NULL, NULL, pair->locale_key);
|
|
|
|
if (e_intl_language_get())
|
|
|
|
{
|
|
|
|
if (!strcmp(pair->locale_key, e_intl_language_get())) sel = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
e_widget_ilist_go(ob);
|
|
|
|
e_widget_ilist_thaw(ob);
|
|
|
|
if (sel >= 0) e_widget_ilist_selected_set(ob, sel);
|
|
|
|
|
2007-09-17 05:03:47 -07:00
|
|
|
e_widget_framelist_object_append(of, ob);
|
2008-10-25 08:38:27 -07:00
|
|
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
2007-09-17 05:03:47 -07:00
|
|
|
evas_object_show(ob);
|
|
|
|
evas_object_show(of);
|
|
|
|
e_wizard_page_show(o);
|
|
|
|
pg->data = of;
|
2007-09-14 09:57:01 -07:00
|
|
|
return 1; /* 1 == show ui, and wait for user, 0 == just continue */
|
|
|
|
}
|
|
|
|
EAPI int
|
|
|
|
wizard_page_hide(E_Wizard_Page *pg)
|
|
|
|
{
|
|
|
|
evas_object_del(pg->data);
|
2008-10-24 23:54:38 -07:00
|
|
|
/* special - language inits its stuff the moment it goes away */
|
|
|
|
if (e_config->language) eina_stringshare_del(e_config->language);
|
|
|
|
e_config->language = NULL;
|
|
|
|
if (lang) e_config->language = eina_stringshare_add(lang);
|
|
|
|
e_intl_language_set(e_config->language);
|
|
|
|
e_wizard_labels_update();
|
2007-09-14 09:57:01 -07:00
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
EAPI int
|
|
|
|
wizard_page_apply(E_Wizard_Page *pg)
|
|
|
|
{
|
2008-10-26 02:04:05 -07:00
|
|
|
// do this again as we want it to apply to the new profile
|
|
|
|
if (e_config->language) eina_stringshare_del(e_config->language);
|
|
|
|
e_config->language = NULL;
|
|
|
|
if (lang) e_config->language = eina_stringshare_add(lang);
|
|
|
|
e_intl_language_set(e_config->language);
|
|
|
|
e_wizard_labels_update();
|
2007-09-14 09:57:01 -07:00
|
|
|
return 1;
|
|
|
|
}
|