Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_configure.h e_configure.c 


Log Message:
Redo Config Panel as per conversation with raster, using 2 lists now.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_configure.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- e_configure.h       27 Mar 2006 14:46:26 -0000      1.6
+++ e_configure.h       26 Nov 2006 16:10:48 -0000      1.7
@@ -1,6 +1,10 @@
 #ifdef E_TYPEDEFS
 
 typedef struct _E_Configure E_Configure;
+typedef struct _E_Configure_CB E_Configure_CB;
+
+typedef struct _E_Configure_Category E_Configure_Category;
+typedef struct _E_Configure_Item E_Configure_Item;
 
 #else
 #ifndef E_CONFIGURE_H
@@ -8,23 +12,46 @@
 
 #define E_CONFIGURE_TYPE 0xE0b01014
 
-struct _E_Configure
+struct _E_Configure 
 {
-   E_Object             e_obj_inherit;
-      
+   E_Object e_obj_inherit;
+   
    E_Container *con;
-   E_Win       *win;
-   Evas        *evas;
+   E_Win *win;
+   Evas *evas;
    Evas_Object *edje;
-   Evas_Object *ilist;
+   
+   Evas_Object *o_list;
+   Evas_Object *cat_list;
+   Evas_Object *item_list;
    Evas_Object *close;
    
-   Evas_List *cblist;
+   Evas_List *cats;
+};
+
+struct _E_Configure_CB 
+{
+   E_Configure *eco;
+   E_Config_Dialog *(*func) (E_Container *con);
+};
+
+struct _E_Configure_Category 
+{
+   E_Configure *eco;
+   const char *label;
+   
+   Evas_List *items;
+};
+
+struct _E_Configure_Item 
+{
+   E_Configure_CB *cb;
+   
+   const char *label;
+   const char *icon;
 };
 
 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
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_configure.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -3 -r1.72 -r1.73
--- e_configure.c       16 Nov 2006 17:44:20 -0000      1.72
+++ e_configure.c       26 Nov 2006 16:10:48 -0000      1.73
@@ -1,242 +1,318 @@
 #include "e.h"
 
-typedef struct _E_Configure_CB E_Configure_CB;
-
-struct _E_Configure_CB
-{
-   E_Configure *eco;
-   E_Config_Dialog *(*func) (E_Container *con);   
-};
-
-static void _e_configure_free(E_Configure *app);
+static void _e_configure_free(E_Configure *eco);
 static void _e_configure_cb_del_req(E_Win *win);
 static void _e_configure_cb_resize(E_Win *win);
-static void _e_configure_cb_standard(void *data);
 static void _e_configure_cb_close(void *data, void *data2);
+static E_Configure_Category *_e_configure_category_add(E_Configure *eco, char 
*label, char *icon);
+static void _e_configure_category_cb(void *data);
+static E_Configure_Item *_e_configure_item_add(E_Configure_Category *cat, char 
*label, char *icon, E_Config_Dialog *(*func) (E_Container *con));
+static void _e_configure_item_cb(void *data);
 
 static E_Configure *_e_configure = NULL;
 
 EAPI E_Configure *
