new, single list module loader dialog.

This dialog was reworked to have one single list instead of two. This
makes the internals way simpler and also fits small screens.

Extra benefit is that we don't need to reload the list, so it's
flicker-free and you don't loose context. Of course it will save some
cpu cycles not having to do these list fills over and over again.

the ilist had to be changed to include an "end" object, in the default
theme it is at the right. It will use a part named
e/widget/ilist/toggle_end to present the selected state. (The
favorites/heart icon was choosen because it is red and thus easily
visible in both black and white background -- selected/unselected).



SVN revision: 46813
This commit is contained in:
Gustavo Sverzut Barbieri 2010-03-03 04:10:04 +00:00
parent a5fe371316
commit 073a946433
6 changed files with 876 additions and 628 deletions

View File

@ -21141,8 +21141,9 @@ group { name: "e/toolbar/default/base";
offset: 4 4;
}
rel2 {
to_x: "e.swallow.end";
relative: 1.0 1.0;
offset: -5 -5;
offset: -1 -5;
}
color: 0 0 0 255;
color3: 0 0 0 0;
@ -21162,6 +21163,24 @@ group { name: "e/toolbar/default/base";
color_class: "ilist_item";
}
}
part {
name: "e.swallow.end";
type: SWALLOW;
description {
state: "default" 0.0;
align: 1.0 0.5;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
rel1 {
relative: 1.0 0.0;
offset: -5 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
}
}
}
part { name: "fg1";
mouse_events: 0;
description { state: "default" 0.0;
@ -21320,8 +21339,9 @@ group { name: "e/toolbar/default/base";
offset: 4 4;
}
rel2 {
to_x: "e.swallow.end";
relative: 1.0 1.0;
offset: -5 -5;
offset: -1 -5;
}
color: 0 0 0 255;
color3: 0 0 0 0;
@ -21341,6 +21361,24 @@ group { name: "e/toolbar/default/base";
color_class: "ilist_item";
}
}
part {
name: "e.swallow.end";
type: SWALLOW;
description {
state: "default" 0.0;
align: 1.0 0.5;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
rel1 {
relative: 1.0 0.0;
offset: -5 4;
}
rel2 {
relative: 1.0 1.0;
offset: -5 -5;
}
}
}
part { name: "fg1";
mouse_events: 0;
description { state: "default" 0.0;
@ -21795,6 +21833,62 @@ group { name: "e/toolbar/default/base";
}
}
group { name: "e/widgets/ilist/toggle_end";
images {
image: "bt_sm_base1.png" COMP;
image: "bt_sm_shine.png" COMP;
image: "bt_sm_hilight.png" COMP;
image: "ilist_1.png" COMP;
image: "ilist_item_shadow.png" COMP;
}
parts {
part {
name: "icon";
type: IMAGE;
description {
state: "default" 0.0;
color: 255 255 255 0;
visible: 0;
align: 1.0 0.5;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
rel1 {
relative: 0.0 0.0;
offset: 4 4;
}
rel2 {
relative: 0.0 1.0;
offset: 4 -5;
}
image.normal: "icon_favorites.png";
}
description {
state: "visible" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
visible: 1;
}
}
}
programs {
program {
signal: "e,state,checked";
source: "e";
action: STATE_SET "visible" 0.0;
target: "icon";
transition: LINEAR 0.1;
}
program {
signal: "e,state,unchecked";
source: "e";
action: STATE_SET "default" 0.0;
target: "icon";
transition: LINEAR 0.1;
}
}
}
group { name: "e/widgets/entry";
// min: 12 12;
images.image: "inset_sunk.png" COMP;

View File

@ -59,7 +59,7 @@ 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)
e_ilist_append(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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;
@ -103,6 +103,20 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, int heade
edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
evas_object_show(si->o_icon);
}
si->o_end = end;
if (si->o_end)
{
Evas_Coord ew = 0, eh = 0;
evas_object_size_hint_min_get(si->o_end, &ew, &eh);
if ((ew <= 0) || (eh <= 0))
{
ew = sd->iw;
eh = sd->ih;
}
edje_extern_object_min_size_set(si->o_end, ew, eh);
edje_object_part_swallow(si->o_base, "e.swallow.end", si->o_end);
evas_object_show(si->o_end);
}
si->func = func;
si->func_hilight = func_hilight;
si->data = data;
@ -132,7 +146,7 @@ e_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, int heade
}
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_append_relative(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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;
@ -176,6 +190,20 @@ e_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char *label,
edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
evas_object_show(si->o_icon);
}
si->o_end = end;
if (si->o_end)
{
Evas_Coord ew = 0, eh = 0;
evas_object_size_hint_min_get(si->o_end, &ew, &eh);
if ((ew <= 0) || (eh <= 0))
{
ew = sd->iw;
eh = sd->ih;
}
edje_extern_object_min_size_set(si->o_end, ew, eh);
edje_object_part_swallow(si->o_base, "e.swallow.end", si->o_end);
evas_object_show(si->o_end);
}
si->func = func;
si->func_hilight = func_hilight;
si->data = data;
@ -213,7 +241,7 @@ e_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char *label,
}
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_prepend(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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;
@ -241,6 +269,20 @@ e_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, int head
edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
evas_object_show(si->o_icon);
}
si->o_end = end;
if (si->o_end)
{
Evas_Coord ew = 0, eh = 0;
evas_object_size_hint_min_get(si->o_end, &ew, &eh);
if ((ew <= 0) || (eh <= 0))
{
ew = sd->iw;
eh = sd->ih;
}
edje_extern_object_min_size_set(si->o_end, ew, eh);
edje_object_part_swallow(si->o_base, "e.swallow.end", si->o_end);
evas_object_show(si->o_end);
}
si->func = func;
si->func_hilight = func_hilight;
si->data = data;
@ -264,7 +306,7 @@ e_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, int head
}
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_prepend_relative(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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;
@ -292,6 +334,20 @@ e_ilist_prepend_relative(Evas_Object *obj, Evas_Object *icon, const char *label,
edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
evas_object_show(si->o_icon);
}
si->o_end = end;
if (si->o_end)
{
Evas_Coord ew = 0, eh = 0;
evas_object_size_hint_min_get(si->o_end, &ew, &eh);
if ((ew <= 0) || (eh <= 0))
{
ew = sd->iw;
eh = sd->ih;
}
edje_extern_object_min_size_set(si->o_end, ew, eh);
edje_object_part_swallow(si->o_base, "e.swallow.end", si->o_end);
evas_object_show(si->o_end);
}
si->func = func;
si->func_hilight = func_hilight;
si->data = data;
@ -334,6 +390,7 @@ e_ilist_clear(Evas_Object *obj)
{
if (!si) continue;
if (si->o_icon) evas_object_del(si->o_icon);
if (si->o_end) evas_object_del(si->o_end);
evas_object_del(si->o_base);
E_FREE(si);
}
@ -558,6 +615,20 @@ e_ilist_selected_icon_get(Evas_Object *obj)
return NULL;
}
EAPI Evas_Object *
e_ilist_selected_end_get(Evas_Object *obj)
{
E_Ilist_Item *si = NULL;
API_ENTRY return NULL;
if (!sd->items) return NULL;
if (sd->multi_select) return NULL;
if (sd->selected < 0) return NULL;
si = eina_list_nth(sd->items, sd->selected);
if (si) return si->o_end;
return NULL;
}
EAPI void
e_ilist_selected_geometry_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
@ -605,6 +676,7 @@ e_ilist_remove_num(Evas_Object *obj, int n)
if (sd->selected == n) sd->selected = -1;
if (si->o_icon) evas_object_del(si->o_icon);
if (si->o_end) evas_object_del(si->o_end);
evas_object_del(si->o_base);
E_FREE(si);
}
@ -669,7 +741,41 @@ e_ilist_nth_icon_set(Evas_Object *obj, int n, Evas_Object *icon)
}
}
EAPI int
EAPI Evas_Object *
e_ilist_nth_end_get(Evas_Object *obj, int n)
{
E_Ilist_Item *si = NULL;
API_ENTRY return NULL;
if (!sd->items) return NULL;
si = eina_list_nth(sd->items, n);
if (si) return si->o_end;
return NULL;
}
EAPI void
e_ilist_nth_end_set(Evas_Object *obj, int n, Evas_Object *end)
{
E_Ilist_Item *si = NULL;
API_ENTRY return;
if (!sd->items) return;
if (!(si = eina_list_nth(sd->items, n))) return;
if (si->o_end)
{
edje_object_part_unswallow(si->o_base, si->o_end);
evas_object_del(si->o_end);
}
si->o_end = end;
if (si->o_end)
{
edje_extern_object_min_size_set(si->o_end, sd->iw, sd->ih);
edje_object_part_swallow(si->o_base, "e.swallow.end", si->o_end);
evas_object_show(si->o_end);
}
}
EAPI Eina_Bool
e_ilist_nth_is_header(Evas_Object *obj, int n)
{
E_Ilist_Item *si = NULL;
@ -712,6 +818,19 @@ e_ilist_icon_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
if (!si->o_icon) continue;
edje_extern_object_min_size_set(si->o_icon, w, h);
edje_object_part_swallow(si->o_base, "e.swallow.icon", si->o_icon);
if (si->o_end)
{
Evas_Coord ew = 0, eh = 0;
evas_object_size_hint_min_get(si->o_end, &ew, &eh);
if ((ew <= 0) || (eh <= 0))
{
ew = w;
eh = h;
}
edje_extern_object_min_size_set(si->o_end, ew, eh);
}
edje_object_size_min_calc(si->o_base, &mw, &mh);
e_box_pack_options_set(si->o_icon, 1, 1, 1, 0, 0.5, 0.5,
mw, mh, 99999, 99999);
@ -806,24 +925,19 @@ _e_smart_init(void)
{
if (_e_smart) return;
{
static const Evas_Smart_Class sc =
static Evas_Smart_Class sc = EVAS_SMART_CLASS_INIT_NAME_VERSION(SMART_NAME);
if (!sc.add)
{
SMART_NAME,
EVAS_SMART_CLASS_VERSION,
_e_smart_add,
_e_smart_del,
_e_smart_move,
_e_smart_resize,
_e_smart_show,
_e_smart_hide,
_e_smart_color_set,
_e_smart_clip_set,
_e_smart_clip_unset,
NULL,
NULL,
NULL,
NULL
};
sc.add = _e_smart_add;
sc.del = _e_smart_del;
sc.move = _e_smart_move;
sc.resize = _e_smart_resize;
sc.show = _e_smart_show;
sc.hide = _e_smart_hide;
sc.color_set = _e_smart_color_set;
sc.clip_set = _e_smart_clip_set;
sc.clip_unset = _e_smart_clip_unset;
}
_e_smart = evas_smart_class_new(&sc);
}
}
@ -930,8 +1044,8 @@ _e_smart_reconfigure(E_Smart_Data *sd)
evas_object_resize(sd->o_box, sd->w, sd->h);
}
static void
_e_smart_event_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
static void
_e_smart_event_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
E_Smart_Data *sd;
Evas_Event_Mouse_Down *ev;
@ -951,8 +1065,8 @@ _e_smart_event_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_
evas_object_smart_callback_call(sd->o_smart, "selected", NULL);
}
static void
_e_smart_event_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
static void
_e_smart_event_mouse_up(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
E_Smart_Data *sd;
Evas_Event_Mouse_Up *ev;
@ -1005,7 +1119,7 @@ _e_smart_event_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_in
}
static void
_e_smart_event_key_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
_e_smart_event_key_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info)
{
Evas_Event_Key_Down *ev;
E_Smart_Data *sd;
@ -1050,7 +1164,7 @@ _e_smart_event_key_down(void *data, Evas *evas, Evas_Object *obj, void *event_in
n = ns;
do
{
if (n == (eina_list_count(sd->items) - 1))
if (n == ((int)eina_list_count(sd->items) - 1))
{
n = ns;
break;
@ -1076,7 +1190,7 @@ _e_smart_event_key_down(void *data, Evas *evas, Evas_Object *obj, void *event_in
n = -1;
do
{
if (n == (eina_list_count(sd->items) - 1))
if (n == ((int)eina_list_count(sd->items) - 1))
{
n = ns;
break;

View File

@ -12,6 +12,7 @@ struct _E_Ilist_Item
const char *label;
Evas_Object *o_base;
Evas_Object *o_icon;
Evas_Object *o_end;
unsigned char header : 1;
unsigned char selected : 1;
unsigned char queued : 1;
@ -22,10 +23,10 @@ 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_append (Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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, Evas_Object *end, 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, Evas_Object *end, 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, Evas_Object *end, 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);
@ -42,6 +43,7 @@ EAPI const char *e_ilist_selected_label_get (Evas_Object *obj);
EAPI void *e_ilist_selected_data_get (Evas_Object *obj);
EAPI void *e_ilist_selected_data2_get (Evas_Object *obj);
EAPI Evas_Object *e_ilist_selected_icon_get (Evas_Object *obj);
EAPI Evas_Object *e_ilist_selected_end_get (Evas_Object *obj);
EAPI void e_ilist_selected_geometry_get (Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
EAPI int e_ilist_selected_count_get (Evas_Object *obj);
EAPI void e_ilist_remove_num (Evas_Object *obj, int n);
@ -49,7 +51,9 @@ EAPI const char *e_ilist_nth_label_get (Evas_Object *obj, int n);
EAPI void e_ilist_nth_label_set (Evas_Object *obj, int n, const char *label);
EAPI Evas_Object *e_ilist_nth_icon_get (Evas_Object *obj, int n);
EAPI void e_ilist_nth_icon_set (Evas_Object *obj, int n, Evas_Object *icon);
EAPI int e_ilist_nth_is_header (Evas_Object *obj, int n);
EAPI Evas_Object *e_ilist_nth_end_get (Evas_Object *obj, int n);
EAPI void e_ilist_nth_end_set (Evas_Object *obj, int n, Evas_Object *end);
EAPI Eina_Bool e_ilist_nth_is_header (Evas_Object *obj, int n);
EAPI void e_ilist_nth_geometry_get (Evas_Object *obj, int n, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
EAPI void e_ilist_icon_size_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h);
EAPI Eina_List *e_ilist_items_get (Evas_Object *obj);

File diff suppressed because it is too large Load Diff

View File

@ -31,6 +31,7 @@ struct _E_Widget_Queue_Item
{
int command;
Evas_Object *icon;
Evas_Object *end;
const char *label;
int header;
void (*func) (void *data);
@ -50,7 +51,7 @@ static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *even
static int _queue_timer(void *data);
static void _queue_queue(Evas_Object *obj);
static void _queue_append(Evas_Object *obj, int command, Evas_Object *icon, const char *label, int header, void (*func) (void *data), void *data, const char *val, int relative, int use_relative, int item);
static void _queue_append(Evas_Object *obj, int command, Evas_Object *icon, Evas_Object *end, const char *label, int header, void (*func) (void *data), void *data, const char *val, int relative, int use_relative, int item);
static void _queue_remove(Evas_Object *obj, E_Widget_Queue_Item *qi, int del);
static int
@ -82,13 +83,13 @@ _queue_timer(void *data)
if (qi->use_relative == 0) // append
{
wd->callbacks = eina_list_append(wd->callbacks, wcb);
e_ilist_append(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_append(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
}
else if (qi->use_relative == 2) // prepend
{
wd->callbacks = eina_list_append(wd->callbacks, wcb);
e_ilist_prepend(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_prepend(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
}
else if (qi->use_relative == 1) // append relative
@ -97,13 +98,13 @@ _queue_timer(void *data)
if (rcb)
{
wd->callbacks = eina_list_append_relative(wd->callbacks, wcb, rcb);
e_ilist_append_relative(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_append_relative(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, qi->relative);
}
else
{
wd->callbacks = eina_list_append(wd->callbacks, wcb);
e_ilist_append(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_append(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
}
}
@ -113,17 +114,18 @@ _queue_timer(void *data)
if (rcb)
{
wd->callbacks = eina_list_prepend_relative(wd->callbacks, wcb, rcb);
e_ilist_prepend_relative(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_prepend_relative(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb, qi->relative);
}
else
{
wd->callbacks = eina_list_prepend(wd->callbacks, wcb);
e_ilist_prepend(wd->o_ilist, qi->icon, qi->label, qi->header,
e_ilist_prepend(wd->o_ilist, qi->icon, qi->end, qi->label, qi->header,
_e_wid_cb_item_sel, _e_wid_cb_item_hilight, wd, wcb);
}
}
if (qi->icon) evas_object_show(qi->icon);
if (qi->end) evas_object_show(qi->end);
}
else if (qi->command == 1)
e_ilist_nth_label_set(wd->o_ilist, qi->item, qi->label);
@ -169,6 +171,8 @@ _queue_timer(void *data)
e_ilist_multi_select(wd->o_ilist, qi->item);
else if (qi->command == 8)
e_ilist_range_select(wd->o_ilist, qi->item);
else if (qi->command == 9)
e_ilist_nth_end_set(wd->o_ilist, qi->item, qi->end);
_queue_remove(obj, qi, 0);
num++;
if (num >= 10) break;
@ -194,6 +198,7 @@ static void
_queue_append(Evas_Object *obj,
int command,
Evas_Object *icon,
Evas_Object *end,
const char *label,
int header,
void (*func) (void *data),
@ -211,6 +216,7 @@ _queue_append(Evas_Object *obj,
if (!qi) return;
qi->command = command;
qi->icon = icon;
qi->end = end;
qi->label = eina_stringshare_add(label);
qi->header = header;
qi->func = func;
@ -233,6 +239,7 @@ _queue_remove(Evas_Object *obj, E_Widget_Queue_Item *qi, int del)
if (del)
{
if (qi->icon) evas_object_del(qi->icon);
if (qi->end) evas_object_del(qi->end);
}
eina_stringshare_del(qi->label);
eina_stringshare_del(qi->val);
@ -311,7 +318,7 @@ 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)
{
_queue_append(obj, 0, icon, label, 0, func, data, val, 0, 0, 0);
_queue_append(obj, 0, icon, NULL, label, 0, func, data, val, 0, 0, 0);
/*
E_Widget_Data *wd;
E_Widget_Callback *wcb;
@ -329,10 +336,16 @@ e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, const char *label, vo
*/
}
EAPI void
e_widget_ilist_append_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val)
{
_queue_append(obj, 0, icon, end, label, 0, func, data, val, 0, 0, 0);
}
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)
{
_queue_append(obj, 0, icon, label, 0, func, data, val, relative,1, 0);
_queue_append(obj, 0, icon, NULL, label, 0, func, data, val, relative,1, 0);
/*
E_Widget_Data *wd;
E_Widget_Callback *wcb, *rcb;
@ -361,10 +374,16 @@ e_widget_ilist_append_relative(Evas_Object *obj, Evas_Object *icon, const char *
*/
}
EAPI void
e_widget_ilist_append_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
{
_queue_append(obj, 0, icon, end, label, 0, func, data, val, relative,1, 0);
}
EAPI void
e_widget_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data), void *data, const char *val)
{
_queue_append(obj, 0, icon, label, 0, func, data, val, 0, 2, 0);
_queue_append(obj, 0, icon, NULL, label, 0, func, data, val, 0, 2, 0);
/*
E_Widget_Data *wd;
E_Widget_Callback *wcb;
@ -382,10 +401,16 @@ e_widget_ilist_prepend(Evas_Object *obj, Evas_Object *icon, const char *label, v
*/
}
EAPI void
e_widget_ilist_prepend_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val)
{
_queue_append(obj, 0, icon, end, label, 0, func, data, val, 0, 2, 0);
}
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)
{
_queue_append(obj, 0, icon, label, 0, func, data, val, relative, 3, 0);
_queue_append(obj, 0, icon, NULL, label, 0, func, data, val, relative, 3, 0);
/*
E_Widget_Data *wd;
E_Widget_Callback *wcb, *rcb;
@ -414,10 +439,16 @@ e_widget_ilist_prepend_relative(Evas_Object *obj, Evas_Object *icon, const char
*/
}
EAPI void
e_widget_ilist_prepend_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val, int relative)
{
_queue_append(obj, 0, icon, end, label, 0, func, data, val, relative, 3, 0);
}
EAPI void
e_widget_ilist_header_append(Evas_Object *obj, Evas_Object *icon, const char *label)
{
_queue_append(obj, 0, icon, label, 1, NULL, NULL, NULL, 0, 0, 0);
_queue_append(obj, 0, icon, NULL, label, 1, NULL, NULL, NULL, 0, 0, 0);
/*
E_Widget_Data *wd;
E_Widget_Callback *wcb;
@ -499,7 +530,7 @@ e_widget_ilist_items_get(Evas_Object *obj)
return e_ilist_items_get(wd->o_ilist);
}
EAPI int
EAPI Eina_Bool
e_widget_ilist_nth_is_header(Evas_Object *obj, int n)
{
E_Widget_Data *wd;
@ -511,7 +542,7 @@ e_widget_ilist_nth_is_header(Evas_Object *obj, int n)
EAPI void
e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label)
{
_queue_append(obj, 1, NULL, label, 0, NULL, NULL, NULL, 0, 0, n);
_queue_append(obj, 1, NULL, NULL, label, 0, NULL, NULL, NULL, 0, 0, n);
/*
E_Widget_Data *wd;
@ -532,7 +563,7 @@ e_widget_ilist_nth_label_get(Evas_Object *obj, int n)
EAPI void
e_widget_ilist_nth_icon_set(Evas_Object *obj, int n, Evas_Object *icon)
{
_queue_append(obj, 2, icon, NULL, 0, NULL, NULL, NULL, 0, 0, n);
_queue_append(obj, 2, icon, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
/*
E_Widget_Data *wd;
@ -550,6 +581,21 @@ e_widget_ilist_nth_icon_get(Evas_Object *obj, int n)
return e_ilist_nth_icon_get(wd->o_ilist, n);
}
EAPI void
e_widget_ilist_nth_end_set(Evas_Object *obj, int n, Evas_Object *end)
{
_queue_append(obj, 9, NULL, end, NULL, 0, NULL, NULL, NULL, 0, 0, n);
}
EAPI Evas_Object *
e_widget_ilist_nth_end_get(Evas_Object *obj, int n)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
return e_ilist_nth_end_get(wd->o_ilist, n);
}
EAPI void *
e_widget_ilist_nth_data_get(Evas_Object *obj, int n)
{
@ -565,6 +611,79 @@ e_widget_ilist_nth_data_get(Evas_Object *obj, int n)
return wcb->data;
}
/**
* Return if the given item returned by e_widget_ilist_items_get()
* is a header.
*
* This avoid expensive lookups to the nth element, however it's not
* able to check any validity on the given pointer and may crash. Be
* sure to use only with valid return of e_widget_ilist_items_get().
*/
EAPI Eina_Bool
e_widget_ilist_item_is_header(const E_Ilist_Item *it)
{
return it->header;
}
/**
* Return the label of given item returned by e_widget_ilist_items_get().
*
* This avoid expensive lookups to the nth element, however it's not
* able to check any validity on the given pointer and may crash. Be
* sure to use only with valid return of e_widget_ilist_items_get().
*/
EAPI const char *
e_widget_ilist_item_label_get(const E_Ilist_Item *it)
{
return it->label;
}
/**
* Return the icon of given item returned by e_widget_ilist_items_get().
*
* This avoid expensive lookups to the nth element, however it's not
* able to check any validity on the given pointer and may crash. Be
* sure to use only with valid return of e_widget_ilist_items_get().
*
* Do not delete this object!
*/
EAPI Evas_Object *
e_widget_ilist_item_icon_get(const E_Ilist_Item *it)
{
return it->o_icon;
}
/**
* Return the end of given item returned by e_widget_ilist_items_get().
*
* This avoid expensive lookups to the nth element, however it's not
* able to check any validity on the given pointer and may crash. Be
* sure to use only with valid return of e_widget_ilist_items_get().
*
* Do not delete this object!
*/
EAPI Evas_Object *
e_widget_ilist_item_end_get(const E_Ilist_Item *it)
{
return it->o_end;
}
/**
* Return the data of given item returned by e_widget_ilist_items_get().
*
* This avoid expensive lookups to the nth element, however it's not
* able to check any validity on the given pointer and may crash. Be
* sure to use only with valid return of e_widget_ilist_items_get().
*
* Do not delete this object!
*/
EAPI void *
e_widget_ilist_item_data_get(const E_Ilist_Item *it)
{
E_Widget_Callback *wcb = it->data2;
return wcb->data;
}
/**
* Show the nth element of an ilist
* @param obj the ilist
@ -575,7 +694,7 @@ e_widget_ilist_nth_data_get(Evas_Object *obj, int n)
EAPI void
e_widget_ilist_nth_show(Evas_Object *obj, int n, int top)
{
_queue_append(obj, 3, NULL, NULL, 0, NULL, NULL, NULL, 0, top, n);
_queue_append(obj, 3, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, top, n);
/*
E_Widget_Data *wd;
Evas_Coord x, y, w, h;
@ -592,7 +711,7 @@ e_widget_ilist_nth_show(Evas_Object *obj, int n, int top)
EAPI void
e_widget_ilist_selected_set(Evas_Object *obj, int n)
{
_queue_append(obj, 4, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
_queue_append(obj, 4, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
/*
E_Widget_Data *wd;
@ -628,6 +747,15 @@ e_widget_ilist_selected_icon_get(Evas_Object *obj)
return e_ilist_selected_icon_get(wd->o_ilist);
}
EAPI Evas_Object *
e_widget_ilist_selected_end_get(Evas_Object *obj)
{
E_Widget_Data *wd;
wd = e_widget_data_get(obj);
return e_ilist_selected_end_get(wd->o_ilist);
}
EAPI int
e_widget_ilist_selected_count_get(Evas_Object *obj)
{
@ -640,7 +768,7 @@ e_widget_ilist_selected_count_get(Evas_Object *obj)
EAPI void
e_widget_ilist_unselect(Evas_Object *obj)
{
_queue_append(obj, 5, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, 0);
_queue_append(obj, 5, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, 0);
/*
E_Widget_Data *wd;
@ -695,7 +823,7 @@ e_widget_ilist_multi_select_get(Evas_Object *obj)
EAPI void
e_widget_ilist_multi_select(Evas_Object *obj, int n)
{
_queue_append(obj, 7, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
_queue_append(obj, 7, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
/*
E_Widget_Data *wd;
@ -707,7 +835,7 @@ e_widget_ilist_multi_select(Evas_Object *obj, int n)
EAPI void
e_widget_ilist_range_select(Evas_Object *obj, int n)
{
_queue_append(obj, 8, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
_queue_append(obj, 8, NULL, NULL, NULL, 0, NULL, NULL, NULL, 0, 0, n);
/*
E_Widget_Data *wd;
@ -767,7 +895,7 @@ _e_wid_focus_hook(Evas_Object *obj)
}
static void
_e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
_e_wid_cb_scrollframe_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
{
Evas_Coord mw, mh, vw, vh, w, h;
@ -807,7 +935,7 @@ _e_wid_cb_item_sel(void *data, void *data2)
}
static void
_e_wid_cb_item_hilight(void *data, void *data2)
_e_wid_cb_item_hilight(void *data, void *data2 __UNUSED__)
{
E_Widget_Data *wd;
Evas_Coord x, y, w, h;
@ -818,13 +946,13 @@ _e_wid_cb_item_hilight(void *data, void *data2)
}
static void
_e_wid_cb_selected(void *data, Evas_Object *obj, void *event_info)
_e_wid_cb_selected(void *data, Evas_Object *obj __UNUSED__, void *event_info)
{
evas_object_smart_callback_call(data, "selected", event_info);
}
static void
_e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info)
_e_wid_focus_steal(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
e_widget_focus_steal(data);
}

View File

@ -13,23 +13,40 @@ EAPI void e_widget_ilist_append(Evas_Object *obj, Evas_Object *icon, con
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_append_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val);
EAPI void e_widget_ilist_append_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val, int relative);
EAPI void e_widget_ilist_prepend_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, const char *label, void (*func) (void *data), void *data, const char *val);
EAPI void e_widget_ilist_prepend_relative_full(Evas_Object *obj, Evas_Object *icon, Evas_Object *end, 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);
EAPI void e_widget_ilist_clear(Evas_Object *obj);
EAPI int e_widget_ilist_count(Evas_Object *obj);
EAPI Eina_List *e_widget_ilist_items_get(Evas_Object *obj);
EAPI int e_widget_ilist_nth_is_header(Evas_Object *obj, int n);
EAPI Eina_Bool e_widget_ilist_nth_is_header(Evas_Object *obj, int n);
EAPI void e_widget_ilist_nth_label_set(Evas_Object *obj, int n, const char *label);
EAPI const char *e_widget_ilist_nth_label_get(Evas_Object *obj, int n);
EAPI void e_widget_ilist_nth_icon_set(Evas_Object *obj, int n, Evas_Object *icon);
EAPI Evas_Object *e_widget_ilist_nth_icon_get(Evas_Object *obj, int n);
EAPI void e_widget_ilist_nth_end_set(Evas_Object *obj, int n, Evas_Object *end);
EAPI Evas_Object *e_widget_ilist_nth_end_get(Evas_Object *obj, int n);
EAPI void *e_widget_ilist_nth_data_get(Evas_Object *obj, int n);
EAPI Eina_Bool e_widget_ilist_item_is_header(const E_Ilist_Item *it);
EAPI const char *e_widget_ilist_item_label_get(const E_Ilist_Item *it);
EAPI Evas_Object *e_widget_ilist_item_icon_get(const E_Ilist_Item *it);
EAPI Evas_Object *e_widget_ilist_item_end_get(const E_Ilist_Item *it);
EAPI void *e_widget_ilist_item_data_get(const E_Ilist_Item *it);
EAPI void e_widget_ilist_nth_show(Evas_Object *obj, int n, int top);
EAPI void e_widget_ilist_selected_set(Evas_Object *obj, int n);
EAPI int e_widget_ilist_selected_get(Evas_Object *obj);
EAPI const char *e_widget_ilist_selected_label_get(Evas_Object *obj);
EAPI Evas_Object *e_widget_ilist_selected_icon_get(Evas_Object *obj);
EAPI Evas_Object *e_widget_ilist_selected_end_get(Evas_Object *obj);
EAPI int e_widget_ilist_selected_count_get(Evas_Object *obj);
EAPI void e_widget_ilist_unselect(Evas_Object *obj);
EAPI void e_widget_ilist_remove_num(Evas_Object *obj, int n);