Enlightenment CVS committal

Author  : shorne
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_ilist.c e_ilist.h e_int_config_fonts.c e_widget_ilist.c 
        e_widget_ilist.h 


Log Message:
Add font fallbacks configuration to font config dialog
 * Add arrow icons to default theme
 * Add api to ilist for manipulating list labels (for moving)
 * TODO: need to split list manipulation code out to its own widget but 
   what should the diget be called? e_widget_editable_list?

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_ilist.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- e_ilist.c   1 Apr 2006 09:24:56 -0000       1.17
+++ e_ilist.c   4 Apr 2006 14:00:19 -0000       1.18
@@ -296,6 +296,29 @@
      }
 }
 
+EAPI const char *
+e_ilist_nth_label_get(Evas_Object *obj, int n)
+{ 
+   E_Smart_Item *si;
+   
+   API_ENTRY return NULL;
+   if (!sd->items) return NULL;
+   si = evas_list_nth(sd->items, n);
+   if (si) return edje_object_part_text_get(si->base_obj, "label");
+   return NULL;
+}
+
+EAPI void
+e_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
+{ 
+   E_Smart_Item *si;
+   
+   API_ENTRY return;
+   if (!sd->items) return;
+   si = evas_list_nth(sd->items, n);
+   if (si) edje_object_part_text_set(si->base_obj, "label", label);
+}
+
 EAPI int
 e_ilist_count(Evas_Object *obj)
 {
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_ilist.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- e_ilist.h   1 Apr 2006 09:24:56 -0000       1.10
+++ e_ilist.h   4 Apr 2006 14:00:19 -0000       1.11
@@ -20,6 +20,8 @@
 EAPI int          e_ilist_selector_get          (Evas_Object *obj);
 EAPI void         e_ilist_remove_num            (Evas_Object *obj, int n);
 EAPI void         e_ilist_remove_label          (Evas_Object *obj, const char 
*label);
+EAPI const char  *e_ilist_nth_label_get                (Evas_Object *obj, int 
n);
+EAPI void        e_ilist_nth_label_set         (Evas_Object *obj, int n, const 
char *label);
 EAPI int          e_ilist_count                 (Evas_Object *obj);
 EAPI void         e_ilist_clear                 (Evas_Object *obj);
 
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_fonts.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_int_config_fonts.c        2 Apr 2006 08:19:17 -0000       1.2
+++ e_int_config_fonts.c        4 Apr 2006 14:00:19 -0000       1.3
@@ -3,28 +3,24 @@
  */
 #include "e.h"
 
-#define CLASS_ENABLED 0
-#define CLASS_DISABLED 1
-
 typedef struct _E_Text_Class_Pair E_Text_Class_Pair;
 typedef struct _CFText_Class CFText_Class;
-typedef struct _E_Widget_Data E_Widget_Data;
 
 static void *_create_data(E_Config_Dialog *cfd);
 static void _free_data(E_Config_Dialog *cfd, 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_cb_change(void *data, Evas_Object *obj);
-static void _enabled_cb_change(void *data, Evas_Object *obj);
+static void _ilist_font_cb_change(void *data, Evas_Object *obj);
+static void _enabled_font_cb_change(void *data, Evas_Object *obj);
 
-
-struct _E_Widget_Data
-{
-   E_Radio_Group *group;
-   Evas_Object *o_radio;
-   int valnum;
-};
+static void _ilist_fallback_cb_change(void *data, Evas_Object *obj);
+static void _enabled_fallback_cb_change(void *data, Evas_Object *obj);
+static void _button_fallback_cb_add(void *data, void *obj);
+static void _button_fallback_cb_remove(void *data, void *obj);
+static void _button_fallback_cb_up(void *data, void *obj);
+static void _button_fallback_cb_down(void *data, void *obj);
+static void _list_select_num(E_Config_Dialog_Data *cfdata, int indx);
 
 struct _E_Text_Class_Pair
 {
@@ -84,19 +80,29 @@
    int          cur_index;
    
    /* Font Fallbacks */
-   Evas_List *font_fallbacks;
-   int fallbacks_state;
+   char                *cur_fallback;
+   int          cur_fallbacks_enabled;
    
    /* Font Hinting */
    int hinting;
    
    struct
      {
+       /* Font Classes */
        Evas_Object *class_list;
           
        Evas_Object *font;
        Evas_Object *size;
        Evas_Object *enabled;
+
+       /* Font Fallbacks */
+       Evas_Object *fallback_list; /* Selecting a list entry starts edit*/
+       
+       Evas_Object *fallback;  /* Text Entry */
+       Evas_Object *fallback_up; /* Move selected list entry up */
+       Evas_Object *fallback_down; /* Move selected list entry down */
+       Evas_Object *fallback_add; /* create and select a new list entry */
+       Evas_Object *fallback_remove; /* remove the selected entry */
      }
    gui;
 };
@@ -121,13 +127,13 @@
 static void
 _fill_data(E_Config_Dialog_Data *cfdata)
 {
-   Evas_List *enabled_list;
+   Evas_List *font_list;
    Evas_List *next;
    E_Font_Default *efd;
    CFText_Class *tc;
    int i;
    
-   enabled_list = e_font_default_list();
+   font_list = e_font_default_list();
    
    /* Fill out the font list */
    for (i = 0; text_class_predefined_names[i].class_name; i++ )
@@ -140,7 +146,7 @@
        tc->size = 0;
        tc->enabled = 0;
        
-       for (next = enabled_list; next ; next = next->next)
+       for (next = font_list; next ; next = next->next)
          {
             efd = next->data;
             
@@ -173,6 +179,8 @@
    /* Fill Hinting */
    cfdata->hinting = e_config->font_hinting;
    
+   /* Font fallbacks configured in widgets */
+   
    return;
 }
 
@@ -201,12 +209,14 @@
         evas_stringshare_del(tc->font);
         E_FREE(tc);
      }
+   
    free(cfdata);
 }
 
 static int
 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 {
+   int i;
    Evas_List *next;
    CFText_Class *tc;
   
@@ -234,6 +244,19 @@
          }
      }
 
