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. SVN revision: 30701
This commit is contained in:
parent
ee2298b2db
commit
dc7f614937
|
@ -94,6 +94,175 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, int heade
|
|||
evas_object_show(si->o_base);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -21,6 +21,9 @@ struct _E_Ilist_Item
|
|||
|
||||
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);
|
||||
|
|
|
@ -18,6 +18,8 @@ static void _list_cb_selected(void *data);
|
|||
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 @@ struct _E_Config_Dialog_Data
|
|||
|
||||
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 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
|||
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 @@ static void
|
|||
_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
|
||||
|
@ -579,3 +606,95 @@ _cb_del(void *data, void *data2)
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,79 @@ e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, vo
|
|||
if (icon) evas_object_show(icon);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -10,6 +10,9 @@ EAPI Evas_Object *e_widget_ilist_add(Evas *evas, int icon_w, int icon_h, char **
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue