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