Eolian: Integration of Segment Control
This commit is contained in:
parent
c76581ca44
commit
e1a15be56e
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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); \
|
||||
|
|
Loading…
Reference in New Issue