add ilist headers - much easier to organise things now
authorCarsten Haitzler <raster@rasterman.com>
Mon, 27 Mar 2006 14:46:26 +0000 (14:46 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 27 Mar 2006 14:46:26 +0000 (14:46 +0000)
SVN revision: 21513

data/themes/default_ilist.edc
src/bin/e_configure.c
src/bin/e_configure.h
src/bin/e_ilist.c
src/bin/e_ilist.h
src/bin/e_test.c
src/bin/e_widget_ilist.c
src/bin/e_widget_ilist.h

index 4bb13b5..db08b18 100644 (file)
@@ -935,3 +935,78 @@ group {
       }
    }
 }
+
+group {
+   name: "widgets/ilist_header";
+   parts {
+      part {
+        name: "base";
+        mouse_events: 0;
+        description {
+           state: "default" 0.0;
+           color: 64 64 64 255;
+           image {
+              normal: "e17_ilist_bg0.png";
+              border: 3 3 3 3;
+           }
+        }
+      }
+      part {
+        name:          "icon_swallow";
+        type:          SWALLOW;
+        mouse_events:  0;
+        description {
+           state:    "default" 0.0;
+           align:    0.0 0.5;
+           aspect:   1.0 1.0;
+           aspect_preference: VERTICAL;
+//         fixed:    1 1;
+           rel1 {
+              relative: 0.0  0.0;
+              offset:   4    4;
+           }
+           rel2 {
+              relative: 0.0  1.0;
+              offset:   4   -5;
+           }
+        }
+      }
+      part {
+        name:           "label";
+        type:           TEXT;
+        effect:         SOFT_SHADOW;
+        mouse_events:   0;
+        description {
+           state: "default" 0.0;
+           min:      16 16;
+           rel1 {
+              to_x:     "icon_swallow";
+              relative: 1.0  0.0;
+              offset:   16 4;
+           }
+           rel2 {
+              relative: 1.0  1.0;
+              offset:   -5 -5;
+           }
+           color: 255 255 255 255;
+           color2: 0 0 0 64;
+           text {
+              text:     "Item Label";
+              font:     "Edje-Vera-Bold";
+              size:     16;
+              min:      1 1;
+              align:    0.0 0.5;
+              text_class: "ilist_item";               
+           }
+        }
+      }
+      part {
+        name:           "event";
+        type:           RECT;
+        description {
+           state: "default" 0.0;
+           color: 0 0 0 0;
+        }
+      }
+   }
+}
index fb94d7d..910c60b 100644 (file)
@@ -63,24 +63,35 @@ e_configure_show(E_Container *con)
    edje_object_part_text_set(eco->edje, "title", _("Configuration Panel"));
 
    /* add items here */
+   e_configure_header_item_add(eco, "enlightenment/appearance", _("Appearance"));
    e_configure_standard_item_add(eco, "enlightenment/desktops", _("Background Settings"), e_int_config_background);
    e_configure_standard_item_add(eco, "enlightenment/themes", _("Theme Selector"), e_int_config_theme);   
-   e_configure_standard_item_add(eco, "enlightenment/modules", _("Module Settings"), e_int_config_modules);
-   e_configure_standard_item_add(eco, "enlightenment/configuration", _("Config Dialog Settings"), e_int_config_cfgdialogs);
+   e_configure_standard_item_add(eco, "enlightenment/e", _("Font Display Hinting"), e_int_config_hinting);
    e_configure_standard_item_add(eco, "enlightenment/mouse", _("Cursor Settings"), e_int_config_cursor);
+   e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Display Settings"), e_int_config_window_display);
+   
+   e_configure_header_item_add(eco, "enlightenment/extensions", _("Extensions"));
+   e_configure_standard_item_add(eco, "enlightenment/modules", _("Module Settings"), e_int_config_modules);
+   
+   e_configure_header_item_add(eco, "enlightenment/screen_setup", _("Screen"));
    e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Settings"), e_int_config_desks);
-   e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Lock Settings"), e_int_config_desklock);
    e_configure_standard_item_add(eco, "enlightenment/desktops", _("Display Settings"), e_int_config_display);
+   e_configure_standard_item_add(eco, "enlightenment/desktops", _("Desktop Lock Settings"), e_int_config_desklock);
+   
+   e_configure_header_item_add(eco, "enlightenment/behavior", _("Behavior"));
    e_configure_standard_item_add(eco, "enlightenment/e", _("Focus Settings"), e_int_config_focus);
-   e_configure_standard_item_add(eco, "enlightenment/e", _("Font Display Hinting"), e_int_config_hinting);
    e_configure_standard_item_add(eco, "enlightenment/e", _("Key Binding Settings"), e_int_config_keybindings);
    e_configure_standard_item_add(eco, "enlightenment/favorites", _("Menu Settings"), e_int_config_menus);
+   
+   e_configure_header_item_add(eco, "enlightenment/misc", _("Miscellaneous"));
    e_configure_standard_item_add(eco, "enlightenment/configuration", _("Performance Settings"), e_int_config_performance);
