Enlightenment CVS committal Author : sndev Project : e_modules Module : language
Dir : e_modules/language Modified Files: e_mod_config.c e_mod_keybind.c e_mod_lang.c e_mod_lang.h e_mod_main.c e_mod_main.h language.edc Added Files: README.in Log Message: * config dialog, more or less, is done. =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_config.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_config.c 12 May 2006 11:02:31 -0000 1.2 +++ e_mod_config.c 12 May 2006 22:35:50 -0000 1.3 @@ -4,6 +4,9 @@ #include "e_mod_config.h" #include "config.h" +#define ILIST_ICON_LANG_WIDTH 35 +#define ILIST_ICON_LANG_HEIGHT 35 + #define ILIST_ICON_WIDTH 32 #define ILIST_ICON_HEIGHT 32 @@ -26,10 +29,12 @@ Evas_Object *lang_ilist; Evas_Object *btn_add; Evas_Object *btn_del; + Evas_Object *btn_move_up; + Evas_Object *btn_move_down; Evas_Object *selected_lang_ilist; Evas_Object *kbd_model_ilist; - Evas_Object *kbd_layout_ilist; - Evas_Object *layout_variant_ilist; + //Evas_Object *kbd_layout_ilist; + Evas_Object *kbd_layout_variant_ilist; } gui; }; @@ -49,15 +54,23 @@ /************* private functionality ************************/ static void _lang_update_lang_defined_list(E_Config_Dialog_Data *cfdata); static void _lang_update_selected_lang_list(E_Config_Dialog_Data *cfdata); +static void _lang_update_kbd_model_list(E_Config_Dialog_Data *cfdata); +static void _lang_update_kbd_layout_variant_list(E_Config_Dialog_Data *cfdata); + static void _lang_update_select_button(E_Config_Dialog_Data *cfdata); static void _lang_update_unselect_button(E_Config_Dialog_Data *cfdata); +static void _lang_update_language_moveup_button(E_Config_Dialog_Data *cfdata); +static void _lang_update_language_movedown_button(E_Config_Dialog_Data *cfdata); static void _lang_select_language_cb(void *data, void *data2); static void _lang_unselect_language_cb(void *data, void *data2); +static void _lang_move_language_order_up_cb(void *data, void *data2); +static void _lang_move_language_order_down_cb(void *data, void *data2); + static void _lang_languages_ilist_cb_change(void *data, Evas_Object *obj); static void _lang_selected_languages_ilist_cb_change(void *data, Evas_Object *obj); - -void _lang_update_kbd_model_list(E_Config_Dialog_Data *cfdata); +static void _lang_kbd_model_ilist_cb_change(void *data, Evas_Object *obj); +static void _lang_kbd_layout_variant_ilist_cb_change(void *data, Evas_Object *obj); static void _lang_free_language(Language *lang); /************************************************************/ @@ -83,7 +96,7 @@ { Evas_List *ll; Language *lang, *lang2; - + cfdata->lang_policy = l->conf->lang_policy; cfdata->lang_show_indicator = l->conf->lang_show_indicator; @@ -94,6 +107,7 @@ lang2 = E_NEW(Language, 1); if (!lang2) continue; + lang2->id = lang->id; lang2->lang_name = evas_stringshare_add(lang->lang_name); lang2->lang_shortcut = evas_stringshare_add(lang->lang_shortcut); lang2->lang_flag = !(lang->lang_flag) ? NULL : evas_stringshare_add(lang->lang_flag); @@ -104,6 +118,34 @@ cfdata->selected_languages = evas_list_append(cfdata->selected_languages, lang2); } + if (!cfdata->selected_languages) + { + for (ll = language_def_list; ll; ll = ll->next) + { + Language_Def *ld = ll->data; + + if (!strcmp(ld->kbd_layout, "us")) + { + lang = E_NEW(Language, 1); + if (!lang) + break; + + lang->id = 0; + lang->lang_name = evas_stringshare_add(ld->lang_name); + lang->lang_shortcut = evas_stringshare_add(ld->lang_shortcut); + lang->lang_flag = evas_stringshare_add(ld->lang_flag); + //FIXME: get current model from config. + lang->kbd_model = evas_stringshare_add("compaqik13"); + lang->kbd_layout = evas_stringshare_add(ld->kbd_layout); + lang->kbd_variant = evas_stringshare_add("basic"); + + cfdata->selected_languages = evas_list_append(cfdata->selected_languages, lang); + + break; + } + } + } + } static void * @@ -116,10 +158,8 @@ cfdata = E_NEW(E_Config_Dialog_Data, 1); //cfdata->lang = l; - _fill_data(l, cfdata); - lang_load_kbd_models(); - lang_load_xfree_languages(); + _fill_data(l, cfdata); return cfdata; } @@ -136,9 +176,6 @@ cfdata->selected_languages); } - lang_free_kbd_models(); - lang_free_xfree_languages(); - l = cfd->data; l->cfd = NULL; free(cfdata); @@ -157,95 +194,97 @@ ot = e_widget_table_add(evas, 0); { - ot2 = e_widget_table_add(evas, 0); + ot2 = e_widget_table_add(evas, 1); { - of = e_widget_framelist_add(evas, _("Languages"), 0); + of = e_widget_framelist_add(evas, _("Languages"), 1); { /* languages ilist */ - ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, NULL); + ob = e_widget_ilist_add(evas, ILIST_ICON_LANG_WIDTH, ILIST_ICON_LANG_HEIGHT, NULL); e_widget_on_change_hook_set(ob, _lang_languages_ilist_cb_change, cfdata); cfdata->gui.lang_ilist = ob; - e_widget_min_size_set(ob, 250, 300); + e_widget_min_size_set(ob, 250, 250); e_widget_ilist_go(ob); e_widget_framelist_object_append(of, ob); } - e_widget_table_object_append(ot2, of, 0, 0, 1, 4, 1, 1, 1, 1); - - ob = e_widget_button_add(evas, ">>", NULL, _lang_select_language_cb, cfdata, NULL); - cfdata->gui.btn_add = ob; - e_widget_table_object_append(ot2, ob, 1, 1, 1, 1, 1, 1, 1, 1); + e_widget_table_object_append(ot2, of, 0, 0, 1, 1, 1, 1, 1, 1); - ob = e_widget_button_add(evas, "<<", NULL, _lang_unselect_language_cb, cfdata, NULL); - cfdata->gui.btn_del = ob; - e_widget_table_object_append(ot2, ob, 1, 2, 1, 1, 1, 1, 1, 1); - - of = e_widget_framelist_add(evas, _("Selected Languages"), 0); + oft = e_widget_frametable_add(evas, _("Selected Languages"), 0); { /* selected languages ilist */ ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, NULL); e_widget_on_change_hook_set(ob, _lang_selected_languages_ilist_cb_change, cfdata); cfdata->gui.selected_lang_ilist = ob; - e_widget_min_size_set(ob, 250, 200); + e_widget_min_size_set(ob, 250, 250); e_widget_ilist_go(ob); - e_widget_framelist_object_append(of, ob); + e_widget_frametable_object_append(oft, ob, 0, 0, 4, 1, 1, 1, 1, 1); + + ob = e_widget_button_add(evas, ">>", NULL, _lang_select_language_cb, cfdata, NULL); + cfdata->gui.btn_add = ob; + e_widget_frametable_object_append(oft, ob, 0, 1, 1, 1, 1, 1, 1, 1); + + ob = e_widget_button_add(evas, "<<", NULL, _lang_unselect_language_cb, cfdata, NULL); + cfdata->gui.btn_del = ob; + e_widget_frametable_object_append(oft, ob, 1, 1, 1, 1, 1, 1, 1, 1); + + ob = e_widget_button_add(evas, "^", NULL, + _lang_move_language_order_up_cb, cfdata, NULL); + cfdata->gui.btn_move_up = ob; + e_widget_frametable_object_append(oft, ob, 2, 1, 1, 1, 1, 1, 1, 1); + + ob = e_widget_button_add(evas, "v", NULL, + _lang_move_language_order_down_cb, cfdata, NULL); + cfdata->gui.btn_move_down = ob; + e_widget_frametable_object_append(oft, ob, 3, 1, 1, 1, 1, 1, 1, 1); } - e_widget_table_object_append(ot2, of, 2, 0, 1, 4, 1, 1, 1, 1); + e_widget_table_object_append(ot2, oft, 1, 0, 1, 1, 1, 1, 1, 1); } e_widget_table_object_append(ot, ot2, 0, 0, 1, 1, 1, 1, 1, 1); oft = e_widget_frametable_add(evas, _("Language Settings"), 0); { - of = e_widget_framelist_add(evas, _("Keyboard Model"), 0); + of = e_widget_framelist_add(evas, _("Keyboard Model"), 1); { ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, NULL); + e_widget_on_change_hook_set(ob, _lang_kbd_model_ilist_cb_change, cfdata); cfdata->gui.kbd_model_ilist = ob; { - e_widget_min_size_set(ob, 250, 150); + e_widget_min_size_set(ob, 380, 100); e_widget_ilist_go(ob); } e_widget_framelist_object_append(of, ob); } e_widget_frametable_object_append(oft, of, 0, 0, 1, 1, 1, 1, 1, 1); - of = e_widget_framelist_add(evas, _("Keyboard Layout"), 0); - { - ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, NULL); - cfdata->gui.kbd_layout_ilist = ob; - { - e_widget_min_size_set(ob, 150, 75); - e_widget_ilist_go(ob); - } - e_widget_framelist_object_append(of, ob); - } - e_widget_frametable_object_append(oft, of, 1, 0, 1, 1, 1, 1, 1, 1); - of = e_widget_framelist_add(evas, _("Layout Variant"), 0); { ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, NULL); - cfdata->gui.layout_variant_ilist = ob; + e_widget_on_change_hook_set(ob, _lang_kbd_layout_variant_ilist_cb_change, cfdata); + cfdata->gui.kbd_layout_variant_ilist = ob; { - e_widget_min_size_set(ob, 150, 75); + e_widget_min_size_set(ob, 120, 100); e_widget_ilist_go(ob); } e_widget_framelist_object_append(of, ob); } - e_widget_frametable_object_append(oft, of, 2, 0, 1, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(oft, of, 1, 0, 1, 1, 1, 1, 1, 1); } e_widget_table_object_append(ot, oft, 0, 1, 1, 1, 1, 1, 1, 1); } e_widget_list_object_append(o, ot, 1, 1, 0.5); - of = e_widget_framelist_add(evas, _("Options"), 0); + /*of = e_widget_framelist_add(evas, _("Options"), 0); ob = e_widget_check_add(evas, _("Show Language Indicator"), (&(cfdata->lang_show_indicator))); e_widget_framelist_object_append(of, ob); - e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_list_object_append(o, of, 1, 1, 0.5);*/ _lang_update_lang_defined_list(cfdata); _lang_update_selected_lang_list(cfdata); _lang_update_select_button(cfdata); _lang_update_unselect_button(cfdata); + _lang_update_language_movedown_button(cfdata); + _lang_update_language_moveup_button(cfdata); return o; } @@ -255,12 +294,41 @@ { char *tmp; Lang *l; + Evas_List *list; + Language *lang, *lang2; l = cfd->data; l->conf->lang_policy = cfdata->lang_policy; l->conf->lang_show_indicator = cfdata->lang_show_indicator; + + while (l->conf->languages) + { + lang = l->conf->languages->data; + _lang_free_language(lang); + l->conf->languages = evas_list_remove_list(l->conf->languages, l->conf->languages); + } + + for (list = cfdata->selected_languages; list; list = list->next) + { + lang = list->data; + + lang2 = E_NEW(Language, 1); + if (!lang2) continue; + + lang2->lang_name = evas_stringshare_add(lang->lang_name); + lang2->lang_shortcut = evas_stringshare_add(lang->lang_shortcut); + lang2->lang_flag = !(lang->lang_flag) ? NULL : evas_stringshare_add(lang->lang_flag); + lang2->kbd_model = !(lang->kbd_model) ? NULL : evas_stringshare_add(lang->kbd_model); + lang2->kbd_layout = !(lang->kbd_layout) ? NULL : evas_stringshare_add(lang->kbd_layout); + lang2->kbd_variant = !(lang->kbd_variant) ? NULL : evas_stringshare_add(lang->kbd_variant); + + l->conf->languages = evas_list_append(l->conf->languages, lang2); + } + l->current_lang_selector = 0; e_config_save_queue(); + lang_face_language_indicator_set(l); + /* here we have to redo context menu of the module */ /*if (c->face->monitor) @@ -317,6 +385,7 @@ e_widget_ilist_append(cfdata->gui.lang_ilist, ic, buf, NULL, NULL, NULL); } + e_widget_ilist_go(cfdata->gui.lang_ilist); if (sel_label) { int i; @@ -333,7 +402,6 @@ } free(sel_label); } - e_widget_ilist_go(cfdata->gui.lang_ilist); } static void @@ -366,6 +434,7 @@ e_widget_ilist_append(cfdata->gui.selected_lang_ilist, ic, buf, NULL, NULL, NULL); } + e_widget_ilist_go(cfdata->gui.selected_lang_ilist); if (indx >= 0) { if (indx >= e_widget_ilist_count(cfdata->gui.selected_lang_ilist)) @@ -373,8 +442,6 @@ e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx); } - - e_widget_ilist_go(cfdata->gui.selected_lang_ilist); } static void @@ -408,19 +475,23 @@ lang = E_NEW(Language, 1); if (!lang) return; + lang->id = evas_list_count(cfdata->selected_languages); lang->lang_name = evas_stringshare_add(ld->lang_name); lang->lang_shortcut = evas_stringshare_add(ld->lang_shortcut); lang->lang_flag = !(ld->lang_flag) ? NULL : evas_stringshare_add(ld->lang_flag); //FIXME: assign current keyboard model lang->kbd_model = evas_stringshare_add("compaqik13"); - lang->kbd_layout = evas_stringshare_add(ld->kbd_layout->data); - lang->kbd_variant = !(ld->kbd_variant) ? NULL : evas_stringshare_add(ld->kbd_variant->data); + lang->kbd_layout = evas_stringshare_add(ld->kbd_layout); + lang->kbd_variant = evas_stringshare_add("basic"); + // = !(ld->kbd_variant) ? NULL : evas_stringshare_add(ld->kbd_variant->data); cfdata->selected_languages = evas_list_append(cfdata->selected_languages, lang); //DO NOT sort selected_languages list. Here the sequence of the langs is essential! _lang_update_lang_defined_list(cfdata); _lang_update_selected_lang_list(cfdata); + e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, + evas_list_count(cfdata->selected_languages) - 1); _lang_update_select_button(cfdata); _lang_update_unselect_button(cfdata); @@ -484,6 +555,35 @@ e_widget_disabled_set(cfdata->gui.btn_del, 1); } static void +_lang_update_language_moveup_button(E_Config_Dialog_Data *cfdata) +{ + if (!cfdata) return; + + if (evas_list_count(cfdata->selected_languages) < 1 || + !e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist) || + !e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist)) + { + e_widget_disabled_set(cfdata->gui.btn_move_up, 1); + } + else + e_widget_disabled_set(cfdata->gui.btn_move_up, 0); +} +static void +_lang_update_language_movedown_button(E_Config_Dialog_Data *cfdata) +{ + if (!cfdata) return; + + if ((evas_list_count(cfdata->selected_languages) < 1) || + (!e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist)) || + (e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist) == + e_widget_ilist_count(cfdata->gui.selected_lang_ilist) - 1)) + { + e_widget_disabled_set(cfdata->gui.btn_move_down, 1); + } + else + e_widget_disabled_set(cfdata->gui.btn_move_down, 0); +} +static void _lang_languages_ilist_cb_change(void *data, Evas_Object *obj) { E_Config_Dialog_Data *cfdata; @@ -500,18 +600,26 @@ if (!(cfdata = data)) return; _lang_update_unselect_button(cfdata); + _lang_update_language_moveup_button(cfdata); + _lang_update_language_movedown_button(cfdata); - _lang_update_kbd_model_list(cfdata); + _lang_update_kbd_model_list(cfdata); + _lang_update_kbd_layout_variant_list(cfdata); } - -void +static void _lang_update_kbd_model_list(E_Config_Dialog_Data *cfdata) { - char *sel_lang_label; + int kbd_model_indx = -1; + Language *selected_lang; + Language_Kbd_Model *lkm; + Evas_List *l; + if (!cfdata) return; - sel_lang_label = e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist); - if (!sel_lang_label) + selected_lang = evas_list_nth(cfdata->selected_languages, + e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist)); + + if (!selected_lang) { e_widget_ilist_clear(cfdata->gui.kbd_model_ilist); return; @@ -519,27 +627,203 @@ if (!e_widget_ilist_count(cfdata->gui.kbd_model_ilist)) { - int indx = 0; char buf[4096]; - Language *lang; - Evas_List *l; - Language_Kbd_Model *lkm; + int i; - //FIXME: determine the selection index in advance - /*for (l = cfdata->selected_languages; l; l = l->next) + for (l = language_kbd_model_list, i = 0; l; l = l->next, i++) { - }*/ + lkm = l->data; + + if (!strcmp(lkm->kbd_model, selected_lang->kbd_model)) + kbd_model_indx = i; - for (l = language_kbd_model_list; l; l = l->next) + //snprintf(buf, sizeof(buf), "%s (%s)", lkm->kbd_model_desctiption, lkm->kbd_model); + snprintf(buf, sizeof(buf), "%s", lkm->kbd_model_desctiption); + e_widget_ilist_append(cfdata->gui.kbd_model_ilist, NULL, buf, NULL, NULL, NULL); + } + } + else + { + for (l = language_kbd_model_list, kbd_model_indx = 0; l; l = l->next, kbd_model_indx++) { lkm = l->data; - snprintf(buf, sizeof(buf), "%s (%s)", lkm->kbd_model_desctiption, lkm->kbd_model); - e_widget_ilist_append(cfdata->gui.kbd_model_ilist, NULL, buf, NULL, NULL, NULL); + if (!strcmp(lkm->kbd_model, selected_lang->kbd_model)) + break; } + if (!l) + kbd_model_indx = -1; } + e_widget_ilist_go(cfdata->gui.kbd_model_ilist); + e_widget_ilist_selected_set(cfdata->gui.kbd_model_ilist, kbd_model_indx); +} + +static void +_lang_update_kbd_layout_variant_list(E_Config_Dialog_Data *cfdata) +{ + Language *selected_lang; + Language_Def *ld; + Evas_List *l; + int kbd_variant_indx = 0; + + if (!cfdata) return; + + selected_lang = evas_list_nth(cfdata->selected_languages, + e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist)); + + e_widget_ilist_clear(cfdata->gui.kbd_layout_variant_ilist); + + if (!selected_lang) return; + + for (l = language_def_list; l; l = l->next) + { + ld = l->data; + + if (!strcmp(ld->lang_name, selected_lang->lang_name)) + { + int i; + e_widget_ilist_append(cfdata->gui.kbd_layout_variant_ilist, + NULL, "basic", NULL, NULL, NULL); + + for (l = ld->kbd_variant, i = 1; l; l = l->next) + { + char *variant = l->data; + if (!strcmp(variant, "basic")) continue; + + if (selected_lang->kbd_variant && !strcmp(selected_lang->kbd_variant, variant)) + kbd_variant_indx = i; + + e_widget_ilist_append(cfdata->gui.kbd_layout_variant_ilist, + NULL, variant, NULL, NULL, NULL); + i++; + } + break; + } + } + + e_widget_ilist_go(cfdata->gui.kbd_layout_variant_ilist); + e_widget_ilist_selected_set(cfdata->gui.kbd_layout_variant_ilist, kbd_variant_indx); +} + +static void +_lang_move_language_order_up_cb(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + Evas_List *lang, *lang2; + void *tmp; + int indx; + + if (!(cfdata = data)) return; + + indx = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist); + + if (indx <= 0) return; + + lang = evas_list_nth_list(cfdata->selected_languages, indx); + lang2 = evas_list_nth_list(cfdata->selected_languages, indx - 1); + + ((Language *)(lang->data))->id --; + ((Language *)(lang2->data))->id ++; + tmp = lang->data; + lang->data = lang2->data; + lang2->data = tmp; + + _lang_update_selected_lang_list(cfdata); + e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx - 1); +} +static void +_lang_move_language_order_down_cb(void *data, void *data2) +{ + E_Config_Dialog_Data *cfdata; + Evas_List *lang, *lang2; + int indx; + void *tmp; + + if (!(cfdata = data)) return; + + indx = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist); + + if ((indx < 0) || (indx >= evas_list_count(cfdata->selected_languages))) return; + + lang = evas_list_nth_list(cfdata->selected_languages, indx); + lang2 = evas_list_nth_list(cfdata->selected_languages, indx + 1); + + ((Language *)(lang->data))->id ++; + ((Language *)(lang->data))->id --; + tmp = lang->data; + lang->data = lang2->data; + lang2->data = tmp; + + _lang_update_selected_lang_list(cfdata); + e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx + 1); +} + +static void +_lang_kbd_layout_variant_ilist_cb_change(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + Language *lang; + int indx_variant, indx_lang; + + if (!(cfdata = data)) return; + + indx_lang = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist); + if (indx_lang < 0) return; + + indx_variant = e_widget_ilist_selected_get(cfdata->gui.kbd_layout_variant_ilist); + if (indx_variant < 0) return; + + lang = evas_list_nth(cfdata->selected_languages, indx_lang); + if (indx_variant == 0) + { + if (lang->kbd_variant) evas_stringshare_del(lang->kbd_variant); + lang->kbd_variant = evas_stringshare_add("basic"); + return; + } + else + { + Evas_List *l; + Language_Def *ld; + char *variant; + + for (l = language_def_list; l; l = l->next) + { + ld = l->data; + if (!strcmp(ld->lang_name, lang->lang_name)) + { + variant = evas_list_nth(ld->kbd_variant, indx_variant - 1); + + if (lang->kbd_variant) evas_stringshare_del(lang->kbd_variant); + lang->kbd_variant = evas_stringshare_add(variant); + break; + } + } + } +} +static void +_lang_kbd_model_ilist_cb_change(void *data, Evas_Object *obj) +{ + E_Config_Dialog_Data *cfdata; + Language_Kbd_Model *lkm; + Language *lang; + int indx_model; + int indx_lang; + + if (!(cfdata = data)) return; + + indx_lang = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist); + if (indx_lang < 0) return; + + indx_model = e_widget_ilist_selected_get(cfdata->gui.kbd_model_ilist); + if (indx_model < 0) return; + + lang = evas_list_nth(cfdata->selected_languages, indx_lang); + lkm = evas_list_nth(language_kbd_model_list, indx_model); + + if (!lang || !lkm) return; - //FIXME: select the appropriate kbd_model + if (lang->kbd_model) evas_stringshare_del(lang->kbd_model); + lang->kbd_model = evas_stringshare_add(lkm->kbd_model); } static void =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_keybind.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_mod_keybind.c 10 May 2006 22:49:01 -0000 1.1 +++ e_mod_keybind.c 12 May 2006 22:35:50 -0000 1.2 @@ -156,6 +156,9 @@ char buf[4096]; Language *ll; + //if (!lang->conf->languages) return; + if (evas_list_count(lang->conf->languages) == 1) return; + if (lang->current_lang_selector >= evas_list_count(lang->conf->languages) - 1) lang->current_lang_selector = 0; else @@ -171,7 +174,8 @@ ll->lang_name, ll->lang_shortcut, ll->lang_flag, ll->kbd_model, ll->kbd_layout, ll->kbd_variant); - edje_object_part_text_set(lang->face->text_obj, "in-text", ll->lang_shortcut); + lang_face_language_indicator_set(lang); + //edje_object_part_text_set(lang->face->text_obj, "in-text", ll->lang_shortcut); e_module_dialog_show( _("Enlightenment Language Enhancment Module"), buf); @@ -183,6 +187,9 @@ char buf[4096]; Language *ll; + //if (!lang->conf->languages) return; + if (evas_list_count(lang->conf->languages) == 1) return; + if (lang->current_lang_selector == 0) lang->current_lang_selector = evas_list_count(lang->conf->languages) - 1; else @@ -198,7 +205,8 @@ ll->lang_name, ll->lang_shortcut, ll->lang_flag, ll->kbd_model, ll->kbd_layout, ll->kbd_variant); - edje_object_part_text_set(lang->face->text_obj, "in-text", ll->lang_shortcut); + lang_face_language_indicator_set(lang); + //edje_object_part_text_set(lang->face->text_obj, "in-text", ll->lang_shortcut); e_module_dialog_show( _("Enlightenment Language Enhancment Module"), buf); return; =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_lang.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_lang.c 12 May 2006 11:02:31 -0000 1.2 +++ e_mod_lang.c 12 May 2006 22:35:50 -0000 1.3 @@ -19,10 +19,38 @@ int _lang_load_xfree_languages_load_configItem(EXML *xml, Language_Def *ld); int _lang_load_xfree_languages_load_variantList(EXML *xml, Language_Def *ld); static void _lang_register_language(const char *lang_name, const char *lang_shortcut, - const char *lang_flag, Evas_List *kbd_layout, + const char *lang_flag, const char *kbd_layout, Evas_List *kbd_layout_variant); /****************************************/ +Language *lang_get_default_language() +{ + Evas_List *l; + Language *lang = NULL; + + for (l = language_def_list; l; l = l->next) + { + Language_Def *ld = l->data; + + if (!strcmp(ld->kbd_layout, "us")) + { + lang = E_NEW(Language, 1); + if (!lang) + break; + + lang->id = 0; + lang->lang_name = evas_stringshare_add(ld->lang_name); + lang->lang_shortcut = evas_stringshare_add(ld->lang_shortcut); + lang->lang_flag = evas_stringshare_add(ld->lang_flag); + //FIXME: get current model from config. + lang->kbd_model = evas_stringshare_add("compaqik13"); + lang->kbd_layout = evas_stringshare_add(ld->kbd_layout); + lang->kbd_variant = evas_stringshare_add("basic"); + break; + } + } + return lang; +} int lang_load_kbd_models() @@ -201,9 +229,6 @@ _lang_load_xfree_languages_load_configItem(exml, ld); _lang_load_xfree_languages_load_variantList(exml, ld); - if (ld->lang_name && ld->lang_shortcut && ld->kbd_layout) - break; - if (!exml_next_nomove(exml)) break; } @@ -217,9 +242,7 @@ if (ld->lang_name) evas_stringshare_del(ld->lang_name); if (ld->lang_shortcut) evas_stringshare_del(ld->lang_shortcut); if (ld->lang_flag) evas_stringshare_del(ld->lang_flag); - - while (ld->kbd_layout) - ld->kbd_layout = evas_list_remove_list(ld->kbd_layout, ld->kbd_layout); + if (ld->kbd_layout) evas_stringshare_del(ld->kbd_layout); while (ld->kbd_variant) ld->kbd_variant = evas_list_remove_list(ld->kbd_variant, @@ -247,11 +270,7 @@ if (ld->lang_name) evas_stringshare_del(ld->lang_name); if (ld->lang_shortcut) evas_stringshare_del(ld->lang_shortcut); if (ld->lang_flag) evas_stringshare_del(ld->lang_flag); - while (ld->kbd_layout) - { - evas_stringshare_del(ld->kbd_layout->data); - ld->kbd_layout = evas_list_remove_list(ld->kbd_layout, ld->kbd_layout); - } + if (ld->kbd_layout) evas_stringshare_del(ld->kbd_layout); while (ld->kbd_variant) { evas_stringshare_del((const char *)ld->kbd_variant); @@ -281,11 +300,8 @@ { char *tag = exml_tag_get(xml); - if (!strcasecmp(tag, "name")) - { - ld->kbd_layout = evas_list_append(ld->kbd_layout, - evas_stringshare_add(exml_value_get(xml))); - } + if (!strcasecmp(tag, "name")) + ld->kbd_layout = evas_stringshare_add(exml_value_get(xml)); if (!strcasecmp(tag, "shortDescription")) { @@ -380,7 +396,7 @@ static void _lang_register_language(const char *lang_name, const char *lang_shortcut, - const char *lang_flag, Evas_List *kbd_layout, + const char *lang_flag, const char *kbd_layout, Evas_List *kbd_layout_variant) { Language_Def *ld; @@ -399,9 +415,6 @@ } if (found) { - for (l = kbd_layout; l; l = l->next) - ld->kbd_layout = evas_list_append(ld->kbd_layout, evas_stringshare_add(l->data)); - if (kbd_layout_variant) { for (l = kbd_layout_variant; l; l = l->next) @@ -416,9 +429,7 @@ ld->lang_name = evas_stringshare_add(lang_name); ld->lang_shortcut = evas_stringshare_add(lang_shortcut); ld->lang_flag = !lang_flag ? NULL : evas_stringshare_add(lang_flag); - - for (l = kbd_layout; l; l = l->next) - ld->kbd_layout = evas_list_append(ld->kbd_layout, evas_stringshare_add(l->data)); + ld->kbd_layout = evas_stringshare_add(kbd_layout); if (kbd_layout_variant) { =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_lang.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_lang.h 12 May 2006 11:02:31 -0000 1.2 +++ e_mod_lang.h 12 May 2006 22:35:50 -0000 1.3 @@ -15,12 +15,13 @@ struct _Language { - const char *lang_name; - const char *lang_shortcut; - const char *lang_flag; - const char *kbd_model; - const char *kbd_layout; - const char *kbd_variant; + unsigned int id; + const char *lang_name; + const char *lang_shortcut; + const char *lang_flag; + const char *kbd_model; + const char *kbd_layout; + const char *kbd_variant; }; struct _Language_Def @@ -28,8 +29,8 @@ const char *lang_name; const char *lang_shortcut; const char *lang_flag; - Evas_List *kbd_layout; - Evas_List *kbd_variant; + const char *kbd_layout; + Evas_List *kbd_variant; // const char * }; /*void lang_register_language(const char *lang_name, const char *lang_shortcut, @@ -40,6 +41,8 @@ /*void lang_register_language_layout_variant(const char *lang_name, const char *kbd_layout_variant);*/ /*void lang_unregister_all_languages();*/ + +Language *lang_get_default_language(); int lang_load_kbd_models(); void lang_free_kbd_models(); =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_mod_main.c 12 May 2006 11:02:31 -0000 1.2 +++ e_mod_main.c 12 May 2006 22:35:50 -0000 1.3 @@ -132,6 +132,9 @@ E_Menu_Item *mi; Evas_List *managers, *l1, *l2; + lang_load_kbd_models(); + lang_load_xfree_languages(); + l = E_NEW(Lang, 1); if (!l) @@ -141,8 +144,6 @@ l->current_lang_selector = 0; _lang_load_config(l); - - _lang_config_menu_new(l); managers = e_manager_list(); @@ -179,6 +180,21 @@ if (!_lang_face_init(lf)) return NULL; + lang_face_language_indicator_set(l); +#if 0 + if (lf->text_obj) + { + if (l->conf->languages) + { + Language *_lang = l->conf->languages->data; + edje_object_part_text_set(lf->text_obj, "in-text", + _lang->lang_shortcut); + } + else + edje_object_part_text_set(lf->text_obj, "in-text", ""); + } +#endif + _lang_face_menu_new(lf); mi = e_menu_item_new(l->config_menu); @@ -196,17 +212,7 @@ _lang_register_module_actions(); _lang_register_module_keybindings(l); - /*const char *en_l[] = {"en", "en_US", NULL}; - const char *en_v[] = {"basic", NULL}; - const char *ru_l[] = {"ru", "ru_KOI", NULL}; - const char *ru_v[] = {"basic", "difficult", NULL};*/ - //lang_register_language("English", "EN", NULL, "en", "basic"); - - //lang_register_language("Russian", "RU", NULL, "ru", NULL); - - //lang_register_language("Lithuanian", "LT", NULL, "lt", NULL); - //lang_load_kbd_models(); return l; } @@ -216,8 +222,8 @@ _lang_unregister_module_actions(); _lang_unregister_module_keybindings(l); - //lang_unregister_all_languages(); - //lang_free_kbd_models(); + lang_free_kbd_models(); + lang_free_xfree_languages(); while (l->conf->languages) { @@ -487,6 +493,7 @@ l->conf = e_config_domain_load(LANG_MODULE_CONFIG_FILE, l->conf_edd); if (!l->conf) { + Language *_lang; l->conf = E_NEW(Config, 1); l->conf->lang_policy = LS_GLOBAL_POLICY; l->conf->lang_show_indicator = 1; @@ -506,6 +513,12 @@ l->conf->bk_prev->any_mod = 0; l->conf->bk_prev->action = evas_stringshare_add("lang_prev_language"); l->conf->bk_prev->params = NULL; + + _lang = lang_get_default_language(); + if (_lang) + l->conf->languages = evas_list_append(l->conf->languages, _lang); + + //e_module_dialog_show("aaaaaaaaaaaaaaa", "we created a new config !!!!!!!!"); } E_CONFIG_LIMIT(l->conf->lang_policy, LS_GLOBAL_POLICY, LS_UNKNOWN_POLICY - 1); E_CONFIG_LIMIT(l->conf->lang_show_indicator, 0, 1); @@ -553,6 +566,34 @@ l->conf->languages = evas_list_append(l->conf->languages, ll); } #endif +} + +void lang_face_language_indicator_set(Lang *l) +{ + Language *lang; + + if (!l || !l->conf || !l->face || !l->face->text_obj) return; + + if (l->conf->languages) + { + /*Evas_Coord x, y, w, h; + Evas_Coord tx, ty, tw, th; + char buf[4096];*/ + + lang = evas_list_nth(l->conf->languages, l->current_lang_selector); + //evas_event_freeze(l->face->evas); + edje_object_part_text_set(l->face->text_obj, "in-text", lang->lang_shortcut); + + //edje_object_size_min_calc(l->face->lang_obj, &w, &h); + //edje_object_size_min_calc(l->face->text_obj, &tw, &th); + /*evas_object_move(l->face->text_obj, (int)((w - tw)/2), (int)((h - th)/2));*/ + + //evas_event_thaw(l->face->evas); + /*snprintf(buf, sizeof(buf), "w = %d : h = %d : tw = %d : th = %d", w, h, tw, th); + e_module_dialog_show("bbbbbbbbbbbbbbbbbbbbb", buf);*/ + } + else + edje_object_part_text_set(l->face->text_obj, "in-text", ""); } /*static void =================================================================== RCS file: /cvs/e/e_modules/language/e_mod_main.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_mod_main.h 10 May 2006 22:49:01 -0000 1.1 +++ e_mod_main.h 12 May 2006 22:35:50 -0000 1.2 @@ -72,4 +72,6 @@ EAPI int e_modapi_about(E_Module *m); EAPI int e_modapi_config(E_Module *m); +void lang_face_language_indicator_set(Lang *l); + #endif =================================================================== RCS file: /cvs/e/e_modules/language/language.edc,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- language.edc 10 May 2006 22:49:01 -0000 1.1 +++ language.edc 12 May 2006 22:35:50 -0000 1.2 @@ -98,7 +98,7 @@ { text: "EN"; font: "VeraMono"; - size: 20; + size: 16; min: 1 1; align: 0.5 0.5; } ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs