diff options
Diffstat (limited to 'src/lib/elementary/elm_widget_combobox.h')
-rw-r--r-- | src/lib/elementary/elm_widget_combobox.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/lib/elementary/elm_widget_combobox.h b/src/lib/elementary/elm_widget_combobox.h new file mode 100644 index 0000000000..9d578c5997 --- /dev/null +++ b/src/lib/elementary/elm_widget_combobox.h @@ -0,0 +1,84 @@ +#ifndef ELM_WIDGET_COMBOBOX_H +#define ELM_WIDGET_COMBOBOX_H + +#include "Elementary.h" + +/* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR + * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT + * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK + * IT AT RUNTIME. + */ + +/** + * @addtogroup Widget + * @{ + * + * @section elm-combobox-class The Elementary Combobox Class + * + * Elementary, besides having the @ref Combobox widget, exposes its + * foundation -- the Elementary Combobox Class -- in order to create other + * widgets which are a combobox with some more logic on top. + */ + +/** + * Base button smart data extended with combobox instance data. + */ +typedef struct _Elm_Combobox_Data Elm_Combobox_Data; +struct _Elm_Combobox_Data +{ + /* aggregates a hover */ + Evas_Object *hover; + Evas_Object *hover_parent; + Evas_Object *genlist; + Evas_Object *entry; + Evas_Object *tbl; + Evas_Object *spacer; + Evas_Object *mbe; + Elm_Object_Item *item; + const char *style; + const char *best_location; + int count; + int item_height; + Eina_Bool expanded:1; + Eina_Bool first_filter:1; + Eina_Bool multiple_selection:1; +}; + +/** + * @} + */ + +#define ELM_COMBOBOX_DATA_GET(o, sd) \ + Elm_Combobox_Data * sd = eo_data_scope_get(o, ELM_COMBOBOX_CLASS) + +#define ELM_COMBOBOX_DATA_GET_OR_RETURN(o, ptr) \ + ELM_COMBOBOX_DATA_GET(o, ptr); \ + if (EINA_UNLIKELY(!ptr)) \ + { \ + CRI("No widget data for object %p (%s)", \ + o, evas_object_type_get(o)); \ + return; \ + } + +#define ELM_COMBOBOX_DATA_GET_OR_RETURN_VAL(o, ptr, val) \ + ELM_COMBOBOX_DATA_GET(o, ptr); \ + if (EINA_UNLIKELY(!ptr)) \ + { \ + CRI("No widget data for object %p (%s)", \ + o, evas_object_type_get(o)); \ + return val; \ + } + +#define ELM_COMBOBOX_CHECK(obj) \ + if (EINA_UNLIKELY(!eo_isa((obj), ELM_COMBOBOX_CLASS))) \ + return + +#define ELM_COMBOBOX_ITEM_CHECK(it) \ + ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *)it, ); \ + ELM_COMBOBOX_CHECK(it->base.widget); + +#define ELM_COMBOBOX_ITEM_CHECK_OR_RETURN(it, ...) \ + ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item *)it, __VA_ARGS__); \ + ELM_COMBOBOX_CHECK(it->base.widget) __VA_ARGS__; + +#endif |