-e_configure_show(E_Container *con)
+e_configure_show(E_Container *con) 
 {
    E_Configure *eco;
+   E_Configure_Category *cat;
    E_Manager *man;
    Evas_Coord ew, eh, mw, mh;
-
-   if (_e_configure)
+   
+   if (_e_configure) 
      {
-       E_Zone *z;
+       E_Zone *z, *z2;
        
        eco = _e_configure;
        z = e_util_zone_current_get(e_manager_current_get());
-       e_border_uniconify(eco->win->border);
+       z2 = eco->win->border->zone;
        e_win_show(eco->win);
        e_win_raise(eco->win);
-       if (z->container == eco->win->border->zone->container)
+       if (z->container == z2->container)
          e_border_desk_set(eco->win->border, e_desk_current_get(z));
-       else
+       else 
          {
             if (!eco->win->border->sticky)
               e_desk_show(eco->win->border->desk);
-            ecore_x_pointer_warp(eco->win->border->zone->container->win,
-                                 eco->win->border->zone->x + 
(eco->win->border->zone->w / 2),
-                                 eco->win->border->zone->y + 
(eco->win->border->zone->h / 2));
+            ecore_x_pointer_warp(z2->container->win,
+                                 z2->x + (z2->w / 2), z2->y + (z2->h / 2));
          }
        e_border_unshade(eco->win->border, E_DIRECTION_DOWN);
        return NULL;
      }
    
-   if (!con)
+   if (!con) 
      {
        man = e_manager_current_get();
        if (!man) return NULL;
        con = e_container_current_get(man);
-       if (!con) con = e_container_number_get(man, 0);
+       if (!con)
+         con = e_container_number_get(man, 0);
        if (!con) return NULL;
      }
-   
+
    eco = E_OBJECT_ALLOC(E_Configure, E_CONFIGURE_TYPE, _e_configure_free);
    if (!eco) return NULL;
-   eco->win = e_win_new(con);   
-   if (!eco->win)
+   eco->win = e_win_new(con);
+   if (!eco->win) 
      {
        free(eco);
        return NULL;
      }
    eco->win->data = eco;
-   
    eco->con = con;
+   eco->evas = e_win_evas_get(eco->win);
    
    e_win_title_set(eco->win, _("Enlightenment Configuration"));
    e_win_name_class_set(eco->win, "E", "_configure");
    e_win_dialog_set(eco->win, 1);
-   eco->evas = e_win_evas_get(eco->win);
    e_win_delete_callback_set(eco->win, _e_configure_cb_del_req);
-   e_win_resize_callback_set(eco->win, _e_configure_cb_resize);   
+   e_win_resize_callback_set(eco->win, _e_configure_cb_resize);
    e_win_centered_set(eco->win, 1);
-      
+
    eco->edje = edje_object_add(eco->evas);
-   e_theme_edje_object_set(eco->edje, "base/theme/configure",
-                          "e/widgets/configure/main");
-   
-   /* 24 */
-   eco->ilist = e_widget_ilist_add(eco->evas, 32, 32, NULL);
-   e_widget_ilist_selector_set(eco->ilist, 1);
-   e_widget_min_size_get(eco->ilist, &mw, &mh);
-   edje_extern_object_min_size_set(eco->ilist, mw, mh);
-   edje_object_part_swallow(eco->edje, "e.swallow.content", eco->ilist);
-   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/background", 
_("Wallpaper"), e_int_config_wallpaper);
-   e_configure_standard_item_add(eco, "enlightenment/themes", _("Theme"), 
e_int_config_theme);   
-   e_configure_standard_item_add(eco, "enlightenment/colors", _("Colors"), 
e_int_config_color_classes);
-   e_configure_standard_item_add(eco, "enlightenment/fonts", _("Fonts"), 
e_int_config_fonts);
-   e_configure_standard_item_add(eco, "enlightenment/windows", _("Borders"), 
e_int_config_borders);
-   e_configure_standard_item_add(eco, "enlightenment/icon_theme", _("Icon 
Theme"), e_int_config_icon_themes);
-   e_configure_standard_item_add(eco, "enlightenment/mouse", _("Mouse 
Cursor"), e_int_config_cursor);
-   e_configure_standard_item_add(eco, "enlightenment/windows", _("Window 
Display"), e_int_config_window_display);
-   e_configure_standard_item_add(eco, "enlightenment/transitions", 
_("Transitions"), e_int_config_transitions);
-   e_configure_standard_item_add(eco, "enlightenment/shelf", _("Shelves"), 
e_int_config_shelf);
-   
-   e_configure_header_item_add(eco, "enlightenment/screen_setup", _("Screen"));
-   e_configure_standard_item_add(eco, "enlightenment/desktops", _("Virtual 
Desktops"), e_int_config_desks);
-   e_configure_standard_item_add(eco, "enlightenment/screen_resolution", 
_("Screen Resolution"), e_int_config_display);
-   e_configure_standard_item_add(eco, "enlightenment/desklock", _("Screen 
Lock"), e_int_config_desklock);
-   
-   e_configure_header_item_add(eco, "enlightenment/behavior", _("Behavior"));
-   e_configure_standard_item_add(eco, "enlightenment/focus", _("Window 
Focus"), e_int_config_focus);
-   e_configure_standard_item_add(eco, "enlightenment/keys", _("Key Bindings"), 
e_int_config_keybindings);
-   e_configure_standard_item_add(eco, "enlightenment/mouse_clean", _("Mouse 
Bindings"), e_int_config_mousebindings);
-   e_configure_standard_item_add(eco, "enlightenment/menus", _("Menus"), 
e_int_config_menus);
-   
-   e_configure_header_item_add(eco, "enlightenment/misc", _("Miscellaneous"));
+   e_theme_edje_object_set(eco->edje, "base/theme/configure", 
"e/widgets/configure/main");
+
+   eco->o_list = e_widget_list_add(eco->evas, 0, 1);
+   edje_object_part_swallow(eco->edje, "e.swallow.content", eco->o_list);
+
+   /* Category List */
+   eco->cat_list = e_widget_ilist_add(eco->evas, 32, 32, NULL);
+   e_widget_list_object_append(eco->o_list, eco->cat_list, 1, 1, 0.5);
+   
+   /* Item List */
+   eco->item_list = e_widget_ilist_add(eco->evas, 32, 32, NULL);
+   e_widget_list_object_append(eco->o_list, eco->item_list, 1, 1, 0.5);
+   
+   /* Add "Categories" & "Items" Here */
+   cat = _e_configure_category_add(eco, _("Appearance"), 
"enlightenment/appearance");
+   _e_configure_item_add(cat, _("Wallpaper"), "enlightenment/background", 
e_int_config_wallpaper);
+   _e_configure_item_add(cat, _("Theme"), "enlightenment/themes", 
e_int_config_theme);
+   _e_configure_item_add(cat, _("Colors"), "enlightenment/colors", 
e_int_config_color_classes);
+   _e_configure_item_add(cat, _("Fonts"), "enlightenment/fonts", 
e_int_config_fonts);
+   _e_configure_item_add(cat, _("Borders"), "enlightenment/windows", 
e_int_config_borders);
+   _e_configure_item_add(cat, _("Icon Theme"), "enlightenment/icon_theme", 
e_int_config_icon_themes);
+   _e_configure_item_add(cat, _("Mouse Cursor"), "enlightenment/mouse", 
e_int_config_cursor);
+   _e_configure_item_add(cat, _("Window Display"), "enlightenment/windows", 
e_int_config_window_display);
+   _e_configure_item_add(cat, _("Transitions"), "enlightenment/transitions", 
e_int_config_transitions);
+   _e_configure_item_add(cat, _("Shelves"), "enlightenment/shelf", 
e_int_config_shelf);
+
+   /* Preselect "Appearance" */
+   e_widget_ilist_selected_set(eco->cat_list, 0);
+   _e_configure_category_cb(cat);
+
+   cat = _e_configure_category_add(eco, _("Screen"), 
"enlightenment/screen_setup");
+   _e_configure_item_add(cat, _("Virtual Desktops"), "enlightenment/desktops", 
e_int_config_desks);
+   _e_configure_item_add(cat, _("Screen Resolution"), 
"enlightenment/screen_resolution", e_int_config_display);
+   _e_configure_item_add(cat, _("Screen Lock"), "enlightenment/desklock", 
e_int_config_desklock);
+
+   cat = _e_configure_category_add(eco, _("Behavior"), 
"enlightenment/behavior");
+   _e_configure_item_add(cat, _("Window Focus"), "enlightenment/focus", 
e_int_config_focus);
+   _e_configure_item_add(cat, _("Key Bindings"), "enlightenment/keys", 
e_int_config_keybindings);
+   _e_configure_item_add(cat, _("Mouse Bindings"), 
"enlightenment/mouse_clean", e_int_config_mousebindings);
+   _e_configure_item_add(cat, _("Menus"), "enlightenment/menus", 
e_int_config_menus);
+
+   cat = _e_configure_category_add(eco, _("Miscellaneous"), 
"enlightenment/misc");
 #ifdef ENABLE_FAVORITES
-   e_configure_standard_item_add(eco, "enlightenment/applications", 
_("Application Menus"), e_int_config_apps);
+   _e_configure_item_add(cat, _("Application Menus"), 
"enlightenment/applications", e_int_config_apps);
 #else
-   e_configure_standard_item_add(eco, "enlightenment/applications", 
_("Applications Menu"), e_int_config_apps);
+   _e_configure_item_add(cat, _("Applications Menu"), 
"enlightenment/applications", e_int_config_apps);
 #endif
-   e_configure_standard_item_add(eco, "enlightenment/performance", 
_("Performance"), e_int_config_performance);
-   e_configure_standard_item_add(eco, "enlightenment/configuration", 
_("Configuration Dialogs"), e_int_config_cfgdialogs);
-   e_configure_standard_item_add(eco, "enlightenment/intl", _("Language 
Settings"), e_int_config_intl);
-   
-   e_configure_header_item_add(eco, "enlightenment/advanced", _("Advanced"));
-   e_configure_standard_item_add(eco, "enlightenment/startup", _("Startup"), 
e_int_config_startup);
-   e_configure_standard_item_add(eco, "enlightenment/winlist", _("Window 
List"), e_int_config_winlist);
-   e_configure_standard_item_add(eco, "enlightenment/window_manipulation", 
_("Window Manipulation"), e_int_config_window_manipulation);
-   e_configure_standard_item_add(eco, "enlightenment/run", _("Run Command"), 
e_int_config_exebuf);
-   e_configure_standard_item_add(eco, "enlightenment/directories", _("Search 
Directories"), e_int_config_paths);
-   e_configure_standard_item_add(eco, "enlightenment/e", _("File 
Associations"), e_int_config_mime);
+   _e_configure_item_add(cat, _("Performance"), "enlightenment/performance", 
e_int_config_performance);
+   _e_configure_item_add(cat, _("Configuration Dialogs"), 
"enlightenment/configuration", e_int_config_cfgdialogs);
+   _e_configure_item_add(cat, _("Language Settings"), "enlightenment/intl", 
e_int_config_intl);
+
+   cat = _e_configure_category_add(eco, _("Advanced"), 
"enlightenment/advanced");
+   _e_configure_item_add(cat, _("Startup"), "enlightenment/startup", 
e_int_config_startup);
+   _e_configure_item_add(cat, _("Window List"), "enlightenment/winlist", 
e_int_config_winlist);
+   _e_configure_item_add(cat, _("Window Manipulation"), 
"enlightenment/window_manipulation", e_int_config_window_manipulation);
+   _e_configure_item_add(cat, _("Run Command"), "enlightenment/run", 
e_int_config_exebuf);
+   _e_configure_item_add(cat, _("Search Directories"), 
"enlightenment/directories", e_int_config_paths);
+   _e_configure_item_add(cat, _("File Associations"), "enlightenment/e", 
e_int_config_mime);
 
-   e_configure_header_item_add(eco, "enlightenment/extensions", 
_("Extensions"));
-   e_configure_standard_item_add(eco, "enlightenment/modules", _("Modules"), 
e_int_config_modules);
-   
-   /* FIXME: we should have a way for modules to hook in here and add their
-    * own entries
+   cat = _e_configure_category_add(eco, _("Extensions"), 
"enlightenment/extensions");
+   _e_configure_item_add(cat, _("Modules"), "enlightenment/modules", 
e_int_config_modules);
+
+   /* FIXME: we should have a way for modules to hook in here and add their 
own entries 
     * 
-    * e_configure_header_item_add(eco, "enlightenment/extension_config", 
_("Extension Configuration"));
+    * cat = _e_configure_category_add(eco, _("Extension Configuration"), 
"enlightenment/extension_config");
     */
    
-   eco->close = e_widget_button_add(eco->evas, _("Close"), NULL, 
_e_configure_cb_close, eco, NULL);
+   /* Resize the "Category" list */
+   e_widget_min_size_get(eco->cat_list, &mw, &mh);
+   edje_extern_object_min_size_set(eco->cat_list, mw, mh);
+   
+   /* Close Button */
+   eco->close = e_widget_button_add(eco->evas, _("Close"), NULL, 
+                                   _e_configure_cb_close, eco, NULL);
    e_widget_min_size_get(eco->close, &mw, &mh);
    edje_extern_object_min_size_set(eco->close, mw, mh);
    edje_object_part_swallow(eco->edje, "e.swallow.button", eco->close);
-
+   
    edje_object_size_min_calc(eco->edje, &ew, &eh);
    e_win_resize(eco->win, ew, eh);
    e_win_size_min_set(eco->win, ew, eh);
 
-   evas_object_show(eco->ilist);
-   evas_object_show(eco->close);
    evas_object_show(eco->edje);
-
    e_win_show(eco->win);
    eco->win->border->internal_icon = 
evas_stringshare_add("enlightenment/configuration");
 
-   e_widget_focus_set(eco->ilist, 1);
-   e_widget_ilist_go(eco->ilist);
-
-   _e_configure = eco;
+   e_widget_focus_set(eco->cat_list, 1);
+   e_widget_ilist_go(eco->cat_list);
    
+   _e_configure = eco;
    return eco;
 }
 
-EAPI void
-e_configure_standard_item_add(E_Configure *eco, char *icon, char *label, 
E_Config_Dialog *(*func) (E_Container *con))
-{
-   Evas_Object *o;
-   E_Configure_CB *ecocb;
-   
-   o = edje_object_add(eco->evas);
-   e_util_edje_icon_set(o, icon);
-   ecocb = E_NEW(E_Configure_CB, 1);
-   ecocb->eco = eco;
-   ecocb->func = func;
-   eco->cblist = evas_list_append(eco->cblist, ecocb);
-   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)
+static void 
+_e_configure_free(E_Configure *eco) 
 {
    _e_configure = NULL;
-   while (eco->cblist)
+   while (eco->cats) 
      {
-       free(eco->cblist->data);
-       eco->cblist = evas_list_remove_list(eco->cblist, eco->cblist);
+       E_Configure_Category *cat;
+       
+       cat = eco->cats->data;
+       if (!cat) continue;
+       if (cat->label)
+         evas_stringshare_del(cat->label);
+       
+       while (cat->items) 
+         {
+            E_Configure_Item *ci;
+            
+            ci = cat->items->data;
+            if (!ci) continue;
+            if (ci->label)
+              evas_stringshare_del(ci->label);
+            if (ci->icon)
+              evas_stringshare_del(ci->icon);
+            if (ci->cb)
+              free(ci->cb);
+            cat->items = evas_list_remove_list(cat->items, cat->items);
+            E_FREE(ci);
+         }
+       eco->cats = evas_list_remove_list(eco->cats, eco->cats);
+       E_FREE(cat);
      }
    evas_object_del(eco->edje);
-   evas_object_del(eco->ilist);
    e_object_del(E_OBJECT(eco->win));
    free(eco);
 }
 
-static void
-_e_configure_cb_del_req(E_Win *win)
+static void 
+_e_configure_cb_del_req(E_Win *win) 
 {
    E_Configure *eco;
-
+   
    eco = win->data;
-   if (eco) e_object_del(E_OBJECT(eco));
+   if (!eco) return;
+   e_object_del(E_OBJECT(eco));
 }
 
-static void
-_e_configure_cb_resize(E_Win *win)
+static void 
+_e_configure_cb_resize(E_Win *win) 
 {
-   Evas_Coord w, h;
    E_Configure *eco;
-   
-   ecore_evas_geometry_get(win->ecore_evas, NULL, NULL, &w, &h);
+   Evas_Coord w, h;
+
    eco = win->data;
+   if (!eco) return;
+   ecore_evas_geometry_get(win->ecore_evas, NULL, NULL, &w, &h);
    evas_object_resize(eco->edje, w, h);
 }
 
-static void
-_e_configure_cb_standard(void *data)
+static void 
+_e_configure_cb_close(void *data, void *data2) 
 {
-   E_Configure_CB *ecocb;
+   E_Configure *eco;
    
-   ecocb = data;
-   ecocb->func(ecocb->eco->con);
+   eco = data;
+   if (!eco) return;
+   e_object_del(E_OBJECT(eco));
 }
 
-static void
-_e_configure_cb_close(void *data, void *data2) 
+static E_Configure_Category *
+_e_configure_category_add(E_Configure *eco, char *label, char *icon)
 {
+   Evas_Object *o = NULL;
+   E_Configure_Category *cat;
+   
+   if (!eco) return NULL;
+   if (!label) return NULL;
+
+   cat = E_NEW(E_Configure_Category, 1);
+   cat->eco = eco;
+   cat->label = evas_stringshare_add(label);
+   if (icon) 
+     {
+       o = edje_object_add(eco->evas);
+       e_util_edje_icon_set(o, icon);
+     }
+   eco->cats = evas_list_append(eco->cats, cat);
+   
+   e_widget_ilist_append(eco->cat_list, o, label, _e_configure_category_cb, 
cat, NULL);
+   return cat;
+}
+
+static void 
+_e_configure_category_cb(void *data) 
+{
+   E_Configure_Category *cat;
    E_Configure *eco;
+   Evas_List *l;
    
-   eco = data;
-   if (eco) e_object_del(E_OBJECT(eco));
+   cat = data;
+   if (!cat) return;
+   eco = cat->eco;
+   
+   e_widget_ilist_clear(eco->item_list);
+   for (l = cat->items; l; l = l->next) 
+     {
+       E_Configure_Item *ci;
+       Evas_Object *o = NULL;
+       
+       ci = l->data;
+       if (!ci) continue;
+       if (ci->icon) 
+         {
+            o = edje_object_add(eco->evas);
+            e_util_edje_icon_set(o, ci->icon);
+         }
+       e_widget_ilist_append(eco->item_list, o, ci->label, 
_e_configure_item_cb, ci, NULL);
+     }
+   e_widget_ilist_go(eco->item_list);
+}
+
+static E_Configure_Item *
+_e_configure_item_add(E_Configure_Category *cat, char *label, char *icon, 
E_Config_Dialog *(*func) (E_Container *con))
+{
+   E_Configure_Item *ci;
+   E_Configure_CB *cb;
+   
+   if (!cat) return NULL;
+   if (!label) return NULL;
+   
+   ci = E_NEW(E_Configure_Item, 1);
+   cb = E_NEW(E_Configure_CB, 1);
+   cb->eco = cat->eco;
+   cb->func = func;
+   ci->cb = cb;
+   ci->label = evas_stringshare_add(label);
+   if (icon)
+     ci->icon = evas_stringshare_add(icon);
+   cat->items = evas_list_append(cat->items, ci);
+   return ci;
+}
+
+static void 
+_e_configure_item_cb(void *data) 
+{
+   E_Configure_Item *ci;
+   E_Configure_CB *cb;
+   
+   ci = data;
+   if (!ci) return;
+   cb = ci->cb;
+   cb->func(cb->eco->con);
 }



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to