diff options
author | Daniel Zaoui <daniel.zaoui@samsung.com> | 2014-09-28 08:15:48 +0300 |
---|---|---|
committer | Daniel Zaoui <daniel.zaoui@samsung.com> | 2014-11-12 12:03:56 +0200 |
commit | b55e15b3ecacffb60f0647e7bfa1d771f9208734 (patch) | |
tree | 427797dec2c6973bc58a2cad2c80d05525df83c1 | |
parent | 0aeb837234520127fa4dcebe4f9180f33df04f41 (diff) | |
download | elementary-b55e15b3ecacffb60f0647e7bfa1d771f9208734.tar.gz |
Elm List Item: Migrate to Eo
-rw-r--r-- | src/lib/Makefile.am | 6 | ||||
-rw-r--r-- | src/lib/elm_list.c | 616 | ||||
-rw-r--r-- | src/lib/elm_list_common.h | 122 | ||||
-rw-r--r-- | src/lib/elm_list_item.eo | 170 | ||||
-rw-r--r-- | src/lib/elm_widget_list.h | 22 |
5 files changed, 534 insertions, 402 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index bd96bf2d3..7e1b31f4b 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -617,7 +617,8 @@ elm_index_item.eo \ elm_multibuttonentry_item.eo \ elm_naviframe_item.eo \ elm_genlist_item.eo \ -elm_gengrid_item.eo +elm_gengrid_item.eo \ +elm_list_item.eo elm_eolian_c = $(elm_eolian_files:%.eo=%.eo.c) elm_eolian_h = $(elm_eolian_files:%.eo=%.eo.h) @@ -742,7 +743,8 @@ elementaryeolianfiles_DATA = \ elm_multibuttonentry_item.eo \ elm_naviframe_item.eo \ elm_genlist_item.eo \ - elm_gengrid_item.eo + elm_gengrid_item.eo \ + elm_list_item.eo EXTRA_DIST += ${elementaryeolianfiles_DATA} diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 0b2f42ab5..9cf7d1673 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -4,6 +4,7 @@ #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define ELM_WIDGET_ITEM_PROTECTED #include <Elementary.h> @@ -11,6 +12,8 @@ #include "elm_widget_list.h" #include "elm_interface_scrollable.h" +#include "elm_list_item.eo.h" + #define MY_CLASS ELM_LIST_CLASS #define MY_CLASS_NAME "Elm_List" @@ -74,7 +77,7 @@ static const Elm_Action key_actions[] = { }; static Eina_Bool -_is_no_select(Elm_List_Item *it) +_is_no_select(Elm_List_Item_Data *it) { ELM_LIST_DATA_GET_FROM_ITEM(it, sd); @@ -85,15 +88,16 @@ _is_no_select(Elm_List_Item *it) } static inline void -_elm_list_item_free(Elm_List_Item *it) +_elm_list_item_free(Elm_List_Item_Data *it) { ELM_LIST_DATA_GET_FROM_ITEM(it, sd); + Elm_Object_Item *eo_it = it?EO_OBJ(it):NULL; - if (sd->focused_item == (Elm_Object_Item *)it) + if (sd->focused_item == eo_it) sd->focused_item = NULL; - if (sd->last_focused_item == (Elm_Object_Item *)it) + if (sd->last_focused_item == eo_it) sd->last_focused_item = NULL; - if (sd->last_selected_item == (Elm_Object_Item *)it) + if (sd->last_selected_item == eo_it) sd->last_selected_item = NULL; @@ -242,7 +246,7 @@ _item_single_select_down(Elm_List_Data *sd) } static Eina_Bool -_elm_list_item_content_focus_set(Elm_List_Item *it, Elm_Focus_Direction dir, +_elm_list_item_content_focus_set(Elm_List_Item_Data *it, Elm_Focus_Direction dir, Eina_Bool h_mode) { if (!it) return EINA_FALSE; @@ -300,42 +304,42 @@ _elm_list_item_content_focus_set(Elm_List_Item *it, Elm_Focus_Direction dir, return EINA_TRUE; } -static Elm_List_Item * -_next_item_get(Elm_List_Data *sd, Elm_List_Item *cur_it, Elm_Focus_Direction dir) +static Elm_Object_Item * +_next_item_get(Elm_List_Data *sd, Elm_Object_Item *eo_cur, Elm_Focus_Direction dir) { Eina_List *list = NULL; - Elm_List_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; - list = eina_list_data_find_list(sd->items, cur_it); - if (!list) return it; + list = eina_list_data_find_list(sd->items, eo_cur); + if (!list) return NULL; if ((!sd->h_mode && (dir == ELM_FOCUS_UP)) || ((sd->h_mode) && (dir == ELM_FOCUS_LEFT))) - it = eina_list_data_get(eina_list_prev(list)); + eo_it = eina_list_data_get(eina_list_prev(list)); else if (((!sd->h_mode) && (dir == ELM_FOCUS_DOWN)) || ((sd->h_mode) && (dir == ELM_FOCUS_RIGHT))) - it = eina_list_data_get(eina_list_next(list)); + eo_it = eina_list_data_get(eina_list_next(list)); - return it; + return eo_it; } static Eina_Bool _item_focused_next(Evas_Object *obj, Elm_Focus_Direction dir) { ELM_LIST_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE); - Elm_List_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; if (sd->focused_item) - it = _next_item_get(sd, (Elm_List_Item *)sd->focused_item, dir); + eo_it = _next_item_get(sd, sd->focused_item, dir); - while (it && - elm_object_item_disabled_get((Elm_Object_Item *)it)) + while (eo_it && + elm_object_item_disabled_get(eo_it)) { - it = _next_item_get(sd, it, dir); + eo_it = _next_item_get(sd, eo_it, dir); } - if (it) + if (eo_it) { - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(eo_it, EINA_TRUE); return EINA_TRUE; } @@ -345,7 +349,7 @@ _item_focused_next(Evas_Object *obj, Elm_Focus_Direction dir) static Eina_Bool _elm_list_elm_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool multi) { - Elm_List_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; ELM_LIST_DATA_GET(obj, sd); Eina_Bool ret = EINA_FALSE; Evas_Coord v = 0; @@ -353,7 +357,7 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir, Eina_Bool focus_only = EINA_FALSE; // check if the content can get the focus by direction key - it = (Elm_List_Item *)elm_object_focused_item_get(obj); + ELM_LIST_ITEM_DATA_GET(elm_object_focused_item_get(obj) , it); if (_elm_list_item_content_focus_set(it, dir, sd->h_mode)) return EINA_TRUE; @@ -430,14 +434,14 @@ _elm_list_elm_widget_event_direction(Evas_Object *obj, Elm_Focus_Direction dir, else { if ((dir == ELM_FOCUS_LEFT) || (dir == ELM_FOCUS_UP)) - it = (Elm_List_Item *)elm_list_last_item_get(obj); + eo_it = elm_list_last_item_get(obj); else - it = (Elm_List_Item *)elm_list_first_item_get(obj); + eo_it = elm_list_first_item_get(obj); if (focus_only) - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(eo_it, EINA_TRUE); else - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(eo_it, EINA_TRUE); } return EINA_TRUE; } @@ -460,7 +464,7 @@ static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) Evas_Coord step_y = 0; Evas_Coord page_x = 0; Evas_Coord page_y = 0; - Elm_List_Item *it = NULL; + Elm_Object_Item *it = NULL; eo_do(obj, elm_interface_scrollable_content_pos_get(&x, &y), @@ -531,7 +535,7 @@ static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) it = eina_list_data_get(sd->items); if (it) { - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); return EINA_TRUE; } else @@ -542,7 +546,7 @@ static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) it = eina_list_data_get(eina_list_last(sd->items)); if (it) { - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); return EINA_TRUE; } else @@ -591,15 +595,19 @@ static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) static Eina_Bool _key_action_select(Evas_Object *obj, const char *params EINA_UNUSED) { ELM_LIST_DATA_GET(obj, sd); - Elm_List_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; if (!_elm_config->item_select_on_focus_disable && (!sd->multi) && (sd->selected)) - it = (Elm_List_Item *)elm_list_selected_item_get(obj); + eo_it = elm_list_selected_item_get(obj); else - it = (Elm_List_Item *)elm_object_focused_item_get(obj); - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); - if (it) evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it); + eo_it = elm_object_focused_item_get(obj); + elm_list_item_selected_set(eo_it, EINA_TRUE); + if (eo_it) + { + ELM_LIST_ITEM_DATA_GET(eo_it, it); + evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, EO_OBJ(it)); + } return EINA_TRUE; } @@ -632,11 +640,11 @@ _elm_list_elm_widget_event(Eo *obj, Elm_List_Data *sd, Evas_Object *src, Evas_Ca EOLIAN static Eina_Bool _elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) { - Elm_List_Item *it; + Elm_Object_Item *it; Eina_List *l; EINA_LIST_FOREACH(sd->items, l, it) - elm_widget_item_translate(it); + eo_do((Eo *)it, elm_wdg_item_translate()); eo_do_super(obj, MY_CLASS, elm_obj_widget_translate()); @@ -646,7 +654,7 @@ _elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) static void _elm_list_deletions_process(Elm_List_Data *sd) { - Elm_List_Item *it; + Elm_List_Item_Data *it; sd->walking++; // avoid nested deletion and also _sub_del() items_fix @@ -656,7 +664,7 @@ _elm_list_deletions_process(Elm_List_Data *sd) /* issuing free because of "locking" item del pre hook */ _elm_list_item_free(it); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } sd->walking--; @@ -732,7 +740,6 @@ static void _elm_list_mode_set_internal(Evas_Object *obj) { Elm_List_Data *sd = eo_data_scope_get(obj, MY_CLASS); - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); if (sd->mode == ELM_LIST_LIMIT) { if (!sd->h_mode) @@ -757,7 +764,7 @@ _elm_list_mode_set_internal(Evas_Object *obj) sd->scr_minh = EINA_FALSE; } - elm_layout_sizing_eval(wd->obj); + elm_layout_sizing_eval(obj); } static inline void @@ -800,7 +807,7 @@ _items_fix(Evas_Object *obj) { Evas_Coord minw[2] = { 0, 0 }, minh[2] = { 0, 0 }; const Eina_List *l; - Elm_List_Item *it; + Elm_Object_Item *eo_it; Evas_Coord mw, mh; int i, redo = 0; @@ -827,8 +834,9 @@ _items_fix(Evas_Object *obj) evas_object_ref(obj); _elm_list_walk(sd); // watch out "return" before unwalk! - EINA_LIST_FOREACH(sd->items, l, it) + EINA_LIST_FOREACH(sd->items, l, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); if (it->deleted) continue; if (it->icon) { @@ -855,8 +863,9 @@ _items_fix(Evas_Object *obj) } i = 0; - EINA_LIST_FOREACH(sd->items, l, it) + EINA_LIST_FOREACH(sd->items, l, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); if (it->deleted) continue; @@ -900,7 +909,7 @@ _items_fix(Evas_Object *obj) { edje_object_part_text_escaped_set (VIEW(it), "elm.text", it->label); - elm_widget_item_part_text_custom_update(it); + eo_do((Eo *)EO_OBJ(it), elm_wdg_item_part_text_custom_update()); if ((!it->icon) && (minh[0] > 0)) { @@ -994,7 +1003,7 @@ _items_fix(Evas_Object *obj) if ((select_raise) && (!strcmp(select_raise, "on"))) evas_object_raise(VIEW(it)); } - if (it->base.disabled) + if (it->base->disabled) edje_object_signal_emit(VIEW(it), "elm,state,disabled", "elm"); it->fixed = EINA_TRUE; @@ -1068,21 +1077,24 @@ static void _mirrored_set(Evas_Object *obj, Eina_Bool rtl) { - Elm_List_Item *it; + Elm_Object_Item *eo_it; Eina_List *n; ELM_LIST_DATA_GET(obj, sd); eo_do(obj, elm_interface_scrollable_mirrored_set(rtl)); - EINA_LIST_FOREACH(sd->items, n, it) - edje_object_mirrored_set(VIEW(it), rtl); + EINA_LIST_FOREACH(sd->items, n, eo_it) + { + ELM_LIST_ITEM_DATA_GET(eo_it, it); + edje_object_mirrored_set(VIEW(it), rtl); + } } EOLIAN static Eina_Bool _elm_list_elm_widget_theme_apply(Eo *obj, Elm_List_Data *sd) { - Elm_List_Item *it; + Elm_Object_Item *eo_it; Eina_List *n; Eina_Bool int_ret = EINA_FALSE; @@ -1091,8 +1103,9 @@ _elm_list_elm_widget_theme_apply(Eo *obj, Elm_List_Data *sd) _mirrored_set(obj, elm_widget_mirrored_get(obj)); - EINA_LIST_FOREACH(sd->items, n, it) + EINA_LIST_FOREACH(sd->items, n, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); edje_object_scale_set (VIEW(it), elm_widget_scale_get(obj) * elm_config_scale_get()); it->fixed = EINA_FALSE; @@ -1106,14 +1119,15 @@ _elm_list_elm_widget_theme_apply(Eo *obj, Elm_List_Data *sd) } static void -_elm_list_item_focused(Elm_List_Item *it) +_elm_list_item_focused(Elm_Object_Item *eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); Evas_Coord x, y, w, h, sx, sy, sw, sh; const char *focus_raise; if ((!sd) || _is_no_select(it) || - (it == (Elm_List_Item *)sd->focused_item)) + (eo_it == sd->focused_item)) return; evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); evas_object_geometry_get(sd->hit_rect, &sx, &sy, &sw, &sh); @@ -1122,16 +1136,16 @@ _elm_list_item_focused(Elm_List_Item *it) switch (_elm_config->focus_autoscroll_mode) { case ELM_FOCUS_AUTOSCROLL_MODE_SHOW: - elm_list_item_show((Elm_Object_Item *)it); + elm_list_item_show(eo_it); break; case ELM_FOCUS_AUTOSCROLL_MODE_BRING_IN: - elm_list_item_bring_in((Elm_Object_Item *)it); + elm_list_item_bring_in(eo_it); break; default: break; } } - sd->focused_item = (Elm_Object_Item *)it; + sd->focused_item = eo_it; if (elm_widget_focus_highlight_enabled_get(WIDGET(it))) { edje_object_signal_emit @@ -1141,17 +1155,18 @@ _elm_list_item_focused(Elm_List_Item *it) if ((focus_raise) && (!strcmp(focus_raise, "on"))) evas_object_raise(VIEW(it)); evas_object_smart_callback_call - (WIDGET(it), SIG_ITEM_FOCUSED, it); + (WIDGET(it), SIG_ITEM_FOCUSED, eo_it); } static void -_elm_list_item_unfocused(Elm_List_Item *it) +_elm_list_item_unfocused(Elm_Object_Item *eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); Evas_Object *obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if ((!sd) || (!sd->focused_item) || - (it != (Elm_List_Item *)sd->focused_item)) + (eo_it != sd->focused_item)) return; if (_is_no_select(it)) @@ -1159,12 +1174,13 @@ _elm_list_item_unfocused(Elm_List_Item *it) if (elm_widget_focus_highlight_enabled_get(obj)) { + ELM_LIST_ITEM_DATA_GET(sd->focused_item, focus_it); edje_object_signal_emit - (VIEW(sd->focused_item), "elm,state,unfocused", "elm"); + (VIEW(focus_it), "elm,state,unfocused", "elm"); } sd->focused_item = NULL; - evas_object_smart_callback_call(obj, SIG_ITEM_UNFOCUSED, it); + evas_object_smart_callback_call(obj, SIG_ITEM_UNFOCUSED, eo_it); } /* @@ -1173,14 +1189,14 @@ _elm_list_item_unfocused(Elm_List_Item *it) * Or this searches other items and checks the nearest fully visible item * according to the given item's position. */ -static Elm_Object_Item * -_elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) +static Elm_List_Item_Data * +_elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_List_Item_Data *it) { Evas_Coord vx = 0, vy = 0, vw = 0, vh = 0; // list viewport geometry Evas_Coord ix = 0, iy = 0, iw = 0, ih = 0; // given item geometry Evas_Coord cx = 0, cy = 0, cw = 0, ch = 0; // candidate item geometry Eina_List *item_list = NULL; - Elm_Object_Item *item = NULL; + Elm_List_Item_Data *item = NULL; ELM_LIST_DATA_GET(obj, sd); Eina_Bool search_next = EINA_FALSE; @@ -1189,11 +1205,11 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) evas_object_geometry_get(obj, &vx, &vy, &vw, &vh); evas_object_geometry_get(VIEW(it), &ix, &iy, &iw, &ih); - item_list = eina_list_data_find_list(sd->items, it); + item_list = eina_list_data_find_list(sd->items, EO_OBJ(it)); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, ix, iy, iw, ih)) { - if (!elm_object_item_disabled_get(it)) + if (!elm_object_item_disabled_get(EO_OBJ(it))) return it; else search_next = EINA_TRUE; @@ -1208,7 +1224,7 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) item = eina_list_data_get(item_list); evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && - !elm_object_item_disabled_get(item)) + !elm_object_item_disabled_get(EO_OBJ(item))) return item; } } @@ -1219,7 +1235,7 @@ _elm_list_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it) item = eina_list_data_get(item_list); evas_object_geometry_get(VIEW(item), &cx, &cy, &cw, &ch); if (ELM_RECTS_INCLUDE(vx, vy, vw, vh, cx, cy, cw, ch) && - !elm_object_item_disabled_get(item)) + !elm_object_item_disabled_get(EO_OBJ(item))) return item; } } @@ -1230,39 +1246,43 @@ EOLIAN static Eina_Bool _elm_list_elm_widget_on_focus(Eo *obj, Elm_List_Data *sd) { Eina_Bool int_ret = EINA_FALSE; - Elm_Object_Item *it = NULL; + Elm_Object_Item *eo_it = NULL; Eina_Bool is_sel = EINA_FALSE; eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_on_focus()); if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj) && sd->selected && !sd->last_selected_item) - sd->last_selected_item = eina_list_data_get(sd->selected); + { + Elm_Object_Item *sel = eina_list_data_get(sd->selected); + sd->last_selected_item = eo_data_scope_get((Eo *)sel, ELM_LIST_ITEM_CLASS); + } if (!sd->items) return EINA_FALSE; if (elm_widget_focus_get(obj) && !sd->mouse_down) { if (sd->last_focused_item) - it = sd->last_focused_item; + eo_it = sd->last_focused_item; else if (sd->last_selected_item) - it = sd->last_selected_item; + eo_it = sd->last_selected_item; else if (_elm_config->first_item_focus_on_first_focus_in && elm_widget_focus_highlight_enabled_get(obj)) { - it = elm_list_first_item_get(obj); + eo_it = elm_list_first_item_get(obj); is_sel = EINA_TRUE; } - if (it) + if (eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); it = _elm_list_nearest_visible_item_get(obj, it); if (it) { if (!_elm_config->item_select_on_focus_disable && is_sel) - elm_list_item_selected_set(it, EINA_TRUE); + elm_list_item_selected_set(EO_OBJ(it), EINA_TRUE); else - elm_object_item_focus_set(it, EINA_TRUE); + elm_object_item_focus_set(EO_OBJ(it), EINA_TRUE); } } } @@ -1270,7 +1290,7 @@ _elm_list_elm_widget_on_focus(Eo *obj, Elm_List_Data *sd) { sd->last_focused_item = sd->focused_item; if (sd->focused_item) - _elm_list_item_unfocused((Elm_List_Item *)sd->focused_item); + _elm_list_item_unfocused(sd->focused_item); } return EINA_TRUE; } @@ -1279,7 +1299,7 @@ EOLIAN static Eina_Bool _elm_list_elm_widget_sub_object_del(Eo *obj, Elm_List_Data *sd, Evas_Object *sobj) { const Eina_List *l; - Elm_List_Item *it; + Elm_Object_Item *eo_it; Eina_Bool int_ret = EINA_FALSE; eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_sub_object_del(sobj)); @@ -1287,8 +1307,9 @@ _elm_list_elm_widget_sub_object_del(Eo *obj, Elm_List_Data *sd, Evas_Object *sob if ((sobj == sd->box) || (sobj == obj)) goto end; - EINA_LIST_FOREACH(sd->items, l, it) + EINA_LIST_FOREACH(sd->items, l, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); if ((sobj == it->icon) || (sobj == it->end)) { if (it->icon == sobj) it->icon = NULL; @@ -1312,7 +1333,7 @@ end: } static void -_item_highlight(Elm_List_Item *it) +_item_highlight(Elm_List_Item_Data *it) { Evas_Object *obj; const char *select_raise; @@ -1322,14 +1343,14 @@ _item_highlight(Elm_List_Item *it) ELM_LIST_DATA_GET(obj, sd); if (_is_no_select(it) || - (it->highlighted) || (it->base.disabled)) + (it->highlighted) || (it->base->disabled)) return; evas_object_ref(obj); _elm_list_walk(sd); edje_object_signal_emit(VIEW(it), "elm,state,selected", "elm"); - evas_object_smart_callback_call(obj, SIG_HIGHLIGHTED, it); + evas_object_smart_callback_call(obj, SIG_HIGHLIGHTED, EO_OBJ(it)); select_raise = edje_object_data_get(VIEW(it), "selectraise"); if ((select_raise) && (!strcmp(select_raise, "on"))) evas_object_raise(VIEW(it)); @@ -1339,7 +1360,7 @@ _item_highlight(Elm_List_Item *it) } static void -_item_select(Elm_List_Item *it) +_item_select(Elm_List_Item_Data *it) { Evas_Object *obj; @@ -1347,7 +1368,7 @@ _item_select(Elm_List_Item *it) obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); - if (it->base.disabled || _is_no_select(it)) + if (it->base->disabled || _is_no_select(it)) return; if (!sd->focus_on_selection_enabled) { @@ -1373,22 +1394,22 @@ _item_select(Elm_List_Item *it) _elm_list_item_content_focus_set(it, ELM_FOCUS_PREVIOUS, sd->h_mode); it->selected = EINA_TRUE; - sd->selected = eina_list_append(sd->selected, it); + sd->selected = eina_list_append(sd->selected, EO_OBJ(it)); call: evas_object_ref(obj); _elm_list_walk(sd); - if (it->func) it->func((void *)it->base.data, WIDGET(it), it); - evas_object_smart_callback_call(obj, SIG_SELECTED, it); - sd->last_selected_item = (Elm_Object_Item *)it; + if (it->func) it->func((void *)it->base->data, WIDGET(it), EO_OBJ(it)); + evas_object_smart_callback_call(obj, SIG_SELECTED, EO_OBJ(it)); + sd->last_selected_item = EO_OBJ(it); _elm_list_unwalk(obj, sd); evas_object_unref(obj); } static void -_item_unhighlight(Elm_List_Item *it) +_item_unhighlight(Elm_List_Item_Data *it) { Evas_Object *obj; const char *stacking, *select_raise; @@ -1397,7 +1418,7 @@ _item_unhighlight(Elm_List_Item *it) obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); -// if ((!it->highlighted) || (it->base.disabled) || +// if ((!it->highlighted) || (it->base->disabled) || // (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) return; if (!it->highlighted) return; @@ -1405,7 +1426,7 @@ _item_unhighlight(Elm_List_Item *it) _elm_list_walk(sd); edje_object_signal_emit(VIEW(it), "elm,state,unselected", "elm"); - evas_object_smart_callback_call(obj, SIG_UNHIGHLIGHTED, it); + evas_object_smart_callback_call(obj, SIG_UNHIGHLIGHTED, EO_OBJ(it)); stacking = edje_object_data_get(VIEW(it), "stacking"); select_raise = edje_object_data_get(VIEW(it), "selectraise"); if ((select_raise) && (!strcmp(select_raise, "on"))) @@ -1420,7 +1441,7 @@ _item_unhighlight(Elm_List_Item *it) } static void -_item_unselect(Elm_List_Item *it) +_item_unselect(Elm_List_Item_Data *it) { Evas_Object *obj; @@ -1428,7 +1449,7 @@ _item_unselect(Elm_List_Item *it) obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); -// if (it->base.disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) +// if (it->base->disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)) // return; evas_object_ref(obj); @@ -1443,10 +1464,10 @@ _item_unselect(Elm_List_Item *it) if (it->selected) { it->selected = EINA_FALSE; - sd->selected = eina_list_remove(sd->selected, it); - if (!(it->base.disabled || + sd->selected = eina_list_remove(sd->selected, EO_OBJ(it)); + if (!(it->base->disabled || (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE))) - evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, it); + evas_object_smart_callback_call(WIDGET(it), SIG_UNSELECTED, EO_OBJ(it)); } _elm_list_unwalk(obj, sd); @@ -1456,7 +1477,7 @@ _item_unselect(Elm_List_Item *it) static Eina_Bool _swipe_cancel(void *data) { - Elm_List_Item *it = data; + Elm_List_Item_Data *it = data; ELM_LIST_ITEM_CHECK_OR_RETURN(it, ECORE_CALLBACK_CANCEL); ELM_LIST_DATA_GET_FROM_ITEM(it, sd); @@ -1498,7 +1519,7 @@ _edge_bottom_cb(Evas_Object *obj, static Eina_Bool _long_press_cb(void *data) { - Elm_List_Item *it = data; + Elm_List_Item_Data *it = data; Evas_Object *obj; ELM_LIST_ITEM_CHECK_OR_RETURN(it, ECORE_CALLBACK_CANCEL); @@ -1506,17 +1527,17 @@ _long_press_cb(void *data) ELM_LIST_DATA_GET(obj, sd); it->long_timer = NULL; - if (it->base.disabled) goto end; + if (it->base->disabled) goto end; sd->longpressed = EINA_TRUE; - evas_object_smart_callback_call(WIDGET(it), SIG_LONGPRESSED, it); + evas_object_smart_callback_call(WIDGET(it), SIG_LONGPRESSED, EO_OBJ(it)); end: return ECORE_CALLBACK_CANCEL; } static void -_swipe_do(Elm_List_Item *it) +_swipe_do(Elm_List_Item_Data *it) { int i, sum = 0; @@ -1533,7 +1554,7 @@ _swipe_do(Elm_List_Item *it) sum /= sd->movements; if (abs(sum - sd->history[0].x) <= 10) return; - evas_object_smart_callback_call(WIDGET(it), SIG_SWIPE, it); + evas_object_smart_callback_call(WIDGET(it), SIG_SWIPE, EO_OBJ(it)); } static void @@ -1542,9 +1563,10 @@ _mouse_in_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED) { - if (!elm_object_item_disabled_get(data) && + Elm_List_Item_Data *it = data; + if (!elm_object_item_disabled_get(EO_OBJ(it)) && (_elm_config->focus_move_policy == ELM_FOCUS_MOVE_POLICY_IN)) - elm_object_item_focus_set(data, EINA_TRUE); + elm_object_item_focus_set(EO_OBJ(it), EINA_TRUE); } static void @@ -1554,7 +1576,7 @@ _mouse_move_cb(void *data, void *event_info) { Evas_Object *obj; - Elm_List_Item *it = data; + Elm_List_Item_Data *it = data; Evas_Event_Mouse_Move *ev = event_info; ELM_LIST_ITEM_CHECK_OR_RETURN(it); @@ -1599,7 +1621,7 @@ _mouse_down_cb(void *data, void *event_info) { Evas_Event_Mouse_Down *ev = event_info; - Elm_List_Item *it = data; + Elm_List_Item_Data *it = data; Evas_Object *obj; ELM_LIST_ITEM_CHECK_OR_RETURN(it); @@ -1628,8 +1650,8 @@ _mouse_down_cb(void *data, /* Always call the callbacks last - the user may delete our context! */ if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) { - evas_object_smart_callback_call(WIDGET(it), SIG_CLICKED_DOUBLE, it); - evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it); + evas_object_smart_callback_call(WIDGET(it), SIG_CLICKED_DOUBLE, EO_OBJ(it)); + evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, EO_OBJ(it)); } sd->swipe = EINA_FALSE; sd->movements = 0; @@ -1645,7 +1667,7 @@ _mouse_up_cb(void *data, void *event_info) { Evas_Object *obj; - Elm_List_Item *it = data; + Elm_List_Item_Data *it = data; Evas_Event_Mouse_Up *ev = event_info; ELM_LIST_ITEM_CHECK_OR_RETURN(it); @@ -1677,15 +1699,15 @@ _mouse_up_cb(void *data, return; } - if (it->base.disabled) + if (it->base->disabled) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; evas_object_ref(obj); _elm_list_walk(sd); - if (sd->focused_item != (Elm_Object_Item *)it) - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + if (sd->focused_item != EO_OBJ(it)) + elm_object_item_focus_set(EO_OBJ(it), EINA_TRUE); if (sd->multi && ((sd->multi_select_mode != ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL) || @@ -1708,7 +1730,8 @@ _mouse_up_cb(void *data, { while (sd->selected) { - Elm_List_Item *it2 = sd->selected->data; + Elm_Object_Item *eo_it2 = sd->selected->data; + ELM_LIST_ITEM_DATA_GET(eo_it2, it2); sd->selected = eina_list_remove_list (sd->selected, sd->selected); _item_unhighlight(it2); @@ -1720,11 +1743,12 @@ _mouse_up_cb(void *data, else { const Eina_List *l, *l_next; - Elm_List_Item *it2; + Elm_Object_Item *eo_it2; - EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, it2) - if (it2 != it) + EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, eo_it2) + if (eo_it2 != EO_OBJ(it)) { + ELM_LIST_ITEM_DATA_GET(eo_it2, it2); _item_unhighlight(it2); _item_unselect(it2); } @@ -1747,11 +1771,11 @@ _elm_list_looping_left_cb(void *data, ELM_LIST_DATA_GET(list, sd); - Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list); + Elm_Object_Item *it = elm_list_last_item_get(list); if (!_elm_config->item_select_on_focus_disable) - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); else - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,left,end", "elm"); sd->item_looping_on = EINA_FALSE; } @@ -1766,11 +1790,11 @@ _elm_list_looping_right_cb(void *data, ELM_LIST_DATA_GET(list, sd); - Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list); + Elm_Object_Item *it = elm_list_first_item_get(list); if (!_elm_config->item_select_on_focus_disable) - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); else - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,right,end", "elm"); sd->item_looping_on = EINA_FALSE; } @@ -1785,11 +1809,11 @@ _elm_list_looping_up_cb(void *data, ELM_LIST_DATA_GET(list, sd); - Elm_List_Item *it = (Elm_List_Item *)elm_list_last_item_get(list); + Elm_Object_Item *it = elm_list_last_item_get(list); if (!_elm_config->item_select_on_focus_disable) - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); else - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,up,end", "elm"); sd->item_looping_on = EINA_FALSE; } @@ -1804,34 +1828,31 @@ _elm_list_looping_down_cb(void *data, ELM_LIST_DATA_GET(list, sd); - Elm_List_Item *it = (Elm_List_Item *)elm_list_first_item_get(list); + Elm_Object_Item *it = elm_list_first_item_get(list); if (!_elm_config->item_select_on_focus_disable) - elm_list_item_selected_set((Elm_Object_Item *)it, EINA_TRUE); + elm_list_item_selected_set(it, EINA_TRUE); else - elm_object_item_focus_set((Elm_Object_Item *)it, EINA_TRUE); + elm_object_item_focus_set(it, EINA_TRUE); elm_layout_signal_emit(list, "elm,action,looping,down,end", "elm"); sd->item_looping_on = EINA_FALSE; } -static void -_item_disable_hook(Elm_Object_Item *it) +EOLIAN static void +_elm_list_item_elm_widget_item_disable(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { - Elm_List_Item *item = (Elm_List_Item *)it; - _item_unhighlight(item); _item_unselect(item); - if (item->base.disabled) + if (item->base->disabled) edje_object_signal_emit(VIEW(item), "elm,state,disabled", "elm"); else edje_object_signal_emit(VIEW(item), "elm,state,enabled", "elm"); } -static void -_item_content_set_hook(Elm_Object_Item *it, +EOLIAN static void +_elm_list_item_elm_widget_item_part_content_set(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item, const char *part, Evas_Object *content) { - Elm_List_Item *item = (Elm_List_Item *)it; Evas_Object **icon_p = NULL; Eina_Bool dummy = EINA_FALSE; @@ -1873,12 +1894,10 @@ _item_content_set_hook(Elm_Object_Item *it, } } -static Evas_Object * -_item_content_get_hook(const Elm_Object_Item *it, +EOLIAN static Evas_Object * +_elm_list_item_elm_widget_item_part_content_get(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item, const char *part) { - Elm_List_Item *item = (Elm_List_Item *)it; - if ((!part) || (!strcmp(part, "start"))) { if (item->dummy_icon) return NULL; @@ -1893,38 +1912,34 @@ _item_content_get_hook(const Elm_Object_Item *it, return NULL; } -static Evas_Object * -_item_content_unset_hook(const Elm_Object_Item *it, +EOLIAN static Evas_Object * +_elm_list_item_elm_widget_item_part_content_unset(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *item, const char *part) { - Elm_List_Item *item = (Elm_List_Item *)it; - if ((!part) || (!strcmp(part, "start"))) { Evas_Object *obj = item->icon; - _item_content_set_hook((Elm_Object_Item *)it, part, NULL); + eo_do(eo_it, elm_wdg_item_part_content_set(part, NULL)); return obj; } else if (!strcmp(part, "end")) { Evas_Object *obj = item->end; - _item_content_set_hook((Elm_Object_Item *)it, part, NULL); + eo_do(eo_it, elm_wdg_item_part_content_set(part, NULL)); return obj; } return NULL; } -static void -_item_text_set_hook(Elm_Object_Item *it, +EOLIAN static void +_elm_list_item_elm_widget_item_part_text_set(Eo *eo_list_it, Elm_List_Item_Data *list_it, const char *part, const char *text) { - Elm_List_Item *list_it = (Elm_List_Item *)it; - if (part && strcmp(part, "default")) { - elm_widget_item_part_text_custom_set(list_it, part, text); + eo_do(eo_list_it, elm_wdg_item_part_text_custom_set(part, text)); edje_object_part_text_escaped_set(VIEW(list_it), part, text); return; } @@ -1933,13 +1948,13 @@ _item_text_set_hook(Elm_Object_Item *it, edje_object_part_text_escaped_set(VIEW(list_it), "elm.text", text); } -static const char * -_item_text_get_hook(const Elm_Object_Item *it, +EOLIAN static const char * +_elm_list_item_elm_widget_item_part_text_get(Eo *eo_it, Elm_List_Item_Data *it, const char *part) { if (part && strcmp(part, "default")) - return elm_widget_item_part_text_custom_get(it, part); - return ((Elm_List_Item *)it)->label; + return eo_do(eo_it, elm_wdg_item_part_text_custom_get(part)); + return it->label; } /* FIXME: this _item_del_pre_hook is never been called at all! @@ -1948,11 +1963,10 @@ _item_text_get_hook(const Elm_Object_Item *it, 2. elm_widget_item_del() should be called instead of the combination of _elm_list_item_free() + elm_widget_item_free() */ -static Eina_Bool -_item_del_pre_hook(Elm_Object_Item *it) +EOLIAN static Eina_Bool +_elm_list_item_elm_widget_item_del_pre(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) { - Evas_Object *obj = WIDGET(it); - Elm_List_Item *item = (Elm_List_Item *)it; + Evas_Object *obj = WIDGET(item); ELM_LIST_DATA_GET(obj, sd); @@ -1983,50 +1997,48 @@ _item_del_pre_hook(Elm_Object_Item *it) return EINA_TRUE; } -static void -_item_signal_emit_hook(Elm_Object_Item *it, +EOLIAN static void _elm_list_item_elm_widget_item_signal_emit(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it, const char *emission, const char *source) { edje_object_signal_emit(VIEW(it), emission, source); } -static void -_item_focus_set_hook(Elm_Object_Item *it, Eina_Bool focused) +EOLIAN static void +_elm_list_item_elm_widget_item_focus_set(Eo *eo_it, Elm_List_Item_Data *it, Eina_Bool focused) { - ELM_LIST_ITEM_CHECK_OR_RETURN(it); Evas_Object *obj = WIDGET(it); ELM_LIST_DATA_GET(obj, sd); if (focused) { - sd->last_focused_item = it; + sd->last_focused_item = eo_it; if (!elm_object_focus_get(obj)) elm_object_focus_set(obj, EINA_TRUE); - if (it != sd->focused_item) + if (eo_it != sd->focused_item) { if (sd->focused_item) - _elm_list_item_unfocused((Elm_List_Item *)sd->focused_item); - _elm_list_item_focused((Elm_List_Item *)it); + _elm_list_item_unfocused(sd->focused_item); + _elm_list_item_focused(eo_it); } } else { - if (it) - _elm_list_item_unfocused((Elm_List_Item *)it); + if (eo_it) + _elm_list_item_unfocused(eo_it); } _elm_widget_focus_highlight_start(obj); } -static Eina_Bool -_item_focus_get_hook(Elm_Object_Item *it) +EOLIAN static Eina_Bool +_elm_list_item_elm_widget_item_focus_get(Eo *eo_it, Elm_List_Item_Data *it) { ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); Evas_Object *obj = WIDGET(it); ELM_LIST_CHECK(obj) EINA_FALSE; ELM_LIST_DATA_GET(obj, sd); - if (it == sd->focused_item) + if (eo_it == sd->focused_item) return EINA_TRUE; return EINA_FALSE; } @@ -2034,7 +2046,7 @@ _item_focus_get_hook(Elm_Object_Item *it) static char * _access_info_cb(void *data, Evas_Object *obj EINA_UNUSED) { - Elm_List_Item *it = (Elm_List_Item *)data; + Elm_List_Item_Data *it = (Elm_List_Item_Data *)data; const char *txt = NULL; if (!it) return NULL; @@ -2047,10 +2059,10 @@ _access_info_cb(void *data, Evas_Object *obj EINA_UNUSED) static char * _access_state_cb(void *data, Evas_Object *obj EINA_UNUSED) { - Elm_List_Item *it = (Elm_List_Item *)data; + Elm_List_Item_Data *it = (Elm_List_Item_Data *)data; if (!it) return NULL; - if (it->base.disabled) + if (it->base->disabled) return strdup(E_("State: Disabled")); return NULL; @@ -2068,12 +2080,11 @@ _access_on_highlight_cb(void *data) static void _access_activate_cb(void *data EINA_UNUSED, Evas_Object *part_obj EINA_UNUSED, - Elm_Object_Item *item) + Elm_Object_Item *eo_it) { - Elm_List_Item *it; Evas_Object *obj; - it = (Elm_List_Item *)item; + ELM_LIST_ITEM_DATA_GET(eo_it, it); ELM_LIST_ITEM_CHECK_OR_RETURN(it); obj = WIDGET(it); @@ -2101,8 +2112,10 @@ _access_activate_cb(void *data EINA_UNUSED, { while (sd->selected) { - _item_unhighlight(sd->selected->data); - _item_unselect(sd->selected->data); + Elm_Object_Item *eo_sel = sd->selected->data; + ELM_LIST_ITEM_DATA_GET(eo_sel, sel); + _item_unhighlight(sel); + _item_unselect(sel); } _item_highlight(it); _item_select(it); @@ -2110,11 +2123,12 @@ _access_activate_cb(void *data EINA_UNUSED, else { const Eina_List *l, *l_next; - Elm_List_Item *it2; + Elm_Object_Item *eo_it2; - EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, it2) - if (it2 != it) + EINA_LIST_FOREACH_SAFE(sd->selected, l, l_next, eo_it2) + if (eo_it2 != EO_OBJ(it)) { + ELM_LIST_ITEM_DATA_GET(eo_it2, it2); _item_unhighlight(it2); _item_unselect(it2); } @@ -2128,25 +2142,32 @@ _access_activate_cb(void *data EINA_UNUSED, } static void -_access_widget_item_register(Elm_List_Item *it, Eina_Bool is_access) +_access_widget_item_register(Elm_List_Item_Data *it, Eina_Bool is_access) { Elm_Access_Info *ai; - if (!is_access) _elm_access_widget_item_unregister((Elm_Widget_Item_Data *)it); + if (!is_access) _elm_access_widget_item_unregister(it->base); else { - _elm_access_widget_item_register((Elm_Widget_Item_Data *)it); + _elm_access_widget_item_register(it->base); - ai = _elm_access_info_get(it->base.access_obj); + ai = _elm_access_info_get(it->base->access_obj); _elm_access_callback_set(ai, ELM_ACCESS_INFO, _access_info_cb, it); _elm_access_callback_set(ai, ELM_ACCESS_STATE, _access_state_cb, it); - _elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, it); - _elm_access_activate_callback_set(ai, _access_activate_cb, it); + _elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, EO_OBJ(it)); + _elm_access_activate_callback_set(ai, _access_activate_cb, EO_OBJ(it)); } } -static Elm_List_Item * +EOLIAN static void +_elm_list_item_eo_base_constructor(Eo *eo_it, Elm_List_Item_Data *it) +{ + eo_do_super(eo_it, ELM_LIST_ITEM_CLASS, eo_constructor()); + it->base = eo_data_scope_get(eo_it, ELM_WIDGET_ITEM_CLASS); +} + +static Elm_List_Item_Data * _item_new(Evas_Object *obj, const char *label, Evas_Object *icon, @@ -2154,14 +2175,15 @@ _item_new(Evas_Object *obj, Evas_Smart_Cb func, const void *data) { - Elm_List_Item *it; + Eo *eo_it = eo_add(ELM_LIST_ITEM_CLASS, obj); + if (!eo_it) return NULL; + ELM_LIST_ITEM_DATA_GET(eo_it, it); - it = elm_widget_item_new(obj, Elm_List_Item); it->label = eina_stringshare_add(label); it->icon = icon; it->end = end; it->func = func; - it->base.data = data; + it->base->data = data; VIEW(it) = edje_object_add(evas_object_evas_get(obj)); @@ -2198,17 +2220,6 @@ _item_new(Evas_Object *obj, obj); } - elm_widget_item_disable_hook_set(it, _item_disable_hook); - elm_widget_item_content_set_hook_set(it, _item_content_set_hook); - elm_widget_item_content_get_hook_set(it, _item_content_get_hook); - elm_widget_item_content_unset_hook_set(it, _item_content_unset_hook); - elm_widget_item_text_set_hook_set(it, _item_text_set_hook); - elm_widget_item_text_get_hook_set(it, _item_text_get_hook); - elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook); - elm_widget_item_signal_emit_hook_set(it, _item_signal_emit_hook); - elm_widget_item_focus_set_hook_set(it, _item_focus_set_hook); - elm_widget_item_focus_get_hook_set(it, _item_focus_get_hook); - return it; } @@ -2240,13 +2251,14 @@ _elm_list_elm_widget_focus_next(Eo *obj, Elm_List_Data *sd, Elm_Focus_Direction { Eina_List *items = NULL; Eina_List *elist = NULL; - Elm_List_Item *it; + Elm_Object_Item *eo_it; if (_elm_config->access_mode != ELM_ACCESS_MODE_ON) return EINA_FALSE; - EINA_LIST_FOREACH(sd->items, elist, it) + EINA_LIST_FOREACH(sd->items, elist, eo_it) { - items = eina_list_append(items, it->base.access_obj); + ELM_LIST_ITEM_DATA_GET(eo_it, it); + items = eina_list_append(items, it->base->access_obj); if (it->icon) items = eina_list_append(items, it->icon); if (it->end) items = eina_list_append(items, it->end); } @@ -2325,14 +2337,15 @@ EOLIAN static void _elm_list_evas_object_smart_del(Eo *obj, Elm_List_Data *sd) { const Eina_List *l; - Elm_List_Item *it; + Elm_Object_Item *eo_it; if (sd->walking) ERR("ERROR: list deleted while walking.\n"); sd->delete_me = EINA_TRUE; - EINA_LIST_FOREACH(sd->items, l, it) + EINA_LIST_FOREACH(sd->items, l, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); if (it->icon) evas_object_event_callback_del (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, @@ -2351,11 +2364,12 @@ _elm_list_evas_object_smart_del(Eo *obj, Elm_List_Data *sd) _elm_list_walk(sd); - EINA_LIST_FREE(sd->items, it) + EINA_LIST_FREE(sd->items, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); /* issuing free because of "locking" item del pre hook */ _elm_list_item_free(it); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } _elm_list_unwalk(obj, sd); @@ -2397,11 +2411,14 @@ EOLIAN static void _elm_list_elm_widget_access(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Eina_Bool acs) { Eina_List *elist = NULL; - Elm_List_Item *it; + Elm_Object_Item *eo_it; _elm_list_smart_focus_next_enable = acs; - EINA_LIST_FOREACH(sd->items, elist, it) - _access_widget_item_register(it, _elm_list_smart_focus_next_enable); + EINA_LIST_FOREACH(sd->items, elist, eo_it) + { + ELM_LIST_ITEM_DATA_GET(eo_it, it); + _access_widget_item_register(it, _elm_list_smart_focus_next_enable); + } } EAPI Evas_Object * @@ -2575,7 +2592,7 @@ elm_list_scroller_policy_get(const Evas_Object *obj, EOLIAN static void _elm_list_clear(Eo *obj, Elm_List_Data *sd) { - Elm_List_Item *it; + Elm_Object_Item *eo_it; if (!sd->items) return; @@ -2585,8 +2602,9 @@ _elm_list_clear(Eo *obj, Elm_List_Data *sd) { Eina_List *n; - EINA_LIST_FOREACH(sd->items, n, it) + EINA_LIST_FOREACH(sd->items, n, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); if (it->deleted) continue; it->deleted = EINA_TRUE; sd->to_delete = eina_list_append(sd->to_delete, it); @@ -2598,11 +2616,12 @@ _elm_list_clear(Eo *obj, Elm_List_Data *sd) _elm_list_walk(sd); - EINA_LIST_FREE(sd->items, it) + EINA_LIST_FREE(sd->items, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); /* issuing free because of "locking" item del pre hook */ _elm_list_item_free(it); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } _elm_list_unwalk(obj, sd); @@ -2635,77 +2654,77 @@ _elm_list_selected_items_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd) EOLIAN static Elm_Object_Item* _elm_list_item_append(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { - Elm_List_Item *it; + Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); - sd->items = eina_list_append(sd->items, it); + sd->items = eina_list_append(sd->items, EO_OBJ(it)); it->node = eina_list_last(sd->items); elm_box_pack_end(sd->box, VIEW(it)); - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_prepend(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { - Elm_List_Item *it; + Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); - sd->items = eina_list_prepend(sd->items, it); + sd->items = eina_list_prepend(sd->items, EO_OBJ(it)); it->node = sd->items; elm_box_pack_start(sd->box, VIEW(it)); - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EOLIAN static Elm_Object_Item* -_elm_list_item_insert_before(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) +_elm_list_item_insert_before(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { - Elm_List_Item *it, *before_it; + Elm_List_Item_Data *it; + ELM_LIST_ITEM_DATA_GET(eo_before, before_it); - ELM_LIST_ITEM_CHECK_OR_RETURN(before, NULL); + ELM_LIST_ITEM_CHECK_OR_RETURN(before_it, NULL); - before_it = (Elm_List_Item *)before; if (!before_it->node) return NULL; it = _item_new(obj, label, icon, end, func, data); - sd->items = eina_list_prepend_relative_list(sd->items, it, before_it->node); + sd->items = eina_list_prepend_relative_list(sd->items, EO_OBJ(it), before_it->node); it->node = before_it->node->prev; elm_box_pack_before(sd->box, VIEW(it), VIEW(before_it)); - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EOLIAN static Elm_Object_Item* -_elm_list_item_insert_after(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) +_elm_list_item_insert_after(Eo *obj, Elm_List_Data *sd, Elm_Object_Item *eo_after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) { - Elm_List_Item *it, *after_it; + Elm_List_Item_Data *it; + ELM_LIST_ITEM_DATA_GET(eo_after, after_it); - ELM_LIST_ITEM_CHECK_OR_RETURN(after, NULL); + ELM_LIST_ITEM_CHECK_OR_RETURN(after_it, NULL); - after_it = (Elm_List_Item *)after; if (!after_it->node) return NULL; it = _item_new(obj, label, icon, end, func, data); - sd->items = eina_list_append_relative_list(sd->items, it, after_it->node); + sd->items = eina_list_append_relative_list(sd->items, EO_OBJ(it), after_it->node); it->node = after_it->node->next; elm_box_pack_after(sd->box, VIEW(it), VIEW(after_it)); - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_list_item_sorted_insert(Eo *obj, Elm_List_Data *sd, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func) { Eina_List *l; - Elm_List_Item *it; + Elm_List_Item_Data *it; it = _item_new(obj, label, icon, end, func, data); - sd->items = eina_list_sorted_insert(sd->items, cmp_func, it); - l = eina_list_data_find_list(sd->items, it); + sd->items = eina_list_sorted_insert(sd->items, cmp_func, EO_OBJ(it)); + l = eina_list_data_find_list(sd->items, EO_OBJ(it)); l = eina_list_next(l); if (!l) { @@ -2714,41 +2733,61 @@ _elm_list_item_sorted_insert(Eo *obj, Elm_List_Data *sd, const char *label, Evas } else { - Elm_List_Item *before = eina_list_data_get(l); + Elm_Object_Item *eo_before = eina_list_data_get(l); + ELM_LIST_ITEM_DATA_GET(eo_before, before); it->node = before->node->prev; elm_box_pack_before(sd->box, VIEW(it), VIEW(before)); } - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EAPI void elm_list_item_separator_set(Elm_Object_Item *it, Eina_Bool setting) { + eo_do((Eo *)it, elm_obj_list_item_separator_set(setting)); +} + +EOLIAN static void +_elm_list_item_separator_set(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *it, + Eina_Bool setting) +{ ELM_LIST_ITEM_CHECK_OR_RETURN(it); - ((Elm_List_Item *)it)->is_separator = !!setting; + it->is_separator = !!setting; } EAPI Eina_Bool elm_list_item_separator_get(const Elm_Object_Item *it) { + return eo_do((Eo *)it, elm_obj_list_item_separator_get()); +} + +EOLIAN static Eina_Bool +_elm_list_item_separator_get(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *it) +{ ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return ((Elm_List_Item *)it)->is_separator; + return it->is_separator; } EAPI void elm_list_item_selected_set(Elm_Object_Item *it, Eina_Bool selected) { - Elm_List_Item *item = (Elm_List_Item *)it; + eo_do((Eo *)it, elm_obj_list_item_selected_set(selected)); +} + +EOLIAN static void +_elm_list_item_selected_set(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item, + Eina_Bool selected) +{ Evas_Object *obj; - ELM_LIST_ITEM_CHECK_OR_RETURN(it); - obj = WIDGET(it); + ELM_LIST_ITEM_CHECK_OR_RETURN(item); + obj = WIDGET(item); ELM_LIST_DATA_GET(obj, sd); selected = !!selected; @@ -2763,12 +2802,14 @@ elm_list_item_selected_set(Elm_Object_Item *it, { while (sd->selected) { - _item_unhighlight(sd->selected->data); - _item_unselect(sd->selected->data); + Elm_Object_Item *eo_sel = sd->selected->data; + ELM_LIST_ITEM_DATA_GET(eo_sel, sel); + _item_unhighlight(sel); + _item_unselect(sel); } } _item_highlight(item); - elm_object_item_focus_set((Elm_Object_Item *)item, EINA_TRUE); + elm_object_item_focus_set(EO_OBJ(item), EINA_TRUE); _item_select(item); } else @@ -2784,14 +2825,26 @@ elm_list_item_selected_set(Elm_Object_Item *it, EAPI Eina_Bool elm_list_item_selected_get(const Elm_Object_Item *it) { + return eo_do((Eo *)it, elm_obj_list_item_selected_get()); +} + +EOLIAN static Eina_Bool +_elm_list_item_selected_get(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *it) +{ ELM_LIST_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); - return ((Elm_List_Item *)it)->selected; + return it->selected; } EAPI void elm_list_item_show(Elm_Object_Item *it) { + eo_do((Eo *)it, elm_obj_list_item_show()); +} + +EOLIAN static void +_elm_list_item_show(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) +{ Evas_Coord bx, by, bw, bh; Evas_Coord x, y, w, h; @@ -2810,6 +2863,12 @@ elm_list_item_show(Elm_Object_Item *it) EAPI void elm_list_item_bring_in(Elm_Object_Item *it) { + eo_do((Eo *)it, elm_obj_list_item_bring_in()); +} + +EOLIAN static void +_elm_list_item_bring_in(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) +{ Evas_Coord bx, by, bw, bh; Evas_Coord x, y, w, h; @@ -2828,6 +2887,12 @@ elm_list_item_bring_in(Elm_Object_Item *it) EAPI Evas_Object * elm_list_item_object_get(const Elm_Object_Item *it) { + return eo_do((Eo *)it, elm_obj_list_item_object_get()); +} + +EOLIAN static Evas_Object * +_elm_list_item_object_get(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *it) +{ ELM_LIST_ITEM_CHECK_OR_RETURN(it, NULL); return VIEW(it); @@ -2836,49 +2901,60 @@ elm_list_item_object_get(const Elm_Object_Item *it) EAPI Elm_Object_Item * elm_list_item_prev(const Elm_Object_Item *it) { - Elm_List_Item *item = (Elm_List_Item *)it; - - ELM_LIST_ITEM_CHECK_OR_RETURN(it, NULL); + return eo_do((Eo *)it, elm_obj_list_item_prev_get()); +} - if (item->node->prev) return item->node->prev->data; - else return NULL; +EOLIAN static Elm_Object_Item * +_elm_list_item_prev_get(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) +{ + if (item->node->prev) + return item->node->prev->data; + return NULL; } EAPI Elm_Object_Item * elm_list_item_next(const Elm_Object_Item *it) { - Elm_List_Item *item = (Elm_List_Item *)it; - - ELM_LIST_ITEM_CHECK_OR_RETURN(it, NULL); + return eo_do((Eo *)it, elm_obj_list_item_next_get()); +} - if (item->node->next) return item->node->next->data; - else return NULL; +EOLIAN static Elm_Object_Item * +_elm_list_item_next_get(Eo *eo_item EINA_UNUSED, Elm_List_Item_Data *item) +{ + if (item->node->next) + return item->node->next->data; + return NULL; } EOLIAN static Elm_Object_Item* _elm_list_first_item_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd) { if (!sd->items) return NULL; - else return eina_list_data_get(sd->items); + else + return eina_list_data_get(sd->items); + return NULL; } EOLIAN static Elm_Object_Item* _elm_list_last_item_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd) { if (!sd->items) return NULL; - else return eina_list_data_get(eina_list_last(sd->items)); + else + return eina_list_data_get(eina_list_last(sd->items)); + return NULL; } EOLIAN static Elm_Object_Item* _elm_list_at_xy_item_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Evas_Coord x, Evas_Coord y, int *posret) { Eina_List *l; - Elm_List_Item *it; + Elm_Object_Item *eo_it; Evas_Coord lasty; evas_object_geometry_get(sd->hit_rect, &lasty, NULL, NULL, NULL); - EINA_LIST_FOREACH(sd->items, l, it) + EINA_LIST_FOREACH(sd->items, l, eo_it) { + ELM_LIST_ITEM_DATA_GET(eo_it, it); Evas_Coord itx, ity; Evas_Object *vit = VIEW(it); Evas_Coord vx, vy, vw, vh; @@ -2897,7 +2973,7 @@ _elm_list_at_xy_item_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd, Evas_Coord x, E else *posret = 0; } - return (Elm_Object_Item *) it; + return EO_OBJ(it); } lasty = ity + vh; @@ -2925,7 +3001,7 @@ _elm_list_focus_on_selection_get(Eo *obj EINA_UNUSED, Elm_List_Data *sd) } static void -_elm_list_item_coordinates_adjust(Elm_List_Item *it, +_elm_list_item_coordinates_adjust(Elm_List_Item_Data *it, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, @@ -2964,8 +3040,9 @@ _elm_list_elm_widget_focus_highlight_geometry_get(Eo *obj EINA_UNUSED, Elm_List_ { if (sd->focused_item) { - _elm_list_item_coordinates_adjust((Elm_List_Item *)sd->focused_item, x, y, w, h); - elm_widget_focus_highlight_focus_part_geometry_get(VIEW(sd->focused_item), x, y, w, h); + ELM_LIST_ITEM_DATA_GET(sd->focused_item, focus_it); + _elm_list_item_coordinates_adjust(focus_it, x, y, w, h); + elm_widget_focus_highlight_focus_part_geometry_get(VIEW(focus_it), x, y, w, h); } } @@ -3019,3 +3096,4 @@ _elm_list_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, return &atspi_actions[0]; } #include "elm_list.eo.c" +#include "elm_list_item.eo.c" diff --git a/src/lib/elm_list_common.h b/src/lib/elm_list_common.h index 97a610f17..ce9ac2a84 100644 --- a/src/lib/elm_list_common.h +++ b/src/lib/elm_list_common.h @@ -21,143 +21,21 @@ typedef enum ELM_LIST_LAST /**< Indicates error if returned by elm_list_mode_get() */ } Elm_List_Mode; -/** - * Set the selected state of an item. - * - * @param it The list item - * @param selected The selected state - * - * This sets the selected state of the given item @p it. - * @c EINA_TRUE for selected, @c EINA_FALSE for not selected. - * - * If a new item is selected the previously selected will be unselected, - * unless multiple selection is enabled with elm_list_multi_select_set(). - * Previously selected item can be get with function - * elm_list_selected_item_get(). - * - * Selected items will be highlighted. - * - * @see elm_list_item_selected_get() - * @see elm_list_selected_item_get() - * @see elm_list_multi_select_set() - * - * @ingroup List - */ EAPI void elm_list_item_selected_set(Elm_Object_Item *it, Eina_Bool selected); -/* - * Get whether the @p item is selected or not. - * - * @param it The list item. - * @return @c EINA_TRUE means item is selected. @c EINA_FALSE indicates - * it's not. If @p obj is @c NULL, @c EINA_FALSE is returned. - * - * @see elm_list_selected_item_set() for details. - * @see elm_list_item_selected_get() - * - * @ingroup List - */ EAPI Eina_Bool elm_list_item_selected_get(const Elm_Object_Item *it); -/** - * Set or unset item as a separator. - * - * @param it The list item. - * @param setting @c EINA_TRUE to set item @p it as separator or - * @c EINA_FALSE to unset, i.e., item will be used as a regular item. - * - * Items aren't set as separator by default. - * - * If set as separator it will display separator theme, so won't display - * icons or label. - * - * @see elm_list_item_separator_get() - * - * @ingroup List - */ EAPI void elm_list_item_separator_set(Elm_Object_Item *it, Eina_Bool setting); -/** - * Get a value whether item is a separator or not. - * - * @see elm_list_item_separator_set() for details. - * - * @param it The list item. - * @return @c EINA_TRUE means item @p it is a separator. @c EINA_FALSE - * indicates it's not. If @p it is @c NULL, @c EINA_FALSE is returned. - * - * @ingroup List - */ EAPI Eina_Bool elm_list_item_separator_get(const Elm_Object_Item *it); -/** - * Show @p item in the list view. - * - * @param it The list item to be shown. - * - * It won't animate list until item is visible. If such behavior is wanted, - * use elm_list_bring_in() instead. - * - * @ingroup List - */ EAPI void elm_list_item_show(Elm_Object_Item *it); -/** - * Bring in the given item to list view. - * - * @param it The item. - * - * This causes list to jump to the given item @p item and show it - * (by scrolling), if it is not fully visible. - * - * This may use animation to do so and take a period of time. - * - * If animation isn't wanted, elm_list_item_show() can be used. - * - * @ingroup List - */ EAPI void elm_list_item_bring_in(Elm_Object_Item *it); -/** - * Get the real Evas(Edje) object created to implement the view of a given - * list @p item. - * - * @param it The list item - * @return The base Edje object associated with @p it. - * - * Base object is the @c Evas_Object that represents that item. - * - * @ingroup List - */ EAPI Evas_Object *elm_list_item_object_get(const Elm_Object_Item *it); -/** - * Get the item before @p it in list. - * - * @param it The list item. - * @return The item before @p it, or @c NULL if none or on failure. - * - * @note If it is the first item, @c NULL will be returned. - * - * @see elm_list_item_append() - * @see elm_list_items_get() - * - * @ingroup List - */ EAPI Elm_Object_Item *elm_list_item_prev(const Elm_Object_Item *it); -/** - * Get the item after @p it in list. - * - * @param it The list item. - * @return The item after @p it, or @c NULL if none or on failure. - * - * @note If it is the last item, @c NULL will be returned. - * - * @see elm_list_item_append() - * @see elm_list_items_get() - * - * @ingroup List - */ EAPI Elm_Object_Item *elm_list_item_next(const Elm_Object_Item *it); diff --git a/src/lib/elm_list_item.eo b/src/lib/elm_list_item.eo new file mode 100644 index 000000000..94628d358 --- /dev/null +++ b/src/lib/elm_list_item.eo @@ -0,0 +1,170 @@ +class Elm_List_Item(Elm_Widget_Item) +{ + legacy_prefix: null; + eo_prefix: elm_obj_list_item; + properties { + separator { + get { + /*@ + Get a value whether item is a separator or not. + + @see elm_list_item_separator_set() for details. + + @ingroup List + */ + } + set { + /*@ + Set or unset item as a separator. + + Items aren't set as separator by default. + + If set as separator it will display separator theme, so won't display + icons or label. + + @see elm_list_item_separator_get() + + @ingroup List + */ + } + values { + Eina_Bool setting; /*@ @c EINA_TRUE means item @p it is a separator. @c EINA_FALSE + indicates it's not. */ + } + } + selected { + get { + /* + Get whether the @p item is selected or not. + + @see elm_list_selected_item_set() for details. + @see elm_list_item_selected_get() + + @ingroup List + */ + } + set { + /*@ + Set the selected state of an item. + + This sets the selected state of the given item @p it. + @c EINA_TRUE for selected, @c EINA_FALSE for not selected. + + If a new item is selected the previously selected will be unselected, + unless multiple selection is enabled with elm_list_multi_select_set(). + Previously selected item can be get with function + elm_list_selected_item_get(). + + Selected items will be highlighted. + + @see elm_list_item_selected_get() + @see elm_list_selected_item_get() + @see elm_list_multi_select_set() + + @ingroup List + */ + } + values { + Eina_Bool selected; /*@ the selected state (@c EINA_TRUE selected, @c EINA_FALSE not selected) */ + } + } + object { + get { + /*@ + Get the real Evas(Edje) object created to implement the view of a given + list @p item. + + Base object is the @c Evas_Object that represents that item. + + @ingroup List + */ + } + values { + Evas_Object *obj; /*@ The base Edje object associated with @p it. */ + } + } + prev { + get { + /*@ + Get the item before @p it in list. + + @note If it is the first item, @c NULL will be returned. + + @see elm_list_item_append() + @see elm_list_items_get() + + @ingroup List + */ + /*legacy: elm_list_item_prev;*/ + } + values { + Elm_Object_Item *item; /*@ The item before @p it, or @c NULL if none or on failure. */ + } + } + next { + get { + /*@ + Get the item after @p it in list. + + @note If it is the last item, @c NULL will be returned. + + @see elm_list_item_append() + @see elm_list_items_get() + + @ingroup List + */ + /*legacy: elm_list_item_next;*/ + } + values { + Elm_Object_Item *item; /*@ The item after @p it, or @c NULL if none or on failure. */ + } + } + } + methods { + /* init { FIXME + params { + Evas_Smart_Cb func; + const(void)* data; + } + }*/ + show { + /*@ + Show @p item in the list view. + + It won't animate list until item is visible. If such behavior is wanted, + use elm_list_bring_in() instead. + + @ingroup List + */ + } + bring_in { + /*@ + Bring in the given item to list view. + + This causes list to jump to the given item @p item and show it + (by scrolling), if it is not fully visible. + + This may use animation to do so and take a period of time. + + If animation isn't wanted, elm_list_item_show() can be used. + + @ingroup List + */ + } + } + implements { + Eo.Base.constructor; + Elm_Widget_Item.disable; + Elm_Widget_Item.del_pre; + Elm_Widget_Item.signal_emit; + Elm_Widget_Item.focus.set; + Elm_Widget_Item.focus.get; + Elm_Widget_Item.part_text.get; + Elm_Widget_Item.part_text.set; + Elm_Widget_Item.part_content.get; + Elm_Widget_Item.part_content.set; + Elm_Widget_Item.part_content_unset; + } +} + + diff --git a/src/lib/elm_widget_list.h b/src/lib/elm_widget_list.h index 1ba59c039..15ef82298 100644 --- a/src/lib/elm_widget_list.h +++ b/src/lib/elm_widget_list.h @@ -10,6 +10,7 @@ * IT AT RUNTIME. */ +#include "elm_object_item_migration_temp.h" /** * @addtogroup Widget * @{ @@ -23,6 +24,7 @@ #define ELM_LIST_SWIPE_MOVES 12 +typedef struct _Elm_List_Item_Data Elm_List_Item_Data; /** * Base widget smart data extended with list instance data. */ @@ -63,10 +65,9 @@ struct _Elm_List_Data Eina_Bool item_looping_on : 1; }; -typedef struct _Elm_List_Item Elm_List_Item; -struct _Elm_List_Item +struct _Elm_List_Item_Data { - ELM_WIDGET_ITEM; + Elm_Widget_Item_Data *base; Ecore_Timer *swipe_timer; Ecore_Timer *long_timer; @@ -120,21 +121,24 @@ struct _Elm_List_Item return #define ELM_LIST_ITEM_CHECK(it) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, ); \ - ELM_LIST_CHECK(it->base.widget); \ - if (((Elm_List_Item *)it)->deleted) \ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, ); \ + ELM_LIST_CHECK(it->base->widget); \ + if (((Elm_List_Item_Data *)it)->deleted) \ { \ ERR("ERROR: " #it " has been DELETED.\n"); \ return; \ } #define ELM_LIST_ITEM_CHECK_OR_RETURN(it, ...) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, __VA_ARGS__); \ - ELM_LIST_CHECK(it->base.widget) __VA_ARGS__; \ - if (((Elm_List_Item *)it)->deleted) \ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, __VA_ARGS__); \ + ELM_LIST_CHECK(it->base->widget) __VA_ARGS__; \ + if (((Elm_List_Item_Data *)it)->deleted) \ { \ ERR("ERROR: " #it " has been DELETED.\n"); \ return __VA_ARGS__; \ } +#define ELM_LIST_ITEM_DATA_GET(o, sd) \ + Elm_List_Item_Data* sd = eo_data_scope_get((Eo *)o, ELM_LIST_ITEM_CLASS) + #endif |