+   /* Fallbacks configure */
+   e_font_fallback_clear();
+   
+   if (cfdata->cur_fallbacks_enabled)
+     {
+       for (i = 0; i < e_widget_ilist_count(cfdata->gui.fallback_list); i++)
+         {
+            const char *fallback;
+            fallback = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, 
i);
+            if (fallback != NULL && strlen(fallback) > 0)
+              e_font_fallback_append(fallback);
+         }
+     }
    e_font_apply();
    
    /* Apply Hinting */
@@ -259,7 +282,7 @@
    of = e_widget_frametable_add(evas, _("Font Class Configuration"), 0);
    cfdata->gui.class_list = e_widget_ilist_add(evas, 16, 16, NULL);
    e_widget_min_size_set(cfdata->gui.class_list, 100, 100);
-   e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_cb_change, 
cfdata);
+   e_widget_on_change_hook_set(cfdata->gui.class_list, _ilist_font_cb_change, 
cfdata);
 
    /* Fill In Ilist */
    for (i = 0; i < evas_list_count(cfdata->text_classes); i++)
@@ -319,7 +342,7 @@
    e_widget_frametable_object_append(of, cfdata->gui.enabled, 
                                        1, 3, 2, 1, 
                                        1, 1, 1, 1);
-   e_widget_on_change_hook_set(cfdata->gui.enabled, _enabled_cb_change, 
cfdata);
+   e_widget_on_change_hook_set(cfdata->gui.enabled, _enabled_font_cb_change, 
cfdata);
    
    e_widget_list_object_append(o, of, 1, 1, 0.5);
 
@@ -342,13 +365,99 @@
    ob = e_widget_radio_add(evas, _("None"), 2, rg);
    e_widget_disabled_set(ob, !option_enable);
    e_widget_framelist_object_append(of, ob);
