1 #ifndef ELM_WIDGET_POPUP_H
2 #define ELM_WIDGET_POPUP_H
4 #include "Elementary.h"
5 #include "elm_widget_layout.h"
7 /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR
8 * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT
9 * FINAL. CALL elm_widget_api_check(ELM_INTERNAL_API_VERSION) TO CHECK
18 * @section elm-popup-class The Elementary Popup Class
20 * Elementary, besides having the @ref Elm_Popup widget, exposes its
21 * foundation -- the Elementary Popup Class -- in order to create other
22 * widgets which are a popup with some more logic on top.
25 #define ELM_POPUP_ACTION_BUTTON_MAX 3
27 typedef struct _Action_Area_Data Action_Area_Data;
30 * Base layout smart data extended with popup instance data.
32 typedef struct _Elm_Popup_Data Elm_Popup_Data;
33 struct _Elm_Popup_Data
36 Evas_Object *main_layout;
37 Evas_Object *title_icon;
38 Evas_Object *content_area;
39 Evas_Object *text_content_obj;
40 Evas_Object *action_area;
46 Evas_Object *parent; /**< Pointer to remove _parent_resize_cb when popup is deleted. */
48 const char *title_text;
49 //TIZE_ONLY(20160922): add subtitle text code of popup
50 const char *subtitle_text;
52 Action_Area_Data *buttons[ELM_POPUP_ACTION_BUTTON_MAX];
53 Elm_Wrap_Type content_text_wrap_type;
54 unsigned int last_button_number;
57 //TIZEN_ONLY(20160623): Apply popup compress mode UX
58 Evas_Display_Mode dispmode;
61 //TIZEN_ONLY(20161107): Supprot scrollable content
62 //FIXME: genlist only now, it should be changed to support other scrollable.
63 Evas_Coord min_scrollable_content_h;
64 Eina_Bool scrollable_content: 1;
67 Eina_Bool visible : 1;
68 Eina_Bool scr_size_recalc : 1;
70 Eina_Bool theme_scroll : 1;
72 //TIZEN_ONLY(20160624): add a allow eval flag not to call another sizing eval during sizing eval
73 Eina_Bool allow_eval : 1;
77 typedef struct _Elm_Popup_Item_Data Elm_Popup_Item_Data;
78 struct _Elm_Popup_Item_Data
80 Elm_Widget_Item_Data *base;
85 Eina_Bool disabled : 1;
88 struct _Action_Area_Data
92 Eina_Bool delete_me : 1;
99 #define ELM_POPUP_DATA_GET(o, sd) \
100 Elm_Popup_Data * sd = eo_data_scope_get(o, ELM_POPUP_CLASS)
102 #define ELM_POPUP_DATA_GET_OR_RETURN(o, ptr) \
103 ELM_POPUP_DATA_GET(o, ptr); \
104 if (EINA_UNLIKELY(!ptr)) \
106 CRI("No widget data for object %p (%s)", \
107 o, evas_object_type_get(o)); \
111 #define ELM_POPUP_DATA_GET_OR_RETURN_VAL(o, ptr, val) \
112 ELM_POPUP_DATA_GET(o, ptr); \
113 if (EINA_UNLIKELY(!ptr)) \
115 CRI("No widget data for object %p (%s)", \
116 o, evas_object_type_get(o)); \
120 #define ELM_POPUP_CHECK(obj) \
121 if (EINA_UNLIKELY(!eo_isa((obj), ELM_POPUP_CLASS))) \
124 #define ELM_POPUP_ITEM_CHECK(it) \
125 ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, ); \
126 ELM_POPUP_CHECK(it->base->widget);
128 #define ELM_POPUP_ITEM_CHECK_OR_RETURN(it, ...) \
129 ELM_WIDGET_ITEM_CHECK_OR_RETURN(it->base, __VA_ARGS__); \
130 ELM_POPUP_CHECK(it->base->widget) __VA_ARGS__;
132 #define ELM_POPUP_ITEM_DATA_GET(o, sd) \
133 Elm_Popup_Item_Data* sd = eo_data_scope_get(o, ELM_POPUP_ITEM_CLASS)