jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=54855a435e781f3f91c8c6dc3a76131e83cab52b
commit 54855a435e781f3f91c8c6dc3a76131e83cab52b Author: Daniel Zaoui <[email protected]> Date: Mon Mar 24 10:38:01 2014 +0200 Eolian: Integration of Panel --- src/lib/Makefile.am | 10 +- src/lib/elm_panel.c | 273 +++++++++++---------------------------------- src/lib/elm_panel.eo | 78 +++++++++++++ src/lib/elm_panel_eo.h | 4 + src/lib/elm_widget_panel.h | 6 +- 5 files changed, 157 insertions(+), 214 deletions(-) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 03486e9..cb66d4c 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -610,7 +610,9 @@ BUILT_SOURCES = \ elm_map.eo.c \ elm_map.eo.h \ elm_menu.eo.c \ - elm_menu.eo.h + elm_menu.eo.h \ + elm_panel.eo.c \ + elm_panel.eo.h EXTRA_DIST += \ elm_widget.eo \ @@ -655,7 +657,8 @@ EXTRA_DIST += \ elm_label.eo \ elm_map_pan.eo \ elm_map.eo \ - elm_menu.eo + elm_menu.eo \ + elm_panel.eo nodist_includesunstable_HEADERS = \ elm_widget.eo.h \ @@ -700,5 +703,6 @@ nodist_includesunstable_HEADERS = \ elm_label.eo.h \ elm_map_pan.eo.h \ elm_map.eo.h \ - elm_menu.eo.h + elm_menu.eo.h \ + elm_panel.eo.h diff --git a/src/lib/elm_panel.c b/src/lib/elm_panel.c index 7d92e05..8e9194f 100644 --- a/src/lib/elm_panel.c +++ b/src/lib/elm_panel.c @@ -9,8 +9,6 @@ #include "els_box.h" -EAPI Eo_Op ELM_OBJ_PANEL_BASE_ID = EO_NOOP; - #define MY_CLASS ELM_OBJ_PANEL_CLASS #define MY_CLASS_NAME "Elm_Panel" @@ -39,12 +37,11 @@ _mirrored_set(Evas_Object *obj, elm_panel_orient_set(obj, elm_panel_orient_get(obj)); } -static void -_elm_panel_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_panel_elm_layout_sizing_eval(Eo *obj, Elm_Panel_Data *sd) { Evas_Coord mw = -1, mh = -1; - Elm_Panel_Smart_Data *sd = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); if (sd->delete_me) return; @@ -130,21 +127,18 @@ _orient_set_do(Evas_Object *obj) } } -static void -_elm_panel_smart_theme(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_panel_elm_widget_theme_apply(Eo *obj, Elm_Panel_Data *sd) { const char *str; Evas_Coord minw = 0, minh = 0; - Elm_Panel_Smart_Data *sd = _pd; Eina_Bool int_ret = EINA_FALSE; - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *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_theme_apply(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; _mirrored_set(obj, elm_widget_mirrored_get(obj)); @@ -167,38 +161,28 @@ _elm_panel_smart_theme(Eo *obj, void *_pd, va_list *list) elm_layout_sizing_eval(obj); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_panel_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_panel_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Panel_Data *_pd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_panel_smart_focus_next(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_panel_elm_widget_focus_next(Eo *obj, Elm_Panel_Data *sd, Elm_Focus_Direction dir, Evas_Object **next) { Evas_Object *cur; - 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 *); - Eina_Bool int_ret = EINA_FALSE; - Elm_Panel_Smart_Data *sd = _pd; - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); - if (!sd->content) goto end; + if (!sd->content) return EINA_FALSE; cur = sd->content; /* Try to Focus cycle in subitem */ - if (!sd->hidden) - { - int_ret = elm_widget_focus_next_get(cur, dir, next); - goto end; - } + if (!sd->hidden) return elm_widget_focus_next_get(cur, dir, next); /* access */ if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF) @@ -212,10 +196,7 @@ _elm_panel_smart_focus_next(Eo *obj, void *_pd, va_list *list) /* Return */ *next = (Evas_Object *)obj; - int_ret = !elm_widget_focus_get(obj); - -end: - if (ret) *ret = int_ret; + return !elm_widget_focus_get(obj); } static void @@ -261,44 +242,32 @@ void _key_action_toggle(Evas_Object *obj, const char *params EINA_UNUSED) _panel_toggle(NULL, obj, NULL, NULL); } -static void -_elm_panel_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elm_panel_elm_widget_event(Eo *obj, Elm_Panel_Data *_pd EINA_UNUSED, 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 *); - - if (ret) *ret = EINA_FALSE; - - 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 (src != obj) return; + Evas_Event_Key_Down *ev = event_info; + 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 (src != obj) return EINA_FALSE; - if (!_elm_config_key_binding_call(obj, ev, key_actions)) return; + if (!_elm_config_key_binding_call(obj, ev, key_actions)) return EINA_FALSE; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_panel_smart_content_set(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elm_panel_elm_container_content_set(Eo *obj, Elm_Panel_Data *sd, const char *part, Evas_Object *content) { - const char *part = va_arg(*list, const char *); - Evas_Object *content = va_arg(*list, Evas_Object *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Eina_Bool int_ret = EINA_TRUE; - - Elm_Panel_Smart_Data *sd = _pd; - if (part && strcmp(part, "default")) { + Eina_Bool int_ret = EINA_TRUE; eo_do_super(obj, MY_CLASS, elm_obj_container_content_set(part, content, &int_ret)); - goto end; + return int_ret; } - if (sd->content == content) goto end; + if (sd->content == content) return EINA_TRUE; if (sd->content) evas_object_box_remove_all(sd->bx, EINA_TRUE); sd->content = content; @@ -310,59 +279,45 @@ _elm_panel_smart_content_set(Eo *obj, void *_pd, va_list *list) elm_layout_sizing_eval(obj); -end: - if (ret) *ret = int_ret; - + return EINA_TRUE; } -static void -_elm_panel_smart_content_get(Eo *obj, void *_pd, va_list *list) +EOLIAN static Evas_Object* +_elm_panel_elm_container_content_get(Eo *obj, Elm_Panel_Data *sd, const char *part) { - Elm_Panel_Smart_Data *sd = _pd; - const char *part = va_arg(*list, const char *); - Evas_Object **ret = va_arg(*list, Evas_Object **); - if (!ret) return; - - *ret = NULL; - if (part && strcmp(part, "default")) { - eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(part, ret)); - return; + Evas_Object *ret = NULL; + eo_do_super(obj, MY_CLASS, elm_obj_container_content_get(part, &ret)); + return ret; } - *ret = sd->content; + return sd->content; } -static void -_elm_panel_smart_content_unset(Eo *obj, void *_pd, va_list *list) +EOLIAN static Evas_Object* +_elm_panel_elm_container_content_unset(Eo *obj, Elm_Panel_Data *sd, const char *part) { Evas_Object *content = NULL; - Elm_Panel_Smart_Data *sd = _pd; - const char *part = va_arg(*list, const char *); - Evas_Object **ret = va_arg(*list, Evas_Object **); - if (part && strcmp(part, "default")) { eo_do_super(obj, MY_CLASS, elm_obj_container_content_unset(part, &content)); - goto end; + return content; } - if (!sd->content) goto end; + if (!sd->content) return NULL; content = sd->content; evas_object_box_remove_all(sd->bx, EINA_FALSE); sd->content = NULL; -end: - if (ret) *ret = content; + return content; } -static void -_elm_panel_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_panel_evas_smart_add(Eo *obj, Elm_Panel_Data *priv) { - Elm_Panel_Smart_Data *priv = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); @@ -407,13 +362,12 @@ _elm_panel_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) elm_layout_sizing_eval(obj); } -static void -_elm_panel_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_panel_evas_smart_del(Eo *obj, Elm_Panel_Data *sd) { Evas_Object *child; Eina_List *l; - Elm_Panel_Smart_Data *sd = _pd; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); sd->delete_me = EINA_TRUE; @@ -433,12 +387,11 @@ _elm_panel_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } -static void -_elm_panel_smart_access(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elm_panel_elm_widget_access(Eo *obj, Elm_Panel_Data *_pd EINA_UNUSED, Eina_Bool is_access) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); - Eina_Bool is_access = va_arg(*list, int); if (is_access) _elm_access_edje_object_part_object_register (obj, wd->resize_obj, "btn_icon"); @@ -456,8 +409,8 @@ elm_panel_add(Evas_Object *parent) return obj; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_panel_eo_base_constructor(Eo *obj, Elm_Panel_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, @@ -465,20 +418,9 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL)); } -EAPI void -elm_panel_orient_set(Evas_Object *obj, - Elm_Panel_Orient orient) +EOLIAN static void +_elm_panel_orient_set(Eo *obj, Elm_Panel_Data *sd, Elm_Panel_Orient orient) { - ELM_PANEL_CHECK(obj); - eo_do(obj, elm_obj_panel_orient_set(orient)); -} - -static void -_orient_set(Eo *obj, void *_pd, va_list *list) -{ - Elm_Panel_Orient orient = va_arg(*list, Elm_Panel_Orient); - Elm_Panel_Smart_Data *sd = _pd; - if (sd->orient == orient) return; sd->orient = orient; @@ -487,121 +429,36 @@ _orient_set(Eo *obj, void *_pd, va_list *list) elm_layout_sizing_eval(obj); } -EAPI Elm_Panel_Orient -elm_panel_orient_get(const Evas_Object *obj) -{ - ELM_PANEL_CHECK(obj) ELM_PANEL_ORIENT_LEFT; - Elm_Panel_Orient ret = ELM_PANEL_ORIENT_LEFT; - eo_do((Eo *) obj, elm_obj_panel_orient_get(&ret)); - return ret; -} - -static void -_orient_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static Elm_Panel_Orient +_elm_panel_orient_get(Eo *obj EINA_UNUSED, Elm_Panel_Data *sd) { - Elm_Panel_Orient *ret = va_arg(*list, Elm_Panel_Orient *); - Elm_Panel_Smart_Data *sd = _pd; - - if (ret) *ret = sd->orient; + return sd->orient; } -EAPI void -elm_panel_hidden_set(Evas_Object *obj, - Eina_Bool hidden) +EOLIAN static void +_elm_panel_hidden_set(Eo *obj, Elm_Panel_Data *sd, Eina_Bool hidden) { - ELM_PANEL_CHECK(obj); - eo_do(obj, elm_obj_panel_hidden_set(hidden)); -} - -static void -_hidden_set(Eo *obj, void *_pd, va_list *list) -{ - Eina_Bool hidden = va_arg(*list, int); - Elm_Panel_Smart_Data *sd = _pd; - if (sd->hidden == !!hidden) return; _panel_toggle(NULL, obj, NULL, NULL); } -EAPI Eina_Bool -elm_panel_hidden_get(const Evas_Object *obj) +EOLIAN static Eina_Bool +_elm_panel_hidden_get(Eo *obj EINA_UNUSED, Elm_Panel_Data *sd) { - ELM_PANEL_CHECK(obj) EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - eo_do((Eo *) obj, elm_obj_panel_hidden_get(&ret)); - return ret; + return sd->hidden; } -static void -_hidden_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Panel_Smart_Data *sd = _pd; - - if (ret) *ret = sd->hidden; -} - -EAPI void -elm_panel_toggle(Evas_Object *obj) -{ - ELM_PANEL_CHECK(obj); - eo_do(obj, elm_obj_panel_toggle()); -} - -static void -_toggle(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elm_panel_toggle(Eo *obj, Elm_Panel_Data *_pd EINA_UNUSED) { _panel_toggle(NULL, obj, NULL, NULL); } static void -_class_constructor(Eo_Class *klass) +_elm_panel_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_panel_smart_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_panel_smart_del), - - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_panel_smart_focus_next_manager_is), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_panel_smart_focus_next), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_panel_smart_theme), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_panel_smart_event), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACCESS), _elm_panel_smart_access), - - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET), _elm_panel_smart_content_set), - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_GET), _elm_panel_smart_content_get), - EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_UNSET), _elm_panel_smart_content_unset), - - EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_panel_smart_sizing_eval), - - EO_OP_FUNC(ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_ORIENT_SET), _orient_set), - EO_OP_FUNC(ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_ORIENT_GET), _orient_get), - EO_OP_FUNC(ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_HIDDEN_SET), _hidden_set), - EO_OP_FUNC(ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_HIDDEN_GET), _hidden_get), - EO_OP_FUNC(ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_TOGGLE), _toggle), - EO_OP_FUNC_SENTINEL - }; - eo_class_funcs_set(klass, func_desc); - evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } -static const Eo_Op_Description op_desc[] = { - EO_OP_DESCRIPTION(ELM_OBJ_PANEL_SUB_ID_ORIENT_SET, "Sets the orientation of the panel."), - EO_OP_DESCRIPTION(ELM_OBJ_PANEL_SUB_ID_ORIENT_GET, "Get the orientation of the panel."), - EO_OP_DESCRIPTION(ELM_OBJ_PANEL_SUB_ID_HIDDEN_SET, "Set the state of the panel."), - EO_OP_DESCRIPTION(ELM_OBJ_PANEL_SUB_ID_HIDDEN_GET, "Get the state of the panel."), - EO_OP_DESCRIPTION(ELM_OBJ_PANEL_SUB_ID_TOGGLE, "Toggle the hidden state of the panel from code."), - 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_PANEL_BASE_ID, op_desc, ELM_OBJ_PANEL_SUB_ID_LAST), - NULL, - sizeof(Elm_Panel_Smart_Data), - _class_constructor, - NULL -}; -EO_DEFINE_CLASS(elm_obj_panel_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, NULL); + +#include "elm_panel.eo.c" diff --git a/src/lib/elm_panel.eo b/src/lib/elm_panel.eo new file mode 100644 index 0000000..a588726 --- /dev/null +++ b/src/lib/elm_panel.eo @@ -0,0 +1,78 @@ +class Elm_Panel (Elm_Layout) +{ + eo_prefix: elm_obj_panel; + properties { + orient { + set { + /*@ + @brief Sets the orientation of the panel + + Sets from where the panel will (dis)appear. + + @ingroup Panel */ + } + get { + /*@ + @brief Get the orientation of the panel. + + @return The Elm_Panel_Orient, or ELM_PANEL_ORIENT_LEFT on failure. + + @ingroup Panel */ + } + values { + Elm_Panel_Orient orient; /*@ The panel orientation. Can be one of the following: + @li ELM_PANEL_ORIENT_TOP + @li ELM_PANEL_ORIENT_LEFT + @li ELM_PANEL_ORIENT_RIGHT */ + } + } + hidden { + set { + /*@ + @brief Set the state of the panel. + + @ingroup Panel */ + } + get { + /*@ + @brief Get the state of the panel. + + @return EINA_TRUE if it is hidden state + + @ingroup Panel */ + } + values { + Eina_Bool hidden; /*@ If true, the panel will run the animation to disappear. */ + } + } + } + methods { + toggle { + /*@ + @brief Toggle the hidden state of the panel from code + + @ingroup Panel */ + + } + } + 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::access; + Elm_Widget::event; + Elm_Container::content_get; + Elm_Container::content_unset; + Elm_Container::content_set; + Elm_Layout::sizing_eval; + } + events { + focused; + unfocused; + } + +} diff --git a/src/lib/elm_panel_eo.h b/src/lib/elm_panel_eo.h index 6963d60..d37ee14 100644 --- a/src/lib/elm_panel_eo.h +++ b/src/lib/elm_panel_eo.h @@ -1,3 +1,6 @@ +#include "elm_panel.eo.h" + +#if 0 #define ELM_OBJ_PANEL_CLASS elm_obj_panel_class_get() const Eo_Class *elm_obj_panel_class_get(void) EINA_CONST; @@ -85,3 +88,4 @@ enum * @ingroup Panel */ #define elm_obj_panel_toggle() ELM_OBJ_PANEL_ID(ELM_OBJ_PANEL_SUB_ID_TOGGLE) +#endif diff --git a/src/lib/elm_widget_panel.h b/src/lib/elm_widget_panel.h index c72f606..20b901b 100644 --- a/src/lib/elm_widget_panel.h +++ b/src/lib/elm_widget_panel.h @@ -17,8 +17,8 @@ /** * Base layout smart data extended with panel instance data. */ -typedef struct _Elm_Panel_Smart_Data Elm_Panel_Smart_Data; -struct _Elm_Panel_Smart_Data +typedef struct _Elm_Panel_Data Elm_Panel_Data; +struct _Elm_Panel_Data { Evas_Object *bx, *content; Evas_Object *event; @@ -34,7 +34,7 @@ struct _Elm_Panel_Smart_Data */ #define ELM_PANEL_DATA_GET(o, sd) \ - Elm_Panel_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_PANEL_CLASS) + Elm_Panel_Data * sd = eo_data_scope_get(o, ELM_OBJ_PANEL_CLASS) #define ELM_PANEL_DATA_GET_OR_RETURN(o, ptr) \ ELM_PANEL_DATA_GET(o, ptr); \ --