-    
+   
+   e_widget_list_object_append(o, of, 1, 1, 0.5);
+   
+   /* Create Fallbacks Widgets */
+   option_enable = (e_font_fallback_list() != NULL);
+   of = e_widget_frametable_add(evas, _("Font Fallbacks"), 1);
+
+   ob = e_widget_button_add(evas, _("Move Up"), "widget/up_arrow", 
_button_fallback_cb_up, cfdata, NULL);
+   cfdata->gui.fallback_up = ob;
+   e_widget_disabled_set(ob, 1);
+   e_widget_frametable_object_append(  of, 
+                                       ob, 
+                                       1, 0, 1, 1,
+                                       1, 1, 1, 1);
+   
+   
+   ob = e_widget_button_add(evas, _("Move Down"), "widget/down_arrow", 
_button_fallback_cb_down, cfdata, NULL); 
+   cfdata->gui.fallback_down = ob;
+   e_widget_disabled_set(ob, 1);
+   e_widget_frametable_object_append(  of, 
+                                       ob, 
+                                       1, 3, 1, 1,
+                                       1, 1, 1, 1);
+   
+   
+   cfdata->gui.fallback_list = e_widget_ilist_add(evas, 16, 16, NULL);
+   e_widget_disabled_set(cfdata->gui.fallback_list, !option_enable);
+   e_widget_min_size_set(cfdata->gui.fallback_list, 100, 100);
+   e_widget_on_change_hook_set(cfdata->gui.fallback_list, 
_ilist_fallback_cb_change, cfdata);
+   /* Fill In Ilist */
+   for (i = 0; i < evas_list_count(e_font_fallback_list()); i++)
+     {
+       E_Font_Fallback *eff;
+       
+       eff = evas_list_nth(e_font_fallback_list(), i);
+       e_widget_ilist_append(cfdata->gui.fallback_list, NULL, eff->name, NULL, 
NULL, NULL);
+     }
+   e_widget_ilist_go(cfdata->gui.fallback_list);
+   e_widget_frametable_object_append(  of, 
+                                       cfdata->gui.fallback_list, 
+                                       2, /* Col Start*/
+                                       0, /* Row Start */
+                                       1, /* Col Span*/
+                                       4, /* Row Span*/
+                                       1, 1, 1, 1);
+  
+   ob = e_widget_label_add(evas, _("Fallback Name"));
+   e_widget_frametable_object_append(  of, 
+                                       ob, 
+                                       0, 0, 1, 1,
+                                       1, 1, 1, 1); 
+   
+   cfdata->gui.fallback = e_widget_entry_add(evas, &(cfdata->cur_fallback));
+   e_widget_disabled_set(cfdata->gui.fallback, !option_enable);
+   e_widget_min_size_set(cfdata->gui.fallback, 100, 25);
+   e_widget_frametable_object_append(of, cfdata->gui.fallback, 
+                                       0, 1, 1, 1, 
+                                       1, 1, 1, 1);
+
+   cfdata->gui.fallback_add = e_widget_button_add(evas, _("Add"), NULL, 
_button_fallback_cb_add, cfdata, NULL); 
+   e_widget_disabled_set(cfdata->gui.fallback_add, !option_enable);
+   e_widget_frametable_object_append(  of, 
+                                       cfdata->gui.fallback_add, 
+                                       1, 1, 1, 1,
+                                       1, 1, 1, 1);
+   
+   cfdata->gui.fallback_remove = e_widget_button_add(evas, _("Remove"), NULL, 
_button_fallback_cb_remove, cfdata, NULL); 
+   e_widget_disabled_set(cfdata->gui.fallback_remove, !option_enable);
+   e_widget_frametable_object_append(  of, 
+                                       cfdata->gui.fallback_remove , 
+                                       1, 2, 1, 1,
+                                       1, 1, 1, 1);
+          
+   ob = e_widget_check_add(evas, _("Enable Fallbacks"), 
&(cfdata->cur_fallbacks_enabled));
+   e_widget_frametable_object_append(of, ob, 
+                                       0, 3, 1, 1, 
+                                       1, 1, 1, 1);
+   e_widget_check_checked_set(ob, option_enable);
+   e_widget_on_change_hook_set(ob, _enabled_fallback_cb_change, cfdata); 
+  
+   if (e_widget_ilist_count(cfdata->gui.fallback_list) > 0)
+     {
+       e_widget_ilist_selected_set(cfdata->gui.fallback_list, 0);
+     } 
+   
    e_widget_list_object_append(o, of, 1, 1, 0.5);
    return o;
 }
 
