Merge branch 'intefl/svn_merge' of ssh://165.213.149.219:29418/slp/pkgs/e/elementary...
[framework/uifw/elementary.git] / src / bin / test_list.c
1 #include <Elementary.h>
2 #include "test.h"
3 #include <Elementary_Cursor.h>
4 #ifdef HAVE_CONFIG_H
5 # include "elementary_config.h"
6 #endif
7 #ifndef ELM_LIB_QUICKLAUNCH
8 struct _api_data
9 {
10    unsigned int state;  /* What state we are testing       */
11    void *list;
12 };
13 typedef struct _api_data api_data;
14
15 enum _api_state
16 {
17    ITEM_PREPEND,        /* 0 */
18    ITEM_INSERT_BEFORE,  /* 1 */
19    ITEM_INSERT_AFTER,   /* 2 */
20    ITEM_SEPARATOR_SET,  /* 3 */
21    LIST_ITEM_DEL,       /* 4 */
22    SCROLLER_POLICY_SET_ON,
23    SCROLLER_POLICY_SET_OFF, /* Back to AUTO next */
24    TOOLTIP_TEXT_SET,    /* 7 */
25    TOOLTIP_UNSET,       /* 8 */
26    ITEM_CURSOR_SET,     /* 9 */
27    ITEM_CURSOR_STYLE_SET,
28    DISABLED_SET,        /* 11 */
29    MODE_SET_COMPRESS,   /* 12 */
30    MODE_SET_LIMIT,      /* 13 */
31    MODE_SET_EXPAND,     /* 14 */
32    HORIZONTAL_SET,      /* 15 */
33    BOUNCE_SET,          /* 16 */
34    LIST_CLEAR,          /* 17 */
35    API_STATE_LAST
36 };
37 typedef enum _api_state api_state;
38
39 static void
40 set_api_state(api_data *api)
41 {
42 /** HOW TO TEST ************************
43 0 ITEM PREPEND
44 Scroll to end
45 1 INSERT BEFORE
46 Scroll to end
47 2 INSERT AFTER
48 3 INSERT SEPERATOR
49 Scroll to end
50 4 ITEM DEL
51 5 POLICY ON, BOUNCE_SET(TRUE, TRUE)
52 6 POLICY OFF
53 Scroll to end
54 7 TOOLTIP last-item
55 8 Cancel tootip
56 9 Curosr set on last item
57 10 Cursor style set last item
58 11 DISABLE last item
59 12 MODE COMPRESS
60 13 MODE LIMIT
61 14 MODE EXPAND
62 15 HORIZ SET
63 16 VERT MODE, BOUNCE(TRUE, FALSE) try to bounce on Y-axis
64 17 List clear
65 *** HOW TO TEST ***********************/
66    Evas_Object *li = api->list;
67
68    switch(api->state)
69      { /* Put all api-changes under switch */
70       case ITEM_PREPEND: /* 0 */
71            {
72               const Eina_List *items = elm_list_items_get(li);
73               elm_list_item_prepend(li, "PREPEND", NULL, NULL, NULL, NULL);
74               elm_list_go(li);
75               elm_list_item_bring_in(eina_list_nth(items, 0));
76            }
77          break;
78
79       case ITEM_INSERT_BEFORE: /* 1 */
80            {
81               const Eina_List *items = elm_list_items_get(li);
82               if(eina_list_count(items))
83                 {
84                   elm_list_item_insert_before(li,
85                         eina_list_nth(items, eina_list_count(items)-1),
86                         "1-before-last", NULL, NULL, NULL, NULL);
87                   elm_list_go(li);
88                   elm_list_item_bring_in(eina_list_data_get(eina_list_last(items)));
89                 }
90            }
91          break;
92
93       case ITEM_INSERT_AFTER: /* 2 */
94            {
95               const Eina_List *items = elm_list_items_get(li);
96               if(eina_list_count(items))
97                 {
98                   elm_list_item_insert_after(li,
99                         eina_list_nth(items, eina_list_count(items)-2),
100                         "insert-after", NULL, NULL, NULL, NULL);
101                   elm_list_go(li);
102                   elm_list_item_bring_in(eina_list_data_get(eina_list_last(items)));
103                 }
104            }
105          break;
106
107       case ITEM_SEPARATOR_SET: /* 3 */
108            {
109               const Eina_List *items = elm_list_items_get(li);
110               if(eina_list_count(items))
111                 {
112                   elm_list_item_separator_set(eina_list_nth(items, eina_list_count(items)-3), EINA_TRUE);
113                   elm_list_item_bring_in(eina_list_nth(items, eina_list_count(items)-3));
114                   elm_list_go(li);
115                 }
116            }
117          break;
118
119       case LIST_ITEM_DEL: /* 4 */
120            {
121               const Eina_List *items = elm_list_items_get(li);
122               if(eina_list_count(items))
123                 {
124                   elm_object_item_del(eina_list_data_get(eina_list_last(items)));
125                 }
126            }
127          break;
128
129       case SCROLLER_POLICY_SET_ON: /* 5 */
130          elm_list_bounce_set(li, EINA_TRUE, EINA_TRUE);
131          elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
132          break;
133
134       case SCROLLER_POLICY_SET_OFF: /* Back to AUTO next (6) */
135          elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
136          break;
137
138       case TOOLTIP_TEXT_SET: /* 7 */
139            {
140               const Eina_List *items = elm_list_items_get(li);
141               if(eina_list_count(items))
142                 {
143                   elm_object_item_tooltip_text_set(eina_list_data_get(eina_list_last(items)), "Tooltip set from API");
144                 }
145               elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
146            }
147          break;
148
149       case TOOLTIP_UNSET: /* 8 */
150            {
151               const Eina_List *items = elm_list_items_get(li);
152               if(eina_list_count(items))
153                 {
154                   elm_object_item_tooltip_unset(eina_list_data_get(eina_list_last(items)));
155                 }
156            }
157          break;
158
159       case ITEM_CURSOR_SET: /* 9 */
160            {
161               const Eina_List *items = elm_list_items_get(li);
162               if(eina_list_count(items))
163                 {
164                   elm_object_item_cursor_set(eina_list_data_get(eina_list_last(items)), ELM_CURSOR_HAND2);
165                 }
166            }
167          break;
168
169       case ITEM_CURSOR_STYLE_SET: /* 10 */
170            {
171               const Eina_List *items = elm_list_items_get(li);
172               if(eina_list_count(items))
173                 {
174                   elm_object_item_cursor_style_set(eina_list_data_get(eina_list_last(items)), "transparent");
175                 }
176            }
177          break;
178
179       case DISABLED_SET: /* 11 */
180            {
181               const Eina_List *items = elm_list_items_get(li);
182               if(eina_list_count(items))
183                 {
184                   elm_object_item_disabled_set(eina_list_data_get(eina_list_last(items)), EINA_TRUE);
185                 }
186            }
187          break;
188
189       case MODE_SET_COMPRESS: /* 12 */
190          elm_list_mode_set(li, ELM_LIST_COMPRESS);
191          break;
192
193       case MODE_SET_LIMIT: /* 13 */
194          elm_list_mode_set(li, ELM_LIST_LIMIT);
195          break;
196
197       case MODE_SET_EXPAND: /* 14 */
198          elm_list_mode_set(li, ELM_LIST_EXPAND);
199          break;
200
201       case HORIZONTAL_SET: /* 15 */
202          elm_list_mode_set(li, ELM_LIST_SCROLL); /* return to default mode */
203          elm_list_horizontal_set(li, EINA_TRUE);
204          break;
205
206       case BOUNCE_SET: /* 16 */
207          elm_list_horizontal_set(li, EINA_FALSE);
208          elm_list_bounce_set(li, EINA_TRUE, EINA_FALSE);
209          break;
210
211       case LIST_CLEAR: /* 17 */
212          elm_list_clear(li);
213          break;
214
215       case API_STATE_LAST:
216          break;
217
218       default:
219          return;
220      }
221 }
222
223 static void
224 _api_bt_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__)
225 {  /* Will add here a SWITCH command containing code to modify test-object */
226    /* in accordance a->state value. */
227    api_data *a = data;
228    char str[128];
229
230    printf("clicked event on API Button: api_state=<%d>\n", a->state);
231    set_api_state(a);
232    a->state++;
233    sprintf(str, "Next API function (%u)", a->state);
234    elm_object_text_set(obj, str);
235    elm_object_disabled_set(obj, a->state == API_STATE_LAST);
236 }
237
238 static void
239 my_show_it(void        *data,
240            Evas_Object *obj __UNUSED__,
241            void        *event_info __UNUSED__)
242 {
243    elm_list_item_show(data);
244 }
245
246 static void
247 scroll_top(void        *data __UNUSED__,
248            Evas_Object *obj __UNUSED__,
249            void        *event_info __UNUSED__)
250 {
251    printf("Top edge!\n");
252 }
253
254 static void
255 scroll_bottom(void        *data __UNUSED__,
256               Evas_Object *obj __UNUSED__,
257               void        *event_info __UNUSED__)
258 {
259    printf("Bottom edge!\n");
260 }
261
262 static void
263 scroll_left(void        *data __UNUSED__,
264             Evas_Object *obj __UNUSED__,
265             void        *event_info __UNUSED__)
266 {
267    printf("Left edge!\n");
268 }
269
270 static void
271 scroll_right(void        *data __UNUSED__,
272              Evas_Object *obj __UNUSED__,
273              void        *event_info __UNUSED__)
274 {
275    printf("Right edge!\n");
276 }
277
278 static void
279 _cleanup_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
280 {
281    free(data);
282 }
283
284 void
285 test_list(void        *data __UNUSED__,
286           Evas_Object *obj __UNUSED__,
287           void        *event_info __UNUSED__)
288 {
289    Evas_Object *win, *bg, *li, *ic, *ic2, *bx, *tb2, *bt, *bxx;
290    char buf[PATH_MAX];
291    Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4, *list_it5;
292    api_data *api = calloc(1, sizeof(api_data));
293
294    win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
295    elm_win_title_set(win, "List");
296    elm_win_autodel_set(win, EINA_TRUE);
297    evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
298
299    bg = elm_bg_add(win);
300    elm_win_resize_object_add(win, bg);
301    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
302    evas_object_show(bg);
303
304    bxx = elm_box_add(win);
305    elm_win_resize_object_add(win, bxx);
306    evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307    evas_object_show(bxx);
308
309    li = elm_list_add(win);
310    elm_list_mode_set(li, ELM_LIST_LIMIT);
311    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
312    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
313    api->list = li;
314
315    bt = elm_button_add(win);
316    elm_object_text_set(bt, "Next API function");
317    evas_object_smart_callback_add(bt, "clicked", _api_bt_clicked, (void *) api);
318    elm_box_pack_end(bxx, bt);
319    elm_object_disabled_set(bt, api->state == API_STATE_LAST);
320    evas_object_show(bt);
321
322    elm_box_pack_end(bxx, li);
323
324    ic = elm_icon_add(win);
325    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
326    elm_icon_file_set(ic, buf, NULL);
327    elm_icon_resizable_set(ic, 1, 1);
328    list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
329    ic = elm_icon_add(win);
330    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
331    elm_icon_resizable_set(ic, 0, 0);
332    elm_icon_file_set(ic, buf, NULL);
333    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
334    ic = elm_icon_add(win);
335    elm_icon_standard_set(ic, "edit");
336    elm_icon_resizable_set(ic, 0, 0);
337    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
338
339    ic = elm_icon_add(win);
340    elm_icon_standard_set(ic, "delete");
341    elm_icon_resizable_set(ic, 0, 0);
342    ic2 = elm_icon_add(win);
343    elm_icon_standard_set(ic2, "clock");
344    elm_icon_resizable_set(ic2, 0, 0);
345    list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
346
347    bx = elm_box_add(win);
348    elm_box_horizontal_set(bx, EINA_TRUE);
349
350    ic = elm_icon_add(win);
351    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
352    elm_icon_file_set(ic, buf, NULL);
353    elm_icon_resizable_set(ic, 0, 0);
354    evas_object_size_hint_align_set(ic, 0.5, 0.5);
355    elm_box_pack_end(bx, ic);
356    evas_object_show(ic);
357
358    ic = elm_icon_add(win);
359    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
360    elm_icon_file_set(ic, buf, NULL);
361    elm_icon_resizable_set(ic, 0, 0);
362    evas_object_size_hint_align_set(ic, 0.5, 0.0);
363    elm_box_pack_end(bx, ic);
364    evas_object_show(ic);
365
366    ic = elm_icon_add(win);
367    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
368    elm_icon_file_set(ic, buf, NULL);
369    elm_icon_resizable_set(ic, 0, 0);
370    evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
371    elm_box_pack_end(bx, ic);
372    evas_object_show(ic);
373    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
374
375    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
376    list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
377    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
378    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
379    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
380    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
381    list_it4 = elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
382    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
383    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
384    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
385    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
386    elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
387    list_it5 = elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
388
389    elm_list_go(li);
390
391    evas_object_show(li);
392
393    tb2 = elm_table_add(win);
394    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
395    elm_win_resize_object_add(win, tb2);
396
397    bt = elm_button_add(win);
398    elm_object_text_set(bt, "Hello");
399    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
400    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
401    evas_object_size_hint_align_set(bt, 0.9, 0.5);
402    elm_table_pack(tb2, bt, 0, 0, 1, 1);
403    evas_object_show(bt);
404
405    bt = elm_button_add(win);
406    elm_object_text_set(bt, "How");
407    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
408    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
409    evas_object_size_hint_align_set(bt, 0.9, 0.5);
410    elm_table_pack(tb2, bt, 0, 1, 1, 1);
411    evas_object_show(bt);
412
413    bt = elm_button_add(win);
414    elm_object_text_set(bt, "doing");
415    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
416    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
417    evas_object_size_hint_align_set(bt, 0.9, 0.5);
418    elm_table_pack(tb2, bt, 0, 2, 1, 1);
419    evas_object_show(bt);
420
421    bt = elm_button_add(win);
422    elm_object_text_set(bt, "Here");
423    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
424    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
425    evas_object_size_hint_align_set(bt, 0.9, 0.5);
426    elm_table_pack(tb2, bt, 0, 3, 1, 1);
427    evas_object_show(bt);
428
429    bt = elm_button_add(win);
430    elm_object_text_set(bt, "Maybe this...");
431    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it5);
432    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
433    evas_object_size_hint_align_set(bt, 0.9, 0.5);
434    elm_table_pack(tb2, bt, 0, 4, 1, 1);
435    evas_object_show(bt);
436
437    evas_object_show(tb2);
438
439    evas_object_resize(win, 320, 300);
440    evas_object_show(win);
441
442    evas_object_smart_callback_add(li, "scroll,edge,top", scroll_top, NULL);
443    evas_object_smart_callback_add(li, "scroll,edge,bottom", scroll_bottom, NULL);
444    evas_object_smart_callback_add(li, "scroll,edge,left", scroll_left, NULL);
445    evas_object_smart_callback_add(li, "scroll,edge,right", scroll_right, NULL);
446 }
447
448 void
449 test_list_horizontal(void        *data __UNUSED__,
450                      Evas_Object *obj __UNUSED__,
451                      void        *event_info __UNUSED__)
452 {
453    Evas_Object *win, *bg, *li, *ic, *ic2, *bx, *tb2, *bt;
454    char buf[PATH_MAX];
455    Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4;
456
457    win = elm_win_add(NULL, "list-horizontal", ELM_WIN_BASIC);
458    elm_win_title_set(win, "List Horizontal");
459    elm_win_autodel_set(win, EINA_TRUE);
460
461    bg = elm_bg_add(win);
462    elm_win_resize_object_add(win, bg);
463    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
464    evas_object_show(bg);
465
466    li = elm_list_add(win);
467    elm_list_horizontal_set(li, EINA_TRUE);
468    elm_list_mode_set(li, ELM_LIST_LIMIT);
469    elm_win_resize_object_add(win, li);
470    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
471
472    ic = elm_icon_add(win);
473    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
474    elm_icon_file_set(ic, buf, NULL);
475    elm_icon_resizable_set(ic, 1, 1);
476    list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
477    ic = elm_icon_add(win);
478    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
479    elm_icon_resizable_set(ic, 0, 0);
480    elm_icon_file_set(ic, buf, NULL);
481    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
482    ic = elm_icon_add(win);
483    elm_icon_standard_set(ic, "edit");
484    elm_icon_resizable_set(ic, 0, 0);
485    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
486
487    ic = elm_icon_add(win);
488    elm_icon_standard_set(ic, "delete");
489    elm_icon_resizable_set(ic, 0, 0);
490    ic2 = elm_icon_add(win);
491    elm_icon_standard_set(ic2, "clock");
492    elm_icon_resizable_set(ic2, 0, 0);
493    list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
494
495    bx = elm_box_add(win);
496
497    ic = elm_icon_add(win);
498    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
499    elm_icon_file_set(ic, buf, NULL);
500    elm_icon_resizable_set(ic, 0, 0);
501    evas_object_size_hint_align_set(ic, 0.5, 0.5);
502    elm_box_pack_end(bx, ic);
503    evas_object_show(ic);
504
505    ic = elm_icon_add(win);
506    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
507    elm_icon_file_set(ic, buf, NULL);
508    elm_icon_resizable_set(ic, 0, 0);
509    evas_object_size_hint_align_set(ic, 0.5, 0.0);
510    elm_box_pack_end(bx, ic);
511    evas_object_show(ic);
512
513    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
514
515    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
516    list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
517    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
518    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
519    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
520    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
521
522    list_it4 = elm_list_item_append(li, "And", NULL, NULL, NULL, NULL);
523    elm_list_item_append(li, "here", NULL, NULL, NULL, NULL);
524    elm_list_item_append(li, "we", NULL, NULL, NULL, NULL);
525    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
526    elm_list_item_append(li, "done", NULL, NULL, NULL, NULL);
527    elm_list_item_append(li, "with", NULL, NULL, NULL, NULL);
528    elm_list_item_append(li, "items.", NULL, NULL, NULL, NULL);
529
530    elm_list_go(li);
531
532    evas_object_show(li);
533
534    tb2 = elm_table_add(win);
535    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
536    elm_win_resize_object_add(win, tb2);
537
538    bt = elm_button_add(win);
539    elm_object_text_set(bt, "Hello");
540    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
541    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
542    evas_object_size_hint_align_set(bt, 0.5, 0.9);
543    elm_table_pack(tb2, bt, 0, 0, 1, 1);
544    evas_object_show(bt);
545
546    bt = elm_button_add(win);
547    elm_object_text_set(bt, "How");
548    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
549    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
550    evas_object_size_hint_align_set(bt, 0.5, 0.9);
551    elm_table_pack(tb2, bt, 1, 0, 1, 1);
552    evas_object_show(bt);
553
554    bt = elm_button_add(win);
555    elm_object_text_set(bt, "doing");
556    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
557    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
558    evas_object_size_hint_align_set(bt, 0.5, 0.9);
559    elm_table_pack(tb2, bt, 2, 0, 1, 1);
560    evas_object_show(bt);
561
562    bt = elm_button_add(win);
563    elm_object_text_set(bt, "And");
564    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
565    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
566    evas_object_size_hint_align_set(bt, 0.5, 0.9);
567    elm_table_pack(tb2, bt, 3, 0, 1, 1);
568    evas_object_show(bt);
569
570    evas_object_show(tb2);
571
572    evas_object_resize(win, 320, 300);
573    evas_object_show(win);
574 }
575
576 /***********/
577
578 static void
579 my_li2_clear(void        *data,
580              Evas_Object *obj __UNUSED__,
581              void        *event_info __UNUSED__)
582 {
583    elm_list_clear(data);
584 }
585
586 static void
587 my_li2_sel(void        *data __UNUSED__,
588            Evas_Object *obj,
589            void        *event_info __UNUSED__)
590 {
591    Elm_Object_Item *list_it = elm_list_selected_item_get(obj);
592    elm_list_item_selected_set(list_it, 0);
593 }
594
595 void
596 test_list2(void        *data __UNUSED__,
597            Evas_Object *obj __UNUSED__,
598            void        *event_info __UNUSED__)
599 {
600    Evas_Object *win, *bg, *li, *ic, *ic2, *bx, *bx2, *bt;
601    char buf[PATH_MAX];
602    Elm_Object_Item *list_it;
603
604    win = elm_win_add(NULL, "list2", ELM_WIN_BASIC);
605    elm_win_title_set(win, "List 2");
606    elm_win_autodel_set(win, EINA_TRUE);
607
608    bg = elm_bg_add(win);
609    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
610    elm_bg_file_set(bg, buf, NULL);
611    elm_win_resize_object_add(win, bg);
612    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
613    evas_object_show(bg);
614
615    bx = elm_box_add(win);
616    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
617    elm_win_resize_object_add(win, bx);
618    evas_object_show(bx);
619
620    li = elm_list_add(win);
621    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
622    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
623    elm_list_mode_set(li, ELM_LIST_LIMIT);
624 //   elm_list_multi_select_set(li, 1);
625
626    ic = elm_icon_add(win);
627    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
628    elm_icon_file_set(ic, buf, NULL);
629    list_it = elm_list_item_append(li, "Hello", ic, NULL, my_li2_sel, NULL);
630    elm_list_item_selected_set(list_it, EINA_TRUE);
631    ic = elm_icon_add(win);
632    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
633    elm_icon_resizable_set(ic, 0, 0);
634    elm_icon_file_set(ic, buf, NULL);
635    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
636    ic = elm_icon_add(win);
637    elm_icon_standard_set(ic, "edit");
638    elm_icon_resizable_set(ic, 0, 0);
639    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
640
641    ic = elm_icon_add(win);
642    elm_icon_standard_set(ic, "delete");
643    elm_icon_resizable_set(ic, 0, 0);
644    ic2 = elm_icon_add(win);
645    elm_icon_standard_set(ic2, "clock");
646    elm_icon_resizable_set(ic2, 0, 0);
647    elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
648
649    bx2 = elm_box_add(win);
650    elm_box_horizontal_set(bx2, EINA_TRUE);
651
652    ic = elm_icon_add(win);
653    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
654    elm_icon_file_set(ic, buf, NULL);
655    elm_icon_resizable_set(ic, 0, 0);
656    evas_object_size_hint_align_set(ic, 0.5, 0.5);
657    elm_box_pack_end(bx2, ic);
658    evas_object_show(ic);
659
660    ic = elm_icon_add(win);
661    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
662    elm_icon_file_set(ic, buf, NULL);
663    elm_icon_resizable_set(ic, 0, 0);
664    evas_object_size_hint_align_set(ic, 0.5, 0.0);
665    elm_box_pack_end(bx2, ic);
666    evas_object_show(ic);
667    elm_list_item_append(li, "are", bx2, NULL, NULL, NULL);
668
669    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
670    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
671    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
672    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
673    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
674    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
675    elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
676    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
677    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
678    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
679    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
680    elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL);
681
682    elm_list_go(li);
683
684    elm_box_pack_end(bx, li);
685    evas_object_show(li);
686
687    bx2 = elm_box_add(win);
688    elm_box_horizontal_set(bx2, EINA_TRUE);
689    elm_box_homogeneous_set(bx2, EINA_TRUE);
690    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
691    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
692
693    bt = elm_button_add(win);
694    elm_object_text_set(bt, "Clear");
695    evas_object_smart_callback_add(bt, "clicked", my_li2_clear, li);
696    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
697    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
698    elm_box_pack_end(bx2, bt);
699    evas_object_show(bt);
700
701    elm_box_pack_end(bx, bx2);
702    evas_object_show(bx2);
703
704    evas_object_resize(win, 320, 300);
705    evas_object_show(win);
706 }
707
708 /***********/
709
710 static void
711 _bt_clicked(void        *data __UNUSED__,
712             Evas_Object *obj __UNUSED__,
713             void        *event_info __UNUSED__)
714 {
715    printf("button was clicked\n");
716 }
717
718 static void
719 _it_clicked(void        *data __UNUSED__,
720             Evas_Object *obj __UNUSED__,
721             void        *event_info __UNUSED__)
722 {
723    printf("item was clicked\n");
724 }
725
726 void
727 test_list3(void        *data __UNUSED__,
728            Evas_Object *obj __UNUSED__,
729            void        *event_info __UNUSED__)
730 {
731    Evas_Object *win, *bg, *li, *ic, *ic2, *bx;
732    char buf[PATH_MAX];
733
734    win = elm_win_add(NULL, "list3", ELM_WIN_BASIC);
735    elm_win_title_set(win, "List 3");
736    elm_win_autodel_set(win, EINA_TRUE);
737
738    bg = elm_bg_add(win);
739    elm_win_resize_object_add(win, bg);
740    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
741    evas_object_show(bg);
742
743    li = elm_list_add(win);
744    elm_win_resize_object_add(win, li);
745    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
746    elm_list_mode_set(li, ELM_LIST_COMPRESS);
747
748    ic = elm_icon_add(win);
749    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
750    elm_icon_resizable_set(ic, 0, 0);
751    elm_icon_file_set(ic, buf, NULL);
752    ic2 = elm_button_add(win);
753    elm_object_text_set(ic2, "Click me");
754    evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
755    evas_object_propagate_events_set(ic2, 0);
756    elm_list_item_append(li, "Hello", ic, ic2, _it_clicked, NULL);
757
758    ic = elm_icon_add(win);
759    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
760    elm_icon_resizable_set(ic, 0, 0);
761    elm_icon_file_set(ic, buf, NULL);
762    ic2 = elm_button_add(win);
763    elm_object_text_set(ic2, "Click me");
764    evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
765    elm_list_item_append(li, "world", ic, ic2, _it_clicked, NULL);
766
767    ic = elm_icon_add(win);
768    elm_icon_standard_set(ic, "edit");
769    elm_icon_resizable_set(ic, 0, 0);
770    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
771
772    ic = elm_icon_add(win);
773    elm_icon_standard_set(ic, "delete");
774    elm_icon_resizable_set(ic, 0, 0);
775    ic2 = elm_icon_add(win);
776    elm_icon_standard_set(ic2, "clock");
777    elm_icon_resizable_set(ic2, 0, 0);
778    elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
779
780    bx = elm_box_add(win);
781    elm_box_horizontal_set(bx, EINA_TRUE);
782
783    ic = elm_icon_add(win);
784    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
785    elm_icon_file_set(ic, buf, NULL);
786    elm_icon_resizable_set(ic, 0, 0);
787    evas_object_size_hint_align_set(ic, 0.5, 0.5);
788    elm_box_pack_end(bx, ic);
789    evas_object_show(ic);
790
791    ic = elm_icon_add(win);
792    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
793    elm_icon_file_set(ic, buf, NULL);
794    elm_icon_resizable_set(ic, 0, 0);
795    evas_object_size_hint_align_set(ic, 0.5, 0.0);
796    elm_box_pack_end(bx, ic);
797    evas_object_show(ic);
798
799    ic = elm_icon_add(win);
800    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
801    elm_icon_file_set(ic, buf, NULL);
802    elm_icon_resizable_set(ic, 0, 0);
803    evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
804    elm_box_pack_end(bx, ic);
805    evas_object_show(ic);
806
807    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
808    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
809    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
810    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
811    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
812    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
813    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
814    elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
815    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
816    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
817    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
818    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
819    elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
820    elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
821
822    elm_list_go(li);
823
824    evas_object_show(li);
825
826    evas_object_resize(win, 320, 300);
827    evas_object_show(win);
828 }
829
830 ///////////////////////////////////////////////////////////////////////////////////////
831
832 struct Pginfo
833 {
834    Evas_Object *naviframe, *win;
835 };
836
837 static void
838 test_list4_back_cb(void        *data,
839                    Evas_Object *obj __UNUSED__,
840                    void        *event_info __UNUSED__)
841 {
842    struct Pginfo *info = data;
843    if (!info) return;
844
845    elm_naviframe_item_pop(info->naviframe);
846 }
847
848 static void
849 test_list4_swipe(void        *data,
850                  Evas_Object *obj __UNUSED__,
851                  void        *event_info)
852 {
853    Evas_Object *box, *entry, *button;
854    struct Pginfo *info = data;
855    char *item_data;
856    if ((!event_info) || (!data)) return;
857
858    item_data = elm_object_item_data_get(event_info);
859
860    box = elm_box_add(info->win);
861    elm_box_horizontal_set(box, EINA_FALSE);
862    elm_box_homogeneous_set(box, EINA_FALSE);
863    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
864    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
865    evas_object_show(box);
866
867    entry = elm_entry_add(info->win);
868    elm_entry_scrollable_set(entry, EINA_TRUE);
869    elm_entry_editable_set(entry, EINA_FALSE);
870    elm_object_text_set(entry, item_data);
871    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
872    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
873    evas_object_show(entry);
874
875    button = elm_button_add(info->win);
876    elm_object_text_set(button, "back");
877    evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
878    evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
879    evas_object_smart_callback_add(button, "clicked", test_list4_back_cb, info);
880    evas_object_show(button);
881
882    elm_box_pack_start(box, entry);
883    elm_box_pack_end(box, button);
884
885    elm_naviframe_item_simple_push(info->naviframe, box);
886 }
887
888 void
889 test_list4(void        *data __UNUSED__,
890            Evas_Object *obj __UNUSED__,
891            void        *event_info __UNUSED__)
892 {
893    Evas_Object *win, *bg, *li, *ic, *ic2, *naviframe;
894    static struct Pginfo info = {NULL, NULL};
895    char buf[PATH_MAX];
896
897    win = elm_win_add(NULL, "list4", ELM_WIN_BASIC);
898    elm_win_title_set(win, "List 4");
899    elm_win_autodel_set(win, EINA_TRUE);
900    info.win = win;
901
902    bg = elm_bg_add(win);
903    elm_win_resize_object_add(win, bg);
904    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
905    evas_object_show(bg);
906
907    naviframe = elm_naviframe_add(win);
908    elm_win_resize_object_add(win, naviframe);
909    evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
910    evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
911    evas_object_show(naviframe);
912    info.naviframe = naviframe;
913
914    li = elm_list_add(win);
915    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
916    elm_list_mode_set(li, ELM_LIST_COMPRESS);
917    evas_object_smart_callback_add(li, "swipe", test_list4_swipe, &info);
918    elm_naviframe_item_simple_push(naviframe, li);
919
920    static char pf_data[] = "Pink Floyd were formed in 1965, and originally consisted of university"                       \
921                            "students Roger Waters, Nick Mason, Richard Wright, and Syd Barrett. The group were a popular" \
922                            "fixture on London's underground music scene, and under Barrett's leadership released two "    \
923                            "charting singles, \"Arnold Layne\" and \"See Emily Play\", and a successful debut album, "    \
924                            "ThePiper at the Gates of Dawn. In 1968, guitarist and singer David Gilmour joined the "       \
925                            "line-up. Barrett was soon removed, due to his increasingly erratic behaviour. Following "     \
926                            "Barrett's departure, bass player and singer Roger Waters became the band's lyricist and "     \
927                            "conceptual leader, with Gilmour assuming lead guitar and much of the vocals. With this "      \
928                            "line-up, Floyd went on to achieve worldwide critical and commercial success with the "        \
929                            "conceptalbums The Dark Side of the Moon, Wish You Were Here, Animals, and The Wall.";
930    ic = elm_icon_add(win);
931    snprintf(buf, sizeof(buf), "%s/images/mystrale.jpg", elm_app_data_dir_get());
932    elm_icon_resizable_set(ic, 0, 0);
933    elm_icon_file_set(ic, buf, NULL);
934    elm_list_item_append(li, "Pink Floyd", ic, NULL, NULL, &pf_data);
935
936    static char ds_data[] = "Dire Straits were a British rock band, formed by Mark Knopfler "                          \
937                            "(lead vocals and lead guitar), his younger brother David Knopfler (rhythm guitar and "    \
938                            "backing vocals), John Illsley (bass guitar and backing vocals), and Pick Withers (drums " \
939                            "and percussion), and managed by Ed Bicknell, active between 1977 and 1995. Although the " \
940                            "band was formed in an era when punk rock was at the forefront, Dire Straits played a more "
941                            "bluesy style, albeit with a stripped-down sound that appealed to audiences weary of the "   \
942                            "overproduced stadium rock of the 1970s.[citation needed] In their early days, Mark and "    \
943                            "David requested that pub owners turn down their sound so that patrons could converse "      \
944                            "while the band played, an indication of their unassuming demeanor. Despite this oddly "     \
945                            "self-effacing approach to rock and roll, Dire Straits soon became hugely successful, with " \
946                            "their first album going multi-platinum globally.";
947    ic = elm_icon_add(win);
948    snprintf(buf, sizeof(buf), "%s/images/mystrale_2.jpg", elm_app_data_dir_get());
949    elm_icon_resizable_set(ic, 0, 0);
950    elm_icon_file_set(ic, buf, NULL);
951    elm_list_item_append(li, "Dire Straits", ic, NULL, NULL, &ds_data);
952
953    static char uh_data[] = "Uriah Heep are an English hard rock band. The band released several "                       \
954                            "commercially successful albums in the 1970s such as Uriah Heep Live (1973), but their "     \
955                            "audience declined by the 1980s, to the point where they became essentially a cult band in " \
956                            "the United States and United Kingdom. Uriah Heep maintain a significant following in "      \
957                            "Germany, the Netherlands, Scandinavia, the Balkans, Japan and Russia, where they still "    \
958                            "perform at stadium-sized venues.";
959    ic = elm_icon_add(win);
960    snprintf(buf, sizeof(buf), "%s/images/icon_17.png", elm_app_data_dir_get());
961    elm_icon_resizable_set(ic, 1, 1);
962    elm_icon_file_set(ic, buf, NULL);
963    elm_list_item_append(li, "Uriah Heep", ic, NULL, NULL, &uh_data);
964
965    static char r_data[] = "Rush is a Canadian rock band formed in August 1968, in the Willowdale "                       \
966                           "neighbourhood of Toronto, Ontario. The band is composed of bassist, keyboardist, and lead "   \
967                           "vocalist Geddy Lee, guitarist Alex Lifeson, and drummer and lyricist Neil Peart. The band "   \
968                           "and its membership went through a number of re-configurations between 1968 and 1974, "        \
969                           "achieving their current form when Peart replaced original drummer John Rutsey in July 1974, " \
970                           "two weeks before the group's first United States tour.";
971    ic = elm_icon_add(win);
972    snprintf(buf, sizeof(buf), "%s/images/icon_21.png", elm_app_data_dir_get());
973    elm_icon_resizable_set(ic, 0, 0);
974    elm_icon_file_set(ic, buf, NULL);
975    ic2 = elm_icon_add(win);
976    elm_icon_standard_set(ic2, "clock");
977    elm_icon_resizable_set(ic2, 0, 0);
978    elm_list_item_append(li, "Rush", ic, ic2, NULL, &r_data);
979
980    elm_list_go(li);
981
982    evas_object_show(li);
983    evas_object_resize(win, 320, 300);
984    evas_object_show(win);
985 }
986
987 /////////////////////////////////////////////////////////////////////////////////////////
988 struct list5_data_cb
989 {
990    Evas_Object *win, *list;
991 };
992
993 static void
994 test_list5_item_del(void        *data,
995                     Evas_Object *obj __UNUSED__,
996                     void        *event_info __UNUSED__)
997 {
998    elm_object_item_del(data);
999 }
1000
1001 static void
1002 test_list5_swipe(void        *data __UNUSED__,
1003                  Evas_Object *obj __UNUSED__,
1004                  void        *event_info)
1005 {
1006    Evas_Object *button;
1007    struct list5_data_cb *info = elm_object_item_data_get(event_info);
1008
1009    if (elm_object_item_part_content_get(event_info, "end")) return;
1010
1011    button = elm_button_add(info->win);
1012    elm_object_text_set(button, "delete");
1013    evas_object_propagate_events_set(button, 0);
1014    evas_object_smart_callback_add(button, "clicked", test_list5_item_del,
1015                                   event_info);
1016    elm_object_item_part_content_set(event_info, "end", button);
1017 }
1018
1019 void
1020 test_list5(void        *data __UNUSED__,
1021            Evas_Object *obj __UNUSED__,
1022            void        *event_info __UNUSED__)
1023 {
1024    Evas_Object *win, *bg, *li;
1025    static struct list5_data_cb info;
1026
1027    win = elm_win_add(NULL, "list5", ELM_WIN_BASIC);
1028    elm_win_title_set(win, "List 5");
1029    elm_win_autodel_set(win, EINA_TRUE);
1030    info.win = win;
1031
1032    bg = elm_bg_add(win);
1033    elm_win_resize_object_add(win, bg);
1034    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1035    evas_object_show(bg);
1036
1037    li = elm_list_add(win);
1038    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1039    elm_list_mode_set(li, ELM_LIST_COMPRESS);
1040    evas_object_smart_callback_add(li, "swipe", test_list5_swipe, NULL);
1041    elm_win_resize_object_add(win, li);
1042    evas_object_show(li);
1043    info.list = li;
1044
1045    elm_list_item_append(li, "Network", NULL, NULL, NULL, &info);
1046    elm_list_item_append(li, "Audio", NULL, NULL, NULL, &info);
1047
1048    elm_list_go(li);
1049    evas_object_resize(win, 320, 300);
1050    evas_object_show(win);
1051 }
1052
1053 #endif