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