jackdanielz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=02e929e6373b58b0d151d8f70dfb8ee11d755705
commit 02e929e6373b58b0d151d8f70dfb8ee11d755705 Author: Daniel Zaoui <[email protected]> Date: Sun Mar 23 11:59:22 2014 +0200 Eolian: Integration of Hoversel --- src/lib/Makefile.am | 10 +- src/lib/elc_hoversel.c | 322 +++++++++--------------------------------- src/lib/elc_hoversel.eo | 165 ++++++++++++++++++++++ src/lib/elc_hoversel_eo.h | 4 + src/lib/elm_widget_hoversel.h | 6 +- 5 files changed, 244 insertions(+), 263 deletions(-) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 257468a..7fadeaf 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -591,7 +591,9 @@ BUILT_SOURCES = \ elm_glview.eo.c \ elm_glview.eo.h \ elm_grid.eo.c \ - elm_grid.eo.h + elm_grid.eo.h \ + elc_hoversel.eo.c \ + elc_hoversel.eo.h EXTRA_DIST += \ elm_widget.eo \ @@ -627,7 +629,8 @@ EXTRA_DIST += \ elm_flip.eo \ elm_gesture_layer.eo \ elm_glview.eo \ - elm_grid.eo + elm_grid.eo \ + elc_hoversel.eo nodist_includesunstable_HEADERS = \ elm_widget.eo.h \ @@ -663,5 +666,6 @@ nodist_includesunstable_HEADERS = \ elm_flip.eo.h \ elm_gesture_layer.eo.h \ elm_glview.eo.h \ - elm_grid.eo.h + elm_grid.eo.h \ + elc_hoversel.eo.h diff --git a/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c index 59d3032..ba6c4d4 100644 --- a/src/lib/elc_hoversel.c +++ b/src/lib/elc_hoversel.c @@ -6,8 +6,6 @@ #include "elm_priv.h" #include "elm_widget_hoversel.h" -EAPI Eo_Op ELM_OBJ_HOVERSEL_BASE_ID = EO_NOOP; - #define MY_CLASS ELM_OBJ_HOVERSEL_CLASS #define MY_CLASS_NAME "Elm_Hoversel" @@ -31,11 +29,9 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { {NULL, NULL} }; -static void -_elm_hoversel_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elc_hoversel_elm_widget_translate(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Hoversel_Smart_Data *sd = _pd; Elm_Hoversel_Item *it; Eina_List *l; @@ -44,18 +40,15 @@ _elm_hoversel_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list) eo_do_super(obj, MY_CLASS, elm_obj_widget_translate(NULL)); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } -static void -_elm_hoversel_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elc_hoversel_elm_widget_theme_apply(Eo *obj, Elc_Hoversel_Data *sd) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret; - Elm_Hoversel_Smart_Data *sd = _pd; - ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); + ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); char buf[4096]; const char *style; @@ -71,7 +64,7 @@ _elm_hoversel_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) eina_stringshare_replace(&(wd->style), buf); eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret)); - if (!int_ret) return; + if (!int_ret) return EINA_FALSE; eina_stringshare_replace(&(wd->style), style); @@ -82,7 +75,7 @@ _elm_hoversel_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list) elm_hoversel_hover_end(obj); - if (ret) *ret = EINA_TRUE; + return EINA_TRUE; } static void @@ -276,9 +269,8 @@ _item_del_pre_hook(Elm_Object_Item *it) return EINA_TRUE; } -static void -_elm_hoversel_smart_add(Eo *obj, void *_pd EINA_UNUSED, - va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_evas_smart_add(Eo *obj, Elc_Hoversel_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); elm_widget_sub_object_parent_add(obj); @@ -291,13 +283,11 @@ _elm_hoversel_smart_add(Eo *obj, void *_pd EINA_UNUSED, eo_do(obj, elm_obj_widget_theme_apply(NULL)); } -static void -_elm_hoversel_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_evas_smart_del(Eo *obj, Elc_Hoversel_Data *sd) { Elm_Hoversel_Item *item; - Elm_Hoversel_Smart_Data *sd = _pd; - EINA_LIST_FREE(sd->items, item) { eina_stringshare_del(item->label); @@ -310,34 +300,30 @@ _elm_hoversel_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) eo_do_super(obj, MY_CLASS, evas_obj_smart_del()); } -static void -_elm_hoversel_smart_show(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_evas_smart_show(Eo *obj, Elc_Hoversel_Data *sd) { - Elm_Hoversel_Smart_Data *sd = _pd; eo_do_super(obj, MY_CLASS, evas_obj_smart_show()); evas_object_show(sd->hover); } -static void -_elm_hoversel_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_evas_smart_hide(Eo *obj, Elc_Hoversel_Data *sd) { - Elm_Hoversel_Smart_Data *sd = _pd; eo_do_super(obj, MY_CLASS, evas_obj_smart_hide()); evas_object_hide(sd->hover); } -static void -_elm_hoversel_smart_parent_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static void +_elc_hoversel_elm_widget_parent_set(Eo *obj, Elc_Hoversel_Data *_pd EINA_UNUSED, Evas_Object *parent) { - Evas_Object *parent = va_arg(*list, Evas_Object *); elm_hoversel_hover_parent_set(obj, parent); } -static void -_elm_hoversel_smart_admits_autorepeat_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) +EOLIAN static Eina_Bool +_elc_hoversel_elm_button_admits_autorepeat_get(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd EINA_UNUSED) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; + return EINA_FALSE; } EAPI Evas_Object * @@ -349,8 +335,8 @@ elm_hoversel_add(Evas_Object *parent) return obj; } -static void -_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_eo_base_constructor(Eo *obj, Elc_Hoversel_Data *_pd EINA_UNUSED) { eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do(obj, @@ -358,20 +344,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_hoversel_hover_parent_set(Evas_Object *obj, - Evas_Object *parent) -{ - ELM_HOVERSEL_CHECK(obj); - eo_do(obj, elm_obj_hoversel_hover_parent_set(parent)); -} - -static void -_hover_parent_set(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elc_hoversel_hover_parent_set(Eo *obj, Elc_Hoversel_Data *sd, Evas_Object *parent) { - Evas_Object *parent = va_arg(*list, Evas_Object *); - Elm_Hoversel_Smart_Data *sd = _pd; - if (sd->hover_parent) evas_object_event_callback_del_full (sd->hover_parent, EVAS_CALLBACK_DEL, _on_parent_del, obj); @@ -382,91 +357,39 @@ _hover_parent_set(Eo *obj, void *_pd, va_list *list) (sd->hover_parent, EVAS_CALLBACK_DEL, _on_parent_del, obj); } -EAPI Evas_Object * -elm_hoversel_hover_parent_get(const Evas_Object *obj) +EOLIAN static Evas_Object* +_elc_hoversel_hover_parent_get(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { - ELM_HOVERSEL_CHECK(obj) NULL; - Evas_Object *ret = NULL; - eo_do((Eo *) obj, elm_obj_hoversel_hover_parent_get(&ret)); - return ret; + return sd->hover_parent; } -static void -_hover_parent_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Evas_Object **ret = va_arg(*list, Evas_Object **); - Elm_Hoversel_Smart_Data *sd = _pd; - - if (ret) *ret = sd->hover_parent; -} - -EAPI void -elm_hoversel_horizontal_set(Evas_Object *obj, - Eina_Bool horizontal) -{ - ELM_HOVERSEL_CHECK(obj); - eo_do(obj, elm_obj_hoversel_horizontal_set(horizontal)); -} - -static void -_horizontal_set(Eo *obj, void *_pd, va_list *list) +EOLIAN static void +_elc_hoversel_horizontal_set(Eo *obj, Elc_Hoversel_Data *sd, Eina_Bool horizontal) { - Eina_Bool horizontal = va_arg(*list, int); - Elm_Hoversel_Smart_Data *sd = _pd; - sd->horizontal = !!horizontal; eo_do(obj, elm_obj_widget_theme_apply(NULL)); } -EAPI Eina_Bool -elm_hoversel_horizontal_get(const Evas_Object *obj) +EOLIAN static Eina_Bool +_elc_hoversel_horizontal_get(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { - ELM_HOVERSEL_CHECK(obj) EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - eo_do((Eo *) obj, elm_obj_hoversel_horizontal_get(&ret)); - return ret; + return sd->horizontal; } -static void -_horizontal_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +EOLIAN static void +_elc_hoversel_hover_begin(Eo *obj, Elc_Hoversel_Data *sd) { - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Hoversel_Smart_Data *sd = _pd; - - if (ret) *ret = sd->horizontal; -} - -EAPI void -elm_hoversel_hover_begin(Evas_Object *obj) -{ - ELM_HOVERSEL_CHECK(obj); - eo_do(obj, elm_obj_hoversel_hover_begin()); -} - -static void -_hover_begin(Eo *obj, void *_pd, va_list *list EINA_UNUSED) -{ - Elm_Hoversel_Smart_Data *sd = _pd; - if (sd->hover) return; _activate(obj); } -EAPI void -elm_hoversel_hover_end(Evas_Object *obj) -{ - ELM_HOVERSEL_CHECK(obj); - eo_do(obj, elm_obj_hoversel_hover_end()); -} - -static void -_hover_end(Eo *obj, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_hover_end(Eo *obj, Elc_Hoversel_Data *sd) { Elm_Object_Item *it; Eina_List *l; - Elm_Hoversel_Smart_Data *sd = _pd; if (!sd->hover) return; @@ -481,91 +404,35 @@ _hover_end(Eo *obj, void *_pd, va_list *list EINA_UNUSED) evas_object_smart_callback_call(obj, SIG_DISMISSED, NULL); } -EAPI Eina_Bool -elm_hoversel_expanded_get(const Evas_Object *obj) +EOLIAN static Eina_Bool +_elc_hoversel_expanded_get(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { - ELM_HOVERSEL_CHECK(obj) EINA_FALSE; - Eina_Bool ret = EINA_FALSE; - eo_do((Eo *) obj, elm_obj_hoversel_expanded_get(&ret)); - return ret; + return (sd->hover) ? EINA_TRUE : EINA_FALSE; } -static void -_expanded_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) -{ - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - Elm_Hoversel_Smart_Data *sd = _pd; - - *ret = (sd->hover) ? EINA_TRUE : EINA_FALSE; -} - -EAPI void -elm_hoversel_clear(Evas_Object *obj) -{ - ELM_HOVERSEL_CHECK(obj); - eo_do(obj, elm_obj_hoversel_clear()); -} - -static void -_clear(Eo *obj EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED) +EOLIAN static void +_elc_hoversel_clear(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { Elm_Object_Item *it; Eina_List *l, *ll; - Elm_Hoversel_Smart_Data *sd = _pd; - EINA_LIST_FOREACH_SAFE(sd->items, l, ll, it) { elm_widget_item_del(it); } } -EAPI const Eina_List * -elm_hoversel_items_get(const Evas_Object *obj) +EOLIAN static const Eina_List* +_elc_hoversel_items_get(Eo *obj EINA_UNUSED, Elc_Hoversel_Data *sd) { - ELM_HOVERSEL_CHECK(obj) NULL; - const Eina_List *ret = NULL; - eo_do((Eo *) obj, elm_obj_hoversel_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_Hoversel_Smart_Data *sd = _pd; - - if (ret) *ret = sd->items; -} - -EAPI Elm_Object_Item * -elm_hoversel_item_add(Evas_Object *obj, - const char *label, - const char *icon_file, - Elm_Icon_Type icon_type, - Evas_Smart_Cb func, - const void *data) +EOLIAN static Elm_Object_Item* +_elc_hoversel_item_add(Eo *obj, Elc_Hoversel_Data *sd, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) { - ELM_HOVERSEL_CHECK(obj) NULL; - Elm_Object_Item *ret = NULL; - eo_do(obj, elm_obj_hoversel_item_add(label, icon_file, icon_type, func, data, &ret)); - return ret; -} - -static void -_item_add(Eo *obj, void *_pd, va_list *list) -{ - const char *label = va_arg(*list, const char *); - const char *icon_file = va_arg(*list, const char *); - Elm_Icon_Type icon_type = va_arg(*list, Elm_Icon_Type); - 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_Hoversel_Smart_Data *sd = _pd; - *ret = NULL; - Elm_Hoversel_Item *item = elm_widget_item_new(obj, Elm_Hoversel_Item); - if (!item) return; + if (!item) return NULL; elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook); elm_widget_item_text_get_hook_set(item, _item_text_get_hook); @@ -581,7 +448,7 @@ _item_add(Eo *obj, void *_pd, va_list *list) sd->items = eina_list_append(sd->items, item); - *ret = (Elm_Object_Item *)item; + return (Elm_Object_Item *)item; } EAPI void @@ -616,7 +483,7 @@ elm_hoversel_item_icon_get(const Elm_Object_Item *it, } static Elm_Hoversel_Item * -item_focused_get(Elm_Hoversel_Smart_Data *sd) +item_focused_get(Elc_Hoversel_Data *sd) { Elm_Hoversel_Item *item; Eina_List *l; @@ -627,28 +494,22 @@ item_focused_get(Elm_Hoversel_Smart_Data *sd) return NULL; } -static void -_elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list) +EOLIAN static Eina_Bool +_elc_hoversel_elm_widget_event(Eo *obj, Elc_Hoversel_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info) { - Evas_Object *src = va_arg(*list, Evas_Object *); (void) src; - Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type); - void *event_info = va_arg(*list, void *); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; Eina_Bool int_ret = EINA_FALSE; Evas_Event_Key_Down *ev = event_info; - Elm_Hoversel_Smart_Data *sd = _pd; Elm_Hoversel_Item *litem, *fitem; eo_do_super(obj, MY_CLASS, elm_obj_widget_event(src, type, event_info, &int_ret)); - if (int_ret) return; + if (int_ret) return EINA_FALSE; - if (!sd || !sd->hover) return; - 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 (!sd || !sd->hover) return EINA_FALSE; + 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; litem = eina_list_last_data_get(sd->items); fitem = eina_list_data_get(sd->items); @@ -698,71 +559,18 @@ _elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list) goto success; } - return; + return EINA_FALSE; success: ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - if (ret) *ret = EINA_TRUE; + + return EINA_TRUE; } static void -_class_constructor(Eo_Class *klass) -{ - const Eo_Op_Func_Description func_desc[] = { - EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), - - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_hoversel_smart_add), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_hoversel_smart_del), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_SHOW), _elm_hoversel_smart_show), - EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_HIDE), _elm_hoversel_smart_hide), - - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_hoversel_smart_theme), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_TRANSLATE), _elm_hoversel_smart_translate), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_PARENT_SET), _elm_hoversel_smart_parent_set), - EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_hoversel_smart_event), - - EO_OP_FUNC(ELM_OBJ_BUTTON_ID(ELM_OBJ_BUTTON_SUB_ID_ADMITS_AUTOREPEAT_GET), _elm_hoversel_smart_admits_autorepeat_get), - - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_PARENT_SET), _hover_parent_set), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_PARENT_GET), _hover_parent_get), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HORIZONTAL_SET), _horizontal_set), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HORIZONTAL_GET), _horizontal_get), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_BEGIN), _hover_begin), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_END), _hover_end), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_EXPANDED_GET), _expanded_get), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_CLEAR), _clear), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_ITEMS_GET), _items_get), - EO_OP_FUNC(ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_ITEM_ADD), _item_add), - 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_HOVERSEL_SUB_ID_HOVER_PARENT_SET, "Set the Hover parent."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_PARENT_GET, "Get the Hover parent."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_HORIZONTAL_SET, "This sets the hoversel to expand horizontally."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_HORIZONTAL_GET, "This returns whether the hoversel is set to expand horizontally."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_BEGIN, "This triggers the hoversel popup from code, the same as if the user had clicked the button."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_HOVER_END, "This dismisses the hoversel popup as if the user had clicked outside the hover."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_EXPANDED_GET, "Returns whether the hoversel is expanded."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_CLEAR, "This will remove all the children items from the hoversel."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_ITEMS_GET, "Get the list of items within the given hoversel."), - EO_OP_DESCRIPTION(ELM_OBJ_HOVERSEL_SUB_ID_ITEM_ADD, "Add an item to the hoversel button."), - 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_HOVERSEL_BASE_ID, op_desc, ELM_OBJ_HOVERSEL_SUB_ID_LAST), - NULL, - sizeof(Elm_Hoversel_Smart_Data), - _class_constructor, - NULL -}; +_elc_hoversel_class_constructor(Eo_Class *klass) +{ + evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); +} -EO_DEFINE_CLASS(elm_obj_hoversel_class_get, &class_desc, ELM_OBJ_BUTTON_CLASS, EVAS_SMART_SELECTABLE_INTERFACE, NULL); +#include "elc_hoversel.eo.c" diff --git a/src/lib/elc_hoversel.eo b/src/lib/elc_hoversel.eo new file mode 100644 index 0000000..0f20c7a --- /dev/null +++ b/src/lib/elc_hoversel.eo @@ -0,0 +1,165 @@ +class Elc_Hoversel (Elm_Button, Evas_Selectable_Interface) +{ + eo_prefix: elm_obj_hoversel; + legacy_prefix: elm_hoversel; + properties { + horizontal { + set { + /*@ + @brief This sets the hoversel to expand horizontally. + + @note The initial button will display horizontally regardless of this + setting. + + @ingroup Hoversel */ + } + get { + /*@ + @brief This returns whether the hoversel is set to expand horizontally. + + @return If true, the hover will expand horizontally to the right. + + @see elm_hoversel_horizontal_set() + + @ingroup Hoversel */ + } + values { + Eina_Bool horizontal; /*@ If true, the hover will expand horizontally to the + right. */ + } + } + hover_parent { + set { + /*@ + @brief Set the Hover parent + + Sets the hover parent object, the area that will be darkened when the + hoversel is clicked. Should probably be the window that the hoversel is + in. See @ref Hover objects for more information. + + @ingroup Hoversel */ + } + get { + /*@ + @brief Get the Hover parent + + @return The used parent + + Get the hover parent object. + + @see elm_hoversel_hover_parent_set() + + @ingroup Hoversel */ + } + values { + Evas_Object *parent; /*@ The parent to use */ + } + } + expanded { + get { + /*@ + @brief Returns whether the hoversel is expanded. + + @return This will return @c EINA_TRUE if the hoversel is expanded or + @c EINA_FALSE if it is not expanded. + + @ingroup Hoversel */ + return Eina_Bool; + } + } + items { + get { + /*@ + @brief Get the list of items within the given hoversel. + + @return Returns a list of Elm_Object_Item + + @see elm_hoversel_item_add() + + @ingroup Hoversel */ + return const Eina_List *; + } + } + } + methods { + hover_begin { + /*@ + @brief This triggers the hoversel popup from code, the same as if the user + had clicked the button. + + @ingroup Hoversel */ + + } + clear { + /*@ + @brief This will remove all the children items from the hoversel. + + @warning Should @b not be called while the hoversel is active; use + elm_hoversel_expanded_get() to check first. + + @see elm_object_item_del() + + @ingroup Hoversel */ + + } + hover_end { + /*@ + @brief This dismisses the hoversel popup as if the user had clicked + outside the hover. + + @ingroup Hoversel */ + + } + item_add { + /*@ + @brief Add an item to the hoversel button + + @return A handle to the item added. + + This adds an item to the hoversel to show when it is clicked. Note: if you + need to use an icon from an edje file then use + elm_hoversel_item_icon_set() right after this function, and set + icon_file to NULL here. + + For more information on what @p icon_file and @p icon_type are, see the + @ref Icon "icon documentation". + + @ingroup Hoversel */ + + return Elm_Object_Item *; + params { + @in const char *label; /*@ The text label to use for the item (NULL if not desired) */ + @in const char *icon_file; /*@ An image file path on disk to use for the icon or standard + icon name (NULL if not desired) */ + @in Elm_Icon_Type icon_type; /*@ The icon type if relevant */ + @in Evas_Smart_Cb func; /*@ Convenience function to call when this item is selected. The last + parameter @p event_info of @c func is the selected item pointer. */ + @in const void *data; /*@ Data to pass to item-related functions */ + } + } + } + implements { + class::constructor; + Eo_Base::constructor; + Evas_Smart::hide; + Evas_Smart::show; + Evas_Smart::add; + Evas_Smart::del; + Elm_Widget::parent::set; + Elm_Widget::theme_apply; + Elm_Widget::translate; + Elm_Widget::event; + Elm_Button::admits_autorepeat::get; + } + events { + selected; + dismissed; + expanded; + item,focused; + item,unfocused; + clicked; + language,changed; + access,changed; + } + +} diff --git a/src/lib/elc_hoversel_eo.h b/src/lib/elc_hoversel_eo.h index 5489416..2cf5a4d 100644 --- a/src/lib/elc_hoversel_eo.h +++ b/src/lib/elc_hoversel_eo.h @@ -1,3 +1,5 @@ +#include "elc_hoversel.eo.h" +#if 0 #define ELM_OBJ_HOVERSEL_CLASS elm_obj_hoversel_class_get() const Eo_Class *elm_obj_hoversel_class_get(void) EINA_CONST; @@ -165,3 +167,5 @@ enum * @ingroup Hoversel */ #define elm_obj_hoversel_item_add(label, icon_file, icon_type, func, data, ret) ELM_OBJ_HOVERSEL_ID(ELM_OBJ_HOVERSEL_SUB_ID_ITEM_ADD), EO_TYPECHECK(const char *, label), EO_TYPECHECK(const char *, icon_file), EO_TYPECHECK(Elm_Icon_Type, icon_type), EO_TYPECHECK(Evas_Smart_Cb, func), EO_TYPECHECK(const void *, data), EO_TYPECHECK(Elm_Object_Item **, ret) +#endif + diff --git a/src/lib/elm_widget_hoversel.h b/src/lib/elm_widget_hoversel.h index 19397b0..66c3677 100644 --- a/src/lib/elm_widget_hoversel.h +++ b/src/lib/elm_widget_hoversel.h @@ -19,8 +19,8 @@ /** * Base button smart data extended with hoversel instance data. */ -typedef struct _Elm_Hoversel_Smart_Data Elm_Hoversel_Smart_Data; -struct _Elm_Hoversel_Smart_Data +typedef struct _Elc_Hoversel_Data Elc_Hoversel_Data; +struct _Elc_Hoversel_Data { /* aggregates a hover */ Evas_Object *hover; @@ -50,7 +50,7 @@ struct _Elm_Hoversel_Item */ #define ELM_HOVERSEL_DATA_GET(o, sd) \ - Elm_Hoversel_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_HOVERSEL_CLASS) + Elc_Hoversel_Data * sd = eo_data_scope_get(o, ELM_OBJ_HOVERSEL_CLASS) #define ELM_HOVERSEL_DATA_GET_OR_RETURN(o, ptr) \ ELM_HOVERSEL_DATA_GET(o, ptr); \ --
