Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


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


Log Message:
Give menu apps dialogs (favs, ibar, etc, etc) ability to move items up/down
in the list. Allows user to "customize" their order in the menus, as per
ManoWarrior feature request.

Added some API to ilist widget to help with this. iList can now do
append_relative, prepend, and prepend_relative.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- e_widget_ilist.h    7 Jun 2007 03:49:09 -0000       1.20
+++ e_widget_ilist.h    10 Jul 2007 11:15:34 -0000      1.21
@@ -10,6 +10,9 @@
 EAPI void         e_widget_ilist_freeze(Evas_Object *obj);
 EAPI void         e_widget_ilist_thaw(Evas_Object *obj);
 EAPI void         e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, 
const char *label, void (*func) (void *data), void *data, const char *val);
+EAPI void         e_widget_ilist_append_relative(Evas_Object *obj, Evas_Object 
*icon, const char *label, void (*func) (void *data), void *data, const char 
*val, int relative);
+EAPI void         e_widget_ilist_prepend(Evas_Object *obj, Evas_Object *icon, 
const char *label, void (*func) (void *data), void *data, const char *val);
+EAPI void         e_widget_ilist_prepend_relative(Evas_Object *obj, 
Evas_Object *icon, const char *label, void (*func) (void *data), void *data, 
const char *val, int relative);
 EAPI void         e_widget_ilist_header_append(Evas_Object *obj, Evas_Object 
*icon, const char *label);
 EAPI void         e_widget_ilist_selector_set(Evas_Object *obj, int selector);
 EAPI void         e_widget_ilist_go(Evas_Object *obj);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_ilist.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -3 -r1.36 -r1.37
--- e_widget_ilist.c    7 Jun 2007 03:49:09 -0000       1.36
+++ e_widget_ilist.c    10 Jul 2007 11:15:34 -0000      1.37
@@ -100,6 +100,79 @@
 }
 
 EAPI void
