1 #ifndef ELM_WIDGET_FLIPSELECTOR_H 2 #define ELM_WIDGET_FLIPSELECTOR_H 3 4 #include "elm_widget_layout.h" 5 6 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR 7 * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT 8 * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK 9 * IT AT RUNTIME. 10 */ 11 12 /** 13 * @addtogroup Widget 14 * @{ 15 * 16 * @section elm-flipselector-class The Elementary Flipselector Class 17 * 18 * Elementary, besides having the @ref Flipselector widget, exposes its 19 * foundation -- the Elementary Flipselector Class -- in order to create other 20 * widgets which are a flipselector with some more logic on top. 21 */ 22 23 /** 24 * Base layout smart data extended with flipselector instance data. 25 */ 26 typedef struct _Elm_Flipselector_Data Elm_Flipselector_Data; 27 struct _Elm_Flipselector_Data 28 { 29 Evas_Object *obj; 30 Eina_List *items; 31 Eina_List *current; 32 Eina_List *sentinel; /* item containing the largest 33 * label string */ 34 Ecore_Timer *spin; 35 Ecore_Job *view_update; 36 37 unsigned int max_len; 38 double interval, first_interval; 39 double val_min, val_max; 40 double step; /**< step for the value change. 1 by default. */ 41 42 int walking; 43 Eina_Bool evaluating : 1; 44 Eina_Bool deleting : 1; 45 Eina_Bool need_update : 1; 46 }; 47 48 typedef struct _Elm_Flipselector_Item_Data Elm_Flipselector_Item_Data; 49 struct _Elm_Flipselector_Item_Data 50 { 51 Elm_Widget_Item_Data *base; 52 53 const char *label; 54 Evas_Smart_Cb func; 55 }; 56 57 #define ELM_FLIPSELECTOR_DATA_GET(o, sd) \ 58 Elm_Flipselector_Data * sd = efl_data_scope_get(o, ELM_FLIPSELECTOR_CLASS) 59 60 #define ELM_FLIPSELECTOR_DATA_GET_OR_RETURN(o, ptr) \ 61 ELM_FLIPSELECTOR_DATA_GET(o, ptr); \ 62 if (EINA_UNLIKELY(!ptr)) \ 63 { \ 64 ERR("No widget data for object %p (%s)", \ 65 o, evas_object_type_get(o)); \ 66 return; \ 67 } 68 69 #define ELM_FLIPSELECTOR_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ 70 ELM_FLIPSELECTOR_DATA_GET(o, ptr); \ 71 if (EINA_UNLIKELY(!ptr)) \ 72 { \ 73 ERR("No widget data for object %p (%s)", \ 74 o, evas_object_type_get(o)); \ 75 return val; \ 76 } 77 78 #define ELM_FLIPSELECTOR_ITEM_DATA_GET(o, sd) \ 79 Elm_Flipselector_Item_Data * sd = efl_data_scope_get(o, ELM_FLIPSELECTOR_ITEM_CLASS) 80 81 #define ELM_FLIPSELECTOR_CHECK(obj) \ 82 if (EINA_UNLIKELY(!efl_isa((obj), ELM_FLIPSELECTOR_CLASS))) \ 83 return 84 85 #define ELM_FLIPSELECTOR_ITEM_CHECK(it) \ 86 if (EINA_UNLIKELY(!efl_isa((it->base->eo_obj), ELM_FLIPSELECTOR_ITEM_CLASS))) \ 87 return 88 89 #define ELM_FLIPSELECTOR_ITEM_CHECK_OR_RETURN(it, ...) \ 90 if (EINA_UNLIKELY(!efl_isa((it->base->eo_obj), ELM_FLIPSELECTOR_ITEM_CLASS))) \ 91 return __VA_ARGS__; 92 93 /** 94 * @} 95 */ 96 97 #endif 98