From: Daniel Zaoui Date: Sun, 28 Sep 2014 05:16:04 +0000 (+0300) Subject: Elm DiskSelector Item: Migrate to Eo X-Git-Tag: v1.13.0-alpha1~260 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8250b50387bcbe318de209b7e276029aab54664c;p=platform%2Fupstream%2Felementary.git Elm DiskSelector Item: Migrate to Eo --- diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 0938cb9..bd6d451 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -619,7 +619,8 @@ elm_naviframe_item.eo \ elm_genlist_item.eo \ elm_gengrid_item.eo \ elm_list_item.eo \ -elm_toolbar_item.eo +elm_toolbar_item.eo \ +elm_diskselector_item.eo elm_eolian_c = $(elm_eolian_files:%.eo=%.eo.c) elm_eolian_h = $(elm_eolian_files:%.eo=%.eo.h) @@ -746,7 +747,8 @@ elementaryeolianfiles_DATA = \ elm_genlist_item.eo \ elm_gengrid_item.eo \ elm_list_item.eo \ - elm_toolbar_item.eo + elm_toolbar_item.eo \ + elm_diskselector_item.eo EXTRA_DIST += ${elementaryeolianfiles_DATA} diff --git a/src/lib/elm_diskselector.c b/src/lib/elm_diskselector.c index 0e38e13..3976430 100644 --- a/src/lib/elm_diskselector.c +++ b/src/lib/elm_diskselector.c @@ -4,11 +4,13 @@ #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define ELM_WIDGET_ITEM_PROTECTED #include #include "elm_priv.h" #include "elm_widget_diskselector.h" #include "elm_interface_scrollable.h" +#include "elm_diskselector_item.eo.h" #define DISPLAY_ITEM_NUM_MIN 3 @@ -48,20 +50,20 @@ static const Elm_Action key_actions[] = { EOLIAN static Eina_Bool _elm_diskselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Eina_List *l; EINA_LIST_FOREACH(sd->items, l, it) - elm_widget_item_translate(it); + eo_do((Eo *)EO_OBJ(it), elm_wdg_item_translate()); return EINA_TRUE; } static void -_selected_item_indicate(Elm_Diskselector_Item *item) +_selected_item_indicate(Elm_Diskselector_Item_Data *item) { Eina_List *l; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; ELM_DISKSELECTOR_DATA_GET(WIDGET(item), sd); @@ -77,7 +79,7 @@ _selected_item_indicate(Elm_Diskselector_Item *item) } static void -_item_select(Elm_Diskselector_Item *it) +_item_select(Elm_Diskselector_Item_Data *it) { if (!it) return; @@ -86,8 +88,8 @@ _item_select(Elm_Diskselector_Item *it) sd->selected_item = it; _selected_item_indicate(sd->selected_item); - if (it->func) it->func((void *)it->base.data, WIDGET(it), it); - evas_object_smart_callback_call(WIDGET(it), SIG_SELECTED, it); + if (it->func) it->func((void *)it->base->data, WIDGET(it), EO_OBJ(it)); + evas_object_smart_callback_call(WIDGET(it), SIG_SELECTED, EO_OBJ(it)); } static int @@ -122,7 +124,7 @@ _letters_check(const char *str, return pos; } static void -_item_signal_emit(Elm_Diskselector_Item *it) +_item_signal_emit(Elm_Diskselector_Item_Data *it) { if ((it->icon) && (!it->label)) edje_object_signal_emit(VIEW(it), "elm,state,icon,only", "elm"); @@ -139,7 +141,7 @@ _string_check_idle_enterer_cb(void *data) ELM_DISKSELECTOR_DATA_GET(obj, sd); int mid, steps, length, diff; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Eina_List *list, *l; Evas_Coord ox, ow; char buf[1024]; @@ -236,7 +238,7 @@ static Eina_Bool _scroller_move(void *data) { Evas_Object *obj = data; - Elm_Diskselector_Item *dit; + Elm_Diskselector_Item_Data *dit; Eina_List *list, *l; Evas_Coord y, w, h; int i; @@ -265,8 +267,7 @@ _scroller_move(void *data) if (!dit) { - sd->selected_item = - (Elm_Diskselector_Item *)eina_list_nth(sd->items, 0); + sd->selected_item = eina_list_nth(sd->items, 0); goto end; } @@ -299,7 +300,7 @@ _resize_cb(void *data EINA_UNUSED, (NULL, NULL, &vw, &vh)); if (sd->items) { - Elm_Diskselector_Item *it = sd->items->data; + Elm_Diskselector_Item_Data *it = sd->items->data; evas_object_size_hint_min_get(VIEW(it), &mw, &mh); } if (sd->minh < mh) sd->minh = mh; @@ -327,7 +328,7 @@ _resize_cb(void *data EINA_UNUSED, } static void -_item_del(Elm_Diskselector_Item *item) +_item_del(Elm_Diskselector_Item_Data *item) { if (!item) return; @@ -343,14 +344,13 @@ _sizing_eval(Evas_Object *obj) _resize_cb(NULL, NULL, obj, NULL); } -static Eina_Bool -_item_del_pre_hook(Elm_Object_Item *item) +EOLIAN static Eina_Bool +_elm_diskselector_item_elm_widget_item_del_pre(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it) { - Elm_Diskselector_Item *it, *item2, *dit; + Elm_Diskselector_Item_Data *item2, *dit; Eina_List *l; int i = 0; - it = (Elm_Diskselector_Item *)item; Evas_Object *obj = WIDGET(it); ELM_DISKSELECTOR_DATA_GET(obj, sd); @@ -366,7 +366,7 @@ _item_del_pre_hook(Elm_Object_Item *item) { if (sd->items) { - sd->selected_item = (Elm_Diskselector_Item *)eina_list_nth(sd->items, 0); + sd->selected_item = eina_list_nth(sd->items, 0); _selected_item_indicate(sd->selected_item); } else @@ -453,17 +453,15 @@ _item_del_pre_hook(Elm_Object_Item *item) return EINA_TRUE; } -static void -_item_text_set_hook(Elm_Object_Item *item, +EOLIAN static void +_elm_diskselector_item_elm_widget_item_part_text_set(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it, const char *part, const char *label) { - Elm_Diskselector_Item *it; Evas_Coord mw, mh; if (part && strcmp(part, "default")) return; - it = (Elm_Diskselector_Item *)item; eina_stringshare_replace(&it->label, label); edje_object_part_text_escaped_set(VIEW(it), "elm.text", it->label); _item_signal_emit(it); @@ -471,17 +469,17 @@ _item_text_set_hook(Elm_Object_Item *item, evas_object_size_hint_min_set(VIEW(it), 0, mh); } -static const char * -_item_text_get_hook(const Elm_Object_Item *it, +EOLIAN static const char * +_elm_diskselector_item_elm_widget_item_part_text_get(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it, const char *part) { if (part && strcmp(part, "default")) return NULL; - return ((Elm_Diskselector_Item *)it)->label; + return it->label; } static void -_item_icon_set(Elm_Diskselector_Item *it, +_item_icon_set(Elm_Diskselector_Item_Data *it, Evas_Object *icon) { if (it->icon == icon) return; @@ -502,10 +500,10 @@ _item_icon_set(Elm_Diskselector_Item *it, } static void -_identical_item_check(Elm_Diskselector_Item *it, +_identical_item_check(Elm_Diskselector_Item_Data *it, Evas_Object *icon) { - Elm_Diskselector_Item *dit; + Elm_Diskselector_Item_Data *dit; Eina_List *l; int idx = 0; int ic = 0; @@ -551,24 +549,24 @@ _identical_item_check(Elm_Diskselector_Item *it, } } -static void -_item_content_set_hook(Elm_Object_Item *it, +EOLIAN static void +_elm_diskselector_item_elm_widget_item_part_content_set(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it, const char *part, Evas_Object *content) { if (part && strcmp(part, "icon")) return; - _item_icon_set((Elm_Diskselector_Item *)it, content); - _identical_item_check((Elm_Diskselector_Item *)it, content); + _item_icon_set(it, content); + _identical_item_check(it, content); } -static Evas_Object * -_item_content_get_hook(const Elm_Object_Item *it, +EOLIAN static Evas_Object * +_elm_diskselector_item_elm_widget_item_part_content_get(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it, const char *part) { if (part && strcmp(part, "icon")) return NULL; - return ((Elm_Diskselector_Item *)it)->icon; + return it->icon; } static void @@ -577,7 +575,7 @@ _item_click_cb(void *data, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { - Elm_Diskselector_Item *it = data; + Elm_Diskselector_Item_Data *it = data; if (!it) return; ELM_DISKSELECTOR_DATA_GET(WIDGET(it), sd); @@ -588,14 +586,14 @@ _item_click_cb(void *data, _selected_item_indicate(sd->selected_item); } - if (it->func) it->func((void *)it->base.data, WIDGET(it), it); - evas_object_smart_callback_call(WIDGET(it), SIG_CLICKED, it); + if (it->func) it->func((void *)it->base->data, WIDGET(it), EO_OBJ(it)); + evas_object_smart_callback_call(WIDGET(it), SIG_CLICKED, EO_OBJ(it)); } static char * _access_info_cb(void *data, Evas_Object *obj EINA_UNUSED) { - Elm_Diskselector_Item *it = (Elm_Diskselector_Item *)data; + Elm_Diskselector_Item_Data *it = (Elm_Diskselector_Item_Data *)data; const char *txt = NULL; if (!it) return NULL; @@ -611,7 +609,7 @@ _access_on_highlight_cb(void *data) Evas_Coord bx, by, bw, bh; Evas_Coord x, y, w, h; - Elm_Diskselector_Item *it = (Elm_Diskselector_Item *)data; + Elm_Diskselector_Item_Data *it = (Elm_Diskselector_Item_Data *)data; ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it); ELM_DISKSELECTOR_DATA_GET(WIDGET(it), sd); @@ -626,27 +624,27 @@ _access_on_highlight_cb(void *data) eo_do(WIDGET(it), elm_interface_scrollable_region_bring_in(x, y, w, h)); } -static Elm_Diskselector_Item * +EOLIAN static void +_elm_diskselector_item_eo_base_constructor(Eo *eo_it, Elm_Diskselector_Item_Data *it) +{ + eo_do_super(eo_it, ELM_DISKSELECTOR_ITEM_CLASS, eo_constructor()); + it->base = eo_data_scope_get(eo_it, ELM_WIDGET_ITEM_CLASS); +} + +static Elm_Diskselector_Item_Data * _item_new(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void *data) { - Elm_Diskselector_Item *it; - - it = elm_widget_item_new(obj, Elm_Diskselector_Item); - if (!it) return NULL; - - elm_widget_item_del_pre_hook_set(it, _item_del_pre_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_content_set_hook_set(it, _item_content_set_hook); - elm_widget_item_content_get_hook_set(it, _item_content_get_hook); + Eo *eo_it = eo_add(ELM_DISKSELECTOR_ITEM_CLASS, obj); + if (!eo_it) return NULL; + ELM_DISKSELECTOR_ITEM_DATA_GET(eo_it, it); it->label = eina_stringshare_add(label); it->func = func; - it->base.data = data; + it->base->data = data; VIEW(it) = edje_object_add(evas_object_evas_get(obj)); elm_widget_theme_object_set(obj, VIEW(it), "diskselector", "item", elm_widget_style_get(obj)); @@ -657,11 +655,11 @@ _item_new(Evas_Object *obj, evas_object_show(VIEW(it)); if (icon) - _item_content_set_hook((Elm_Object_Item *)it, "icon", icon); + eo_do(eo_it, elm_wdg_item_part_content_set("icon", icon)); if (it->label) { - _item_text_set_hook((Elm_Object_Item *)it, "default", it->label); + eo_do(eo_it, elm_wdg_item_part_text_set("default", it->label)); edje_object_signal_callback_add (VIEW(it), "elm,action,click", "*", _item_click_cb, it); } @@ -669,15 +667,15 @@ _item_new(Evas_Object *obj, //XXX: ACCESS if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) { - _elm_access_widget_item_register((Elm_Widget_Item_Data *)it); + _elm_access_widget_item_register(it->base); - _elm_access_text_set(_elm_access_info_get(it->base.access_obj), + _elm_access_text_set(_elm_access_info_get(it->base->access_obj), ELM_ACCESS_TYPE, E_("diskselector item")); - _elm_access_callback_set(_elm_access_info_get(it->base.access_obj), + _elm_access_callback_set(_elm_access_info_get(it->base->access_obj), ELM_ACCESS_INFO, _access_info_cb, it); _elm_access_on_highlight_hook_set( - _elm_access_info_get(it->base.access_obj), _access_on_highlight_cb, + _elm_access_info_get(it->base->access_obj), _access_on_highlight_cb, it); } @@ -789,7 +787,7 @@ EOLIAN static Eina_Bool _elm_diskselector_elm_widget_theme_apply(Eo *obj, Elm_Diskselector_Data *sd) { Eina_List *l; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Evas_Object *blank; Eina_Bool int_ret = EINA_FALSE; Evas *evas; @@ -850,7 +848,7 @@ _elm_diskselector_elm_widget_sub_object_del(Eo *obj, Elm_Diskselector_Data *sd, { Eina_Bool int_ret = EINA_FALSE; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; const Eina_List *l; eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_sub_object_del(sobj)); @@ -908,10 +906,10 @@ _elm_diskselector_elm_widget_focus_next(Eo *obj, Elm_Diskselector_Data *sd, Elm_ { Eina_List *items = NULL; Eina_List *elist = NULL; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; EINA_LIST_FOREACH(sd->items, elist, it) - items = eina_list_append(items, it->base.access_obj); + items = eina_list_append(items, it->base->access_obj); if (!sd->round) { @@ -933,7 +931,7 @@ static Eina_Bool _key_action_move(Evas_Object *obj, const char *params) { ELM_DISKSELECTOR_DATA_GET(obj, sd); - Elm_Diskselector_Item *it = NULL; + Elm_Diskselector_Item_Data *it = NULL; Eina_List *l = NULL; const char *dir = params; @@ -1051,7 +1049,7 @@ static void _scroll_animate_stop_cb(Evas_Object *obj, void *data EINA_UNUSED) { - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Evas_Coord x, w, ox, ow; Eina_List *l, *list; @@ -1073,7 +1071,7 @@ _scroll_animate_stop_cb(Evas_Object *obj, if (!it) return; _item_select(it); - evas_object_smart_callback_call(data, SIG_SCROLL_ANIM_STOP, it); + evas_object_smart_callback_call(data, SIG_SCROLL_ANIM_STOP, EO_OBJ(it)); } static void @@ -1102,21 +1100,21 @@ _scroll_drag_stop_cb(Evas_Object *obj, static void _round_item_del(Elm_Diskselector_Data *sd, - Elm_Diskselector_Item *it) + Elm_Diskselector_Item_Data *it) { if (!it) return; elm_box_unpack(sd->main_box, VIEW(it)); sd->r_items = eina_list_remove(sd->r_items, it); eina_stringshare_del(it->label); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } static void _round_items_del(Elm_Diskselector_Data *sd) { Eina_List *l; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; _round_item_del(sd, sd->last); sd->last = NULL; @@ -1160,9 +1158,9 @@ _icon_duplicate(Evas_Object *icon) static void _round_items_add(Elm_Diskselector_Data *sd) { - Elm_Diskselector_Item *temp_it; - Elm_Diskselector_Item *dit; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *temp_it; + Elm_Diskselector_Item_Data *dit; + Elm_Diskselector_Item_Data *it; int i = 0; dit = it = eina_list_nth(sd->items, 0); @@ -1172,7 +1170,7 @@ _round_items_add(Elm_Diskselector_Data *sd) { sd->first = _item_new (WIDGET(it), _icon_duplicate(it->icon), it->label, it->func, - it->base.data); + it->base->data); sd->first->node = it->node; sd->r_items = eina_list_append(sd->r_items, sd->first); } @@ -1185,7 +1183,7 @@ _round_items_add(Elm_Diskselector_Data *sd) { sd->second = _item_new (WIDGET(it), _icon_duplicate(it->icon), it->label, it->func, - it->base.data); + it->base->data); sd->second->node = it->node; sd->r_items = eina_list_append(sd->r_items, sd->second); } @@ -1198,7 +1196,7 @@ _round_items_add(Elm_Diskselector_Data *sd) if (!it) it = dit; temp_it = _item_new (WIDGET(it), _icon_duplicate - (it->icon), it->label, it->func, it->base.data); + (it->icon), it->label, it->func, it->base->data); sd->over_items = eina_list_append(sd->over_items, temp_it); sd->r_items = eina_list_append(sd->r_items, temp_it); } @@ -1210,7 +1208,7 @@ _round_items_add(Elm_Diskselector_Data *sd) { sd->last = _item_new (WIDGET(it), _icon_duplicate(it->icon), it->label, it->func, - it->base.data); + it->base->data); sd->last->node = it->node; sd->r_items = eina_list_prepend(sd->r_items, sd->last); } @@ -1222,7 +1220,7 @@ _round_items_add(Elm_Diskselector_Data *sd) { sd->s_last = _item_new (WIDGET(it), _icon_duplicate(it->icon), it->label, it->func, - it->base.data); + it->base->data); sd->s_last->node = it->node; sd->r_items = eina_list_prepend(sd->r_items, sd->s_last); } @@ -1234,7 +1232,7 @@ _round_items_add(Elm_Diskselector_Data *sd) if (!it) it = dit; temp_it = _item_new (WIDGET(it), _icon_duplicate - (it->icon), it->label, it->func, it->base.data); + (it->icon), it->label, it->func, it->base->data); sd->under_items = eina_list_append(sd->under_items, temp_it); sd->r_items = eina_list_prepend(sd->r_items, temp_it); } @@ -1320,7 +1318,7 @@ _elm_diskselector_evas_object_smart_add(Eo *obj, Elm_Diskselector_Data *priv) EOLIAN static void _elm_diskselector_evas_object_smart_del(Eo *obj, Elm_Diskselector_Data *sd) { - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Eina_List *l; Evas_Object *blank; @@ -1336,28 +1334,28 @@ _elm_diskselector_evas_object_smart_del(Eo *obj, Elm_Diskselector_Data *sd) { eina_stringshare_del(sd->last->label); evas_object_del(sd->VIEW(last)); - free(sd->last); + eo_del((Eo *)EO_OBJ(sd->last)); } if (sd->s_last) { eina_stringshare_del(sd->s_last->label); evas_object_del(sd->VIEW(s_last)); - free(sd->s_last); + eo_del((Eo *)EO_OBJ(sd->s_last)); } if (sd->second) { eina_stringshare_del(sd->second->label); evas_object_del(sd->VIEW(second)); - free(sd->second); + eo_del((Eo *)EO_OBJ(sd->second)); } if (sd->first) { eina_stringshare_del(sd->first->label); evas_object_del(sd->VIEW(first)); - free(sd->first); + eo_del((Eo *)EO_OBJ(sd->first)); } EINA_LIST_FOREACH(sd->under_items, l, it) @@ -1366,7 +1364,7 @@ _elm_diskselector_evas_object_smart_del(Eo *obj, Elm_Diskselector_Data *sd) { eina_stringshare_del(it->label); evas_object_del(VIEW(it)); - free(it); + eo_del((Eo *)EO_OBJ(it)); } } @@ -1376,14 +1374,14 @@ _elm_diskselector_evas_object_smart_del(Eo *obj, Elm_Diskselector_Data *sd) { eina_stringshare_del(it->label); evas_object_del(VIEW(it)); - free(it); + eo_del((Eo *)EO_OBJ(it)); } } EINA_LIST_FREE(sd->items, it) { _item_del(it); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } sd->r_items = eina_list_free(sd->r_items); @@ -1452,7 +1450,7 @@ EOLIAN static void _elm_diskselector_round_enabled_set(Eo *obj, Elm_Diskselector_Data *sd, Eina_Bool enabled) { Eina_List *elist; - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; Evas_Object *blank; if (sd->round == enabled) @@ -1601,7 +1599,7 @@ _elm_diskselector_elm_interface_scrollable_policy_set(Eo *obj, Elm_Diskselector_ EOLIAN static void _elm_diskselector_clear(Eo *obj, Elm_Diskselector_Data *sd) { - Elm_Diskselector_Item *it; + Elm_Diskselector_Item_Data *it; if (!sd->items) return; @@ -1609,7 +1607,7 @@ _elm_diskselector_clear(Eo *obj, Elm_Diskselector_Data *sd) EINA_LIST_FREE(sd->items, it) { _item_del(it); - elm_widget_item_free(it); + eo_del((Eo *)EO_OBJ(it)); } _round_items_del(sd); @@ -1626,7 +1624,7 @@ _elm_diskselector_items_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) EOLIAN static Elm_Object_Item* _elm_diskselector_item_append(Eo *obj, Elm_Diskselector_Data *sd, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) { - Elm_Diskselector_Item *it, *dit; + Elm_Diskselector_Item_Data *it, *dit; Eina_List *elist; Evas *evas; @@ -1682,21 +1680,26 @@ _elm_diskselector_item_append(Eo *obj, Elm_Diskselector_Data *sd, const char *la evas_event_thaw(evas); evas_event_thaw_eval(evas); - return (Elm_Object_Item *)it; + return EO_OBJ(it); } EOLIAN static Elm_Object_Item* _elm_diskselector_selected_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - return (Elm_Object_Item *)sd->selected_item; + return EO_OBJ(sd->selected_item); } EAPI void elm_diskselector_item_selected_set(Elm_Object_Item *item, Eina_Bool selected) { - Elm_Diskselector_Item *it = (Elm_Diskselector_Item *)item; + eo_do((Eo *)item, elm_obj_diskselector_item_selected_set(selected)); +} +EOLIAN static void +_elm_diskselector_item_selected_set(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it, + Eina_Bool selected) +{ ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it); ELM_DISKSELECTOR_DATA_GET(WIDGET(it), sd); @@ -1712,37 +1715,55 @@ elm_diskselector_item_selected_set(Elm_Object_Item *item, } if (!sd->scroller_move_idle_enterer) - sd->scroller_move_idle_enterer = ecore_idle_enterer_before_add(_scroller_move, WIDGET(item)); + sd->scroller_move_idle_enterer = ecore_idle_enterer_before_add(_scroller_move, WIDGET(it)); } EAPI Eina_Bool elm_diskselector_item_selected_get(const Elm_Object_Item *it) { + return eo_do((Eo *)it, elm_obj_diskselector_item_selected_get()); +} + +EOLIAN static Eina_Bool +_elm_diskselector_item_selected_get(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it) +{ ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it, EINA_FALSE); ELM_DISKSELECTOR_DATA_GET(WIDGET(it), sd); - return sd->selected_item == ((Elm_Diskselector_Item *)it); + return sd->selected_item == it; } EAPI Elm_Object_Item * elm_diskselector_item_prev_get(const Elm_Object_Item *item) { - Elm_Diskselector_Item *it = (Elm_Diskselector_Item *)item; + return eo_do((Eo *)item, elm_obj_diskselector_item_prev_get()); +} +EOLIAN static Elm_Object_Item * +_elm_diskselector_item_prev_get(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it) +{ ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it, NULL); + Elm_Diskselector_Item_Data *prev_it = NULL; - if (it->node->prev) return it->node->prev->data; + if (it->node->prev) prev_it = it->node->prev->data; + if (prev_it) return EO_OBJ(prev_it); else return NULL; } EAPI Elm_Object_Item * elm_diskselector_item_next_get(const Elm_Object_Item *item) { - Elm_Diskselector_Item *it = (Elm_Diskselector_Item *)item; + return eo_do((Eo *)item, elm_obj_diskselector_item_next_get()); +} +EOLIAN static Elm_Object_Item * +_elm_diskselector_item_next_get(Eo *eo_it EINA_UNUSED, Elm_Diskselector_Item_Data *it) +{ ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it, NULL); + Elm_Diskselector_Item_Data *next_it = NULL; - if (it->node->next) return it->node->next->data; + if (it->node->next) next_it = it->node->next->data; + if (next_it) return EO_OBJ(next_it); else return NULL; } @@ -1750,14 +1771,18 @@ EOLIAN static Elm_Object_Item* _elm_diskselector_first_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { if (!sd || !sd->items) return NULL; - else return eina_list_data_get(sd->items); + Elm_Diskselector_Item_Data *it = eina_list_data_get(sd->items); + if (it) return EO_OBJ(it); + else return NULL; } EOLIAN static Elm_Object_Item* _elm_diskselector_last_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { if (!sd->items) return NULL; - else return eina_list_data_get(eina_list_last(sd->items)); + Elm_Diskselector_Item_Data *it = eina_list_data_get(eina_list_last(sd->items)); + if (it) return EO_OBJ(it); + else return NULL; } EOLIAN static void @@ -1799,3 +1824,4 @@ _elm_diskselector_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA } #include "elm_diskselector.eo.c" +#include "elm_diskselector_item.eo.c" diff --git a/src/lib/elm_diskselector_common.h b/src/lib/elm_diskselector_common.h index 9467d01..a280e4c 100644 --- a/src/lib/elm_diskselector_common.h +++ b/src/lib/elm_diskselector_common.h @@ -1,80 +1,8 @@ -/** - * Set the selected state of an item. - * - * @param it The diskselector 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. - * Previously selected item can be get with function - * elm_diskselector_selected_item_get(). - * - * If the item @p it is unselected, the first item of diskselector will - * be selected. - * - * Selected items will be visible on center position of diskselector. - * So if it was on another position before selected, or was invisible, - * diskselector will animate items until the selected item reaches center - * position. - * - * @see elm_diskselector_item_selected_get() - * @see elm_diskselector_selected_item_get() - * - * @ingroup Diskselector - */ EAPI void elm_diskselector_item_selected_set(Elm_Object_Item *it, Eina_Bool selected); -/* - * Get whether the @p item is selected or not. - * - * @param it The diskselector 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_diskselector_selected_item_set() for details. - * @see elm_diskselector_item_selected_get() - * - * @ingroup Diskselector - */ EAPI Eina_Bool elm_diskselector_item_selected_get(const Elm_Object_Item *it); -/** - * Get the item before @p item in diskselector. - * - * @param it The diskselector item. - * @return The item before @p item, or @c NULL if none or on failure. - * - * The list of items follows append order. So it will return item appended - * just before @p item and that wasn't deleted. - * - * If it is the first item, @c NULL will be returned. - * First item can be get by elm_diskselector_first_item_get(). - * - * @see elm_diskselector_item_append() - * @see elm_diskselector_items_get() - * - * @ingroup Diskselector - */ EAPI Elm_Object_Item *elm_diskselector_item_prev_get(const Elm_Object_Item *it); -/** - * Get the item after @p item in diskselector. - * - * @param it The diskselector item. - * @return The item after @p item, or @c NULL if none or on failure. - * - * The list of items follows append order. So it will return item appended - * just after @p item and that wasn't deleted. - * - * If it is the last item, @c NULL will be returned. - * Last item can be get by elm_diskselector_last_item_get(). - * - * @see elm_diskselector_item_append() - * @see elm_diskselector_items_get() - * - * @ingroup Diskselector - */ EAPI Elm_Object_Item *elm_diskselector_item_next_get(const Elm_Object_Item *it); diff --git a/src/lib/elm_diskselector_item.eo b/src/lib/elm_diskselector_item.eo new file mode 100644 index 0000000..71173d3 --- /dev/null +++ b/src/lib/elm_diskselector_item.eo @@ -0,0 +1,105 @@ +class Elm_Diskselector_Item(Elm_Widget_Item) +{ + legacy_prefix: null; + eo_prefix: elm_obj_diskselector_item; + properties { + prev { + get { + /*@ + Get the item before @p item in diskselector. + + The list of items follows append order. So it will return item appended + just before @p item and that wasn't deleted. + + If it is the first item, @c NULL will be returned. + First item can be get by elm_diskselector_first_item_get(). + + @see elm_diskselector_item_append() + @see elm_diskselector_items_get() + + @ingroup Diskselector + */ + } + values { + Elm_Object_Item *item; /*@ The item before @p item, or @c NULL if none or on failure. */ + } + } + next { + get { + /*@ + Get the item after @p item in diskselector. + + The list of items follows append order. So it will return item appended + just after @p item and that wasn't deleted. + + If it is the last item, @c NULL will be returned. + Last item can be get by elm_diskselector_last_item_get(). + + @see elm_diskselector_item_append() + @see elm_diskselector_items_get() + + @ingroup Diskselector + */ + } + values { + Elm_Object_Item *item; /*@ The item after @p item, or @c NULL if none or on failure. */ + } + } + selected { + get { + /*@ + Get whether the @p item is selected or not. + + @see elm_diskselector_selected_item_set() for details. + @see elm_diskselector_item_selected_get() + + @ingroup Diskselector + */ + } + 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. + Previously selected item can be get with function + elm_diskselector_selected_item_get(). + + If the item @p it is unselected, the first item of diskselector will + be selected. + + Selected items will be visible on center position of diskselector. + So if it was on another position before selected, or was invisible, + diskselector will animate items until the selected item reaches center + position. + + @see elm_diskselector_item_selected_get() + @see elm_diskselector_selected_item_get() + + @ingroup Diskselector + */ + } + values { + Eina_Bool selected; /*@ The selected state */ + } + } + } + methods { + /* init { FIXME + params { + Evas_Smart_Cb func; + const(void)* data; + } + }*/ + } + implements { + Eo.Base.constructor; + Elm_Widget_Item.del_pre; + Elm_Widget_Item.part_text.get; + Elm_Widget_Item.part_text.set; + Elm_Widget_Item.part_content.get; + Elm_Widget_Item.part_content.set; + } +} diff --git a/src/lib/elm_widget_diskselector.h b/src/lib/elm_widget_diskselector.h index 1f8f408..b2e816a 100644 --- a/src/lib/elm_widget_diskselector.h +++ b/src/lib/elm_widget_diskselector.h @@ -9,6 +9,7 @@ * IT AT RUNTIME. */ +#include "elm_object_item_migration_temp.h" /** * @addtogroup Widget * @{ @@ -24,18 +25,18 @@ * Base widget smart data extended with diskselector instance data. */ typedef struct _Elm_Diskselector_Data Elm_Diskselector_Data; -typedef struct _Elm_Diskselector_Item Elm_Diskselector_Item; +typedef struct _Elm_Diskselector_Item_Data Elm_Diskselector_Item_Data; struct _Elm_Diskselector_Data { Evas_Object *hit_rect; Evas_Object *main_box; - Elm_Diskselector_Item *selected_item; - Elm_Diskselector_Item *first; - Elm_Diskselector_Item *second; - Elm_Diskselector_Item *s_last; - Elm_Diskselector_Item *last; + Elm_Diskselector_Item_Data *selected_item; + Elm_Diskselector_Item_Data *first; + Elm_Diskselector_Item_Data *second; + Elm_Diskselector_Item_Data *s_last; + Elm_Diskselector_Item_Data *last; Eina_List *items; Eina_List *r_items; Eina_List *over_items; @@ -56,9 +57,9 @@ struct _Elm_Diskselector_Data Eina_Bool right_boundary_reached:1; }; -struct _Elm_Diskselector_Item +struct _Elm_Diskselector_Item_Data { - ELM_WIDGET_ITEM; + Elm_Widget_Item_Data *base; Eina_List *node; Evas_Object *icon; @@ -96,16 +97,19 @@ struct _Elm_Diskselector_Item return #define ELM_DISKSELECTOR_ITEM_CHECK(it) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, ); \ - ELM_DISKSELECTOR_CHECK(it->base.widget); + ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, ); \ + ELM_DISKSELECTOR_CHECK(it->base->widget); #define ELM_DISKSELECTOR_ITEM_CHECK_OR_RETURN(it, ...) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, __VA_ARGS__); \ - ELM_DISKSELECTOR_CHECK(it->base.widget) __VA_ARGS__; + ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, __VA_ARGS__); \ + ELM_DISKSELECTOR_CHECK(it->base->widget) __VA_ARGS__; #define ELM_DISKSELECTOR_ITEM_CHECK_OR_GOTO(it, label) \ - ELM_WIDGET_ITEM_CHECK_OR_GOTO((Elm_Widget_Item_Data *)it, label); \ - if (!it->base.widget || !eo_isa((it->base.widget), ELM_DISKSELECTOR_CLASS)) \ + ELM_WIDGET_ITEM_CHECK_OR_GOTO(it->base, label); \ + if (!it->base->widget || !eo_isa((it->base->widget), ELM_DISKSELECTOR_CLASS)) \ goto label; +#define ELM_DISKSELECTOR_ITEM_DATA_GET(o, sd) \ + Elm_Diskselector_Item_Data* sd = eo_data_scope_get((Eo *)o, ELM_DISKSELECTOR_ITEM_CLASS) + #endif