+e_widget_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char 
*label, void (*func) (void *data), void *data, const char *val, int relative)
+{
+   E_Widget_Data *wd;
+   E_Widget_Callback *wcb, *rcb;
+   
+   wd = e_widget_data_get(obj);
+   wcb = E_NEW(E_Widget_Callback, 1);
+   if (!wcb) return;
+   wcb->func = func;
+   wcb->data = data;
+   if (val) wcb->value = strdup(val);
+
+   rcb = evas_list_nth(wd->callbacks, relative);
+   if (rcb) 
+     {
+       wd->callbacks = evas_list_append_relative(wd->callbacks, wcb, rcb);
+       e_ilist_append_relative(wd->o_ilist, icon, label, 0, 
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, relative);
+     }
+   else 
+     {
+       wd->callbacks = evas_list_append(wd->callbacks, 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_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, 
void (*func) (void *data), void *data, const char *val)
+{
+   E_Widget_Data *wd;
+   E_Widget_Callback *wcb;
+   
+   wd = e_widget_data_get(obj);
+   wcb = E_NEW(E_Widget_Callback, 1);
+   if (!wcb) return;
+   wcb->func = func;
+   wcb->data = data;
+   if (val) wcb->value = strdup(val);
+   wd->callbacks = evas_list_prepend(wd->callbacks, wcb);
+   e_ilist_prepend(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_prepend_relative(Evas_Object *obj, Evas_Object *icon, const 
char *label, void (*func) (void *data), void *data, const char *val, int 
relative)
+{
+   E_Widget_Data *wd;
+   E_Widget_Callback *wcb, *rcb;
+   
+   wd = e_widget_data_get(obj);
+   wcb = E_NEW(E_Widget_Callback, 1);
+   if (!wcb) return;
+   wcb->func = func;
+   wcb->data = data;
+   if (val) wcb->value = strdup(val);
+   
+   rcb = evas_list_nth(wd->callbacks, relative);
+   if (rcb) 
+     {
+       wd->callbacks = evas_list_prepend_relative(wd->callbacks, wcb, rcb);
+       e_ilist_prepend_relative(wd->o_ilist, icon, label, 0, 
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, relative);
+     }
+   else 
+     {
+       wd->callbacks = evas_list_prepend(wd->callbacks, wcb);
+       e_ilist_prepend(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, const char 
*label)
 {
    E_Widget_Data *wd;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_ilist.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- e_ilist.h   7 Jun 2007 03:49:09 -0000       1.18
+++ e_ilist.h   10 Jul 2007 11:15:34 -0000      1.19
@@ -21,6 +21,9 @@
 
 EAPI Evas_Object *e_ilist_add                   (Evas *evas);
 EAPI void         e_ilist_append                (Evas_Object *obj, Evas_Object 
*icon, const 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_append_relative       (Evas_Object *obj, Evas_Object 
*icon, const char *label, int header, void (*func) (void *data, void *data2), 
void (*func_hilight) (void *data, void *data2), void *data, void *data2, int 
relative);
+EAPI void         e_ilist_prepend               (Evas_Object *obj, Evas_Object 
*icon, const 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_prepend_relative      (Evas_Object *obj, Evas_Object 
*icon, const char *label, int header, void (*func) (void *data, void *data2), 
void (*func_hilight) (void *data, void *data2), void *data, void *data2, int 
relative);
 EAPI void         e_ilist_clear                 (Evas_Object *obj);
 EAPI void         e_ilist_freeze                (Evas_Object *obj);
 EAPI void         e_ilist_thaw                  (Evas_Object *obj);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_ilist.c,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -3 -r1.35 -r1.36
--- e_ilist.c   7 Jun 2007 16:42:51 -0000       1.35
+++ e_ilist.c   10 Jul 2007 11:15:34 -0000      1.36
@@ -95,6 +95,175 @@
 }
 
 EAPI void 
+e_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char 
*label, int header, void (*func) (void *data, void *data2), void 
(*func_hilight) (void *data, void *data2), void *data, void *data2, int 
relative) 
+{
+   E_Ilist_Item *si, *ri;
+   Evas_Coord mw = 0, mh = 0;
+   
+   API_ENTRY return;
+   si = E_NEW(E_Ilist_Item, 1);
+   si->sd = sd;
+   si->o_base = edje_object_add(evas_object_evas_get(sd->o_smart));
+   
+   if (header) 
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets", 
+                            "e/widgets/ilist_header");
+   else if (evas_list_count(sd->items) & 0x1)
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist_odd");
+   else
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist");
+   if (label)
+     edje_object_part_text_set(si->o_base, "e.text.label", label);
+   si->o_icon = icon;
+   if (si->o_icon) 
+     {
+       edje_extern_object_min_size_set(si->o_icon, sd->iw, sd->ih);
+       edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
+       evas_object_show(si->o_icon);
+     }
+   si->func = func;
+   si->func_hilight = func_hilight;
+   si->data = data;
+   si->data2 = data2;
+   si->header = header;
+   
+   ri = evas_list_nth(sd->items, relative);
+   if (ri)
+     sd->items = evas_list_append_relative(sd->items, si, ri);
+   else
+     sd->items = evas_list_append(sd->items, si);
+     
+   edje_object_size_min_calc(si->o_base, &mw, &mh);
+   e_box_freeze(sd->o_box);
+   if (ri)
+     e_box_pack_after(sd->o_box, si->o_base, ri->o_base);
+   else
+     e_box_pack_end(sd->o_box, si->o_base);
+   e_box_pack_options_set(si->o_base, 1, 1, 1, 1, 0.5, 0.5, 
+                         mw, mh, 99999, 99999);
+   e_box_thaw(sd->o_box);
+   
+   evas_object_lower(sd->o_box);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_DOWN,
+                                 _e_smart_event_mouse_down, si);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_UP,
+                                 _e_smart_event_mouse_up, si);
+   evas_object_show(si->o_base);
+}
+
+EAPI void 
+e_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, int 
header, void (*func) (void *data, void *data2), void (*func_hilight) (void 
*data, void *data2), void *data, void *data2) 
+{
+   E_Ilist_Item *si;
+   Evas_Coord mw = 0, mh = 0;
+   
+   API_ENTRY return;
+   si = E_NEW(E_Ilist_Item, 1);
+   si->sd = sd;
+   si->o_base = edje_object_add(evas_object_evas_get(sd->o_smart));
+   
+   if (header) 
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets", 
+                            "e/widgets/ilist_header");
+   else if (evas_list_count(sd->items) & 0x1)
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist_odd");
+   else
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist");
+   if (label)
+     edje_object_part_text_set(si->o_base, "e.text.label", label);
+   si->o_icon = icon;
+   if (si->o_icon) 
+     {
+       edje_extern_object_min_size_set(si->o_icon, sd->iw, sd->ih);
+       edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
+       evas_object_show(si->o_icon);
+     }
+   si->func = func;
+   si->func_hilight = func_hilight;
+   si->data = data;
+   si->data2 = data2;
+   si->header = header;
+   sd->items = evas_list_prepend(sd->items, si);
+   
+   edje_object_size_min_calc(si->o_base, &mw, &mh);
+   e_box_freeze(sd->o_box);
+   e_box_pack_start(sd->o_box, si->o_base);
+   e_box_pack_options_set(si->o_base, 1, 1, 1, 1, 0.5, 0.5, 
+                         mw, mh, 99999, 99999);
+   e_box_thaw(sd->o_box);
+   
+   evas_object_lower(sd->o_box);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_DOWN,
+                                 _e_smart_event_mouse_down, si);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_UP,
+                                 _e_smart_event_mouse_up, si);
+   evas_object_show(si->o_base);
+}
+
+EAPI void 
+e_ilist_prepend_relative(Evas_Object *obj, Evas_Object *icon, const char 
*label, int header, void (*func) (void *data, void *data2), void 
(*func_hilight) (void *data, void *data2), void *data, void *data2, int 
relative) 
+{
+   E_Ilist_Item *si, *ri;
+   Evas_Coord mw = 0, mh = 0;
+   
+   API_ENTRY return;
+   si = E_NEW(E_Ilist_Item, 1);
+   si->sd = sd;
+   si->o_base = edje_object_add(evas_object_evas_get(sd->o_smart));
+   
+   if (header) 
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets", 
+                            "e/widgets/ilist_header");
+   else if (evas_list_count(sd->items) & 0x1)
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist_odd");
+   else
+     e_theme_edje_object_set(si->o_base, "base/theme/widgets",
+                            "e/widgets/ilist");
+   if (label)
+     edje_object_part_text_set(si->o_base, "e.text.label", label);
+   si->o_icon = icon;
+   if (si->o_icon) 
+     {
+       edje_extern_object_min_size_set(si->o_icon, sd->iw, sd->ih);
+       edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
+       evas_object_show(si->o_icon);
+     }
+   si->func = func;
+   si->func_hilight = func_hilight;
+   si->data = data;
+   si->data2 = data2;
+   si->header = header;
+   
+   ri = evas_list_nth(sd->items, relative);
+   if (ri) 
+     sd->items = evas_list_prepend_relative(sd->items, si, ri);
+   else 
+     sd->items = evas_list_prepend(sd->items, si);
+   
+   edje_object_size_min_calc(si->o_base, &mw, &mh);
+   e_box_freeze(sd->o_box);
+   if (ri)
+     e_box_pack_before(sd->o_box, si->o_base, ri->o_base);
+   else
+     e_box_pack_end(sd->o_box, si->o_base);
+   e_box_pack_options_set(si->o_base, 1, 1, 1, 1, 0.5, 0.5, 
+                         mw, mh, 99999, 99999);
+   e_box_thaw(sd->o_box);
+   
+   evas_object_lower(sd->o_box);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_DOWN,
+                                 _e_smart_event_mouse_down, si);
+   evas_object_event_callback_add(si->o_base, EVAS_CALLBACK_MOUSE_UP,
+                                 _e_smart_event_mouse_up, si);
+   evas_object_show(si->o_base);
+}
+
+EAPI void 
 e_ilist_clear(Evas_Object *obj) 
 {
    API_ENTRY return;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_apps.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -u -3 -r1.71 -r1.72
--- e_int_config_apps.c 4 Jul 2007 11:11:02 -0000       1.71
+++ e_int_config_apps.c 10 Jul 2007 11:15:34 -0000      1.72
@@ -18,6 +18,8 @@
 static void _cb_categories(void *data, void *data2);
 static void _cb_add(void *data, void *data2);
 static void _cb_del(void *data, void *data2);
+static void _cb_up(void *data, void *data2);
+static void _cb_down(void *data, void *data2);
 static int _cb_desktop_name_sort(Efreet_Desktop *a, Efreet_Desktop *b);
 
 static int _save_menu(E_Config_Dialog_Data *cfdata);
@@ -41,6 +43,7 @@
 
    Evas_Object *o_apps, *o_list;
    Evas_Object *o_add, *o_del, *o_categories;
+   Evas_Object *o_up, *o_down;
    Ecore_List *apps;
    const char *category;
    int category_n;
@@ -304,6 +307,18 @@
    e_widget_framelist_object_append(of, ob);
    e_widget_table_object_append(ot, of, 2, 0, 1, 4, 1, 1, 1, 1);
 
+   ob = e_widget_button_add(evas, _("Up"), "widget/up_arrow", 
+                           _cb_up, cfdata, NULL);
+   cfdata->o_up = ob;
+   e_widget_disabled_set(ob, 1);
+   e_widget_table_object_append(ot, ob, 3, 1, 1, 1, 1, 0, 0, 0);
+
+   ob = e_widget_button_add(evas, _("Down"), "widget/down_arrow", 
+                           _cb_down, cfdata, NULL);
+   cfdata->o_down = ob;
+   e_widget_disabled_set(ob, 1);
+   e_widget_table_object_append(ot, ob, 3, 2, 1, 1, 1, 0, 0, 0);
+   
    e_dialog_resizable_set(cfd->dia, 1);
    return ot;
 }
