Eolian: Integration of Disk Selector

This commit is contained in:
Daniel Zaoui 2014-03-21 17:27:17 +02:00
parent ebaeb19625
commit 702396e282
5 changed files with 371 additions and 357 deletions

View File

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

View File

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

View File

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

View File

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

View File

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