+/* Private Font Class Functions */
+
 static void
-_ilist_cb_change(void *data, Evas_Object *obj)
+_ilist_font_cb_change(void *data, Evas_Object *obj)
 {
    int indx;
    E_Config_Dialog_Data *cfdata;
@@ -383,7 +492,7 @@
 }
 
 static void
-_enabled_cb_change(void *data, Evas_Object *obj)
+_enabled_font_cb_change(void *data, Evas_Object *obj)
 {
    E_Config_Dialog_Data *cfdata;
    cfdata = data;   
@@ -399,4 +508,174 @@
        e_widget_disabled_set(cfdata->gui.font, 1);
        e_widget_disabled_set(cfdata->gui.size, 1);
      }
+}
+
+/* Private Font Fallback Functions */
+static void _ilist_fallback_cb_change(void *data, Evas_Object *obj)
+{
+   int indx;
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   indx = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
+   _list_select_num(cfdata, indx);
+}
+static void _enabled_fallback_cb_change(void *data, Evas_Object *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+   
+   if (cfdata->cur_fallbacks_enabled)
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_list, 0);    
+       e_widget_disabled_set(cfdata->gui.fallback_add, 0);
+       e_widget_disabled_set(cfdata->gui.fallback, 0);
+     }
+   else
+     {
+       _list_select_num(cfdata, -1);
+       e_widget_disabled_set(cfdata->gui.fallback_list, 1);
+       e_widget_disabled_set(cfdata->gui.fallback, 1);
+       e_widget_disabled_set(cfdata->gui.fallback_add, 1);
+     }
+}
+static void _button_fallback_cb_add(void *data, void *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   if (cfdata->cur_fallback && strlen(cfdata->cur_fallback) > 0)
+     {
+       int count;
+       int i;  
+       
+       /* If it already esists just select the existing one */
+       for (i = 0; i < e_widget_ilist_count(cfdata->gui.fallback_list); i++)
+         {
+            const char *fallback;
+            fallback = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, 
i);
+            if (  fallback != NULL && 
+                  strlen(fallback) > 0 && 
+                  !strcmp(fallback, cfdata->cur_fallback) )
+              {
+                 e_widget_ilist_selected_set(cfdata->gui.fallback_list, i);
+                 return;
+              }
+         }
+       
+       e_widget_ilist_append(cfdata->gui.fallback_list, NULL, 
cfdata->cur_fallback, NULL, NULL, NULL);
+       e_widget_ilist_go(cfdata->gui.fallback_list);
+       count = e_widget_ilist_count(cfdata->gui.fallback_list);
+       e_widget_ilist_selected_set(cfdata->gui.fallback_list, count - 1);
+       
+       e_widget_entry_text_set(cfdata->gui.fallback, "");           
+     }
+}
+
+static void _button_fallback_cb_remove(void *data, void *obj)
+{
+   int indx;
+   int count;
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   indx = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
+   count = e_widget_ilist_count(cfdata->gui.fallback_list);
+   
+   e_widget_ilist_remove_num(cfdata->gui.fallback_list, indx);
+
+   e_widget_ilist_go(cfdata->gui.fallback_list);       
+   e_widget_ilist_selected_set(cfdata->gui.fallback_list, indx);
+   if (count == 1)
+     {
+       _list_select_num(cfdata, -1);
+     }   
+}
+static void _button_fallback_cb_up(void *data, void *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   int idx_sel;
+   const char *label_sel;
+   const char *label_rep;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   idx_sel = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
+
+   label_sel = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, 
idx_sel);
+   label_rep = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel 
- 1);
+
+   e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel - 1, 
label_sel);
+   e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel, label_rep);
+
+   e_widget_ilist_selected_set(cfdata->gui.fallback_list, idx_sel - 1);
+}
+static void _button_fallback_cb_down(void *data, void *obj)
+{
+   E_Config_Dialog_Data *cfdata;
+   int idx_sel;
+   const char *label_sel;
+   const char *label_rep;
+   
+   cfdata = data;
+   if (!cfdata) return;
+
+   idx_sel = e_widget_ilist_selected_get(cfdata->gui.fallback_list);
+
+   label_sel = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, 
idx_sel);
+   label_rep = e_widget_ilist_nth_label_get(cfdata->gui.fallback_list, idx_sel 
+ 1);
+
+   e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel + 1, 
label_sel);
+   e_widget_ilist_nth_label_set(cfdata->gui.fallback_list, idx_sel, label_rep);
+
+   e_widget_ilist_selected_set(cfdata->gui.fallback_list, idx_sel + 1);
+}
+
+static void _list_select_num(E_Config_Dialog_Data *cfdata, int indx)
+{
+   int count;
+
+   /* Disable selecting the list while we are disabled */
+   if (indx >= 0 && !cfdata->cur_fallbacks_enabled) return;
+
+   count = e_widget_ilist_count(cfdata->gui.fallback_list);
+ 
+   if (count == 0 || indx < 0)
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_remove, 1);
+     }
+   else 
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_remove, 0);
+     }
+   
+   if (count == 1 || indx < 0)
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_up, 1);
+       e_widget_disabled_set(cfdata->gui.fallback_down, 1);
+     }
+   else if (indx == 0)
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_up, 1);
+       e_widget_disabled_set(cfdata->gui.fallback_down, 0);
+     }
+   else if (indx + 1 == count)
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_up, 0);
+       e_widget_disabled_set(cfdata->gui.fallback_down, 1);
+     }
+   else
+     {
+       e_widget_disabled_set(cfdata->gui.fallback_up, 0);
+       e_widget_disabled_set(cfdata->gui.fallback_down, 0);
+     } 
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- e_widget_ilist.c    1 Apr 2006 09:24:56 -0000       1.14
+++ e_widget_ilist.c    4 Apr 2006 14:00:19 -0000       1.15
@@ -166,6 +166,24 @@
    e_ilist_remove_label(wd->o_ilist, label);
 }
 