-   e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command Settings"), e_int_config_exebuf);
+   e_configure_standard_item_add(eco, "enlightenment/configuration", _("Config Dialog Settings"), e_int_config_cfgdialogs);
+   
+   e_configure_header_item_add(eco, "enlightenment/advanced", _("Advanced"));
    e_configure_standard_item_add(eco, "enlightenment/run", _("Startup Settings"), e_int_config_startup);
    e_configure_standard_item_add(eco, "enlightenment/windows", _("Window List Settings"), e_int_config_winlist);
-   e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Display Settings"), e_int_config_window_display);
    e_configure_standard_item_add(eco, "enlightenment/windows", _("Window Manipulation Settings"), e_int_config_window_manipulation);
+   e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command Settings"), e_int_config_exebuf);
    
    /* FIXME: we should have a way for modules to hook in here and add their
     * own entries
@@ -122,6 +133,16 @@ e_configure_standard_item_add(E_Configure *eco, char *icon, char *label, E_Confi
    e_widget_ilist_append(eco->ilist, o, label, _e_configure_cb_standard, ecocb, NULL);
 }
 
+EAPI void
+e_configure_header_item_add(E_Configure *eco, char *icon, char *label)
+{
+   Evas_Object *o;
+   
+   o = edje_object_add(eco->evas);
+   e_util_edje_icon_set(o, icon);
+   e_widget_ilist_header_append(eco->ilist, o, label);
+}
+
 /* local subsystem functions */
 static void
 _e_configure_free(E_Configure *eco)
index 466b0c8..2ac5edb 100644 (file)
@@ -24,6 +24,7 @@ struct _E_Configure
 
 EAPI E_Configure *e_configure_show(E_Container *con);
 EAPI void         e_configure_standard_item_add(E_Configure *eco, char *icon, char *label, E_Config_Dialog *(*func) (E_Container *con));
+EAPI void         e_configure_header_item_add(E_Configure *eco, char *icon, char *label);
     
 #endif
 #endif
index 7130aeb..79007aa 100644 (file)
@@ -30,6 +30,7 @@ struct _E_Smart_Item
    void         (*func_hilight) (void *data, void *data2);
    void          *data;
    void          *data2;
+   unsigned char  header : 1;
 };
 
 /* local subsystem functions */
@@ -92,7 +93,7 @@ e_ilist_icon_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
 }
 
 EAPI void