@@ -497,9 +512,21 @@
 _list_cb_selected(void *data) 
 {
    E_Config_Dialog_Data *cfdata;
+   int sel, count;
    
    cfdata = data;
    e_widget_disabled_set(cfdata->o_del, 0);
+
+   count = e_widget_ilist_count(cfdata->o_list);
+   sel = e_widget_ilist_selected_get(cfdata->o_list);
+   if (sel == 0) 
+     e_widget_disabled_set(cfdata->o_up, 1);
+   else
+     e_widget_disabled_set(cfdata->o_up, 0);
+   if (sel < (count -1))
+     e_widget_disabled_set(cfdata->o_down, 0);
+   else
+     e_widget_disabled_set(cfdata->o_down, 1);
 }
 
 static void 
@@ -578,4 +605,96 @@
    if (!desk) return;
    if (ecore_list_goto(cfdata->apps, desk))
      ecore_list_remove(cfdata->apps);
+}
+
+static void 
+_cb_up(void *data, void *data2) 
+{
+   E_Config_Dialog_Data *cfdata;
+   Efreet_Desktop *desk;
+   Evas *evas;
+   Evas_Object *icon;
+   Evas_Coord w;
+   int sel, i;
+
+   cfdata = data;
+   if (!cfdata->apps) return;
+   
+   sel = e_widget_ilist_selected_get(cfdata->o_list);
+   if (sel < 0) return;
+
+   desk = efreet_desktop_get(cfdata->fav);
+   if (!desk) return;
+
+   evas = evas_object_evas_get(cfdata->o_list);
+   evas_event_freeze(evas);
+   edje_freeze();
+   e_widget_ilist_freeze(cfdata->o_list);
+   e_widget_ilist_remove_num(cfdata->o_list, sel);
+   e_widget_ilist_go(cfdata->o_list);
+   
+   icon = e_util_desktop_icon_add(desk, "24x24", evas);
+   e_widget_ilist_prepend_relative(cfdata->o_list, icon, desk->name, 
+                        _list_cb_selected, cfdata, cfdata->fav, (sel - 1));
+   e_widget_ilist_selected_set(cfdata->o_list, (sel - 1));
+   e_widget_ilist_go(cfdata->o_list);
+   e_widget_min_size_get(cfdata->o_list, &w, NULL);
+   e_widget_min_size_set(cfdata->o_list, w, 200);
+   e_widget_ilist_thaw(cfdata->o_list);
+   edje_thaw();
+   evas_event_thaw(evas);
+
+   if (ecore_list_goto(cfdata->apps, desk)) 
+     {
+       i = ecore_list_index(cfdata->apps);
+       ecore_list_remove(cfdata->apps);
+       ecore_list_goto_index(cfdata->apps, (i - 1));
+       ecore_list_insert(cfdata->apps, desk);
+     }
+}
+
+static void 
+_cb_down(void *data, void *data2) 
+{
+   E_Config_Dialog_Data *cfdata;
+   Efreet_Desktop *desk;
+   Evas *evas;
+   Evas_Object *icon;
+   Evas_Coord w;
+   int sel, i;
+
+   cfdata = data;
+   if (!cfdata->apps) return;
+   
+   sel = e_widget_ilist_selected_get(cfdata->o_list);
+   if (sel < 0) return;
+
+   desk = efreet_desktop_get(cfdata->fav);
+   if (!desk) return;
+
+   evas = evas_object_evas_get(cfdata->o_list);
+   evas_event_freeze(evas);
+   edje_freeze();
+   e_widget_ilist_freeze(cfdata->o_list);
+   e_widget_ilist_remove_num(cfdata->o_list, sel);
+   e_widget_ilist_go(cfdata->o_list);
+   
+   icon = e_util_desktop_icon_add(desk, "24x24", evas);
+   e_widget_ilist_append_relative(cfdata->o_list, icon, desk->name, 
+                        _list_cb_selected, cfdata, cfdata->fav, sel);
+   e_widget_ilist_selected_set(cfdata->o_list, (sel + 1));
+   e_widget_ilist_go(cfdata->o_list);
+   e_widget_min_size_get(cfdata->o_list, &w, NULL);
+   e_widget_min_size_set(cfdata->o_list, w, 200);
+   e_widget_ilist_thaw(cfdata->o_list);
+   edje_thaw();
+   evas_event_thaw(evas);
+
+   if (ecore_list_goto(cfdata->apps, desk)) 
+     {
+       i = ecore_list_index(cfdata->apps);
+       ecore_list_remove(cfdata->apps);
+       ecore_list_goto_index(cfdata->apps, (i + 1));
+       ecore_list_insert(cfdata->apps, desk);
+     }
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to