Merge remote-tracking branch 'remotes/origin/upstream'
[framework/uifw/elementary.git] / src / bin / test_launcher.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 static void
8 mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
9 {
10    Evas_Object *win = data;
11    Evas_Object *mb;
12    Eina_List *mbs, *l;
13
14    mbs = evas_object_data_get(win, "mbs");
15    EINA_LIST_FOREACH(mbs, l, mb)
16      {
17         if (elm_mapbuf_enabled_get(mb))
18 <<<<<<< HEAD
19           elm_mapbuf_enabled_set(mb, 0);
20         else
21           elm_mapbuf_enabled_set(mb, 1);
22 =======
23           elm_mapbuf_enabled_set(mb, EINA_FALSE);
24         else
25           elm_mapbuf_enabled_set(mb, EINA_TRUE);
26 >>>>>>> remotes/origin/upstream
27      }
28 }
29
30 static void
31 full_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
32 {
33    Evas_Object *win = data;
34    elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win));
35 }
36
37 static void
38 alpha_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
39 {
40    Evas_Object *win = data;
41    Evas_Object *mb;
42    Eina_List *mbs, *l;
43
44    mbs = evas_object_data_get(win, "mbs");
45    EINA_LIST_FOREACH(mbs, l, mb)
46      {
47         elm_mapbuf_alpha_set(mb, elm_check_state_get(obj));
48      }
49 }
50
51 static void
52 smooth_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
53 {
54    Evas_Object *win = data;
55    Evas_Object *mb;
56    Eina_List *mbs, *l;
57
58    mbs = evas_object_data_get(win, "mbs");
59    EINA_LIST_FOREACH(mbs, l, mb)
60      {
61         elm_mapbuf_smooth_set(mb, elm_check_state_get(obj));
62      }
63 }
64
65 static void
66 close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
67 {
68    evas_object_del(data);
69 }
70
71 static Eina_Bool
72 tim_cb(void *data)
73 {
74    Evas_Object *tb, *sc, *mb;
75    Eina_List *list, *l;
76
77    evas_object_data_del(data, "timer");
78    tb = evas_object_data_get(data, "tb");
79    sc = evas_object_data_get(data, "sc");
80    elm_object_scroll_freeze_push(sc);
81    evas_object_data_set(data, "dragging", (void *)(long)(1));
82    evas_object_color_set(data, 255, 255, 255, 255);
83    list = (Eina_List *)evas_object_data_get
84       (elm_object_top_widget_get(data), "mbs");
85    EINA_LIST_FOREACH(list, l, mb)
86       evas_object_color_set(mb, 128, 128, 128, 128);
87    elm_table_unpack(tb, data);
88    return EINA_FALSE;
89 }
90
91 static void
92 ic_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
93 {
94    Ecore_Timer *tim;
95
96    tim = evas_object_data_get(obj, "timer");
97    if (tim)
98      {
99         evas_object_data_del(obj, "timer");
100         ecore_timer_del(tim);
101      }
102 }
103
104 static void
105 ic_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
106 {
107    Evas_Event_Mouse_Down *ev = event_info;
108    Ecore_Timer *tim;
109    Evas_Coord x, y, w, h;
110
111    evas_object_color_set(data, 128, 0, 0, 128);
112
113    tim = evas_object_data_get(obj, "timer");
114    if (tim) evas_object_data_del(obj, "timer");
115    tim = ecore_timer_add(1.0, tim_cb, obj);
116    evas_object_data_set(obj, "timer", tim);
117
118    evas_object_geometry_get(data, &x, &y, &w, &h);
119    evas_object_data_set(obj, "x", (void *)(long)(ev->canvas.x));
120    evas_object_data_set(obj, "y", (void *)(long)(ev->canvas.y));
121    evas_object_data_set(obj, "px", (void *)(long)(x));
122    evas_object_data_set(obj, "py", (void *)(long)(y));
123
124    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
125      {
126         printf("double click %p\n", obj);
127      }
128 }
129
130 static void
131 ic_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
132 {
133    Evas_Event_Mouse_Up *ev = event_info;
134    Ecore_Timer *tim;
135
136    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
137    evas_object_color_set(data, 255, 255, 255, 255);
138    tim = evas_object_data_get(obj, "timer");
139    if (tim)
140      {
141         evas_object_data_del(obj, "timer");
142         ecore_timer_del(tim);
143      }
144    if (evas_object_data_get(obj, "dragging"))
145      {
146         Evas_Object *tb, *sc, *mb;
147         Eina_List *list, *l;
148         int tbx, tby;
149
150         evas_object_data_del(obj, "dragging");
151         tb = evas_object_data_get(obj, "tb");
152         sc = evas_object_data_get(obj, "sc");
153         elm_object_scroll_freeze_pop(sc);
154         tbx = (int)(long)evas_object_data_get(obj, "tbx");
155         tby = (int)(long)evas_object_data_get(obj, "tby");
156         elm_table_pack(tb, obj, tbx, tby, 1, 1);
157         list = (Eina_List *)evas_object_data_get
158            (elm_object_top_widget_get(obj), "mbs");
159         EINA_LIST_FOREACH(list, l, mb)
160            evas_object_color_set(mb, 255, 255, 255, 255);
161      }
162 }
163
164 static void
165 ic_move_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
166 {
167    Evas_Event_Mouse_Move *ev = event_info;
168    if (evas_object_data_get(obj, "dragging"))
169      {
170         Evas_Coord x, y, px, py;
171
172         x = (Evas_Coord)(long)evas_object_data_get(obj, "x");
173         y = (Evas_Coord)(long)evas_object_data_get(obj, "y");
174         px = (Evas_Coord)(long)evas_object_data_get(obj, "px");
175         py = (Evas_Coord)(long)evas_object_data_get(obj, "py");
176         evas_object_move(obj,
177                          px + ev->cur.canvas.x - x,
178                          py + ev->cur.canvas.y - y);
179     }
180    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
181      {
182         Ecore_Timer *tim;
183
184         tim = evas_object_data_get(obj, "timer");
185         if (tim)
186           {
187              evas_object_data_del(obj, "timer");
188              ecore_timer_del(tim);
189           }
190         evas_object_color_set(data, 255, 255, 255, 255);
191         return;
192      }
193 }
194
195 void
196 test_launcher(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
197 {
198    Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *bx2;
199    int i, j, k, n, m;
200    char buf[PATH_MAX];
201    const char *names[] =
202      {
203         "Hello",    "World",    "Spam",  "Egg",
204         "Ham",      "Good",     "Bad",   "Milk",
205         "Smell",    "Of",       "Sky",   "Gold",
206         "Hole",     "Pig",      "And",   "Calm"
207      };
208    Eina_List *mbs = NULL;
209
210    win = elm_win_add(NULL, "launcher", ELM_WIN_BASIC);
211    elm_win_title_set(win, "Launcher");
212    elm_win_autodel_set(win, EINA_TRUE);
213
214    bg = elm_bg_add(win);
215    snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get());
216    elm_bg_file_set(bg, buf, NULL);
217    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
218    elm_win_resize_object_add(win, bg);
219    evas_object_show(bg);
220
221    bx = elm_box_add(win);
222    elm_box_homogeneous_set(bx, EINA_TRUE);
223    elm_box_horizontal_set(bx, EINA_TRUE);
224
225    sc = elm_scroller_add(win);
226 <<<<<<< HEAD
227    elm_scroller_bounce_set(sc, 1, 0);
228 =======
229    elm_scroller_bounce_set(sc, EINA_TRUE, EINA_FALSE);
230 >>>>>>> remotes/origin/upstream
231    elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
232    evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
233    evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
234
235    n = 0; m = 0;
236    for (k = 0 ; k < 8; k++)
237      {
238         tb = elm_table_add(win);
239         evas_object_size_hint_weight_set(tb, 0.0, 0.0);
240         evas_object_size_hint_align_set(tb, 0.5, 0.5);
241
242         pad = evas_object_rectangle_add(evas_object_evas_get(win));
243         evas_object_size_hint_min_set(pad, 470, 4);
244         evas_object_size_hint_weight_set(pad, 0.0, 0.0);
245         evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL);
246         elm_table_pack(tb, pad, 1, 0, 5, 1);
247
248         pad = evas_object_rectangle_add(evas_object_evas_get(win));
249         evas_object_size_hint_min_set(pad, 470, 4);
250         evas_object_size_hint_weight_set(pad, 0.0, 0.0);
251         evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL);
252         elm_table_pack(tb, pad, 1, 11, 5, 1);
253
254         pad = evas_object_rectangle_add(evas_object_evas_get(win));
255         evas_object_size_hint_min_set(pad, 4, 4);
256         evas_object_size_hint_weight_set(pad, 0.0, 0.0);
257         evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL);
258         elm_table_pack(tb, pad, 0, 1, 1, 10);
259
260         pad = evas_object_rectangle_add(evas_object_evas_get(win));
261         evas_object_size_hint_min_set(pad, 4, 4);
262         evas_object_size_hint_weight_set(pad, 0.0, 0.0);
263         evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL);
264         elm_table_pack(tb, pad, 6, 1, 1, 10);
265
266         mb = elm_mapbuf_add(win);
267         elm_object_content_set(mb, tb);
268         evas_object_show(tb);
269
270         for (j = 0; j < 5; j++)
271           {
272              for (i = 0; i < 5; i++)
273                {
274                   ic = elm_icon_add(win);
275                   elm_object_scale_set(ic, 0.5);
276                   snprintf(buf, sizeof(buf), "%s/images/icon_%02i.png", elm_app_data_dir_get(), n);
277                   elm_icon_file_set(ic, buf, NULL);
278 <<<<<<< HEAD
279                   elm_icon_scale_set(ic, 0, 0);
280 =======
281                   elm_icon_resizable_set(ic, 0, 0);
282 >>>>>>> remotes/origin/upstream
283                   evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
284                   evas_object_size_hint_align_set(ic, 0.5, 0.5);
285                   elm_table_pack(tb, ic, 1 + i, 1 + (j * 2), 1, 1);
286                   evas_object_show(ic);
287
288                   lb = elm_label_add(win);
289                   elm_object_style_set(lb, "marker");
290                   elm_object_text_set(lb, names[m]);
291                   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
292                   evas_object_size_hint_align_set(lb, 0.5, 0.5);
293                   elm_table_pack(tb, lb, 1 + i, 1 + (j * 2) + 1, 1, 1);
294                   evas_object_show(lb);
295
296                   evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, ic_del_cb, ic);
297
298                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic);
299                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP,   ic_up_cb,   ic);
300                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, ic_move_cb, ic);
301
302                   evas_object_data_set(ic, "lb", lb);
303                   evas_object_data_set(ic, "tb", tb);
304                   evas_object_data_set(ic, "sc", sc);
305                   evas_object_data_set(ic, "bx", bx);
306                   evas_object_data_set(ic, "mb", mb);
307                   evas_object_data_set(ic, "tbx", (void *)(long)(1 + i));
308                   evas_object_data_set(ic, "tby", (void *)(long)(1 + (j * 2)));
309
310                   n++; if (n > 23) n = 0;
311                   m++; if (m > 15) m = 0;
312                }
313           }
314
315         elm_box_pack_end(bx, mb);
316         evas_object_show(mb);
317
318         mbs = eina_list_append(mbs, mb);
319      }
320
321    // fixme: free mbs
322    evas_object_data_set(win, "mbs", mbs);
323
324    bx2 = elm_box_add(win);
325    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
326    elm_box_horizontal_set(bx2, EINA_FALSE);
327    elm_win_resize_object_add(win, bx2);
328    evas_object_show(bx2);
329
330    elm_object_content_set(sc, bx);
331    evas_object_show(bx);
332
333    elm_scroller_page_relative_set(sc, 1.0, 1.0);
334    evas_object_show(sc);
335
336    tb2 = elm_table_add(win);
337    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0);
338    evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL);
339    elm_box_pack_end(bx2, tb2);
340
341    elm_box_pack_end(bx2, sc);
342
343    ck = elm_check_add(win);
344    elm_object_text_set(ck, "Map");
345 <<<<<<< HEAD
346    elm_check_state_set(ck, 0);
347 =======
348    elm_check_state_set(ck, EINA_FALSE);
349 >>>>>>> remotes/origin/upstream
350    evas_object_smart_callback_add(ck, "changed", mode_cb, win);
351    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
352    evas_object_size_hint_align_set(ck, 0.05, 0.99);
353    elm_table_pack(tb2, ck, 0, 0, 1, 1);
354    evas_object_show(ck);
355
356    ck = elm_check_add(win);
357    elm_object_text_set(ck, "A");
358 <<<<<<< HEAD
359    elm_check_state_set(ck, 1);
360 =======
361    elm_check_state_set(ck, EINA_TRUE);
362 >>>>>>> remotes/origin/upstream
363    evas_object_smart_callback_add(ck, "changed", alpha_cb, win);
364    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
365    evas_object_size_hint_align_set(ck, 0.20, 0.99);
366    elm_table_pack(tb2, ck, 1, 0, 1, 1);
367    evas_object_show(ck);
368
369    ck = elm_check_add(win);
370    elm_object_text_set(ck, "Smo");
371 <<<<<<< HEAD
372    elm_check_state_set(ck, 1);
373 =======
374    elm_check_state_set(ck, EINA_TRUE);
375 >>>>>>> remotes/origin/upstream
376    evas_object_smart_callback_add(ck, "changed", smooth_cb, win);
377    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
378    evas_object_size_hint_align_set(ck, 0.40, 0.99);
379    elm_table_pack(tb2, ck, 2, 0, 1, 1);
380    evas_object_show(ck);
381
382    ck = elm_check_add(win);
383    elm_object_text_set(ck, "FS");
384 <<<<<<< HEAD
385    elm_check_state_set(ck, 0);
386 =======
387    elm_check_state_set(ck, EINA_FALSE);
388 >>>>>>> remotes/origin/upstream
389    evas_object_smart_callback_add(ck, "changed", full_cb, win);
390    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
391    evas_object_size_hint_align_set(ck, 0.5, 0.99);
392    elm_table_pack(tb2, ck, 3, 0, 1, 1);
393    evas_object_show(ck);
394
395    bt = elm_button_add(win);
396    elm_object_text_set(bt, "Close");
397    evas_object_smart_callback_add(bt, "clicked", close_cb, win);
398    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
399    evas_object_size_hint_align_set(bt, 0.95, 0.99);
400    elm_table_pack(tb2, bt, 4, 0, 1, 1);
401    evas_object_show(bt);
402
403    evas_object_show(tb2);
404
405    evas_object_resize(win, 480, 800);
406    evas_object_show(win);
407 }
408
409 void
410 test_launcher2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
411 {
412    Evas_Object *win, *bg, *sc, *bt, *tb2, *mb, *ck, *bx, *ly;
413    int k;
414    char buf[PATH_MAX];
415    Eina_List *mbs = NULL;
416
417    win = elm_win_add(NULL, "launcher2", ELM_WIN_BASIC);
418    elm_win_title_set(win, "Launcher 2");
419    elm_win_autodel_set(win, EINA_TRUE);
420
421    bg = elm_bg_add(win);
422    snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get());
423    elm_bg_file_set(bg, buf, NULL);
424    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
425    elm_win_resize_object_add(win, bg);
426    evas_object_show(bg);
427
428    bx = elm_box_add(win);
429    elm_box_homogeneous_set(bx, EINA_TRUE);
430    elm_box_horizontal_set(bx, EINA_TRUE);
431
432    for (k = 0 ; k < 8; k++)
433      {
434         ly = elm_layout_add(win);
435         snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
436         elm_layout_file_set(ly, buf, "layout");
437         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
438
439         bt = elm_button_add(win);
440         elm_object_text_set(bt, "Button 1");
441         elm_object_part_content_set(ly, "element1", bt);
442         evas_object_show(bt);
443
444         bt = elm_button_add(win);
445         elm_object_text_set(bt, "Button 2");
446         elm_object_part_content_set(ly, "element2", bt);
447         evas_object_show(bt);
448
449         bt = elm_button_add(win);
450         elm_object_text_set(bt, "Button 3");
451         elm_object_part_content_set(ly, "element3", bt);
452         evas_object_show(bt);
453
454         mb = elm_mapbuf_add(win);
455         elm_object_content_set(mb, ly);
456         evas_object_show(ly);
457
458         elm_box_pack_end(bx, mb);
459         evas_object_show(mb);
460
461         mbs = eina_list_append(mbs, mb);
462      }
463
464    // fixme: free mbs
465    evas_object_data_set(win, "mbs", mbs);
466
467    sc = elm_scroller_add(win);
468 <<<<<<< HEAD
469    elm_scroller_bounce_set(sc, 1, 0);
470 =======
471    elm_scroller_bounce_set(sc, EINA_TRUE, EINA_FALSE);
472 >>>>>>> remotes/origin/upstream
473    elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
474    evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
475    elm_win_resize_object_add(win, sc);
476
477    elm_object_content_set(sc, bx);
478    evas_object_show(bx);
479
480    elm_scroller_page_relative_set(sc, 1.0, 1.0);
481    evas_object_show(sc);
482
483    tb2 = elm_table_add(win);
484    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
485    elm_win_resize_object_add(win, tb2);
486
487    ck = elm_check_add(win);
488    elm_object_text_set(ck, "Map");
489 <<<<<<< HEAD
490    elm_check_state_set(ck, 0);
491 =======
492    elm_check_state_set(ck, EINA_FALSE);
493 >>>>>>> remotes/origin/upstream
494    evas_object_smart_callback_add(ck, "changed", mode_cb, win);
495    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
496    evas_object_size_hint_align_set(ck, 0.05, 0.99);
497    elm_table_pack(tb2, ck, 0, 0, 1, 1);
498    evas_object_show(ck);
499
500    ck = elm_check_add(win);
501    elm_object_text_set(ck, "A");
502 <<<<<<< HEAD
503    elm_check_state_set(ck, 1);
504 =======
505    elm_check_state_set(ck, EINA_TRUE);
506 >>>>>>> remotes/origin/upstream
507    evas_object_smart_callback_add(ck, "changed", alpha_cb, win);
508    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
509    evas_object_size_hint_align_set(ck, 0.20, 0.99);
510    elm_table_pack(tb2, ck, 1, 0, 1, 1);
511    evas_object_show(ck);
512
513    ck = elm_check_add(win);
514    elm_object_text_set(ck, "Smo");
515 <<<<<<< HEAD
516    elm_check_state_set(ck, 1);
517 =======
518    elm_check_state_set(ck, EINA_TRUE);
519 >>>>>>> remotes/origin/upstream
520    evas_object_smart_callback_add(ck, "changed", smooth_cb, win);
521    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
522    evas_object_size_hint_align_set(ck, 0.40, 0.99);
523    elm_table_pack(tb2, ck, 2, 0, 1, 1);
524    evas_object_show(ck);
525
526    ck = elm_check_add(win);
527    elm_object_text_set(ck, "FS");
528 <<<<<<< HEAD
529    elm_check_state_set(ck, 0);
530 =======
531    elm_check_state_set(ck, EINA_FALSE);
532 >>>>>>> remotes/origin/upstream
533    evas_object_smart_callback_add(ck, "changed", full_cb, win);
534    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
535    evas_object_size_hint_align_set(ck, 0.5, 0.99);
536    elm_table_pack(tb2, ck, 3, 0, 1, 1);
537    evas_object_show(ck);
538
539    bt = elm_button_add(win);
540    elm_object_text_set(bt, "Close");
541    evas_object_smart_callback_add(bt, "clicked", close_cb, win);
542    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
543    evas_object_size_hint_align_set(bt, 0.95, 0.99);
544    elm_table_pack(tb2, bt, 4, 0, 1, 1);
545    evas_object_show(bt);
546
547    evas_object_show(tb2);
548
549    evas_object_resize(win, 480, 800);
550    evas_object_show(win);
551 }
552
553 static void
554 l3_mode_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
555 {
556    Evas_Object *win = data;
557    Evas_Object *mb;
558    Eina_List *mbs, *l;
559
560    mbs = evas_object_data_get(win, "mbs");
561    EINA_LIST_FOREACH(mbs, l, mb)
562      {
563         if (elm_mapbuf_enabled_get(mb))
564 <<<<<<< HEAD
565           elm_mapbuf_enabled_set(mb, 0);
566 =======
567           elm_mapbuf_enabled_set(mb, EINA_FALSE);
568 >>>>>>> remotes/origin/upstream
569         else
570           elm_mapbuf_enabled_set(mb, 1);
571      }
572 }
573
574 static void
575 l3_full_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
576 {
577    Evas_Object *win = data;
578    elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win));
579 }
580
581 static void
582 l3_alpha_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
583 {
584    Evas_Object *win = data;
585    Evas_Object *mb;
586    Eina_List *mbs, *l;
587
588    mbs = evas_object_data_get(win, "mbs");
589    EINA_LIST_FOREACH(mbs, l, mb)
590      {
591         elm_mapbuf_alpha_set(mb, elm_check_state_get(obj));
592      }
593 }
594
595 static void
596 l3_smooth_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
597 {
598    Evas_Object *win = data;
599    Evas_Object *mb;
600    Eina_List *mbs, *l;
601
602    mbs = evas_object_data_get(win, "mbs");
603    EINA_LIST_FOREACH(mbs, l, mb)
604      {
605         elm_mapbuf_smooth_set(mb, elm_check_state_get(obj));
606      }
607 }
608
609 static void
610 l3_hidden_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
611 {
612    Evas_Object *win = data;
613    Evas_Object *mb;
614    Eina_List *mbs, *l;
615
616    mbs = evas_object_data_get(win, "mbs");
617    EINA_LIST_FOREACH(mbs, l, mb)
618      {
619         if (evas_object_visible_get(mb)) evas_object_hide(mb);
620         else evas_object_show(mb);
621      }
622 }
623
624 static void
625 l3_close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
626 {
627    evas_object_del(data);
628 }
629
630 static Eina_Bool
631 l3_tim_cb(void *data)
632 {
633    Evas_Object *ly, *ly2, *sc, *mb;
634    Eina_List *list, *l;
635    char buf[256];
636    int slx, sly;
637
638    evas_object_data_del(data, "timer");
639    ly = evas_object_data_get(data, "ly");
640    ly2 = evas_object_data_get(data, "ly2");
641    sc = evas_object_data_get(data, "sc");
642    elm_object_scroll_freeze_push(sc);
643    evas_object_data_set(data, "dragging", (void *)(long)1);
644    evas_object_color_set(data, 255, 255, 255, 255);
645    list = (Eina_List *)evas_object_data_get
646       (elm_object_top_widget_get(data), "mbs");
647    EINA_LIST_FOREACH(list, l, mb)
648       evas_object_color_set(mb, 128, 128, 128, 128);
649    slx = (int)(long)evas_object_data_get(data, "slx");
650    sly = (int)(long)evas_object_data_get(data, "sly");
651    snprintf(buf, sizeof(buf), "slot.%i.%i", slx, sly);
652    elm_object_part_content_unset(ly, buf);
653    edje_object_signal_emit(elm_layout_edje_get(ly2), "drag", "app");
654    return EINA_FALSE;
655 }
656
657 static void
658 l3_ic_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
659 {
660    Ecore_Timer *tim;
661
662    tim = evas_object_data_get(obj, "timer");
663    if (tim)
664      {
665         evas_object_data_del(obj, "timer");
666         ecore_timer_del(tim);
667      }
668 }
669
670 static void
671 l3_ic_down_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
672 {
673    Evas_Event_Mouse_Down *ev = event_info;
674    Ecore_Timer *tim;
675    Evas_Coord x, y, w, h;
676    Evas_Object *ly2;
677
678    tim = evas_object_data_get(obj, "timer");
679    if (tim) evas_object_data_del(obj, "timer");
680    tim = ecore_timer_add(1.0, l3_tim_cb, obj);
681    evas_object_data_set(obj, "timer", tim);
682
683    ly2 = evas_object_data_get(obj, "ly2");
684    evas_object_geometry_get(ly2, &x, &y, &w, &h);
685    evas_object_data_set(obj, "x", (void *)(long)(ev->canvas.x));
686    evas_object_data_set(obj, "y", (void *)(long)(ev->canvas.y));
687    evas_object_data_set(obj, "px", (void *)(long)(x));
688    evas_object_data_set(obj, "py", (void *)(long)(y));
689
690    edje_object_signal_emit(elm_layout_edje_get(ly2), "click", "app");
691
692    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
693      {
694         printf("double click %p\n", obj);
695      }
696 }
697
698 static void
699 l3_ic_up_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
700 {
701    Evas_Event_Mouse_Up *ev = event_info;
702    Ecore_Timer *tim;
703    Evas_Object *ly2;
704
705    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
706
707    ly2 = evas_object_data_get(obj, "ly2");
708    tim = evas_object_data_get(obj, "timer");
709    if (tim)
710      {
711         evas_object_data_del(obj, "timer");
712         ecore_timer_del(tim);
713      }
714    if (evas_object_data_get(obj, "dragging"))
715      {
716         Evas_Object *ly, *sc, *mb;
717         Eina_List *list, *l;
718         int slx, sly;
719         char buf[256];
720
721         evas_object_data_del(obj, "dragging");
722         ly = evas_object_data_get(obj, "ly");
723         sc = evas_object_data_get(obj, "sc");
724         elm_object_scroll_freeze_pop(sc);
725         slx = (int)(long)evas_object_data_get(obj, "slx");
726         sly = (int)(long)evas_object_data_get(obj, "sly");
727         snprintf(buf, sizeof(buf), "slot.%i.%i", slx, sly);
728         elm_object_part_content_set(ly, buf, ly2);
729         list = (Eina_List *)evas_object_data_get
730            (elm_object_top_widget_get(obj), "mbs");
731         EINA_LIST_FOREACH(list, l, mb)
732            evas_object_color_set(mb, 255, 255, 255, 255);
733         edje_object_signal_emit(elm_layout_edje_get(ly2), "drop", "app");
734      }
735    else
736       edje_object_signal_emit(elm_layout_edje_get(ly2), "unclick", "app");
737 }
738
739 static void
740 l3_ic_move_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
741 {
742    Evas_Event_Mouse_Move *ev = event_info;
743    Evas_Object *ly2;
744
745    ly2 = evas_object_data_get(obj, "ly2");
746
747    if (evas_object_data_get(obj, "dragging"))
748      {
749         Evas_Coord x, y, px, py;
750
751         x = (Evas_Coord)(long)evas_object_data_get(obj, "x");
752         y = (Evas_Coord)(long)evas_object_data_get(obj, "y");
753         px = (Evas_Coord)(long)evas_object_data_get(obj, "px");
754         py = (Evas_Coord)(long)evas_object_data_get(obj, "py");
755         evas_object_move(ly2,
756                          px + ev->cur.canvas.x - x,
757                          py + ev->cur.canvas.y - y);
758     }
759    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
760      {
761         Ecore_Timer *tim;
762
763         tim = evas_object_data_get(obj, "timer");
764         if (tim)
765           {
766              evas_object_data_del(obj, "timer");
767              ecore_timer_del(tim);
768           }
769         edje_object_signal_emit(elm_layout_edje_get(ly2), "cancel", "app");
770         return;
771      }
772 }
773
774 void
775 test_launcher3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
776 {
777    Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *tb2, *mb, *ck, *bx, *bx2, *ly, *ly2;
778    int i, j, k, n, m;
779    char buf[PATH_MAX];
780    const char *names[] =
781      {
782         "Hello",    "World",    "Spam",  "Egg",
783         "Ham",      "Good",     "Bad",   "Milk",
784         "Smell",    "Of",       "Sky",   "Gold",
785         "Hole",     "Pig",      "And",   "Calm"
786      };
787    Eina_List *mbs = NULL;
788
789    win = elm_win_add(NULL, "launcher", ELM_WIN_BASIC);
790    elm_win_title_set(win, "Launcher");
791    elm_win_autodel_set(win, EINA_TRUE);
792
793    bg = elm_bg_add(win);
794    snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get());
795    elm_bg_file_set(bg, buf, NULL);
796    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
797    elm_win_resize_object_add(win, bg);
798    evas_object_show(bg);
799
800    bx = elm_box_add(win);
801    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
802    evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
803    elm_box_homogeneous_set(bx, EINA_TRUE);
804    elm_box_horizontal_set(bx, EINA_TRUE);
805
806    sc = elm_scroller_add(win);
807 <<<<<<< HEAD
808    elm_scroller_bounce_set(sc, 1, 0);
809 =======
810    elm_scroller_bounce_set(sc, EINA_TRUE, EINA_FALSE);
811 >>>>>>> remotes/origin/upstream
812    elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
813    evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
814    evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
815
816    n = 0; m = 0;
817    for (k = 0 ; k < 8; k++)
818      {
819         tb = elm_table_add(win);
820         evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
821         evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
822
823         pad = evas_object_rectangle_add(evas_object_evas_get(win));
824         evas_object_size_hint_min_set(pad, 450, 10);
825         elm_table_pack(tb, pad, 1, 0, 1, 1);
826
827         pad = evas_object_rectangle_add(evas_object_evas_get(win));
828         evas_object_size_hint_min_set(pad, 450, 10);
829         elm_table_pack(tb, pad, 1, 2, 1, 1);
830
831         pad = evas_object_rectangle_add(evas_object_evas_get(win));
832         evas_object_size_hint_min_set(pad, 10, 450);
833         elm_table_pack(tb, pad, 0, 1, 1, 1);
834
835         pad = evas_object_rectangle_add(evas_object_evas_get(win));
836         evas_object_size_hint_min_set(pad, 10, 450);
837         elm_table_pack(tb, pad, 2, 1, 1, 1);
838
839         mb = elm_mapbuf_add(win);
840         mbs = eina_list_append(mbs, mb);
841
842         elm_object_content_set(mb, tb);
843         evas_object_show(tb);
844         elm_box_pack_end(bx, mb);
845         evas_object_show(mb);
846
847         ly = elm_layout_add(win);
848         snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
849         elm_layout_file_set(ly, buf, "launcher_page");
850         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
851         evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
852         elm_table_pack(tb, ly, 1, 1, 1, 1);
853         evas_object_show(ly);
854
855         for (j = 0; j < 4; j++)
856           {
857              for (i = 0; i < 4; i++)
858                {
859                   ly2 = elm_layout_add(win);
860                   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
861                   elm_layout_file_set(ly2, buf, "launcher_icon");
862                   evas_object_size_hint_weight_set(ly2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
863                   evas_object_size_hint_align_set(ly2, EVAS_HINT_FILL, EVAS_HINT_FILL);
864                   edje_object_part_text_set(elm_layout_edje_get(ly2), "label", names[m]);
865
866                   ic = elm_icon_add(win);
867                   elm_object_scale_set(ic, 0.5);
868                   snprintf(buf, sizeof(buf), "%s/images/icon_%02i.png", elm_app_data_dir_get(), n);
869                   elm_icon_file_set(ic, buf, NULL);
870 <<<<<<< HEAD
871                   elm_icon_scale_set(ic, 0, 0);
872 =======
873                   elm_icon_resizable_set(ic, 0, 0);
874 >>>>>>> remotes/origin/upstream
875                   evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
876                   evas_object_size_hint_align_set(ic, 0.5, 0.5);
877                   elm_object_part_content_set(ly2, "slot", ic);
878                   evas_object_show(ic);
879
880                   evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, l3_ic_del_cb, ic);
881
882                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, l3_ic_down_cb, ic);
883                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP,   l3_ic_up_cb,   ic);
884                   evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, l3_ic_move_cb, ic);
885
886                   evas_object_data_set(ic, "ly", ly);
887                   evas_object_data_set(ic, "ly2", ly2);
888                   evas_object_data_set(ic, "sc", sc);
889                   evas_object_data_set(ic, "bx", bx);
890                   evas_object_data_set(ic, "mb", mb);
891                   evas_object_data_set(ic, "slx", (void *)(long)(i));
892                   evas_object_data_set(ic, "sly", (void *)(long)(j));
893
894                   snprintf(buf, sizeof(buf), "slot.%i.%i", i, j);
895                   elm_object_part_content_set(ly, buf, ly2);
896                   evas_object_show(ly2);
897
898                   n++; if (n > 23) n = 0;
899                   m++; if (m > 15) m = 0;
900                }
901           }
902      }
903
904    // fixme: free mbs
905    evas_object_data_set(win, "mbs", mbs);
906
907    bx2 = elm_box_add(win);
908    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
909    elm_box_horizontal_set(bx2, EINA_FALSE);
910    elm_win_resize_object_add(win, bx2);
911    evas_object_show(bx2);
912
913    elm_object_content_set(sc, bx);
914    evas_object_show(bx);
915
916    elm_scroller_page_relative_set(sc, 1.0, 1.0);
917    evas_object_show(sc);
918
919    tb2 = elm_table_add(win);
920    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0);
921    evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL);
922    elm_box_pack_end(bx2, tb2);
923
924    elm_box_pack_end(bx2, sc);
925
926    ck = elm_check_add(win);
927    elm_object_text_set(ck, "Map");
928 <<<<<<< HEAD
929    elm_check_state_set(ck, 0);
930 =======
931    elm_check_state_set(ck, EINA_FALSE);
932 >>>>>>> remotes/origin/upstream
933    evas_object_smart_callback_add(ck, "changed", l3_mode_cb, win);
934    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
935    evas_object_size_hint_align_set(ck, 0.05, 0.99);
936    elm_table_pack(tb2, ck, 0, 0, 1, 1);
937    evas_object_show(ck);
938
939    ck = elm_check_add(win);
940    elm_object_text_set(ck, "A");
941    elm_check_state_set(ck, 1);
942    evas_object_smart_callback_add(ck, "changed", l3_alpha_cb, win);
943    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
944    evas_object_size_hint_align_set(ck, 0.20, 0.99);
945    elm_table_pack(tb2, ck, 1, 0, 1, 1);
946    evas_object_show(ck);
947
948    ck = elm_check_add(win);
949    elm_object_text_set(ck, "Smo");
950    elm_check_state_set(ck, 1);
951    evas_object_smart_callback_add(ck, "changed", l3_smooth_cb, win);
952    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
953    evas_object_size_hint_align_set(ck, 0.40, 0.99);
954    elm_table_pack(tb2, ck, 2, 0, 1, 1);
955    evas_object_show(ck);
956
957    ck = elm_check_add(win);
958    elm_object_text_set(ck, "FS");
959 <<<<<<< HEAD
960    elm_check_state_set(ck, 0);
961 =======
962    elm_check_state_set(ck, EINA_FALSE);
963 >>>>>>> remotes/origin/upstream
964    evas_object_smart_callback_add(ck, "changed", l3_full_cb, win);
965    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
966    evas_object_size_hint_align_set(ck, 0.5, 0.99);
967    elm_table_pack(tb2, ck, 3, 0, 1, 1);
968    evas_object_show(ck);
969
970    ck = elm_check_add(win);
971    elm_object_text_set(ck, "Hid");
972 <<<<<<< HEAD
973    elm_check_state_set(ck, 0);
974 =======
975    elm_check_state_set(ck, EINA_FALSE);
976 >>>>>>> remotes/origin/upstream
977    evas_object_smart_callback_add(ck, "changed", l3_hidden_cb, win);
978    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
979    evas_object_size_hint_align_set(ck, 0.5, 0.99);
980    elm_table_pack(tb2, ck, 4, 0, 1, 1);
981    evas_object_show(ck);
982
983    bt = elm_button_add(win);
984    elm_object_text_set(bt, "Close");
985    evas_object_smart_callback_add(bt, "clicked", l3_close_cb, win);
986    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
987    evas_object_size_hint_align_set(bt, 0.95, 0.99);
988    elm_table_pack(tb2, bt, 5, 0, 1, 1);
989    evas_object_show(bt);
990
991    evas_object_show(tb2);
992
993    evas_object_resize(win, 480, 800);
994    evas_object_show(win);
995 }
996 #endif