jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=65022ccde020de279c0793844f876ebf43c41616
commit 65022ccde020de279c0793844f876ebf43c41616 Author: Daniel Zaoui <daniel.za...@samsung.com> Date: Wed Mar 26 11:04:37 2014 +0200 Eolian: Integration of Segment Control --- src/lib/Makefile.am | 10 +- src/lib/elm_segment_control.c | 327 ++++++++--------------------------- src/lib/elm_segment_control.eo | 215 +++++++++++++++++++++++ src/lib/elm_segment_control_eo.h | 4 + src/lib/elm_widget_segment_control.h | 6 +- 5 files changed, 300 insertions(+), 262 deletions(-) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 9080307..11640ac 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -640,7 +640,9 @@ BUILT_SOURCES = \ elm_route.eo.c \ elm_route.eo.h \ elm_scroller.eo.c \ - elm_scroller.eo.h + elm_scroller.eo.h \ + elm_segment_control.eo.c \ + elm_segment_control.eo.h EXTRA_DIST += \ elm_widget.eo \ @@ -700,7 +702,8 @@ EXTRA_DIST += \ elm_progressbar.eo \ elm_radio.eo \ elm_route.eo \ - elm_scroller.eo + elm_scroller.eo \ + elm_segment_control.eo nodist_includesunstable_HEADERS = \ elm_widget.eo.h \ @@ -760,5 +763,6 @@ nodist_includesunstable_HEADERS = \ elm_progressbar.eo.h \ elm_radio.eo.h \ elm_route.eo.h \ - elm_scroller.eo.h + elm_scroller.eo.h \ + elm_segment_control.eo.h diff --git a/src/lib/elm_segment_control.c b/src/lib/elm_segment_control.c index a992f57..2269b84 100644 --- a/src/lib/elm_segment_control.c +++ b/src/lib/elm_segment_control.c @@ -7,8 +7,6 @@ #include "elm_priv.h" #include "elm_widget_segment_control.h" -EAPI Eo_Op ELM_OBJ_SEGMENT_CONTROL_BASE_ID = EO_NOOP; - #define MY_CLASS ELM_OBJ_SEGMENT_CONTROL_CLASS #define MY_CLASS_NAME "Elm_Segment_Control" @@ -22,11 +20,9 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { {NULL, NULL} }; -static void -_elm_segment_control_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Segment_Control_Smart_Data *sd = _pd; Elm_Segment_Item *it; Eina_List *l; @@ -35,17 +31,16 @@ _elm_segment_control_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *li eo_do_super(obj, MY_CLASS, elm_obj_widget_translate(NULL)); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_segment_control_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_segment_control_elm_layout_sizing_eval(Eo *obj, Elm_Segment_Control_Data *sd) { Evas_Coord minw = -1, minh = -1; Evas_Coord w, h; int item_count; - Elm_Segment_Control_Smart_Data *sd = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); item_count = eina_list_count(sd->items); @@ -76,7 +71,7 @@ _item_free(Elm_Segment_Item *it) } static void -_position_items(Elm_Segment_Control_Smart_Data *sd) +_position_items(Elm_Segment_Control_Data *sd) { Eina_List *l; Eina_Bool rtl; @@ -131,7 +126,7 @@ _swallow_item_objects(Elm_Segment_Item *it) } static void -_update_list(Elm_Segment_Control_Smart_Data *sd) +_update_list(Elm_Segment_Control_Data *sd) { int idx = 0; Eina_List *l; @@ -211,20 +206,16 @@ _update_list(Elm_Segment_Control_Smart_Data *sd) } } -static void -_elm_segment_control_smart_theme(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_theme_apply(Eo *obj, Elm_Segment_Control_Data *sd) { Eina_List *l; Eina_Bool rtl; Elm_Segment_Item *it; - Elm_Segment_Control_Smart_Data *sd = _pd; - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret; - eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; rtl = elm_widget_mirrored_get(obj); @@ -240,23 +231,19 @@ _elm_segment_control_smart_theme(Eo *obj, void *_pd, va_list *list) _update_list(sd); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_segment_control_smart_disable(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_disable(Eo *obj, Elm_Segment_Control_Data *sd) { - Elm_Segment_Control_Smart_Data *sd = _pd; - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret; - eo_do_super(obj, MY_CLASS, elm_obj_widget_disable(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; _update_list(sd); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } // TODO: elm_widget_focus_list_next_get supports only Elm_widget list, @@ -275,21 +262,13 @@ _elm_list_data_get(const Eina_List *list) return VIEW(it); } -static void -_elm_segment_control_smart_focus_next(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) { static int count = 0; const Eina_List *items; void *(*list_data_get)(const Eina_List *list); - 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; - - Elm_Segment_Control_Smart_Data *sd = _pd; - /* Focus chain */ if ((items = elm_widget_focus_custom_chain_get(obj))) list_data_get = eina_list_data_get; @@ -297,11 +276,10 @@ _elm_segment_control_smart_focus_next(Eo *obj, void *_pd, va_list *list) { items = sd->items; list_data_get = _elm_list_data_get; - if (!items) return; + if (!items) return EINA_FALSE; } - int_ret = elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); - if (ret) *ret = int_ret; + return elm_widget_focus_list_next_get(obj, items, list_data_get, dir, next); } #endif @@ -609,8 +587,8 @@ _item_new(Evas_Object *obj, return it; } -static void -_elm_segment_control_smart_add(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_segment_control_evas_smart_add(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); elm_widget_sub_object_parent_add(obj); @@ -627,13 +605,11 @@ _elm_segment_control_smart_add(Eo *obj, void *_pd EINA_UNUSED, va_list *list EIN elm_layout_sizing_eval(obj); } -static void -_elm_segment_control_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_segment_control_evas_smart_del(Eo *obj, Elm_Segment_Control_Data *sd) { Elm_Segment_Item *it; - Elm_Segment_Control_Smart_Data *sd = _pd; - EINA_LIST_FREE(sd->items, it) { _item_free(it); @@ -645,44 +621,36 @@ _elm_segment_control_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) static Eina_Bool _elm_segment_control_smart_focus_next_enable = EINA_FALSE; -static void -_elm_segment_control_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = _elm_segment_control_smart_focus_next_enable; + return _elm_segment_control_smart_focus_next_enable; } -static void -_elm_segment_control_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_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 *); - *ret = EINA_FALSE; - Eina_List *items = NULL; Eina_List *l; Elm_Segment_Item *it; - ELM_SEGMENT_CONTROL_CHECK(obj); - Elm_Segment_Control_Smart_Data *sd = _pd; + ELM_SEGMENT_CONTROL_CHECK(obj) EINA_FALSE; EINA_LIST_FOREACH(sd->items, l, it) items = eina_list_append(items, it->base.access_obj); - *ret = elm_widget_focus_list_next_get + return elm_widget_focus_list_next_get (obj, items, eina_list_data_get, dir, next); } -static void -_elm_segment_control_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_segment_control_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = EINA_FALSE; + return EINA_FALSE; } static void -_access_obj_process(Elm_Segment_Control_Smart_Data * sd, Eina_Bool is_access) +_access_obj_process(Elm_Segment_Control_Data *sd, Eina_Bool is_access) { Eina_List *l; Elm_Segment_Item *it; @@ -695,11 +663,10 @@ _access_obj_process(Elm_Segment_Control_Smart_Data * sd, Eina_Bool is_access) } } -static void -_elm_segment_control_smart_access(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static void +_elm_segment_control_elm_widget_access(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd, Eina_Bool acs) { - Elm_Segment_Control_Smart_Data *sd = _pd; - _elm_segment_control_smart_focus_next_enable = va_arg(*list, int); + _elm_segment_control_smart_focus_next_enable = acs; _access_obj_process(sd, _elm_segment_control_smart_focus_next_enable); } @@ -712,10 +679,9 @@ elm_segment_control_add(Evas_Object *parent) return obj; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_segment_control_eo_base_constructor(Eo *obj, Elm_Segment_Control_Data *sd) { - Elm_Segment_Control_Smart_Data *sd = _pd; sd->obj = obj; eo_do_super(obj, MY_CLASS, eo_constructor()); @@ -724,67 +690,31 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL)); } -EAPI Elm_Object_Item * -elm_segment_control_item_add(Evas_Object *obj, - Evas_Object *icon, - const char *label) +EOLIAN static Elm_Object_Item* +_elm_segment_control_item_add(Eo *obj, Elm_Segment_Control_Data *sd, Evas_Object *icon, const char *label) { - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - Elm_Object_Item *ret; - eo_do(obj, elm_obj_segment_control_item_add(icon, label, &ret)); - return ret; -} - -static void -_item_add(Eo *obj, void *_pd, va_list *list) -{ - Evas_Object *icon = va_arg(*list, Evas_Object *); - const char *label = va_arg(*list, const char *); - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - *ret = NULL; - Elm_Segment_Item *it; - Elm_Segment_Control_Smart_Data *sd = _pd; it = _item_new(obj, icon, label); - if (!it) return; + if (!it) return NULL; sd->items = eina_list_append(sd->items, it); _update_list(sd); - *ret =(Elm_Object_Item *)it; + return (Elm_Object_Item *)it; } -EAPI Elm_Object_Item * -elm_segment_control_item_insert_at(Evas_Object *obj, - Evas_Object *icon, - const char *label, - int idx) +EOLIAN static Elm_Object_Item* +_elm_segment_control_item_insert_at(Eo *obj, Elm_Segment_Control_Data *sd, Evas_Object *icon, const char *label, int idx) { - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - Elm_Object_Item *ret; - eo_do(obj, elm_obj_segment_control_item_insert_at(icon, label, idx, &ret)); - return ret; -} - -static void -_item_insert_at(Eo *obj, void *_pd, va_list *list) -{ - Evas_Object *icon = va_arg(*list, Evas_Object *); - const char *label = va_arg(*list, const char *); - int idx = va_arg(*list, int); - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - *ret = NULL; - Elm_Segment_Item *it, *it_rel; - Elm_Segment_Control_Smart_Data *sd = _pd; if (idx < 0) idx = 0; it = _item_new(obj, icon, label); - if (!it) return; + if (!it) return NULL; it_rel = _item_find(obj, idx); if (it_rel) sd->items = eina_list_prepend_relative(sd->items, it, it_rel); @@ -792,21 +722,12 @@ _item_insert_at(Eo *obj, void *_pd, va_list *list) _update_list(sd); - *ret = (Elm_Object_Item *)it; + return (Elm_Object_Item *)it; } -EAPI void -elm_segment_control_item_del_at(Evas_Object *obj, - int idx) -{ - ELM_SEGMENT_CONTROL_CHECK(obj); - eo_do(obj, elm_obj_segment_control_item_del_at(idx)); -} - -static void -_item_del_at(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_segment_control_item_del_at(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, int idx) { - int idx = va_arg(*list, int); Elm_Segment_Item *it; it = _item_find(obj, idx); @@ -815,65 +736,29 @@ _item_del_at(Eo *obj, void *_pd EINA_UNUSED, va_list *list) elm_object_item_del((Elm_Object_Item *)it); } -EAPI const char * -elm_segment_control_item_label_get(const Evas_Object *obj, - int idx) -{ - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - const char *ret; - eo_do((Eo *) obj, elm_obj_segment_control_item_label_get(idx, &ret)); - return ret; -} - -static void -_item_label_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static const char* +_elm_segment_control_item_label_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, int idx) { - int idx = va_arg(*list, int); - const char **ret = va_arg(*list, const char **); - *ret = NULL; Elm_Segment_Item *it; it = _item_find(obj, idx); - if (it) *ret = it->label; -} + if (it) return it->label; -EAPI Evas_Object * -elm_segment_control_item_icon_get(const Evas_Object *obj, - int idx) -{ - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - Evas_Object *ret; - eo_do((Eo *) obj, elm_obj_segment_control_item_icon_get(idx, &ret)); - return ret; + return NULL; } -static void -_item_icon_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Evas_Object* +_elm_segment_control_item_icon_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, int idx) { - int idx = va_arg(*list, int); - Evas_Object **ret = va_arg(*list, Evas_Object **); - *ret = NULL; - Elm_Segment_Item *it = _item_find(obj, idx); - if (it) *ret = it->icon; -} - -EAPI int -elm_segment_control_item_count_get(const Evas_Object *obj) -{ - ELM_SEGMENT_CONTROL_CHECK(obj) 0; - int ret; - eo_do((Eo *) obj, elm_obj_segment_control_item_count_get(&ret)); - return ret; + if (it) return it->icon; + return NULL; } -static void -_item_count_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static int +_elm_segment_control_item_count_get(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) { - int *ret = va_arg(*list, int *); - - Elm_Segment_Control_Smart_Data *sd = _pd; - *ret = eina_list_count(sd->items); + return eina_list_count(sd->items); } EAPI Evas_Object * @@ -884,21 +769,10 @@ elm_segment_control_item_object_get(const Elm_Object_Item *it) return VIEW(it); } -EAPI Elm_Object_Item * -elm_segment_control_item_selected_get(const Evas_Object *obj) +EOLIAN static Elm_Object_Item* +_elm_segment_control_item_selected_get(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) { - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - Elm_Object_Item *ret; - eo_do((Eo *) obj, elm_obj_segment_control_item_selected_get(&ret)); - return ret; -} - -static void -_item_selected_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - Elm_Segment_Control_Smart_Data *sd = _pd; - *ret = (Elm_Object_Item *)sd->selected_item; + return (Elm_Object_Item *)sd->selected_item; } EAPI void @@ -922,22 +796,10 @@ elm_segment_control_item_selected_set(Elm_Object_Item *it, _segment_on(item); } -EAPI Elm_Object_Item * -elm_segment_control_item_get(const Evas_Object *obj, - int idx) -{ - ELM_SEGMENT_CONTROL_CHECK(obj) NULL; - Elm_Object_Item *ret; - eo_do((Eo *) obj, elm_obj_segment_control_item_get(idx, &ret)); - return ret; -} - -static void -_item_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Elm_Object_Item* +_elm_segment_control_item_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, int idx) { - int idx = va_arg(*list, int); - Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **); - *ret = (Elm_Object_Item *)_item_find(obj, idx); + return (Elm_Object_Item *)_item_find(obj, idx); } EAPI int @@ -948,60 +810,13 @@ elm_segment_control_item_index_get(const Elm_Object_Item *it) return ((Elm_Segment_Item *)it)->seg_index; } -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_ADD), _elm_segment_control_smart_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_segment_control_smart_del), - - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_segment_control_smart_theme), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_TRANSLATE), _elm_segment_control_smart_translate), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_DISABLE), _elm_segment_control_smart_disable), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_segment_control_smart_focus_next_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_segment_control_smart_focus_next), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_segment_control_smart_focus_direction_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACCESS), _elm_segment_control_smart_access), - EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_segment_control_smart_sizing_eval), - - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_ADD), _item_add), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_INSERT_AT), _item_insert_at), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_DEL_AT), _item_del_at), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_LABEL_GET), _item_label_get), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_ICON_GET), _item_icon_get), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_COUNT_GET), _item_count_get), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_SELECTED_GET), _item_selected_get), - EO_OP_FUNC(ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_GET), _item_get), - EO_OP_FUNC_SENTINEL - }; - eo_class_funcs_set(klass, func_desc); - +EOLIAN static void +_elm_segment_control_class_constructor(Eo_Class *klass) +{ evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) _elm_segment_control_smart_focus_next_enable = EINA_TRUE; } -static const Eo_Op_Description op_desc[] = { - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_ADD, "Append a new item to the segment control object."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_INSERT_AT, "Insert a new item to the segment control object at specified position."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_DEL_AT, "Remove a segment control item at given index from its parent,."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_LABEL_GET, "Get the label of item."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_ICON_GET, "Get the icon associated to the item."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_COUNT_GET, "Get the Segment items count from segment control."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_SELECTED_GET, "Get the selected item."), - EO_OP_DESCRIPTION(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_GET, "Get the item placed at specified index."), - 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_SEGMENT_CONTROL_BASE_ID, op_desc, ELM_OBJ_SEGMENT_CONTROL_SUB_ID_LAST), - NULL, - sizeof(Elm_Segment_Control_Smart_Data), - _class_constructor, - NULL -}; -EO_DEFINE_CLASS(elm_obj_segment_control_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, NULL); + +#include "elm_segment_control.eo.c" diff --git a/src/lib/elm_segment_control.eo b/src/lib/elm_segment_control.eo new file mode 100644 index 0000000..150cf44 --- /dev/null +++ b/src/lib/elm_segment_control.eo @@ -0,0 +1,215 @@ +class Elm_Segment_Control (Elm_Layout) +{ + eo_prefix: elm_obj_segment_control; + properties { + item_count { + get { + /*@ + Get the Segment items count from segment control. + + @return Segment items count. + + It will just return the number of items added to segment control @p obj. + + @ingroup SegmentControl */ + return int; + } + } + item_selected { + get { + /*@ + Get the selected item. + + @return The selected item or @c NULL if none of segment items is + selected. + + The selected item can be unselected with function + elm_segment_control_item_selected_set(). + + The selected item always will be highlighted on segment control. + + @ingroup SegmentControl */ + return Elm_Object_Item *; + } + } + } + methods { + item_label_get { + /*@ + Get the label of item. + + @return The label of the item at @p index. + + The return value is a pointer to the label associated to the item when + it was created, with function elm_segment_control_item_add(), or later + with function elm_object_item_text_set. If no label + was passed as argument, it will return @c NULL. + + @see elm_object_item_text_set() for more details. + @see elm_segment_control_item_add() + + @ingroup SegmentControl */ + + const; + return const char *; + params { + @in int idx; /*@ The index of the segment item. */ + } + } + item_insert_at { + /*@ + Insert a new item to the segment control object at specified position. + + @return The created item or @c NULL upon failure. + + Index values must be between @c 0, when item will be prepended to + segment control, and items count, that can be get with + elm_segment_control_item_count_get(), case when item will be appended + to segment control, just like elm_segment_control_item_add(). + + Items created with this function can be deleted with function + elm_object_item_del() or elm_segment_control_item_del_at(). + + @note @p label set to @c NULL is different from empty string "". + If an item + only has icon, it will be displayed bigger and centered. If it has + icon and label, even that an empty string, icon will be smaller and + positioned at left. + + @see elm_segment_control_item_add() + @see elm_segment_control_item_count_get() + @see elm_object_item_del() + + @ingroup SegmentControl */ + + return Elm_Object_Item *; + params { + @in Evas_Object *icon; /*@ The icon object to use for the left side of the item. An + icon can be any Evas object, but usually it is an icon created + with elm_icon_add(). */ + @in const char *label; /*@ The label of the item. */ + @in int idx; /*@ Item position. Value should be between 0 and items count. */ + } + } + item_get { + /*@ + Get the item placed at specified index. + + @return The segment control item or @c NULL on failure. + + Index is the position of an item in segment control widget. Its + range is from @c 0 to <tt> count - 1 </tt>. + Count is the number of items, that can be get with + elm_segment_control_item_count_get(). + + @ingroup SegmentControl */ + + const; + return Elm_Object_Item *; + params { + @in int idx; /*@ The index of the segment item. */ + } + } + item_del_at { + /*@ + Remove a segment control item at given index from its parent, + deleting it. + + Items can be added with elm_segment_control_item_add() or + elm_segment_control_item_insert_at(). + + @ingroup SegmentControl */ + + params { + @in int idx; /*@ The position of the segment control item to be deleted. */ + } + } + item_add { + /*@ + Append a new item to the segment control object. + + @return The created item or @c NULL upon failure. + + A new item will be created and appended to the segment control, i.e., will + be set as @b last item. + + If it should be inserted at another position, + elm_segment_control_item_insert_at() should be used instead. + + Items created with this function can be deleted with function + elm_object_item_del() or elm_object_item_del_at(). + + @note @p label set to @c NULL is different from empty string "". + If an item + only has icon, it will be displayed bigger and centered. If it has + icon and label, even that an empty string, icon will be smaller and + positioned at left. + + Simple example: + @code + sc = elm_segment_control_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_segment_control_item_add(sc, ic, "label"); + evas_object_show(sc); + @endcode + + @see elm_segment_control_item_insert_at() + @see elm_object_item_del() + + @ingroup SegmentControl */ + + return Elm_Object_Item *; + params { + @in Evas_Object *icon; /*@ The icon object to use for the left side of the item. An + icon can be any Evas object, but usually it is an icon created + with elm_icon_add(). */ + @in const char *label; /*@ The label of the item. + Note that, NULL is different from empty string "". */ + } + } + item_icon_get { + /*@ + Get the icon associated to the item. + + @return The left side icon associated to the item at @p index. + + The return value is a pointer to the icon associated to the item when + it was created, with function elm_segment_control_item_add(), or later + with function elm_object_item_part_content_set(). If no icon + was passed as argument, it will return @c NULL. + + @see elm_segment_control_item_add() + @see elm_object_item_part_content_set() + + @ingroup SegmentControl */ + + const; + return Evas_Object *; + params { + @in int idx; /*@ The index of the segment item. */ + } + } + } + implements { + class::constructor; + Eo_Base::constructor; + Evas_Smart::add; + Evas_Smart::del; + Elm_Widget::theme_apply; + Elm_Widget::focus_next_manager_is; + Elm_Widget::focus_next; + Elm_Widget::focus_direction_manager_is; + Elm_Widget::access; + Elm_Widget::disable; + Elm_Widget::translate; + Elm_Layout::sizing_eval; + } + events { + changed; + language,changed; + access,changed; + } + +} diff --git a/src/lib/elm_segment_control_eo.h b/src/lib/elm_segment_control_eo.h index ddcee09..bd6496b 100644 --- a/src/lib/elm_segment_control_eo.h +++ b/src/lib/elm_segment_control_eo.h @@ -1,3 +1,6 @@ +#include "elm_segment_control.eo.h" + +#if 0 #define ELM_OBJ_SEGMENT_CONTROL_CLASS elm_obj_segment_control_class_get() const Eo_Class *elm_obj_segment_control_class_get(void) EINA_CONST; @@ -139,3 +142,4 @@ enum * @ingroup SegmentControl */ #define elm_obj_segment_control_item_get(idx, ret) ELM_OBJ_SEGMENT_CONTROL_ID(ELM_OBJ_SEGMENT_CONTROL_SUB_ID_ITEM_GET), EO_TYPECHECK(int, idx), EO_TYPECHECK(Elm_Object_Item **, ret) +#endif diff --git a/src/lib/elm_widget_segment_control.h b/src/lib/elm_widget_segment_control.h index 2464c62..666fe54 100644 --- a/src/lib/elm_widget_segment_control.h +++ b/src/lib/elm_widget_segment_control.h @@ -17,10 +17,10 @@ /** * Base layout smart data extended with segment control instance data. */ -typedef struct _Elm_Segment_Control_Smart_Data Elm_Segment_Control_Smart_Data; +typedef struct _Elm_Segment_Control_Data Elm_Segment_Control_Data; typedef struct _Elm_Segment_Item Elm_Segment_Item; -struct _Elm_Segment_Control_Smart_Data +struct _Elm_Segment_Control_Data { Evas_Object *obj; Eina_List *items; @@ -43,7 +43,7 @@ struct _Elm_Segment_Item */ #define ELM_SEGMENT_CONTROL_DATA_GET(o, sd) \ - Elm_Segment_Control_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_SEGMENT_CONTROL_CLASS) + Elm_Segment_Control_Data * sd = eo_data_scope_get(o, ELM_OBJ_SEGMENT_CONTROL_CLASS) #define ELM_SEGMENT_CONTROL_DATA_GET_OR_RETURN(o, ptr) \ ELM_SEGMENT_CONTROL_DATA_GET(o, ptr); \ --