1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4 #include <Elementary.h>
5 
6 typedef struct _Testitem
7 {
8    Elm_Object_Item  *item;
9    const char       *path;
10    int               mode;
11    int               onoff;
12 } Testitem;
13 
14 static Elm_Gengrid_Item_Class gic;
15 
16 char *
grdt_lbl_get(void * data,Evas_Object * obj EINA_UNUSED,const char * part EINA_UNUSED)17 grdt_lbl_get(void            *data,
18              Evas_Object *obj EINA_UNUSED,
19              const char *part EINA_UNUSED)
20 {
21    const Testitem *ti = data;
22    char buf[256];
23    snprintf(buf, sizeof(buf), "Photo %s", ti->path);
24    return strdup(buf);
25 }
26 
27 Evas_Object *
grdt_content_get(void * data,Evas_Object * obj,const char * part)28 grdt_content_get(void        *data,
29               Evas_Object *obj,
30               const char  *part)
31 {
32    const Testitem *ti = data;
33    if (!strcmp(part, "elm.swallow.icon"))
34      {
35         Evas_Object *icon = elm_bg_add(obj);
36         elm_bg_file_set(icon, ti->path, NULL);
37         evas_object_size_hint_aspect_set(icon,
38                                          EVAS_ASPECT_CONTROL_VERTICAL,
39                                          1, 1);
40         evas_object_show(icon);
41         return icon;
42      }
43    return NULL;
44 }
45 
46 static Elm_Genlist_Item_Class itct;
47 
48 static void
gltt_exp(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info)49 gltt_exp(void *data       EINA_UNUSED,
50          Evas_Object *obj EINA_UNUSED,
51          void            *event_info)
52 {
53    Elm_Object_Item *glit = event_info;
54    Evas_Object *gl = elm_object_item_widget_get(glit);
55    int val = (int)(uintptr_t) elm_object_item_data_get(glit);
56    Elm_Object_Item *glit1, *glit2, *glit3;
57 
58    val *= 10;
59    glit1 = elm_genlist_item_append(gl, &itct, (void *)(uintptr_t) (val + 1), glit,
60                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
61    glit2 = elm_genlist_item_append(gl, &itct, (void *)(uintptr_t) (val + 2), glit,
62                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
63    glit3 = elm_genlist_item_append(gl, &itct, (void *)(uintptr_t) (val + 3), glit,
64                                    ELM_GENLIST_ITEM_TREE, NULL, NULL);
65 
66    elm_genlist_item_tooltip_text_set(glit1, "Testing A");
67    elm_genlist_item_tooltip_text_set(glit2, "Testing B");
68    elm_genlist_item_tooltip_text_set(glit3, "Testing C");
69 }
70 
71 static void
gltt_con(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info)72 gltt_con(void *data       EINA_UNUSED,
73          Evas_Object *obj EINA_UNUSED,
74          void            *event_info)
75 {
76    Elm_Object_Item *glit = event_info;
77    elm_genlist_item_subitems_clear(glit);
78 }
79 
80 static void
gltt_exp_req(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info)81 gltt_exp_req(void *data       EINA_UNUSED,
82              Evas_Object *obj EINA_UNUSED,
83              void            *event_info)
84 {
85    Elm_Object_Item *glit = event_info;
86    elm_genlist_item_expanded_set(glit, EINA_TRUE);
87 }
88 
89 static void
gltt_con_req(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info)90 gltt_con_req(void *data       EINA_UNUSED,
91              Evas_Object *obj EINA_UNUSED,
92              void            *event_info)
93 {
94    Elm_Object_Item *glit = event_info;
95    elm_genlist_item_expanded_set(glit, EINA_FALSE);
96 }
97 
98 char *
gltt_text_get(void * data,Evas_Object * obj EINA_UNUSED,const char * part EINA_UNUSED)99 gltt_text_get(void            *data,
100                Evas_Object *obj EINA_UNUSED,
101                const char *part EINA_UNUSED)
102 {
103    char buf[256];
104    snprintf(buf, sizeof(buf), "Item mode %i", (int)(uintptr_t)data);
105    return strdup(buf);
106 }
107 
108 static Evas_Object *
_tt_item_icon(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt,void * item EINA_UNUSED)109 _tt_item_icon(void *data   EINA_UNUSED,
110               Evas_Object *obj EINA_UNUSED,
111               Evas_Object *tt,
112               void *item   EINA_UNUSED)
113 {
114    Evas_Object *ic = elm_icon_add(tt);
115    char buf[PATH_MAX];
116    snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
117             elm_app_data_dir_get());
118    elm_image_file_set(ic, buf, NULL);
119    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
120    evas_object_resize(ic, 64, 64);
121    return ic;
122 }
123 
124 static Evas_Object *
_tt_item_icon2(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt,void * item EINA_UNUSED)125 _tt_item_icon2(void *data   EINA_UNUSED,
126               Evas_Object *obj EINA_UNUSED,
127               Evas_Object *tt,
128               void *item   EINA_UNUSED)
129 {
130    Evas_Object *ic = elm_icon_add(tt);
131    char buf[PATH_MAX];
132    snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
133    elm_image_file_set(ic, buf, NULL);
134    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
135    return ic;
136 }
137 
138 static Evas_Object *
_tt_item_icon3(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt,void * item EINA_UNUSED)139 _tt_item_icon3(void *data   EINA_UNUSED,
140               Evas_Object *obj EINA_UNUSED,
141               Evas_Object *tt,
142               void *item   EINA_UNUSED)
143 {
144    int w, h, sw, sh;
145    Evas_Object *ic = elm_icon_add(tt);
146 
147    char buf[PATH_MAX];
148    snprintf(buf, sizeof(buf), "%s/images/insanely_huge_test_image.jpg", elm_app_data_dir_get());
149    elm_image_file_set(ic, buf, NULL);
150    elm_image_object_size_get(ic, &w, &h);
151    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
152    elm_win_screen_size_get(tt, NULL, NULL, &sw, &sh);
153    if ((w > sw) || (h > sh))
154      {
155         float sc = 0;
156         if ((float)w / (float)sw >= 0.8)
157           sc = ((float)sw * 0.8) / (float)w;
158         else if ((float)h / (float)sh >= 0.8)
159           sc = ((float)sh * 0.8) / (float)h;
160         if (EINA_FLT_NONZERO(sc)) elm_object_scale_set(ic, sc);
161      }
162    return ic;
163 }
164 
165 static Evas_Object *
_tt_item_label(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt,void * item EINA_UNUSED)166 _tt_item_label(void *data   EINA_UNUSED,
167               Evas_Object *obj EINA_UNUSED,
168               Evas_Object *tt,
169               void *item   EINA_UNUSED)
170 {
171    Evas_Object *l = elm_label_add(tt);
172    elm_object_text_set(l, "Something useful here?<ps/>"
173                           "No probably not, but this is a super long label<ps/>"
174                           "which probably breaks on your system, now doesn't it?<ps/>"
175                           "Yeah, I thought so.");
176    elm_label_line_wrap_set(l, ELM_WRAP_MIXED);
177    return l;
178 }
179 
180 static void
_tt_item_icon_del(void * data,Evas_Object * obj EINA_UNUSED,void * event_info)181 _tt_item_icon_del(void            *data,
182                   Evas_Object *obj EINA_UNUSED,
183                   void            *event_info)
184 {
185    // test to check for del_cb behavior!
186    printf("_tt_icon_del: data=%ld (== 456?), event_info=%p\n",
187           (long)(uintptr_t)data, event_info);
188 }
189 
190 static void
_tt_text_replace(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)191 _tt_text_replace(void *data       EINA_UNUSED,
192                  Evas_Object     *obj,
193                  void *event_info EINA_UNUSED)
194 {
195    static int count = 0;
196    char buf[64];
197    snprintf(buf, sizeof(buf), "count=%d", count);
198    count++;
199    elm_object_tooltip_text_set(obj, buf);
200 }
201 
202 static void
_tt_move_freeze(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)203 _tt_move_freeze(void *data       EINA_UNUSED,
204               Evas_Object     *obj,
205               void *event_info EINA_UNUSED)
206 {
207    if (elm_object_tooltip_move_freeze_get(obj) == 0)
208      {
209         elm_object_tooltip_move_freeze_push(obj);
210         elm_object_tooltip_text_set(obj, "Fronzen");
211      }
212    else
213      {
214         elm_object_tooltip_move_freeze_pop(obj);
215         elm_object_tooltip_text_set(obj, "Free");
216      }
217 }
218 
219 static void
_tt_orient_text_replace(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)220 _tt_orient_text_replace(void *data       EINA_UNUSED,
221                         Evas_Object     *obj,
222                         void *event_info EINA_UNUSED)
223 {
224    static Elm_Tooltip_Orient orient;
225 
226    orient = elm_object_tooltip_orient_get(obj);
227    orient++;
228    if (orient >= ELM_TOOLTIP_ORIENT_LAST)
229      orient = ELM_TOOLTIP_ORIENT_TOP_LEFT;
230    switch(orient)
231      {
232       case ELM_TOOLTIP_ORIENT_TOP_LEFT:
233         {
234            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_TOP_LEFT);
235            elm_object_tooltip_text_set(obj, "Top Left");
236            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_TOP_LEFT\n");
237            break;
238         }
239       case ELM_TOOLTIP_ORIENT_TOP:
240         {
241            elm_object_tooltip_text_set(obj, "Top");
242            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_TOP);
243            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_TOP\n");
244            break;
245         }
246       case ELM_TOOLTIP_ORIENT_TOP_RIGHT:
247         {
248            elm_object_tooltip_text_set(obj, "Top Right");
249            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_TOP_RIGHT);
250            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_TOP_RIGHT\n");
251            break;
252         }
253       case ELM_TOOLTIP_ORIENT_LEFT:
254         {
255            elm_object_tooltip_text_set(obj, "Left");
256            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_LEFT);
257            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_LEFT\n");
258            break;
259         }
260       case ELM_TOOLTIP_ORIENT_CENTER:
261         {
262            elm_object_tooltip_text_set(obj, "Center");
263            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_CENTER);
264            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_CENTER\n");
265            break;
266         }
267       case ELM_TOOLTIP_ORIENT_RIGHT:
268         {
269            elm_object_tooltip_text_set(obj, "Right");
270            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_RIGHT);
271            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_RIGHT\n");
272            break;
273         }
274       case ELM_TOOLTIP_ORIENT_BOTTOM_LEFT:
275         {
276            elm_object_tooltip_text_set(obj, "Bottom Left");
277            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_BOTTOM_LEFT);
278            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_BOTTOM_LEFT\n");
279            break;
280         }
281       case ELM_TOOLTIP_ORIENT_BOTTOM:
282         {
283            elm_object_tooltip_text_set(obj, "Bottom");
284            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_BOTTOM);
285            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_BOTTOM\n");
286            break;
287         }
288       case ELM_TOOLTIP_ORIENT_BOTTOM_RIGHT:
289         {
290            elm_object_tooltip_text_set(obj, "Bottom Right");
291            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_BOTTOM_RIGHT);
292            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_BOTTOM_RIGHT\n");
293            break;
294         }
295       default:
296         {
297            elm_object_tooltip_text_set(obj, "No Orientation");
298            elm_object_tooltip_orient_set(obj, ELM_TOOLTIP_ORIENT_NONE);
299            printf("elm_object_tooltip_orient_get :: Orientation: ELM_TOOLTIP_ORIENT_NONE\n");
300         }
301      };
302 }
303 
304 static void
_tt_timer_del(void * data EINA_UNUSED,Evas * e EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)305 _tt_timer_del(void *data       EINA_UNUSED,
306               Evas *e          EINA_UNUSED,
307               Evas_Object     *obj,
308               void *event_info EINA_UNUSED)
309 {
310    Ecore_Timer *timer = evas_object_data_del(obj, "test-timer");
311    if (!timer) return;
312    ecore_timer_del(timer);
313 }
314 
315 static Eina_Bool
_tt_text_replace_timer_cb(void * data)316 _tt_text_replace_timer_cb(void *data)
317 {
318    _tt_text_replace(NULL, data, NULL);
319    return EINA_TRUE;
320 }
321 
322 static void
_tt_text_replace_timed(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)323 _tt_text_replace_timed(void *data       EINA_UNUSED,
324                        Evas_Object     *obj,
325                        void *event_info EINA_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, "Simple text tooltip, click to start"
333                                   " changed timed");
334         return;
335      }
336 
337    timer = ecore_timer_add(1.5, _tt_text_replace_timer_cb, obj);
338    evas_object_data_set(obj, "test-timer", timer);
339    elm_object_text_set(obj, "Simple text tooltip, click to stop changed"
340                              " timed");
341 }
342 
343 static Evas_Object *
_no_min_tt_icon(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt)344 _no_min_tt_icon(void *data   EINA_UNUSED,
345                 Evas_Object *obj EINA_UNUSED,
346                 Evas_Object *tt)
347 {
348    Evas_Object *box = elm_box_add(tt);
349    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
350    evas_object_show(box);
351 
352    return box;
353 }
354 
355 static Evas_Object *
_tt_icon(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt)356 _tt_icon(void *data   EINA_UNUSED,
357          Evas_Object *obj EINA_UNUSED,
358          Evas_Object *tt)
359 {
360    Evas_Object *ic = elm_icon_add(tt);
361    char buf[PATH_MAX];
362    snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
363             elm_app_data_dir_get());
364    elm_image_file_set(ic, buf, NULL);
365    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
366    evas_object_resize(ic, 64, 64);
367    return ic;
368 }
369 
370 static Evas_Object *
_tt_icon2(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,Evas_Object * tt)371 _tt_icon2(void *data   EINA_UNUSED,
372           Evas_Object *obj EINA_UNUSED,
373           Evas_Object *tt)
374 {
375    Evas_Object *ic = elm_icon_add(tt);
376    char buf[PATH_MAX];
377    snprintf(buf, sizeof(buf), "%s/images/icon_00.png", elm_app_data_dir_get());
378    elm_image_file_set(ic, buf, NULL);
379    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
380    evas_object_resize(ic, 64, 64);
381    return ic;
382 }
383 
384 static void
_tt_icon_del(void * data,Evas_Object * obj EINA_UNUSED,void * event_info)385 _tt_icon_del(void            *data,
386              Evas_Object *obj EINA_UNUSED,
387              void            *event_info)
388 {
389    // test to check for del_cb behavior!
390    printf("_tt_icon_del: data=%ld (== 123?), event_info=%p\n",
391           (long)(uintptr_t)data, event_info);
392 }
393 
394 static Eina_Bool
_tt_icon_replace_timer_cb(void * data)395 _tt_icon_replace_timer_cb(void *data)
396 {
397    static int current = 0;
398 
399    elm_object_tooltip_content_cb_set
400      (data, current ? _tt_icon2 : _tt_icon, NULL, NULL);
401 
402    current = !current;
403    return EINA_TRUE;
404 }
405 
406 static void
_tt_icon_replace_timed(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)407 _tt_icon_replace_timed(void *data       EINA_UNUSED,
408                        Evas_Object     *obj,
409                        void *event_info EINA_UNUSED)
410 {
411    Ecore_Timer *timer = evas_object_data_get(obj, "test-timer");
412    if (timer)
413      {
414         ecore_timer_del(timer);
415         evas_object_data_del(obj, "test-timer");
416         elm_object_text_set(obj, "Icon tooltip, click to start changed"
417                                   " timed");
418         return;
419      }
420 
421    timer = ecore_timer_add(1.5, _tt_icon_replace_timer_cb, obj);
422    evas_object_data_set(obj, "test-timer", timer);
423    elm_object_text_set(obj, "Icon tooltip, click to stop changed timed");
424 }
425 
426 static Eina_Bool
_tt_style_replace_timer_cb(void * data)427 _tt_style_replace_timer_cb(void *data)
428 {
429    static int current = 0;
430    elm_object_tooltip_style_set(data, current ? NULL : "transparent");
431    current = !current;
432    return EINA_TRUE;
433 }
434 
435 static void
_tt_style_replace_timed(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)436 _tt_style_replace_timed(void *data       EINA_UNUSED,
437                         Evas_Object     *obj,
438                         void *event_info EINA_UNUSED)
439 {
440    Ecore_Timer *timer = evas_object_data_get(obj, "test-timer");
441    if (timer)
442      {
443         ecore_timer_del(timer);
444         evas_object_data_del(obj, "test-timer");
445         elm_object_text_set(obj, "Icon tooltip style, click to start"
446                                   " changed timed");
447         return;
448      }
449 
450    timer = ecore_timer_add(1.5, _tt_style_replace_timer_cb, obj);
451    evas_object_data_set(obj, "test-timer", timer);
452    elm_object_text_set(obj, "Icon tooltip style, click to stop changed"
453                              " timed");
454 }
455 
456 static void
_tt_visible_lock_toggle(void * data EINA_UNUSED,Evas_Object * obj,void * event_info EINA_UNUSED)457 _tt_visible_lock_toggle(void *data       EINA_UNUSED,
458                         Evas_Object     *obj,
459                         void *event_info EINA_UNUSED)
460 {
461    static int locked = 0;
462 
463    locked = !locked;
464    if (locked)
465      {
466         elm_object_text_set(obj, "Locked tooltip visibility");
467         elm_object_tooltip_text_set(obj, "This tooltip is locked"
468                                          " visible,<br/> click the button"
469                                          " to unlock!");
470         elm_object_tooltip_show(obj);
471      }
472    else
473      {
474         elm_object_text_set(obj, "Unlocked tooltip visibility");
475         elm_object_tooltip_text_set(obj, "This tooltip is unlocked"
476                                          " visible,<br/> click the button"
477                                          " to lock!");
478         elm_object_tooltip_hide(obj);
479      }
480 }
481 
482 void
test_tooltip(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)483 test_tooltip(void *data       EINA_UNUSED,
484              Evas_Object *obj EINA_UNUSED,
485              void *event_info EINA_UNUSED)
486 {
487    Evas_Object *win, *bx, *tb, *bt, *se, *lst;
488    Elm_Object_Item *tb_it;
489    Elm_Object_Item *lit;
490 
491    win = elm_win_util_standard_add("tooltip", "Tooltip");
492    elm_win_autodel_set(win, EINA_TRUE);
493 
494    bx = elm_box_add(win);
495    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
496    elm_win_resize_object_add(win, bx);
497    evas_object_show(bx);
498 
499    tb = elm_toolbar_add(win);
500    elm_toolbar_homogeneous_set(tb, EINA_FALSE);
501    evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
502    evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
503    elm_box_pack_end(bx, tb);
504    evas_object_show(tb);
505 
506    tb_it = elm_toolbar_item_append(tb, NULL, "Open", NULL, NULL);
507    elm_object_item_tooltip_text_set(tb_it, "Opens a file");
508 
509    tb_it = elm_toolbar_item_append(tb, NULL, "Icon", NULL, NULL);
510    elm_object_item_tooltip_content_cb_set
511      (tb_it, _tt_item_icon, (void *)456L, _tt_item_icon_del);
512    elm_object_item_tooltip_style_set(tb_it, "transparent");
513 
514    bt = elm_button_add(win);
515    elm_object_text_set(bt, "Simple text tooltip");
516    elm_object_tooltip_text_set(bt, "Simple text tooltip");
517    elm_box_pack_end(bx, bt);
518    evas_object_show(bt);
519 
520    bt = elm_button_add(win);
521    elm_object_text_set(bt, "Movement Freeze Tooltip, click to change");
522    elm_object_tooltip_text_set(bt, "Free");
523    evas_object_smart_callback_add(bt, "clicked", _tt_move_freeze, NULL);
524    elm_box_pack_end(bx, bt);
525    evas_object_show(bt);
526 
527    bt = elm_button_add(win);
528    elm_object_text_set(bt, "Orient Tooltip, click to change");
529    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_TOP_LEFT);
530    elm_object_tooltip_text_set(bt, "Top Left");
531    evas_object_smart_callback_add(bt, "clicked", _tt_orient_text_replace, NULL);
532    elm_box_pack_end(bx, bt);
533    evas_object_show(bt);
534 
535    bt = elm_button_add(win);
536    elm_object_text_set(bt, "Simple text tooltip, click to change");
537    elm_object_tooltip_text_set(bt, "Initial");
538    evas_object_smart_callback_add(bt, "clicked", _tt_text_replace, NULL);
539    elm_box_pack_end(bx, bt);
540    evas_object_show(bt);
541 
542    bt = elm_button_add(win);
543    elm_object_text_set(bt, "Simple text tooltip, click to start"
544                             " changed timed");
545    elm_object_tooltip_text_set(bt, "Initial");
546    evas_object_smart_callback_add(bt, "clicked", _tt_text_replace_timed,
547                                   NULL);
548    elm_box_pack_end(bx, bt);
549    evas_object_show(bt);
550    evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
551                                   NULL);
552 
553    /* Add no min size tooltip style */
554    elm_theme_extension_add(NULL, eina_slstr_printf("%s/objects/test_tooltip.edj", elm_app_data_dir_get()));
555 
556    bt = elm_button_add(win);
557    elm_object_text_set(bt, "Tooltip with no min size");
558    elm_object_tooltip_content_cb_set(bt, _no_min_tt_icon, (void *)123L, _tt_icon_del);
559    elm_object_tooltip_style_set(bt, "nomin");
560    elm_box_pack_end(bx, bt);
561    evas_object_show(bt);
562 
563    bt = elm_button_add(win);
564    elm_object_text_set(bt, "Icon tooltip, click to start changed timed");
565    elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
566    evas_object_smart_callback_add(bt, "clicked", _tt_icon_replace_timed,
567                                   NULL);
568    elm_box_pack_end(bx, bt);
569    evas_object_show(bt);
570    evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
571                                   NULL);
572 
573    bt = elm_button_add(win);
574    elm_object_text_set(bt, "Transparent Icon tooltip");
575    elm_object_tooltip_style_set(bt, "transparent");
576    elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
577    elm_box_pack_end(bx, bt);
578    evas_object_show(bt);
579 
580    bt = elm_button_add(win);
581    elm_object_text_set(bt, "Icon tooltip style, click to start changed"
582                             " timed");
583    elm_object_tooltip_content_cb_set(bt, _tt_icon, NULL, NULL);
584    evas_object_smart_callback_add(bt, "clicked", _tt_style_replace_timed,
585                                   NULL);
586    elm_box_pack_end(bx, bt);
587    evas_object_show(bt);
588    evas_object_event_callback_add(bt, EVAS_CALLBACK_DEL, _tt_timer_del,
589                                   NULL);
590 
591    bt = elm_button_add(win);
592    elm_object_text_set(bt, "Unlocked tooltip visibility");
593    elm_object_tooltip_text_set(bt, "This tooltip is unlocked visible,<br/>"
594                                    " click the button to lock!");
595    evas_object_smart_callback_add(bt, "clicked", _tt_visible_lock_toggle,
596                                   NULL);
597    elm_box_pack_end(bx, bt);
598    evas_object_show(bt);
599 
600    se = elm_entry_add(win);
601    elm_entry_scrollable_set(se, EINA_TRUE);
602    evas_object_size_hint_weight_set(se, EVAS_HINT_EXPAND, 0.0);
603    evas_object_size_hint_align_set(se, EVAS_HINT_FILL, 0.5);
604    elm_scroller_policy_set(se, ELM_SCROLLER_POLICY_OFF,
605                                            ELM_SCROLLER_POLICY_OFF);
606    elm_object_text_set(se, "Hello, some entry here!");
607    elm_object_tooltip_text_set(se, "Type something here!");
608    elm_entry_single_line_set(se, EINA_TRUE);
609    elm_box_pack_end(bx, se);
610    evas_object_show(se);
611 
612    lst = elm_list_add(win);
613    lit = elm_list_item_append(lst, "Hello", NULL, NULL, NULL, NULL);
614    elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
615    elm_object_item_tooltip_content_cb_set(lit, _tt_item_label, NULL, NULL);
616    lit = elm_list_item_append(lst, "Icon Tooltip", NULL, NULL, NULL, NULL);
617    elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon, NULL, NULL);
618    lit = elm_list_item_append(lst, "Big Icon Tooltip", NULL, NULL, NULL, NULL);
619    elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon2, NULL, NULL);
620    elm_object_item_tooltip_style_set(lit, "transparent");
621    elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
622    lit = elm_list_item_append(lst, "Insanely Big Icon Tooltip", NULL, NULL, NULL, NULL);
623    elm_object_item_tooltip_content_cb_set(lit, _tt_item_icon3, NULL, NULL);
624    elm_object_item_tooltip_style_set(lit, "transparent");
625    elm_object_item_tooltip_window_mode_set(lit, EINA_TRUE);
626    evas_object_size_hint_weight_set(lst, EVAS_HINT_EXPAND,
627                                     EVAS_HINT_EXPAND);
628    evas_object_size_hint_align_set(lst, EVAS_HINT_FILL, EVAS_HINT_FILL);
629    evas_object_size_hint_min_set(lst, 100, 100);
630    elm_list_go(lst);
631    elm_box_pack_end(bx, lst);
632    evas_object_show(lst);
633 
634    evas_object_resize(win, 320, 580);
635    evas_object_show(win);
636 }
637 
638 void
test_tooltip2(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)639 test_tooltip2(void *data       EINA_UNUSED,
640               Evas_Object *obj EINA_UNUSED,
641               void *event_info EINA_UNUSED)
642 {
643    Evas_Object *win, *bx, *grid, *gl;
644    Elm_Object_Item *glit1, *glit2, *glit3;
645    static Testitem ti[144];
646    int i, n;
647    char buf[PATH_MAX];
648    const char *img[9] =
649    {
650       "panel_01.jpg",
651       "plant_01.jpg",
652       "rock_01.jpg",
653       "rock_02.jpg",
654       "sky_01.jpg",
655       "sky_02.jpg",
656       "sky_03.jpg",
657       "sky_04.jpg",
658       "wood_01.jpg",
659    };
660 
661    win = elm_win_util_standard_add("tooltip2", "Tooltip 2");
662    elm_win_autodel_set(win, EINA_TRUE);
663 
664    bx = elm_box_add(win);
665    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
666    elm_win_resize_object_add(win, bx);
667    evas_object_show(bx);
668 
669    grid = elm_gengrid_add(win);
670    elm_gengrid_item_size_set(grid, 100, 100);
671    elm_gengrid_horizontal_set(grid, EINA_FALSE);
672    elm_gengrid_multi_select_set(grid, EINA_TRUE);
673    evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
674    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
675                                     EVAS_HINT_EXPAND);
676 
677    gic.item_style = "default";
678    gic.func.text_get = grdt_lbl_get;
679    gic.func.content_get = grdt_content_get;
680 
681    n = 0;
682    for (i = 0; i < 9; i++)
683      {
684         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(),
685                  img[n]);
686         n++;
687         ti[i].mode = i;
688         ti[i].path = eina_stringshare_add(buf);
689         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), NULL,
690                                              NULL);
691         if (n % 2)
692           elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing X");
693         else
694           elm_gengrid_item_tooltip_text_set(ti[i].item, "Testing Y");
695         if (!(i % 5))
696           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
697      }
698 
699    elm_box_pack_end(bx, grid);
700    evas_object_show(grid);
701 
702    gl = elm_genlist_add(win);
703    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
704    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND,
705                                     EVAS_HINT_EXPAND);
706 
707    itct.item_style = "default";
708    itct.func.text_get = gltt_text_get;
709 
710    glit1 = elm_genlist_item_append(gl, &itct, (void *)1, NULL,
711                                    ELM_GENLIST_ITEM_TREE, NULL, NULL);
712    glit2 = elm_genlist_item_append(gl, &itct, (void *)2, NULL,
713                                    ELM_GENLIST_ITEM_TREE, NULL, NULL);
714    glit3 = elm_genlist_item_append(gl, &itct, (void *)3, NULL,
715                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
716 
717    elm_genlist_item_tooltip_text_set(glit1, "Testing 1");
718    elm_genlist_item_tooltip_text_set(glit2, "Testing 2");
719    elm_genlist_item_tooltip_text_set(glit3, "Testing 3");
720 
721    evas_object_smart_callback_add(gl, "expand,request", gltt_exp_req, gl);
722    evas_object_smart_callback_add(gl, "contract,request", gltt_con_req,
723                                   gl);
724    evas_object_smart_callback_add(gl, "expanded", gltt_exp, gl);
725    evas_object_smart_callback_add(gl, "contracted", gltt_con, gl);
726 
727    elm_box_pack_end(bx, gl);
728    evas_object_show(gl);
729 
730    evas_object_resize(win, 320, 480);
731    evas_object_show(win);
732 }
733 
734 void
test_tooltip3(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)735 test_tooltip3(void *data       EINA_UNUSED,
736               Evas_Object *obj EINA_UNUSED,
737               void *event_info EINA_UNUSED)
738 {
739    Evas_Object *win, *bt, *rect;
740 
741    win = elm_win_util_standard_add("tooltip3", "Tooltip 3");
742    elm_win_autodel_set(win, EINA_TRUE);
743 
744    bt = elm_button_add(win);
745    elm_object_text_set(bt, "I have layer 200, below rect has layer 100.");
746    elm_object_tooltip_text_set(bt, "Can you see me?");
747    evas_object_resize(bt, 250, 30);
748    evas_object_move(bt, 25, 135);
749    evas_object_layer_set(bt, 200);
750    evas_object_show(bt);
751 
752    rect = evas_object_rectangle_add(evas_object_evas_get(bt));
753    evas_object_resize(rect, 150, 300);
754    evas_object_move(rect, 0, 0);
755    evas_object_show(rect);
756    evas_object_layer_set(rect, 100);
757 
758    evas_object_resize(win, 300, 300);
759    evas_object_show(win);
760 }
761 
762 void
test_tooltip4(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)763 test_tooltip4(void *data       EINA_UNUSED,
764               Evas_Object *obj EINA_UNUSED,
765               void *event_info EINA_UNUSED)
766 {
767    Evas_Object *win, *bt;
768 
769    win = elm_win_util_standard_add("tooltip4", "Tooltip 4");
770    elm_win_autodel_set(win, EINA_TRUE);
771    evas_object_resize(win, 300, 300);
772    evas_object_show(win);
773 
774    bt = elm_button_add(win);
775    elm_object_tooltip_text_set(bt, "Tooltip!!!!!!!!!!!!!!!!!!");
776    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_BOTTOM);
777    evas_object_resize(bt, 30, 30);
778    evas_object_move(bt, 5, 5);
779    evas_object_show(bt);
780 
781    bt = elm_button_add(win);
782    elm_object_tooltip_text_set(bt, "Tooltip!!!!!!!!!!!!!!!!!!");
783    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_BOTTOM);
784    evas_object_resize(bt, 30, 30);
785    evas_object_move(bt, 250, 5);
786    evas_object_show(bt);
787 
788    bt = elm_button_add(win);
789    elm_object_tooltip_text_set(bt, "Tooltip!!!!!!!!!!!!!!!!!!");
790    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_TOP);
791    evas_object_resize(bt, 30, 30);
792    evas_object_move(bt, 25, 265);
793    evas_object_show(bt);
794 
795    bt = elm_button_add(win);
796    elm_object_tooltip_text_set(bt, "Tooltip!!!!!!!!!!!!!!!!!!");
797    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_TOP);
798    evas_object_resize(bt, 30, 30);
799    evas_object_move(bt, 235, 265);
800    evas_object_show(bt);
801 
802    bt = elm_button_add(win);
803    elm_object_tooltip_content_cb_set(bt, _tt_icon, (void *)123L,
804                                      _tt_icon_del);
805    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_RIGHT);
806    evas_object_resize(bt, 30, 30);
807    evas_object_move(bt, 135, 5);
808    evas_object_show(bt);
809 
810    bt = elm_button_add(win);
811    elm_object_tooltip_content_cb_set(bt, _tt_icon, (void *)123L,
812                                      _tt_icon_del);
813    elm_object_tooltip_orient_set(bt, ELM_TOOLTIP_ORIENT_LEFT);
814    evas_object_resize(bt, 30, 30);
815    evas_object_move(bt, 135, 255);
816    evas_object_show(bt);
817 }
818