1 #ifndef ELM_WIDGET_HOVERSEL_H 2 #define ELM_WIDGET_HOVERSEL_H 3 4 #include "Elementary.h" 5 6 7 #include <Eio.h> 8 9 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR 10 * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT 11 * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK 12 * IT AT RUNTIME. 13 */ 14 15 /** 16 * @addtogroup Widget 17 * @{ 18 * 19 * @section elm-hoversel-class The Elementary Hoversel Class 20 * 21 * Elementary, besides having the @ref Hoversel widget, exposes its 22 * foundation -- the Elementary Hoversel Class -- in order to create other 23 * widgets which are a hoversel with some more logic on top. 24 */ 25 26 /** 27 * Base button smart data extended with hoversel instance data. 28 */ 29 typedef struct _Elm_Hoversel_Data Elm_Hoversel_Data; 30 struct _Elm_Hoversel_Data 31 { 32 /* aggregates a hover */ 33 Evas_Object *hover; 34 Evas_Object *hover_parent; 35 Evas_Object *spacer; 36 Evas_Object *tbl; 37 Evas_Object *scr; 38 Evas_Object *bx; 39 const char *last_location; 40 41 Eina_List *items; 42 Ecore_Job *resize_job; 43 44 Eina_Bool horizontal : 1; 45 Eina_Bool expanded : 1; 46 Eina_Bool scrollable : 1; 47 Eina_Bool auto_update : 1; 48 }; 49 50 typedef struct _Elm_Hoversel_Item_Data Elm_Hoversel_Item_Data; 51 struct _Elm_Hoversel_Item_Data 52 { 53 Elm_Widget_Item_Data *base; 54 55 const char *label; 56 const char *icon_file; 57 const char *icon_group; 58 59 Elm_Icon_Type icon_type; 60 Evas_Smart_Cb func; 61 }; 62 63 /** 64 * @} 65 */ 66 67 #define ELM_HOVERSEL_DATA_GET(o, sd) \ 68 Elm_Hoversel_Data * sd = efl_data_scope_get(o, ELM_HOVERSEL_CLASS) 69 70 #define ELM_HOVERSEL_DATA_GET_OR_RETURN(o, ptr) \ 71 ELM_HOVERSEL_DATA_GET(o, ptr); \ 72 if (EINA_UNLIKELY(!ptr)) \ 73 { \ 74 ERR("No widget data for object %p (%s)", \ 75 o, evas_object_type_get(o)); \ 76 return; \ 77 } 78 79 #define ELM_HOVERSEL_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ 80 ELM_HOVERSEL_DATA_GET(o, ptr); \ 81 if (EINA_UNLIKELY(!ptr)) \ 82 { \ 83 ERR("No widget data for object %p (%s)", \ 84 o, evas_object_type_get(o)); \ 85 return val; \ 86 } 87 88 #define ELM_HOVERSEL_CHECK(obj) \ 89 if (EINA_UNLIKELY(!efl_isa((obj), ELM_HOVERSEL_CLASS))) \ 90 return 91 92 #define ELM_HOVERSEL_ITEM_DATA_GET(o, sd) \ 93 Elm_Hoversel_Item_Data *sd = efl_data_scope_get(o, ELM_HOVERSEL_ITEM_CLASS) 94 95 #define ELM_HOVERSEL_ITEM_CHECK(it) \ 96 if (EINA_UNLIKELY(!efl_isa(it->base->eo_obj, ELM_HOVERSEL_ITEM_CLASS))) \ 97 return 98 99 #define ELM_HOVERSEL_ITEM_CHECK_OR_RETURN(it, ...) \ 100 if (EINA_UNLIKELY(!efl_isa(it->base->eo_obj, ELM_HOVERSEL_ITEM_CLASS))) \ 101 return __VA_ARGS__; 102 103 #endif 104