From: cnook <kimcinoo@gmail.com>
[framework/uifw/elementary.git] / src / bin / test_ctxpopup.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7
8 static void
9 _dismissed(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
10 {
11    evas_object_del(obj);
12 }
13
14 static void
15 _print_current_dir(Evas_Object *obj)
16 {
17    Elm_Ctxpopup_Direction dir;
18    dir = elm_ctxpopup_direction_get(obj);
19
20    switch(dir)
21      {
22       case ELM_CTXPOPUP_DIRECTION_LEFT:
23          printf("ctxpopup direction: left!\n");
24          break;
25       case ELM_CTXPOPUP_DIRECTION_RIGHT:
26          printf("ctxpopup direction: right!\n");
27          break;
28       case ELM_CTXPOPUP_DIRECTION_UP:
29          printf("ctxpopup direction: up!\n");
30          break;
31       case ELM_CTXPOPUP_DIRECTION_DOWN:
32          printf("ctxpopup direction: down!\n");
33          break;
34       case ELM_CTXPOPUP_DIRECTION_UNKNOWN:
35          printf("ctxpopup direction: unknow!\n");
36          break;
37      }
38 }
39
40 static Eina_Bool
41 _ctxpopup_raise_timer_cb(void *data)
42 {
43    printf("Timer Called\n");
44    Evas_Object *ctxpopup = (Evas_Object *) data;
45    evas_object_raise(ctxpopup);
46    return EINA_FALSE;
47 }
48
49 static void
50 _btn_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
51 {
52    printf("Button Clicked\n");
53    Evas_Object *ctxpopup = (Evas_Object *) data;
54    Evas_Object *lb = elm_label_add(ctxpopup);
55    elm_label_line_wrap_set(lb, ELM_WRAP_CHAR);
56    elm_object_text_set(lb,
57                        "<b>"
58                        "This is more text designed to line-wrap here as "
59                        "This object is resized horizontally. As it is "
60                        "resized vertically though, nothing should change. "
61                        "The amount of space allocated vertically should "
62                        "change as horizontal size changes."
63                        "This is more text designed to line-wrap here as "
64                        "This object is resized horizontally. As it is "
65                        "resized vertically though, nothing should change. "
66                        "The amount of space allocated vertically should "
67                        "change as horizontal size changes."
68                        "</b>"
69                        );
70    evas_object_resize(lb, 200, 400);
71    evas_object_show(lb);
72
73    ecore_timer_add(1.5, _ctxpopup_raise_timer_cb, ctxpopup);
74 }
75
76 static void
77 _ctxpopup_item_cb(void *data , Evas_Object *obj __UNUSED__, void *event_info)
78 {
79    printf("ctxpopup item selected: %s\n",
80    elm_object_item_text_get(event_info));
81 }
82
83 #define ITEM_NEW(_hov, _label, _icon)                                           \
84    if(_icon)                                                                    \
85      {                                                                          \
86         ic = elm_icon_add(obj);                                                 \
87         elm_icon_standard_set(ic, _icon);                                       \
88         elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);                         \
89      }                                                                          \
90    else                                                                         \
91       ic = NULL;                                                                \
92    it = elm_ctxpopup_item_append(_hov, _label, ic, _ctxpopup_item_cb, NULL);    \
93
94 static void
95 _list_item_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
96 {
97    Evas_Object *ctxpopup, *ic;
98    Elm_Object_Item *it;
99    Evas_Coord x,y;
100
101    ctxpopup = elm_ctxpopup_add(obj);
102    evas_object_smart_callback_add(ctxpopup,
103                                   "dismissed",
104                                   _dismissed,
105                                   NULL);
106
107    ITEM_NEW(ctxpopup, "Go to home folder", "home");
108    ITEM_NEW(ctxpopup, "Save file", "file");
109    ITEM_NEW(ctxpopup, "Delete file", "delete");
110    ITEM_NEW(ctxpopup, "Navigate to folder", "folder");
111    elm_object_item_disabled_set(it, EINA_TRUE);
112    ITEM_NEW(ctxpopup, "Edit entry", "edit");
113    ITEM_NEW(ctxpopup, "Set date and time", "clock");
114    elm_object_item_disabled_set(it, EINA_TRUE);
115
116    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
117    evas_object_size_hint_max_set(ctxpopup, 240, 240);
118    evas_object_move(ctxpopup, x, y);
119    evas_object_show(ctxpopup);
120    _print_current_dir(ctxpopup);
121 }
122
123 static void
124 _list_item_cb2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
125 {
126    Evas_Object *ctxpopup, *ic;
127    Elm_Object_Item *it;
128    Evas_Coord x,y;
129
130    ctxpopup = elm_ctxpopup_add(obj);
131    evas_object_smart_callback_add(ctxpopup,
132                                   "dismissed",
133                                   _dismissed,
134                                   NULL);
135
136    ITEM_NEW(ctxpopup, NULL, "home");
137    ITEM_NEW(ctxpopup, NULL, "file");
138    ITEM_NEW(ctxpopup, NULL, "delete");
139    ITEM_NEW(ctxpopup, NULL, "folder");
140    ITEM_NEW(ctxpopup, NULL, "edit");
141    elm_object_item_disabled_set(it, EINA_TRUE);
142    ITEM_NEW(ctxpopup, NULL, "clock");
143
144    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
145    evas_object_size_hint_max_set(ctxpopup, 240, 240);
146    evas_object_move(ctxpopup, x, y);
147    evas_object_show(ctxpopup);
148    _print_current_dir(ctxpopup);
149 }
150
151 static void
152 _list_item_cb3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
153 {
154    Evas_Object *ctxpopup, *ic;
155    Elm_Object_Item *it;
156    Evas_Coord x,y;
157
158    ctxpopup = elm_ctxpopup_add(obj);
159    evas_object_smart_callback_add(ctxpopup,
160                                   "dismissed",
161                                   _dismissed,
162                                   NULL);
163
164    ITEM_NEW(ctxpopup, "Eina", NULL);
165    ITEM_NEW(ctxpopup, "Eet", NULL);
166    ITEM_NEW(ctxpopup, "Evas", NULL);
167    ITEM_NEW(ctxpopup, "Ecore", NULL);
168    elm_object_item_disabled_set(it, EINA_TRUE);
169    ITEM_NEW(ctxpopup, "Embryo", NULL);
170    ITEM_NEW(ctxpopup, "Edje", NULL);
171
172    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
173    evas_object_move(ctxpopup, x, y);
174    evas_object_show(ctxpopup);
175    _print_current_dir(ctxpopup);
176 }
177
178 static void
179 _list_item_cb4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
180 {
181    Evas_Object *ctxpopup, *ic;
182    Elm_Object_Item *it;
183    Evas_Coord x,y;
184
185    ctxpopup = elm_ctxpopup_add(obj);
186    evas_object_smart_callback_add(ctxpopup,
187                                   "dismissed",
188                                   _dismissed,
189                                   NULL);
190
191    elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
192
193    ITEM_NEW(ctxpopup, NULL, "home");
194    ITEM_NEW(ctxpopup, NULL, "file");
195    ITEM_NEW(ctxpopup, NULL, "delete");
196    ITEM_NEW(ctxpopup, NULL, "folder");
197    ITEM_NEW(ctxpopup, NULL, "edit");
198    ITEM_NEW(ctxpopup, NULL, "clock");
199
200    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
201    evas_object_size_hint_max_set(ctxpopup, 240, 240);
202    evas_object_move(ctxpopup, x, y);
203    evas_object_show(ctxpopup);
204    _print_current_dir(ctxpopup);
205 }
206
207
208 static void
209 _list_item_cb5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
210 {
211    Evas_Object *ctxpopup, *btn, *sc, *bx;
212    Evas_Coord x,y;
213
214    bx = elm_box_add(obj);
215    evas_object_size_hint_min_set(bx, 150, 150);
216
217    sc = elm_scroller_add(bx);
218    elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
219    evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
220    evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221    evas_object_show(sc);
222
223    btn = elm_button_add(sc);
224    elm_object_text_set(btn, "Enlightenment");
225    evas_object_size_hint_min_set(btn, 140, 140);
226
227    elm_object_content_set(sc, btn);
228
229    elm_box_pack_end(bx, sc);
230
231    ctxpopup = elm_ctxpopup_add(obj);
232    evas_object_smart_callback_add(ctxpopup,
233                                   "dismissed",
234                                   _dismissed,
235                                   NULL);
236
237    elm_object_content_set(ctxpopup, bx);
238
239    evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
240    evas_object_move(ctxpopup, x, y);
241    evas_object_show(ctxpopup);
242    _print_current_dir(ctxpopup);
243
244    evas_object_smart_callback_add(btn, "clicked", _btn_clicked, ctxpopup);
245 }
246
247
248 static void _list_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
249 {
250    elm_list_item_selected_set(event_info, EINA_FALSE);
251 }
252
253 void
254 test_ctxpopup(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
255 {
256    Evas_Object *win, *bg, *list;
257
258    win = elm_win_add(NULL, "Contextual Popup", ELM_WIN_BASIC);
259    elm_win_title_set(win, "Contextual Popup");
260    elm_win_autodel_set(win, EINA_TRUE);
261
262    bg = elm_bg_add(win);
263    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
264    elm_win_resize_object_add(win, bg);
265    evas_object_show(bg);
266
267    list = elm_list_add(win);
268    elm_win_resize_object_add(win, list);
269    evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
270    elm_list_mode_set(list, ELM_LIST_COMPRESS);
271    evas_object_smart_callback_add(list, "selected", _list_clicked, NULL);
272
273 #undef ITEM_NEW
274    elm_list_item_append(list, "Ctxpopup with icons and labels", NULL, NULL,
275                         _list_item_cb, NULL);
276    elm_list_item_append(list, "Ctxpopup with icons only", NULL, NULL,
277                         _list_item_cb2, NULL);
278    elm_list_item_append(list, "Ctxpopup with labels only", NULL, NULL,
279                         _list_item_cb3, NULL);
280    elm_list_item_append(list, "Ctxpopup at horizontal mode", NULL, NULL,
281                         _list_item_cb4, NULL);
282    elm_list_item_append(list, "Ctxpopup with user content", NULL, NULL,
283                         _list_item_cb5, NULL);
284    evas_object_show(list);
285    elm_list_go(list);
286
287    evas_object_resize(win, 400, 400);
288    evas_object_show(win);
289 }
290 #endif