diff --git a/src/bin/e_ilist.c b/src/bin/e_ilist.c index 46448f72c..8ec618d6a 100644 --- a/src/bin/e_ilist.c +++ b/src/bin/e_ilist.c @@ -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) { diff --git a/src/bin/e_ilist.h b/src/bin/e_ilist.h index b528b51e1..47ae0ea4d 100644 --- a/src/bin/e_ilist.h +++ b/src/bin/e_ilist.h @@ -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); diff --git a/src/bin/e_int_config_apps.c b/src/bin/e_int_config_apps.c index 06f498222..d8ed4b3c4 100644 --- a/src/bin/e_int_config_apps.c +++ b/src/bin/e_int_config_apps.c @@ -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); + } +} diff --git a/src/bin/e_widget_ilist.c b/src/bin/e_widget_ilist.c index a1f190031..86fd9fb89 100644 --- a/src/bin/e_widget_ilist.c +++ b/src/bin/e_widget_ilist.c @@ -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) { diff --git a/src/bin/e_widget_ilist.h b/src/bin/e_widget_ilist.h index 92f590ffc..ddda4b324 100644 --- a/src/bin/e_widget_ilist.h +++ b/src/bin/e_widget_ilist.h @@ -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);