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

Reply via email to