4 #include <Elementary.h>
6 #include "simple-popup.h"
9 typedef struct _Simple_Popup
17 static void _popup_close(void *data, Evas_Object *bt __UNUSED__,
18 void *event __UNUSED__)
20 Evas_Object *popup = data;
21 evas_object_del(popup);
24 void simple_popup_title_set(Evas_Object *p, const char *title)
27 elm_object_part_text_set(p, "elm.text.title", title);
28 elm_object_signal_emit(p, "show,title", "gui");
30 elm_object_part_text_set(p, "elm.text.title", "");
31 elm_object_signal_emit(p, "hide,title", "gui");
35 static void _simple_popup_message_del(void *data, Evas *e __UNUSED__,
36 Evas_Object *en __UNUSED__,
37 void *einfo __UNUSED__)
39 Simple_Popup *ctx = data;
43 static void _simple_popup_entry_del(void *data, Evas *e __UNUSED__,
44 Evas_Object *en __UNUSED__,
45 void *einfo __UNUSED__)
47 Simple_Popup *ctx = data;
51 static void _simple_popup_reeval_content(Simple_Popup *ctx)
53 if ((!ctx->message) && (!ctx->entry)) {
54 elm_object_part_content_unset(ctx->popup,
55 "elm.swallow.content");
56 elm_object_signal_emit(ctx->popup, "hide,content", "gui");
57 evas_object_hide(ctx->box);
61 elm_box_unpack_all(ctx->box);
63 elm_box_pack_end(ctx->box, ctx->message);
64 evas_object_show(ctx->message);
67 elm_box_pack_end(ctx->box, ctx->entry);
68 evas_object_show(ctx->entry);
71 elm_object_part_content_set(ctx->popup, "elm.swallow.content",
73 elm_object_signal_emit(ctx->popup, "show,content", "gui");
76 void simple_popup_message_set(Evas_Object *p, const char *msg)
78 Simple_Popup *ctx = evas_object_data_get(p, "simple_popup");
81 EINA_SAFETY_ON_NULL_RETURN(ctx);
85 evas_object_del(ctx->message);
86 _simple_popup_reeval_content(ctx);
93 en = ctx->message = elm_entry_add(p);
94 elm_object_style_set(en, "dialer-popup");
95 elm_entry_editable_set(en, EINA_FALSE);
96 elm_entry_scrollable_set(en, EINA_TRUE);
97 elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,
98 ELM_SCROLLER_POLICY_AUTO);
100 evas_object_event_callback_add(en, EVAS_CALLBACK_DEL,
101 _simple_popup_message_del,
103 evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND,
105 evas_object_size_hint_align_set(en, EVAS_HINT_FILL,
109 elm_object_text_set(en, msg);
110 _simple_popup_reeval_content(ctx);
113 void simple_popup_entry_enable(Evas_Object *p)
115 Simple_Popup *ctx = evas_object_data_get(p, "simple_popup");
118 EINA_SAFETY_ON_NULL_RETURN(ctx);
122 en = ctx->entry = elm_entry_add(p);
123 elm_object_style_set(en, "dialer-popup-editable");
124 elm_entry_editable_set(en, EINA_TRUE);
125 elm_entry_scrollable_set(en, EINA_TRUE);
126 elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,
127 ELM_SCROLLER_POLICY_AUTO);
129 evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND,
131 evas_object_size_hint_align_set(en, EVAS_HINT_FILL,
134 evas_object_event_callback_add(en, EVAS_CALLBACK_DEL,
135 _simple_popup_entry_del,
137 _simple_popup_reeval_content(ctx);
140 void simple_popup_entry_disable(Evas_Object *p)
142 Simple_Popup *ctx = evas_object_data_get(p, "simple_popup");
143 EINA_SAFETY_ON_NULL_RETURN(ctx);
146 evas_object_del(ctx->entry);
147 _simple_popup_reeval_content(ctx);
150 const char *simple_popup_entry_get(const Evas_Object *p)
152 Simple_Popup *ctx = evas_object_data_get(p, "simple_popup");
153 EINA_SAFETY_ON_NULL_RETURN_VAL(ctx, NULL);
154 EINA_SAFETY_ON_NULL_RETURN_VAL(ctx->entry, NULL);
155 return elm_object_text_get(ctx->entry);
158 void simple_popup_button_dismiss_set(Evas_Object *p)
160 simple_popup_buttons_set(p,
168 void simple_popup_buttons_set(Evas_Object *p,
169 const char *b1_label,
170 const char *b1_class,
172 const char *b2_label,
173 const char *b2_class,
178 unsigned int count = 0;
181 bt = elm_button_add(p);
182 elm_object_style_set(bt, b1_class ? b1_class : "dialer");
183 elm_object_text_set(bt, b1_label);
184 elm_object_part_content_set(p, "elm.swallow.button1", bt);
185 evas_object_smart_callback_add(bt, "clicked", b1_cb, data);
191 bt = elm_button_add(p);
192 elm_object_style_set(bt, b2_class ? b2_class : "dialer");
193 elm_object_text_set(bt, b2_label);
196 part = "elm.swallow.button2";
198 part = "elm.swallow.button1";
200 elm_object_part_content_set(p, part, bt);
201 evas_object_smart_callback_add(bt, "clicked", b2_cb, data);
206 elm_object_signal_emit(p, "buttons,2", "gui");
207 else if (count == 1) {
208 elm_object_signal_emit(p, "buttons,1", "gui");
209 elm_object_part_content_set(p, "elm.swallow.button2", NULL);
211 elm_object_signal_emit(p, "buttons,0", "gui");
212 elm_object_part_content_set(p, "elm.swallow.button1", NULL);
213 elm_object_part_content_set(p, "elm.swallow.button2", NULL);
217 static void _simple_popup_del(void *data, Evas *e __UNUSED__,
218 Evas_Object *o __UNUSED__,
219 void *event_info __UNUSED__)
221 Simple_Popup *ctx = data;
225 Evas_Object *simple_popup_add(Evas_Object *win,
226 const char *title, const char *message)
228 Evas_Object *p = layout_add(win, "popup");
231 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
233 ctx = calloc(1, sizeof(Simple_Popup));
234 EINA_SAFETY_ON_NULL_GOTO(ctx, failed_calloc);
236 evas_object_data_set(p, "simple_popup", ctx);
238 evas_object_event_callback_add(p, EVAS_CALLBACK_DEL,
239 _simple_popup_del, ctx);
241 evas_object_size_hint_weight_set(p, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
242 elm_win_resize_object_add(win, p);
244 ctx->box = elm_box_add(p);
246 simple_popup_title_set(p, title);
247 simple_popup_message_set(p, message);
248 simple_popup_button_dismiss_set(p);