+EAPI const char *
+e_widget_ilist_nth_label_get(Evas_Object *obj, int n)
+{
+    E_Widget_Data *wd;
+   
+   wd = e_widget_data_get(obj);
+   return e_ilist_nth_label_get(wd->o_ilist, n);
+}
+
+EAPI void
+e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
+{
+    E_Widget_Data *wd;
+   
+   wd = e_widget_data_get(obj);
+   e_ilist_nth_label_set(wd->o_ilist, n, label);
+}
+
 EAPI int
 e_widget_ilist_count(Evas_Object *obj)
 {
@@ -179,8 +197,9 @@
 e_widget_ilist_clear(Evas_Object *obj) 
 {
    E_Widget_Data *wd;
+/*
    int mw, mh, vw, vh, w, h;
-   
+ */ 
    wd = e_widget_data_get(obj);
    e_ilist_clear(wd->o_ilist);
 
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- e_widget_ilist.h    1 Apr 2006 09:24:56 -0000       1.8
+++ e_widget_ilist.h    4 Apr 2006 14:00:19 -0000       1.9
@@ -16,6 +16,8 @@
 EAPI const char *e_widget_ilist_selected_label_get(Evas_Object *obj);
 EAPI void e_widget_ilist_remove_num(Evas_Object *obj, int n);
 EAPI void e_widget_ilist_remove_label(Evas_Object *obj, const char *label);
+EAPI const char *e_widget_ilist_nth_label_get(Evas_Object *obj, int n);
+EAPI void e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char 
*label);
 EAPI int e_widget_ilist_count(Evas_Object *obj);
 EAPI void e_widget_ilist_clear(Evas_Object *obj);
 




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to