-e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2)
+e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, int header, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2)
 {
    E_Smart_Item *si;
    Evas_Coord mw = 0, mh = 0;
@@ -101,12 +102,15 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (v
    si = E_NEW(E_Smart_Item, 1);
    si->sd = sd;
    si->base_obj = edje_object_add(evas_object_evas_get(sd->smart_obj));
-
-   if (evas_list_count(sd->items) & 0x1)
-      e_theme_edje_object_set(si->base_obj, "base/theme/widgets",
+   
+   if (header)
+     e_theme_edje_object_set(si->base_obj, "base/theme/widgets",
+                            "widgets/ilist_header");
+   else if (evas_list_count(sd->items) & 0x1)
+     e_theme_edje_object_set(si->base_obj, "base/theme/widgets",
                             "widgets/ilist_odd");
    else
-      e_theme_edje_object_set(si->base_obj, "base/theme/widgets",
+     e_theme_edje_object_set(si->base_obj, "base/theme/widgets",
                             "widgets/ilist");
    edje_object_part_text_set(si->base_obj, "label", label);
    si->icon_obj = icon;
@@ -120,6 +124,7 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (v
    si->func_hilight = func_hilight;
    si->data = data;
    si->data2 = data2;
+   si->header = header;
    sd->items = evas_list_append(sd->items, si);
    edje_object_size_min_calc(si->base_obj, &mw, &mh);
    e_box_pack_end(sd->box_obj, si->base_obj);
@@ -364,17 +369,41 @@ _e_smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
    ev = event_info;
    if (!strcmp(ev->keyname, "Up"))
      {
-       int n;
-       
-       n = e_ilist_selected_get(sd->smart_obj);
-       e_ilist_selected_set(sd->smart_obj, n - 1);
+       int n, ns;
+       E_Smart_Item *si;
+          
+       ns = e_ilist_selected_get(sd->smart_obj);
+       do
+         {
+            n = e_ilist_selected_get(sd->smart_obj);
+            if (n == 0)
+              {
+                 e_ilist_selected_set(sd->smart_obj, ns);
+                 break;
+              }
+            e_ilist_selected_set(sd->smart_obj, n - 1);
+            si = evas_list_nth(sd->items, sd->selected);
+         }
+       while ((si) && (si->header));
      }
    else if (!strcmp(ev->keyname, "Down"))
      {
-       int n;
+       int n, ns;
+        E_Smart_Item *si;
        
-       n = e_ilist_selected_get(sd->smart_obj);
-       e_ilist_selected_set(sd->smart_obj, n + 1);
+       ns = e_ilist_selected_get(sd->smart_obj);
+       do
+         {
+            n = e_ilist_selected_get(sd->smart_obj);
+            if (n == (evas_list_count(sd->items) - 1))
+              {
+                 e_ilist_selected_set(sd->smart_obj, ns);
+                 break;
+              }
+            e_ilist_selected_set(sd->smart_obj, n + 1);
+            si = evas_list_nth(sd->items, sd->selected);
+         }
+       while ((si) && (si->header));
      }
    else if ((!strcmp(ev->keyname, "Return")) ||
            (!strcmp(ev->keyname, "space")))
index 360141e..debb206 100644 (file)
@@ -8,7 +8,7 @@
 
 EAPI Evas_Object *e_ilist_add                   (Evas *evas);
 EAPI void         e_ilist_icon_size_set         (Evas_Object *obj, Evas_Coord w, Evas_Coord h);
-EAPI void         e_ilist_append                (Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2);
+EAPI void         e_ilist_append                (Evas_Object *obj, Evas_Object *icon, char *label, int header, void (*func) (void *data, void *data2), void (*func_hilight) (void *data, void *data2), void *data, void *data2);
 EAPI void         e_ilist_selected_set          (Evas_Object *obj, int n);
 EAPI int          e_ilist_selected_get          (Evas_Object *obj);
 EAPI const char  *e_ilist_selected_label_get    (Evas_Object *obj);
index b6a28e5..c320552 100644 (file)
@@ -443,39 +443,43 @@ _e_test_internal(E_Container *con)
    e_theme_edje_object_set(o4, "base/theme/borders",
                           "widgets/border/default/border");
    e_livethumb_thumb_set(o3, o4);
-   e_ilist_append(o, o3, "Item 1", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Item 1", 0, _e_test_sel, NULL, NULL, NULL);
    
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/palette.png");
-   e_ilist_append(o, o3, "Item 2 (Some really long text goes here for testing)", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Item 2 (Some really long text goes here for testing)", 0, _e_test_sel, NULL, NULL, NULL);
    
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/mozilla.png");
-   e_ilist_append(o, o3, "Item 3 (Medium length)", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Item 3 (Medium length)", 0, _e_test_sel, NULL, NULL, NULL);
    
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/trash_open.png");
-   e_ilist_append(o, o3, "Item POOP", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Item POOP", 0, _e_test_sel, NULL, NULL, NULL);
 
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/watch.png");
-   e_ilist_append(o, o3, "Item BLING BLING", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Item BLING BLING", 0, _e_test_sel, NULL, NULL, NULL);
 
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/quake3.png");
-   e_ilist_append(o, o3, "Sukebelinth", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Sukebelinth", 0, _e_test_sel, NULL, NULL, NULL);
 
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/opera6.png");
-   e_ilist_append(o, o3, "Panties", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "A header", 1, NULL, NULL, NULL, NULL);
+   
+   o3 = e_icon_add(dia->win->evas);
+   e_icon_file_set(o3, "/home/raster/C/stuff/icons/opera6.png");
+   e_ilist_append(o, o3, "Panties", 0, _e_test_sel, NULL, NULL, NULL);
 
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/drawer_open.png");
-   e_ilist_append(o, o3, "Flimbert the cagey", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Flimbert the cagey", 0, _e_test_sel, NULL, NULL, NULL);
 
    o3 = e_icon_add(dia->win->evas);
    e_icon_file_set(o3, "/home/raster/C/stuff/icons/cd.png");
-   e_ilist_append(o, o3, "Norbert", _e_test_sel, NULL, NULL);
+   e_ilist_append(o, o3, "Norbert", 0, _e_test_sel, NULL, NULL, NULL);
    
    e_ilist_min_size_get(o, &mw, &mh);
    evas_object_resize(o, mw, mh);
index 36f023a..8eb73d0 100644 (file)
@@ -73,7 +73,17 @@ e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*f
    wcb->data = data;
    if (val) wcb->value = strdup(val);
    wd->callbacks = evas_list_append(wd->callbacks, wcb);
-   e_ilist_append(wd->o_ilist, icon, label, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
+   e_ilist_append(wd->o_ilist, icon, label, 0, _e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
+   if (icon) evas_object_show(icon);
+}
+
+EAPI void
+e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, char *label)
+{
+   E_Widget_Data *wd;
+   
+   wd = e_widget_data_get(obj);
+   e_ilist_append(wd->o_ilist, icon, label, 1, NULL, NULL, NULL, NULL);
    if (icon) evas_object_show(icon);
 }
 
index 4f66e36..f8c18f0 100644 (file)
@@ -8,6 +8,7 @@
 
 EAPI Evas_Object *e_widget_ilist_add(Evas *evas, int icon_w, int icon_h, char **value);
 EAPI void e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, char *label, void (*func) (void *data), void *data, char *val);
+EAPI void e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, char *label);
 EAPI void e_widget_ilist_selected_set(Evas_Object *obj, int n);
 EAPI void e_widget_ilist_selector_set(Evas_Object *obj, int selector);
 EAPI void e_widget_ilist_go(Evas_Object *obj);