Eolian: Integration of Segment Control

This commit is contained in:
Daniel Zaoui 2014-03-26 11:04:37 +02:00
parent c76581ca44
commit e1a15be56e
5 changed files with 300 additions and 262 deletions

View File

@ -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

View File

@ -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)
EOLIAN static void
_elm_segment_control_item_del_at(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, 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)
{
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)
EOLIAN static const char*
_elm_segment_control_item_label_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, 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)
{
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;
return NULL;
}
EAPI Evas_Object *
elm_segment_control_item_icon_get(const Evas_Object *obj,
int idx)
EOLIAN static Evas_Object*
_elm_segment_control_item_icon_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, 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;
}
static void
_item_icon_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{
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;
if (it) return it->icon;
return NULL;
}
EAPI int
elm_segment_control_item_count_get(const Evas_Object *obj)
EOLIAN static int
_elm_segment_control_item_count_get(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd)
{
ELM_SEGMENT_CONTROL_CHECK(obj) 0;
int ret;
eo_do((Eo *) obj, elm_obj_segment_control_item_count_get(&ret));
return ret;
}
static void
_item_count_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
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)
EOLIAN static Elm_Object_Item*
_elm_segment_control_item_get(Eo *obj, Elm_Segment_Control_Data *_pd EINA_UNUSED, 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)
{
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)
EOLIAN static void
_elm_segment_control_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);
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"

View File

@ -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;
}
}

View File

@ -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

View File

@ -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); \