From 702396e282ac377558735ba2025a292ff761b26b Mon Sep 17 00:00:00 2001 From: Daniel Zaoui Date: Fri, 21 Mar 2014 17:27:17 +0200 Subject: [PATCH] Eolian: Integration of Disk Selector --- legacy/elementary/src/lib/Makefile.am | 10 +- legacy/elementary/src/lib/elm_diskselector.c | 441 ++++-------------- legacy/elementary/src/lib/elm_diskselector.eo | 266 +++++++++++ .../elementary/src/lib/elm_diskselector_eo.h | 5 + .../src/lib/elm_widget_diskselector.h | 6 +- 5 files changed, 371 insertions(+), 357 deletions(-) create mode 100644 legacy/elementary/src/lib/elm_diskselector.eo diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index f745086951..62143f1655 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -579,7 +579,9 @@ BUILT_SOURCES = \ elm_datetime.eo.c \ elm_datetime.eo.h \ elm_dayselector.eo.c \ - elm_dayselector.eo.h + elm_dayselector.eo.h \ + elm_diskselector.eo.c \ + elm_diskselector.eo.h EXTRA_DIST += \ elm_widget.eo \ @@ -609,7 +611,8 @@ EXTRA_DIST += \ elm_conformant.eo \ elc_ctxpopup.eo \ elm_datetime.eo \ - elm_dayselector.eo + elm_dayselector.eo \ + elm_diskselector.eo nodist_includesunstable_HEADERS = \ elm_widget.eo.h \ @@ -639,5 +642,6 @@ nodist_includesunstable_HEADERS = \ elm_colorselector.eo.h \ elc_ctxpopup.eo.h \ elm_datetime.eo.h \ - elm_dayselector.eo.h + elm_dayselector.eo.h \ + elm_diskselector.eo.h diff --git a/legacy/elementary/src/lib/elm_diskselector.c b/legacy/elementary/src/lib/elm_diskselector.c index b641c464dd..43392a0962 100644 --- a/legacy/elementary/src/lib/elm_diskselector.c +++ b/legacy/elementary/src/lib/elm_diskselector.c @@ -9,8 +9,6 @@ #define DISPLAY_ITEM_NUM_MIN 3 -EAPI Eo_Op ELM_OBJ_DISKSELECTOR_BASE_ID = EO_NOOP; - #define MY_CLASS ELM_OBJ_DISKSELECTOR_CLASS #define MY_CLASS_NAME "Elm_Diskselector" @@ -37,18 +35,16 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { {NULL, NULL} }; -static void -_elm_diskselector_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Diskselector_Smart_Data *sd = _pd; Elm_Diskselector_Item *it; Eina_List *l; EINA_LIST_FOREACH(sd->items, l, it) elm_widget_item_translate(it); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } static void @@ -778,22 +774,18 @@ _theme_data_get(Evas_Object *obj) else sd->minh = -1; } -static void -_elm_diskselector_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_theme_apply(Eo *obj, Elm_Diskselector_Data *sd) { Eina_List *l; Elm_Diskselector_Item *it; Evas_Object *blank; - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret = EINA_FALSE; Evas *evas; const char *style = elm_widget_style_get(obj); - Elm_Diskselector_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; evas = evas_object_evas_get(obj); evas_event_freeze(evas); @@ -839,24 +831,19 @@ _elm_diskselector_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) evas_event_thaw(evas); evas_event_thaw_eval(evas); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_diskselector_smart_sub_object_del(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_sub_object_del(Eo *obj, Elm_Diskselector_Data *sd, Evas_Object *sobj) { - Evas_Object *sobj = va_arg(*list, Evas_Object *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret = EINA_FALSE; Elm_Diskselector_Item *it; const Eina_List *l; - Elm_Diskselector_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, elm_obj_widget_sub_object_del(sobj, &int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; EINA_LIST_FOREACH(sd->items, l, it) { @@ -869,19 +856,17 @@ _elm_diskselector_smart_sub_object_del(Eo *obj, void *_pd EINA_UNUSED, va_list * } } - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_diskselector_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_on_focus(Eo *obj, Elm_Diskselector_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret = EINA_FALSE; - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); eo_do_super(obj, MY_CLASS, elm_obj_widget_on_focus(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; if (elm_widget_focus_get(obj)) { @@ -896,43 +881,31 @@ _elm_diskselector_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) evas_object_focus_set(wd->resize_obj, EINA_FALSE); } - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } static Eina_Bool _elm_diskselector_smart_focus_next_enable = EINA_FALSE; -static void -_elm_diskselector_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = _elm_diskselector_smart_focus_next_enable; + return _elm_diskselector_smart_focus_next_enable; } -static void -_elm_diskselector_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_focus_next(Eo *obj, Elm_Diskselector_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) { - Elm_Focus_Direction dir = va_arg(*list, Elm_Focus_Direction); - Evas_Object **next = va_arg(*list, Evas_Object **); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; - Eina_Bool int_ret; - Eina_List *items = NULL; Eina_List *elist = NULL; Elm_Diskselector_Item *it; - ELM_DISKSELECTOR_CHECK(obj); - Elm_Diskselector_Smart_Data *sd = _pd; - EINA_LIST_FOREACH(sd->items, elist, it) items = eina_list_append(items, it->base.access_obj); if (!sd->round) { - int_ret = elm_widget_focus_list_next_get + return elm_widget_focus_list_next_get (obj, items, eina_list_data_get, dir, next); - if (ret) *ret = int_ret; - return; } if (!elm_widget_focus_list_next_get @@ -942,32 +915,26 @@ _elm_diskselector_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list elm_widget_focus_list_next_get (obj, items, eina_list_data_get, dir, next); } - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_diskselector_smart_event(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_diskselector_elm_widget_event(Eo *obj, Elm_Diskselector_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info) { - Evas_Object *src = va_arg(*list, Evas_Object *); - Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type); - Evas_Event_Key_Down *ev = va_arg(*list, void *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Diskselector_Smart_Data *sd = _pd; Elm_Diskselector_Item *it = NULL; Eina_List *l; + Evas_Event_Key_Down *ev = event_info; - if (ret) *ret = EINA_FALSE; (void) src; - if (elm_widget_disabled_get(obj)) return; - if (type != EVAS_CALLBACK_KEY_DOWN) return; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; + if (elm_widget_disabled_get(obj)) return EINA_FALSE; + if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE; + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE; if (!sd->selected_item) { ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; - return; + return EINA_TRUE; } if ((!strcmp(ev->key, "Left")) || @@ -994,7 +961,7 @@ _elm_diskselector_smart_event(Eo *obj, void *_pd, va_list *list) else if ((!strcmp(ev->key, "End")) || ((!strcmp(ev->key, "KP_End")) && (!ev->string))) l = eina_list_last(sd->items); - else return; + else return EINA_FALSE; if (l) it = eina_list_data_get(l); @@ -1007,7 +974,7 @@ _elm_diskselector_smart_event(Eo *obj, void *_pd, va_list *list) } ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } static void @@ -1119,7 +1086,7 @@ _scroll_drag_stop_cb(Evas_Object *obj, } static void -_round_item_del(Elm_Diskselector_Smart_Data *sd, +_round_item_del(Elm_Diskselector_Data *sd, Elm_Diskselector_Item *it) { if (!it) return; @@ -1131,7 +1098,7 @@ _round_item_del(Elm_Diskselector_Smart_Data *sd, } static void -_round_items_del(Elm_Diskselector_Smart_Data *sd) +_round_items_del(Elm_Diskselector_Data *sd) { Eina_List *l; Elm_Diskselector_Item *it; @@ -1176,7 +1143,7 @@ _icon_duplicate(Evas_Object *icon) } static void -_round_items_add(Elm_Diskselector_Smart_Data *sd) +_round_items_add(Elm_Diskselector_Data *sd) { Elm_Diskselector_Item *temp_it; Elm_Diskselector_Item *dit; @@ -1258,10 +1225,9 @@ _round_items_add(Elm_Diskselector_Smart_Data *sd) } } -static void -_elm_diskselector_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_diskselector_evas_smart_add(Eo *obj, Elm_Diskselector_Data *priv) { - Elm_Diskselector_Smart_Data *priv = _pd; Evas *evas; Evas_Object *blank, *edje; @@ -1336,15 +1302,13 @@ _elm_diskselector_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) evas_event_thaw_eval(evas); } -static void -_elm_diskselector_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_diskselector_evas_smart_del(Eo *obj, Elm_Diskselector_Data *sd) { Elm_Diskselector_Item *it; Eina_List *l; Evas_Object *blank; - Elm_Diskselector_Smart_Data *sd = _pd; - /* left blank */ EINA_LIST_FOREACH (sd->left_blanks, l, blank) evas_object_del(blank); @@ -1414,46 +1378,35 @@ _elm_diskselector_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } -static void -_elm_diskselector_smart_move(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elm_diskselector_evas_smart_move(Eo *obj, Elm_Diskselector_Data *sd, Evas_Coord x, Evas_Coord y) { - Evas_Coord x = va_arg(*list, Evas_Coord); - Evas_Coord y = va_arg(*list, Evas_Coord); - Elm_Diskselector_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y)); evas_object_move(sd->hit_rect, x, y); } -static void -_elm_diskselector_smart_resize(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elm_diskselector_evas_smart_resize(Eo *obj, Elm_Diskselector_Data *sd, Evas_Coord w, Evas_Coord h) { - Evas_Coord w = va_arg(*list, Evas_Coord); - Evas_Coord h = va_arg(*list, Evas_Coord); - Elm_Diskselector_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h)); evas_object_resize(sd->hit_rect, w, h); } -static void -_elm_diskselector_smart_member_add(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elm_diskselector_evas_smart_member_add(Eo *obj, Elm_Diskselector_Data *sd, Evas_Object *member) { - Evas_Object *member = va_arg(*list, Evas_Object *); - Elm_Diskselector_Smart_Data *sd = _pd; - eo_do_super(obj, MY_CLASS, evas_obj_smart_member_add(member)); if (sd->hit_rect) evas_object_raise(sd->hit_rect); } -static void -_elm_diskselector_smart_access(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_diskselector_elm_widget_access(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *_pd EINA_UNUSED, Eina_Bool access) { - _elm_diskselector_smart_focus_next_enable = va_arg(*list, int); + _elm_diskselector_smart_focus_next_enable = access; } EAPI Evas_Object * @@ -1465,8 +1418,8 @@ elm_diskselector_add(Evas_Object *parent) return obj; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_diskselector_eo_base_constructor(Eo *obj, Elm_Diskselector_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, @@ -1474,42 +1427,19 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL)); } -EAPI Eina_Bool -elm_diskselector_round_enabled_get(const Evas_Object *obj) +EOLIAN static Eina_Bool +_elm_diskselector_round_enabled_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - eo_do((Eo *) obj, elm_obj_diskselector_round_enabled_get(&ret)); - return ret; + return sd->round; } -static void -_round_enabled_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Diskselector_Smart_Data *sd = _pd; - - *ret = sd->round; -} - -EAPI void -elm_diskselector_round_enabled_set(Evas_Object *obj, - Eina_Bool enabled) -{ - ELM_DISKSELECTOR_CHECK(obj); - eo_do(obj, elm_obj_diskselector_round_enabled_set(enabled)); -} - -static void -_round_enabled_set(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elm_diskselector_round_enabled_set(Eo *obj, Elm_Diskselector_Data *sd, Eina_Bool enabled) { Eina_List *elist; Elm_Diskselector_Item *it; Evas_Object *blank; - Eina_Bool enabled = va_arg(*list, int); - Elm_Diskselector_Smart_Data *sd = _pd; - if (sd->round == enabled) return; @@ -1583,38 +1513,15 @@ _round_enabled_set(Eo *obj, void *_pd, va_list *list) _sizing_eval(obj); } -EAPI int -elm_diskselector_side_text_max_length_get(const Evas_Object *obj) +EOLIAN static int +_elm_diskselector_side_text_max_length_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) 0; - int ret = 0; - eo_do((Eo *) obj, elm_obj_diskselector_side_text_max_length_get(&ret)); - return ret; + return sd->len_side; } -static void -_side_text_max_length_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static void +_elm_diskselector_side_text_max_length_set(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd, int len) { - int *ret = va_arg(*list, int *); - Elm_Diskselector_Smart_Data *sd = _pd; - - *ret = sd->len_side; -} - -EAPI void -elm_diskselector_side_text_max_length_set(Evas_Object *obj, - int len) -{ - ELM_DISKSELECTOR_CHECK(obj); - eo_do(obj, elm_obj_diskselector_side_text_max_length_set(len)); -} - -static void -_side_text_max_length_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - int len = va_arg(*list, int); - Elm_Diskselector_Smart_Data *sd = _pd; - sd->len_side = len; } @@ -1647,14 +1554,11 @@ elm_diskselector_scroller_policy_get(const Evas_Object *obj, eo_do((Eo *) obj, elm_interface_scrollable_policy_get(policy_h, policy_v)); } -static void -_scroller_policy_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_diskselector_elm_interface_scrollable_policy_get(Eo *obj, Elm_Diskselector_Data *sd EINA_UNUSED, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) { Elm_Scroller_Policy s_policy_h, s_policy_v; - Elm_Scroller_Policy *policy_h = va_arg(*list, Elm_Scroller_Policy *); - Elm_Scroller_Policy *policy_v = va_arg(*list, Elm_Scroller_Policy *); - eo_do_super((Eo *)obj, MY_CLASS, elm_interface_scrollable_policy_get(&s_policy_h, &s_policy_v)); if (policy_h) *policy_h = (Elm_Scroller_Policy)s_policy_h; if (policy_v) *policy_v = (Elm_Scroller_Policy)s_policy_v; @@ -1669,12 +1573,9 @@ elm_diskselector_scroller_policy_set(Evas_Object *obj, eo_do(obj, elm_interface_scrollable_policy_set(policy_h, policy_v)); } -static void -_scroller_policy_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_diskselector_elm_interface_scrollable_policy_set(Eo *obj, Elm_Diskselector_Data *sd EINA_UNUSED, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) { - Elm_Scroller_Policy policy_h = va_arg(*list, Elm_Scroller_Policy); - Elm_Scroller_Policy policy_v = va_arg(*list, Elm_Scroller_Policy); - if ((policy_h >= ELM_SCROLLER_POLICY_LAST) || (policy_v >= ELM_SCROLLER_POLICY_LAST)) return; @@ -1682,20 +1583,11 @@ _scroller_policy_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) eo_do_super(obj, MY_CLASS, elm_interface_scrollable_policy_set(policy_h, policy_v)); } -EAPI void -elm_diskselector_clear(Evas_Object *obj) -{ - ELM_DISKSELECTOR_CHECK(obj); - eo_do(obj, elm_obj_diskselector_clear()); -} - -static void -_clear(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_diskselector_clear(Eo *obj, Elm_Diskselector_Data *sd) { Elm_Diskselector_Item *it; - Elm_Diskselector_Smart_Data *sd = _pd; - if (!sd->items) return; sd->selected_item = NULL; @@ -1710,49 +1602,18 @@ _clear(Eo *obj, void *_pd, va_list *list EINA_UNUSED) _sizing_eval(obj); } -EAPI const Eina_List * -elm_diskselector_items_get(const Evas_Object *obj) +EOLIAN static const Eina_List* +_elm_diskselector_items_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) NULL; - const Eina_List *ret = NULL; - eo_do((Eo *) obj, elm_obj_diskselector_items_get(&ret)); - return ret; + return sd->items; } -static void -_items_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - const Eina_List **ret = va_arg(*list, const Eina_List **); - Elm_Diskselector_Smart_Data *sd = _pd; - - *ret = sd->items; -} - -EAPI Elm_Object_Item * -elm_diskselector_item_append(Evas_Object *obj, - const char *label, - Evas_Object *icon, - Evas_Smart_Cb func, - const void *data) -{ - ELM_DISKSELECTOR_CHECK(obj) NULL; - Elm_Object_Item *ret = NULL; - eo_do(obj, elm_obj_diskselector_item_append(label, icon, func, data, &ret)); - return ret; -} - -static void -_item_append(Eo *obj, void *_pd, va_list *list) +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; Eina_List *elist; - const char *label = va_arg(*list, const char *); - Evas_Object *icon = va_arg(*list, Evas_Object *); - Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb); - const void *data = va_arg(*list, const void *); - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - Elm_Diskselector_Smart_Data *sd = _pd; Evas *evas; evas = evas_object_evas_get(obj); @@ -1806,25 +1667,13 @@ _item_append(Eo *obj, void *_pd, va_list *list) evas_event_thaw(evas); evas_event_thaw_eval(evas); - *ret = (Elm_Object_Item *)it; + return (Elm_Object_Item *)it; } -EAPI Elm_Object_Item * -elm_diskselector_selected_item_get(const Evas_Object *obj) +EOLIAN static Elm_Object_Item* +_elm_diskselector_selected_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) NULL; - Elm_Object_Item *ret = NULL; - eo_do((Eo *) obj, elm_obj_diskselector_selected_item_get(&ret)); - return ret; -} - -static void -_selected_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - Elm_Diskselector_Smart_Data *sd = _pd; - - *ret = (Elm_Object_Item *)sd->selected_item; + return (Elm_Object_Item *)sd->selected_item; } EAPI void @@ -1882,57 +1731,23 @@ elm_diskselector_item_next_get(const Elm_Object_Item *item) else return NULL; } -EAPI Elm_Object_Item * -elm_diskselector_first_item_get(const Evas_Object *obj) +EOLIAN static Elm_Object_Item* +_elm_diskselector_first_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) NULL; - Elm_Object_Item *ret = NULL; - eo_do((Eo *) obj, elm_obj_diskselector_first_item_get(&ret)); - return ret; + if (!sd || !sd->items) return NULL; + else return eina_list_data_get(sd->items); } -static void -_first_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static Elm_Object_Item* +_elm_diskselector_last_item_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - Elm_Diskselector_Smart_Data *sd = _pd; - if (!sd || !sd->items) *ret = NULL; - else *ret = eina_list_data_get(sd->items); + if (!sd->items) return NULL; + else return eina_list_data_get(eina_list_last(sd->items)); } -EAPI Elm_Object_Item * -elm_diskselector_last_item_get(const Evas_Object *obj) +EOLIAN static void +_elm_diskselector_display_item_num_set(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd, int num) { - ELM_DISKSELECTOR_CHECK(obj) NULL; - Elm_Object_Item *ret = NULL; - eo_do((Eo *) obj, elm_obj_diskselector_last_item_get(&ret)); - return ret; -} - -static void -_last_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - Elm_Diskselector_Smart_Data *sd = _pd; - - if (!sd->items) *ret = NULL; - else *ret = eina_list_data_get(eina_list_last(sd->items)); -} - -EAPI void -elm_diskselector_display_item_num_set(Evas_Object *obj, - int num) -{ - ELM_DISKSELECTOR_CHECK(obj); - eo_do(obj, elm_obj_diskselector_display_item_num_set(num)); -} - -static void -_display_item_num_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - int num = va_arg(*list, int); - Elm_Diskselector_Smart_Data *sd = _pd; - if (num < DISPLAY_ITEM_NUM_MIN) num = DISPLAY_ITEM_NUM_MIN; sd->display_item_num = num; sd->display_item_num_by_api = EINA_TRUE; @@ -1940,95 +1755,19 @@ _display_item_num_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) if (!sd->round) _blank_item_check(obj, num); } -EAPI int -elm_diskselector_display_item_num_get(const Evas_Object *obj) +EOLIAN static int +_elm_diskselector_display_item_num_get(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { - ELM_DISKSELECTOR_CHECK(obj) (-1); - int ret = -1; - eo_do((Eo *) obj, elm_obj_diskselector_display_item_num_get(&ret)); - return ret; + return sd->display_item_num; } static void -_display_item_num_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +_elm_diskselector_class_constructor(Eo_Class *klass) { - int *ret = va_arg(*list, int *); - Elm_Diskselector_Smart_Data *sd = _pd; - - *ret = sd->display_item_num; -} - -static void -_class_constructor(Eo_Class *klass) -{ - const Eo_Op_Func_Description func_desc[] = { - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), - - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MEMBER_ADD), _elm_diskselector_smart_member_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_diskselector_smart_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_diskselector_smart_del), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_diskselector_smart_resize), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_diskselector_smart_move), - - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_diskselector_smart_theme), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_TRANSLATE), _elm_diskselector_smart_translate), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_diskselector_smart_event), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ON_FOCUS), _elm_diskselector_smart_on_focus), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_SUB_OBJECT_DEL), _elm_diskselector_smart_sub_object_del), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_diskselector_smart_focus_next_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_diskselector_smart_focus_next), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACCESS), _elm_diskselector_smart_access), - - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_POLICY_SET), _scroller_policy_set), - EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_POLICY_GET), _scroller_policy_get), - - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_ROUND_ENABLED_GET), _round_enabled_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_ROUND_ENABLED_SET), _round_enabled_set), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_SIDE_TEXT_MAX_LENGTH_GET), _side_text_max_length_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_SIDE_TEXT_MAX_LENGTH_SET), _side_text_max_length_set), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_CLEAR), _clear), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_ITEMS_GET), _items_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_ITEM_APPEND), _item_append), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_SELECTED_ITEM_GET), _selected_item_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_FIRST_ITEM_GET), _first_item_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_LAST_ITEM_GET), _last_item_get), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_DISPLAY_ITEM_NUM_SET), _display_item_num_set), - EO_OP_FUNC(ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_DISPLAY_ITEM_NUM_GET), _display_item_num_get), - EO_OP_FUNC_SENTINEL - }; - eo_class_funcs_set(klass, func_desc); - evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) _elm_diskselector_smart_focus_next_enable = EINA_TRUE; } -static const Eo_Op_Description op_desc[] = { - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_ROUND_ENABLED_GET, "Get a value whether round mode is enabled or not."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_ROUND_ENABLED_SET, "Enable or disable round mode."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_SIDE_TEXT_MAX_LENGTH_GET, "Get the side labels max length."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_SIDE_TEXT_MAX_LENGTH_SET, "Set the side labels max length."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_CLEAR, "Remove all diskselector's items."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_ITEMS_GET, "Get a list of all the diskselector items."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_ITEM_APPEND, "Appends a new item to the diskselector object."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_SELECTED_ITEM_GET, "Get the selected item."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_FIRST_ITEM_GET, "Get the first item of the diskselector."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_LAST_ITEM_GET, "Get the last item of the diskselector."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_DISPLAY_ITEM_NUM_SET, "Set the number of items to be displayed."), - EO_OP_DESCRIPTION(ELM_OBJ_DISKSELECTOR_SUB_ID_DISPLAY_ITEM_NUM_GET, "Get the number of items in the diskselector object."), - EO_OP_DESCRIPTION_SENTINEL -}; - -static const Eo_Class_Description class_desc = { - EO_VERSION, - MY_CLASS_NAME, - EO_CLASS_TYPE_REGULAR, - EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_DISKSELECTOR_BASE_ID, op_desc, ELM_OBJ_DISKSELECTOR_SUB_ID_LAST), - NULL, - sizeof(Elm_Diskselector_Smart_Data), - _class_constructor, - NULL -}; - -EO_DEFINE_CLASS(elm_obj_diskselector_class_get, &class_desc, ELM_OBJ_WIDGET_CLASS, ELM_INTERFACE_SCROLLABLE_CLASS, NULL); +#include "elm_diskselector.eo.c" diff --git a/legacy/elementary/src/lib/elm_diskselector.eo b/legacy/elementary/src/lib/elm_diskselector.eo new file mode 100644 index 0000000000..1706f24dfb --- /dev/null +++ b/legacy/elementary/src/lib/elm_diskselector.eo @@ -0,0 +1,266 @@ +class Elm_Diskselector (Elm_Widget, Elm_Interface_Scrollable) +{ + eo_prefix: elm_obj_diskselector; + properties { + side_text_max_length { + set { + /*@ + Set the side labels max length. + + Length is the number of characters of items' label that will be + visible when it's set on side positions. It will just crop + the string after defined size. E.g.: + + An item with label "January" would be displayed on side position as + "Jan" if max length is set to 3, or "Janu", if this property + is set to 4. + + When it's selected, the entire label will be displayed, except for + width restrictions. In this case label will be cropped and "..." + will be concatenated. + + Default side label max length is 3. + + This property will be applied over all items, included before or + later this function call. + + @ingroup Diskselector */ + } + get { + /*@ + Get the side labels max length. + + @see elm_diskselector_side_text_max_length_set() for details. + + @return The max length defined for side labels, or 0 if not a valid + diskselector. + + @ingroup Diskselector */ + } + values { + int len; /*@ The max length defined for side labels. */ + } + } + round_enabled { + set { + /*@ + Enable or disable round mode. + + Disabled by default. If round mode is enabled the items list will + work like a circular list, so when the user reaches the last item, + the first one will popup. + + @see elm_diskselector_round_enabled_get() + + @ingroup Diskselector */ + } + get { + /*@ + Get a value whether round mode is enabled or not. + + @see elm_diskselector_round_enabled_set() for details. + + @return @c EINA_TRUE means round mode is enabled. @c EINA_FALSE indicates + it's disabled. If @p obj is @c NULL, @c EINA_FALSE is returned. + + @ingroup Diskselector */ + } + values { + Eina_Bool enabled; /*@ @c EINA_TRUE to enable round mode or @c EINA_FALSE to + disable it. */ + } + } + display_item_num { + set { + /*@ + Set the number of items to be displayed. + + Default value is 3, and also it's the minimum. If @p num is less + than 3, it will be set to 3. + + Also, it can be set on theme, using data item @c display_item_num + on group "elm/diskselector/item/X", where X is style set. + E.g.: + + group { name: "elm/diskselector/item/X"; + data { + item: "display_item_num" "5"; + } + + @ingroup Diskselector */ + } + get { + /*@ + Get the number of items in the diskselector object. + + @ingroup Diskselector */ + } + values { + int num; /*@ The number of items the diskselector will display. */ + } + } + first_item { + get { + /*@ + Get the first item of the diskselector. + + @return The first item, or @c NULL if none. + + The list of items follows append order. So it will return the first + item appended to the widget that wasn't deleted. + + @see elm_diskselector_item_append() + @see elm_diskselector_items_get() + + @ingroup Diskselector */ + return Elm_Object_Item *; + } + } + items { + get { + /*@ + Get a list of all the diskselector items. + + @return An @c Eina_List of diskselector items, #Elm_Object_Item, + or @c NULL on failure. + + @see elm_diskselector_item_append() + @see elm_object_item_del() + @see elm_diskselector_clear() + + @ingroup Diskselector */ + return const Eina_List *; + } + } + last_item { + get { + /*@ + Get the last item of the diskselector. + + @return The last item, or @c NULL if none. + + The list of items follows append order. So it will return last first + item appended to the widget that wasn't deleted. + + @see elm_diskselector_item_append() + @see elm_diskselector_items_get() + + @ingroup Diskselector */ + return Elm_Object_Item *; + } + } + selected_item { + get { + /*@ + Get the selected item. + + @return The selected diskselector item. + + The selected item can be unselected with function + elm_diskselector_item_selected_set(), and the first item of + diskselector will be selected. + + The selected item always will be centered on diskselector, with + full label displayed, i.e., max length set to side labels won't + apply on the selected item. More details on + elm_diskselector_side_text_max_length_set(). + + @ingroup Diskselector */ + return Elm_Object_Item *; + } + } + } + methods { + item_append { + /*@ + Appends a new item to the diskselector object. + + @return The created item or @c NULL upon failure. + + A new item will be created and appended to the diskselector, i.e., will + be set as last item. Also, if there is no selected item, it will + be selected. This will always happens for the first appended item. + + If no icon is set, label will be centered on item position, otherwise + the icon will be placed at left of the label, that will be shifted + to the right. + + Items created with this method can be deleted with + elm_object_item_del(). + + Associated @p data can be properly freed when item is deleted if a + callback function is set with elm_object_item_del_cb_set(). + + If a function is passed as argument, it will be called every time this item + is selected, i.e., the user stops the diskselector with this + item on center position. If such function isn't needed, just passing + @c NULL as @p func is enough. The same should be done for @p data. + + Simple example (with no function callback or data associated): + @code + disk = elm_diskselector_add(win); + ic = elm_icon_add(win); + elm_image_file_set(ic, "path/to/image", NULL); + elm_icon_resizable_set(ic, EINA_TRUE, EINA_TRUE); + elm_diskselector_item_append(disk, "label", ic, NULL, NULL); + @endcode + + @see elm_object_item_del() + @see elm_diskselector_clear() + @see elm_icon_add() + + @ingroup Diskselector */ + + return Elm_Object_Item *; + params { + @in const char *label; /*@ The label of the diskselector item. */ + @in Evas_Object *icon; /*@ The icon object to use at left side of the item. An + icon can be any Evas object, but usually it is an icon created + with elm_icon_add(). */ + @in Evas_Smart_Cb func; /*@ The function to call when the item is selected. */ + @in const void *data; /*@ The data to associate with the item for related callbacks. */ + } + } + clear { + /*@ + Remove all diskselector's items. + + @see elm_object_item_del() + @see elm_diskselector_item_append() + + @ingroup Diskselector */ + + } + } + implements { + class::constructor; + Eo_Base::constructor; + Evas_Smart::member_add; + Evas_Smart::move; + Evas_Smart::add; + Evas_Smart::del; + Evas_Smart::resize; + Elm_Widget::focus_next_manager_is; + Elm_Widget::access; + Elm_Widget::focus_next; + Elm_Widget::theme_apply; + Elm_Widget::on_focus; + Elm_Widget::translate; + Elm_Widget::sub_object_del; + Elm_Widget::event; + Elm_Interface_Scrollable::policy; + } + events { + selected; + clicked; + scroll,anim,start; + scroll,anim,stop; + scroll,drag,start; + scroll,drag,stop; + language,changed; + access,changed; + focused; + unfocused; + } + +} diff --git a/legacy/elementary/src/lib/elm_diskselector_eo.h b/legacy/elementary/src/lib/elm_diskselector_eo.h index 7cfacd46b2..0719ff1f17 100644 --- a/legacy/elementary/src/lib/elm_diskselector_eo.h +++ b/legacy/elementary/src/lib/elm_diskselector_eo.h @@ -1,3 +1,6 @@ +#include "elm_diskselector.eo.h" + +#if 0 #define ELM_OBJ_DISKSELECTOR_CLASS elm_obj_diskselector_class_get() const Eo_Class *elm_obj_diskselector_class_get(void) EINA_CONST; @@ -192,3 +195,5 @@ enum * @ingroup Diskselector */ #define elm_obj_diskselector_display_item_num_get(ret) ELM_OBJ_DISKSELECTOR_ID(ELM_OBJ_DISKSELECTOR_SUB_ID_DISPLAY_ITEM_NUM_GET), EO_TYPECHECK(int *, ret) +#endif + diff --git a/legacy/elementary/src/lib/elm_widget_diskselector.h b/legacy/elementary/src/lib/elm_widget_diskselector.h index 4d54c0e21d..24214c87c3 100644 --- a/legacy/elementary/src/lib/elm_widget_diskselector.h +++ b/legacy/elementary/src/lib/elm_widget_diskselector.h @@ -17,10 +17,10 @@ /** * Base widget smart data extended with diskselector instance data. */ -typedef struct _Elm_Diskselector_Smart_Data Elm_Diskselector_Smart_Data; +typedef struct _Elm_Diskselector_Data Elm_Diskselector_Data; typedef struct _Elm_Diskselector_Item Elm_Diskselector_Item; -struct _Elm_Diskselector_Smart_Data +struct _Elm_Diskselector_Data { Evas_Object *hit_rect; @@ -65,7 +65,7 @@ struct _Elm_Diskselector_Item */ #define ELM_DISKSELECTOR_DATA_GET(o, sd) \ - Elm_Diskselector_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_DISKSELECTOR_CLASS) + Elm_Diskselector_Data * sd = eo_data_scope_get(o, ELM_OBJ_DISKSELECTOR_CLASS) #define ELM_DISKSELECTOR_DATA_GET_OR_RETURN(o, ptr) \ ELM_DISKSELECTOR_DATA_GET(o, ptr); \