aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/bin/test_tooltip.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/elementary/src/bin/test_tooltip.c605
1 files changed, 605 insertions, 0 deletions
diff --git a/libraries/elementary/src/bin/test_tooltip.c b/libraries/elementary/src/bin/test_tooltip.c
new file mode 100644
index 0000000..7d4cb97
--- /dev/null
+++ b/libraries/elementary/src/bin/test_tooltip.c
@@ -0,0 +1,605 @@
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4#include <Elementary.h>
5#ifndef ELM_LIB_QUICKLAUNCH
6
7typedef struct _Testitem
8{
9 Elm_Object_Item *item;
10 const char *path;
11 int mode;
12 int onoff;
13} Testitem;
14
15static Elm_Gengrid_Item_Class gic;
16
17char *
18grdt_lbl_get(void *data,
19 Evas_Object *obj __UNUSED__,
20 const char *part __UNUSED__)
21{
22 const Testitem *ti = data;
23 char buf[256];
24 snprintf(buf, sizeof(buf), "Photo %s", ti->path);
25 return strdup(buf);
26}
27
28Evas_Object *
29grdt_content_get(void *data,
30 Evas_Object *obj,
31 const char *part)
32{
33 const Testitem *ti = data;
34 if (!strcmp(part, "elm.swallow.icon"))
35 {
36 Evas_Object *icon = elm_bg_add(obj);
37 elm_bg_file_set(icon, ti->path, NULL);
38 evas_object_size_hint_aspect_set(icon,
39 EVAS_ASPECT_CONTROL_VERTICAL,
40 1, 1);
41 evas_object_show(icon);
42 return icon;
43 }
44 return NULL;
45}
46
47static Elm_Genlist_Item_Class itct;
48
49static void
50gltt_exp(void *data __UNUSED__,
51 Evas_Object *obj __UNUSED__,
52 void *event_info)
53{
54 Elm_Object_Item *glit = event_info;
55 Evas_Object *gl = elm_object_item_widget_get(glit);
56 int val = (int)(long) elm_object_item_data_get(glit);
57 Elm_Object_Item *glit1, *glit2, *glit3;
58
59 val *= 10;
60 glit1 = elm_genlist_item_append(gl, &itct, (void *)(long) (val + 1), glit,
61 ELM_GENLIST_ITEM_NONE, NULL, NULL);
62 glit2 = elm_genlist_item_append(gl, &itct, (void *)(long) (val + 2), glit,
63 ELM_GENLIST_ITEM_NONE, NULL, NULL);
64 glit3 = elm_genlist_item_append(gl, &itct, (void *)(long) (val + 3), glit,
65 ELM_GENLIST_ITEM_TREE, NULL, NULL);
66
67 elm_genlist_item_tooltip_text_set(glit1, "Testing A");
68 elm_genlist_item_tooltip_text_set(glit2, "Testing B");
69 elm_genlist_item_tooltip_text_set(glit3, "Testing C");
70}
71
72static void
73gltt_con(void *data __UNUSED__,
74 Evas_Object *obj __UNUSED__,
75 void *event_info)
76{
77 Elm_Object_Item *glit = event_info;
78 elm_genlist_item_subitems_clear(glit);
79}
80
81static void
82gltt_exp_req(void *data __UNUSED__,
83 Evas_Object *obj __UNUSED__,
84 void *event_info)
85{
86 Elm_Object_Item *glit = event_info;
87 elm_genlist_item_expanded_set(glit, EINA_TRUE);
88}
89
90static void
91gltt_con_req(void *data __UNUSED__,
92 Evas_Object *obj __UNUSED__,
93 void *event_info)
94{
95 Elm_Object_Item *glit = event_info;
96 elm_genlist_item_expanded_set(glit, EINA_FALSE);
97}
98
99char *
100gltt_text_get(void *data,
101 Evas_Object *obj __UNUSED__,
102 const char *part __UNUSED__)
103{
104 char buf[256];
105 snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data);
106 return strdup(buf);
107}
108
109static Evas_Object *
110_tt_item_icon(void *data __UNUSED__,
111 Evas_Object *obj __UNUSED__,
112 Evas_Object *tt,
113 void *item __UNUSED__)
114{
115 Evas_Object *ic = elm_icon_add(tt);
116 char buf[PATH_MAX];
117 snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
118 elm_app_data_dir_get());
119 elm_icon_file_set(ic, buf, NULL);
120 elm_icon_resizable_set(ic, 0, 0);
121 evas_object_resize(ic, 64, 64);
122 return ic;
123}
124
125static Evas_Object *
126_tt_item_icon2(void *data __UNUSED__,
127 Evas_Object *obj __UNUSED__,
128 Evas_Object *tt,
129 void *item __UNUSED__)
130{
131 Evas_Object *ic = elm_icon_add(tt);
132 char buf[PATH_MAX];
133 snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
134 elm_icon_file_set(ic, buf, NULL);
135 elm_icon_resizable_set(ic, 0, 0);
136 return ic;
137}
138
139static Evas_Object *
140_tt_item_icon3(void *data __UNUSED__,
141 Evas_Object *obj __UNUSED__,
142 Evas_Object *tt,
143 void *item __UNUSED__)
144{
145 int w, h, sw, sh;
146 Evas_Object *ic = elm_icon_add(tt);
147
148 char buf[PATH_MAX];
149 snprintf(buf, sizeof(buf), "%s/images/insanely_huge_test_image.jpg", elm_app_data_dir_get());
150 elm_icon_file_set(ic, buf, NULL);
151 elm_icon_size_get(ic, &w, &h);
152 elm_icon_resizable_set(ic, 0, 0);
153 elm_win_screen_size_get(tt, NULL, NULL, &sw, &sh);
154 if ((w > sw) || (h > sh))
155 {
156 float sc = 0;
157 if ((float)w / (float)sw >= 0.8)
158 sc = ((float)sw * 0.8) / (float)w;
159 else if ((float)h / (float)sh >= 0.8)
160 sc = ((float)sh * 0.8) / (float)h;
161 if (sc) elm_object_scale_set(ic, sc);
162 }
163 return ic;
164}
165
166static Evas_Object *
167_tt_item_label(void *data __UNUSED__,
168 Evas_Object *obj __UNUSED__,
169 Evas_Object *tt,
170 void *item __UNUSED__)
171{
172 Evas_Object *l = elm_label_add(tt);
173 elm_object_text_set(l, "Something useful here?<ps/>"
174 "No probably not, but this is a super long label<ps/>"
175 "which probably breaks on your system, now doesn't it?<ps/>"
176 "Yeah, I thought so.");
177 elm_label_line_wrap_set(l, ELM_WRAP_MIXED);
178 return l;
179}
180
181static void
182_tt_item_icon_del(void *data,
183 Evas_Object *obj __UNUSED__,
184 void *event_info)
185{
186 // test to check for del_cb behavior!
187 printf("_tt_icon_del: data=%ld (== 456?), event_info=%p\n",
188 (long)data, event_info);
189}
190
191static void
192_tt_text_replace(void *data __UNUSED__,
193 Evas_Object *obj,
194 void *event_info __UNUSED__)
195{
196 static int count = 0;
197 char buf[64];
198 snprintf(buf, sizeof(buf), "count=%d", count);
199 count++;
200 elm_object_tooltip_text_set(obj, buf);
201}
202
203static void
204_tt_timer_del(void *data __UNUSED__,
205 Evas *e __UNUSED__,
206 Evas_Object *obj,
207 void *event_info __UNUSED__)
208{
209 Ecore_Timer *timer = evas_object_data_del(obj, "test-timer");
210 if (!timer) return;
211 ecore_timer_del(timer);
212}
213
214static Eina_Bool
215_tt_text_replace_timer_cb(void *data)
216{
217 _tt_text_replace(NULL, data, NULL);
218 return EINA_TRUE;
219}
220
221static void
222_tt_text_replace_timed(void *data __UNUSED__,
223 Evas_Object *obj,
224 void *event_info __UNUSED__)
225{
226 Ecore_Timer *timer = evas_object_data_get(obj, "test-timer");
227 if (timer)
228 {
229 ecore_timer_del(timer);
230 evas_object_data_del(obj, "test-timer");
231 elm_object_text_set(obj, "Simple text tooltip, click to start"
232 " changed timed");
233 return;
234 }
235
236 timer = ecore_timer_add(1.5, _tt_text_replace_timer_cb, obj);
237 evas_object_data_set(obj, "test-timer", timer);
238 elm_object_text_set(obj, "Simple text tooltip, click to stop changed"
239 " timed");
240}
241
242static Evas_Object *
243_tt_icon(void *data __UNUSED__,
244 Evas_Object *obj __UNUSED__,
245 Evas_Object *tt)
246{
247 Evas_Object *ic = elm_icon_add(tt);
248 char buf[PATH_MAX];
249 snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
250 elm_app_data_dir_get());
251 elm_icon_file_set(ic, buf, NULL);
252 elm_icon_resizable_set(ic, 0, 0);
253 evas_object_resize(ic, 64, 64);
254 return ic;
255}
256
257static Evas_Object *
258_tt_icon2(void *data __UNUSED__,
259 Evas_Object *obj __UNUSED__,
260 Evas_Object *tt)
261{
262 Evas_Object *ic = elm_icon_add(tt);
263 char buf[PATH_MAX];
264 snprintf(buf, sizeof(buf), "%s/images/icon_00.png", elm_app_data_dir_get());
265 elm_icon_file_set(ic, buf, NULL);
266 elm_icon_resizable_set(ic, 0, 0);
267 evas_object_resize(ic, 64, 64);
268 return ic;
269}
270
271static void
272_tt_icon_del(void *data,
273 Evas_Object *obj __UNUSED__,
274 void *event_info)
275{
276 // test to check for del_cb behavior!
277 printf("_tt_icon_del: data=%ld (== 123?), event_info=%p\n",
278 (long)data, event_info);
279}
280
281static Eina_Bool
282_tt_icon_replace_timer_cb(void *data)
283{
284 static int current = 0;
285
286 elm_object_tooltip_content_cb_set
287 (data, current ? _tt_icon2 : _tt_icon, NULL, NULL);
288
289 current = !current;
290 return EINA_TRUE;
291}
292
293static void
294_tt_icon_replace_timed(void *data __UNUSED__,
295 Evas_Object *obj,
296 void *event_info __UNUSED__)
297{
298 Ecore_Timer *timer = evas_object_data_get(obj, "test-timer");
299 if (timer)
300 {
301 ecore_timer_del(timer);
302 evas_object_data_del(obj, "test-timer");
303 elm_object_text_set(obj, "Icon tooltip, click to start changed"
304 " timed");
305 return;
306 }
307
308 timer = ecore_timer_add(1.5, _tt_icon_replace_timer_cb, obj);
309 evas_object_data_set(obj, "test-timer", timer);
310 elm_object_text_set(obj, "Icon tooltip, click to stop changed timed");
311}
312
313static Eina_Bool
314_tt_style_replace_timer_cb(void *data)
315{
316 static int current = 0;
317 elm_object_tooltip_style_set(data, current ? NULL : "transparent");
318 current = !current;
319 return EINA_TRUE;
320}
321
322static void
323_tt_style_replace_timed(void *data __UNUSED__,
324 Evas_Object *obj,
325 void *event_info __UNUSED__)
326{
327 Ecore_Timer *timer = evas_object_data_get(obj, "test-timer");
328 if (timer)
329 {
330 ecore_timer_del(timer);
331 evas_object_data_del(obj, "test-timer");
332 elm_object_text_set(obj, "Icon tooltip style, click to start"
333 " changed timed");
334 return;
335 }
336
337 timer = ecore_timer_add(1.5, _tt_style_replace_timer_cb, obj);
338 evas_object_data_set(obj, "test-timer", timer);
339 elm_object_text_set(obj, "Icon tooltip style, click to stop changed"
340 " timed");
341}
342
343static void
344_tt_visible_lock_toggle(void *data __UNUSED__,
345 Evas_Object *obj,
346 void *event_info __UNUSED__)
347{
348 static int locked = 0;
349
350 locked = !locked;
351 if (locked)
352 {
353 elm_object_text_set(obj, "Locked tooltip visibility");
354 elm_object_tooltip_text_set(obj, "This tooltip is locked"
355 " visible,<br/> click the button"
356 " to unlock!");
357 elm_object_tooltip_show(obj);
358 }
359 else
360 {
361 elm_object_text_set(obj, "Unlocked tooltip visibility");
362 elm_object_tooltip_text_set(obj, "This tooltip is unlocked"
363 " visible,<br/> click the button"
364 " to lock!");
365 elm_object_tooltip_hide(obj);
366 }
367}
368
369void
370test_tooltip(void *data __UNUSED__,
371 Evas_Object *obj __UNUSED__,
372 void *event_info __UNUSED__)
373{
374 Evas_Object *win, *bx, *tb, *bt, *se, *lst;
375 Elm_Object_Item *tb_it;
376 Elm_Object_Item *lit;
377
378 win = elm_win_util_standard_add("tooltip", "Tooltip");
379 elm_win_autodel_set(win, EINA_TRUE);
380
381 bx = elm_box_add(win);
382 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND,
383 EVAS_HINT_EXPAND);
384 elm_win_resize_object_add(win, bx);
385 evas_object_show(bx);
386
387 tb = elm_toolbar_add(win);
388 elm_toolbar_homogeneous_set(tb, 0);
389 evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
390 evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
391 elm_box_pack_end(bx, tb);
392 evas_object_show(tb);
393
394 tb_it = elm_toolbar_item_append(tb, NULL, "Open", NULL, NULL);
395 elm_object_item_tooltip_text_set(tb_it, "Opens a file");
396
397 tb_it = elm_toolbar_item_append(tb, NULL, "Icon", NULL, NULL);
398 elm_object_item_tooltip_content_cb_set
399 (tb_it, _tt_item_icon, (void *)456L, _tt_item_icon_del);
400 elm_object_item_tooltip_style_set(tb_it, "transparent");
401
402 bt = elm_button_add(win);
403 elm_object_text_set(bt, "Simple text tooltip");
404 elm_object_tooltip_text_set(bt, "Simple text tooltip");
405 elm_box_pack_end(bx, bt);
406 evas_object_show(bt);
407
408 bt = elm_button_add(win);
409 elm_object_text_set(bt, "Simple text tooltip, click to change");
410 elm_object_tooltip_text_set(bt, "Initial");
411 evas_object_smart_callback_add(bt, "clicked", _tt_text_replace, NULL);
412 elm_box_pack_end(bx, bt);
413 evas_object_show(bt);
414
415 bt = elm_button_add(win);
416 elm_object_text_set(bt, "Simple text tooltip, click to start"
417 " changed timed");
418 elm_object_tooltip_text_set(bt, "Initial");
419 evas_object_smart_callback_add(bt, "clicked", _tt_text_replace_timed,
420 NULL);
421 elm_box_pack_end(bx, bt);
422 evas_object_show(bt);
423 evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
424 NULL);
425
426 bt = elm_button_add(win);
427 elm_object_text_set(bt, "Icon tooltip");
428 elm_object_tooltip_content_cb_set(bt, _tt_icon, (void *)123L,
429 _tt_icon_del);
430 elm_box_pack_end(bx, bt);
431 evas_object_show(bt);
432
433 bt = elm_button_add(win);
434 elm_object_text_set(bt, "Icon tooltip, click to start changed timed");
435 elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
436 evas_object_smart_callback_add(bt, "clicked", _tt_icon_replace_timed,
437 NULL);
438 elm_box_pack_end(bx, bt);
439 evas_object_show(bt);
440 evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
441 NULL);
442
443 bt = elm_button_add(win);
444 elm_object_text_set(bt, "Transparent Icon tooltip");
445 elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
446 elm_object_tooltip_style_set(bt, "transparent");
447 elm_box_pack_end(bx, bt);
448 evas_object_show(bt);
449
450 bt = elm_button_add(win);
451 elm_object_text_set(bt, "Icon tooltip style, click to start changed"
452 " timed");
453 elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
454 evas_object_smart_callback_add(bt, "clicked", _tt_style_replace_timed,
455 NULL);
456 elm_box_pack_end(bx, bt);
457 evas_object_show(bt);
458 evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
459 NULL);
460
461 bt = elm_button_add(win);
462 elm_object_text_set(bt, "Unlocked tooltip visibility");
463 elm_object_tooltip_text_set(bt, "This tooltip is unlocked visible,<br/>"
464 " click the button to lock!");
465 evas_object_smart_callback_add(bt, "clicked", _tt_visible_lock_toggle,
466 NULL);
467 elm_box_pack_end(bx, bt);
468 evas_object_show(bt);
469
470 se = elm_entry_add(win);
471 elm_entry_scrollable_set(se, EINA_TRUE);
472 evas_object_size_hint_weight_set(se, EVAS_HINT_EXPAND, 0.0);
473 evas_object_size_hint_align_set(se, EVAS_HINT_FILL, 0.5);
474 elm_entry_scrollbar_policy_set(se, ELM_SCROLLER_POLICY_OFF,
475 ELM_SCROLLER_POLICY_OFF);
476 elm_object_text_set(se, "Hello, some entry here!");
477 elm_object_tooltip_text_set(se, "Type something here!");
478 elm_entry_single_line_set(se, EINA_TRUE);
479 elm_box_pack_end(bx, se);
480 evas_object_show(se);
481
482 lst = elm_list_add(win);
483 lit = elm_list_item_append(lst, "Hello", NULL, NULL, NULL, NULL);
484 elm_object_item_tooltip_content_cb_set(lit, _tt_item_label, NULL, NULL);
485 elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
486 lit = elm_list_item_append(lst, "Icon Tooltip", NULL, NULL, NULL, NULL);
487 elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon, NULL, NULL);
488 lit = elm_list_item_append(lst, "Big Icon Tooltip", NULL, NULL, NULL, NULL);
489 elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon2, NULL, NULL);
490 elm_object_item_tooltip_style_set(lit, "transparent");
491 elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
492 lit = elm_list_item_append(lst, "Insanely Big Icon Tooltip", NULL, NULL, NULL, NULL);
493 elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon3, NULL, NULL);
494 elm_object_item_tooltip_style_set(lit, "transparent");
495 elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
496 evas_object_size_hint_weight_set(lst, EVAS_HINT_EXPAND,
497 EVAS_HINT_EXPAND);
498 evas_object_size_hint_align_set(lst, EVAS_HINT_FILL, EVAS_HINT_FILL);
499 evas_object_size_hint_min_set(lst, 100, 100);
500 elm_list_go(lst);
501 elm_box_pack_end(bx, lst);
502 evas_object_show(lst);
503
504 evas_object_resize(win, 320, 580);
505 evas_object_show(win);
506}
507
508void
509test_tooltip2(void *data __UNUSED__,
510 Evas_Object *obj __UNUSED__,
511 void *event_info __UNUSED__)
512{
513 Evas_Object *win, *bx, *grid, *gl;
514 Elm_Object_Item *glit1, *glit2, *glit3;
515 static Testitem ti[144];
516 int i, n;
517 char buf[PATH_MAX];
518 const char *img[9] =
519 {
520 "panel_01.jpg",
521 "plant_01.jpg",
522 "rock_01.jpg",
523 "rock_02.jpg",
524 "sky_01.jpg",
525 "sky_02.jpg",
526 "sky_03.jpg",
527 "sky_04.jpg",
528 "wood_01.jpg",
529 };
530
531 win = elm_win_util_standard_add("tooltip2", "Tooltip 2");
532 elm_win_autodel_set(win, EINA_TRUE);
533
534 bx = elm_box_add(win);
535 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND,
536 EVAS_HINT_EXPAND);
537 elm_win_resize_object_add(win, bx);
538 evas_object_show(bx);
539
540 grid = elm_gengrid_add(win);
541 elm_gengrid_item_size_set(grid, 100, 100);
542 elm_gengrid_horizontal_set(grid, EINA_FALSE);
543 elm_gengrid_multi_select_set(grid, EINA_TRUE);
544 evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
545 evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
546 EVAS_HINT_EXPAND);
547
548 gic.item_style = "default";
549 gic.func.text_get = grdt_lbl_get;
550 gic.func.content_get = grdt_content_get;
551
552 n = 0;
553 for (i = 0; i < 9; i++)
554 {
555 snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(),
556 img[n]);
557 n++;
558 ti[i].mode = i;
559 ti[i].path = eina_stringshare_add(buf);
560 ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), NULL,
561 NULL);
562 if (n % 2)
563 elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing X");
564 else
565 elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing Y");
566 if (!(i % 5))
567 elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
568 }
569
570 elm_box_pack_end(bx, grid);
571 evas_object_show(grid);
572
573 gl = elm_genlist_add(win);
574 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
575 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND,
576 EVAS_HINT_EXPAND);
577
578 itct.item_style = "default";
579 itct.func.text_get = gltt_text_get;
580
581 glit1 = elm_genlist_item_append(gl, &itct, (void *)1, NULL,
582 ELM_GENLIST_ITEM_TREE, NULL, NULL);
583 glit2 = elm_genlist_item_append(gl, &itct, (void *)2, NULL,
584 ELM_GENLIST_ITEM_TREE, NULL, NULL);
585 glit3 = elm_genlist_item_append(gl, &itct, (void *)3, NULL,
586 ELM_GENLIST_ITEM_NONE, NULL, NULL);
587
588 elm_genlist_item_tooltip_text_set(glit1, "Testing 1");
589 elm_genlist_item_tooltip_text_set(glit2, "Testing 2");
590 elm_genlist_item_tooltip_text_set(glit3, "Testing 3");
591
592 evas_object_smart_callback_add(gl, "expand,request", gltt_exp_req, gl);
593 evas_object_smart_callback_add(gl, "contract,request", gltt_con_req,
594 gl);
595 evas_object_smart_callback_add(gl, "expanded", gltt_exp, gl);
596 evas_object_smart_callback_add(gl, "contracted", gltt_con, gl);
597
598 elm_box_pack_end(bx, gl);
599 evas_object_show(gl);
600
601 evas_object_resize(win, 320, 480);
602 evas_object_show(win);
603}
604
605#endif