list: Add item loop feature
[platform/upstream/elementary.git] / src / bin / test_list.c
1 #include "test.h"
2 #include <Elementary_Cursor.h>
3 #ifdef HAVE_CONFIG_H
4 # include "elementary_config.h"
5 #endif
6 #include <Elementary.h>
7
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_scroller_bounce_set(li, EINA_TRUE, EINA_TRUE);
131          elm_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_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_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_scroller_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 EINA_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 EINA_UNUSED,
241            void        *event_info EINA_UNUSED)
242 {
243    elm_list_item_show(data);
244 }
245
246 static void
247 scroll_top(void        *data EINA_UNUSED,
248            Evas_Object *obj EINA_UNUSED,
249            void        *event_info EINA_UNUSED)
250 {
251    printf("Top edge!\n");
252 }
253
254 static void
255 scroll_bottom(void        *data EINA_UNUSED,
256               Evas_Object *obj EINA_UNUSED,
257               void        *event_info EINA_UNUSED)
258 {
259    printf("Bottom edge!\n");
260 }
261
262 static void
263 scroll_left(void        *data EINA_UNUSED,
264             Evas_Object *obj EINA_UNUSED,
265             void        *event_info EINA_UNUSED)
266 {
267    printf("Left edge!\n");
268 }
269
270 static void
271 scroll_right(void        *data EINA_UNUSED,
272              Evas_Object *obj EINA_UNUSED,
273              void        *event_info EINA_UNUSED)
274 {
275    printf("Right edge!\n");
276 }
277
278 static void
279 _cleanup_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
280             void *event_info EINA_UNUSED)
281 {
282    free(data);
283 }
284
285 void
286 test_list(void        *data EINA_UNUSED,
287           Evas_Object *obj EINA_UNUSED,
288           void        *event_info EINA_UNUSED)
289 {
290    Evas_Object *win, *li, *ic, *ic2, *bx, *tb2, *bt, *bxx;
291    char buf[PATH_MAX];
292    Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4, *list_it5;
293    api_data *api = calloc(1, sizeof(api_data));
294
295    win = elm_win_util_standard_add("list", "List");
296    elm_win_autodel_set(win, EINA_TRUE);
297    evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
298
299    bxx = elm_box_add(win);
300    evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
301    elm_win_resize_object_add(win, bxx);
302    evas_object_show(bxx);
303
304    li = elm_list_add(win);
305    elm_list_mode_set(li, ELM_LIST_LIMIT);
306    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
308    api->list = li;
309
310    bt = elm_button_add(win);
311    elm_object_text_set(bt, "Next API function");
312    evas_object_smart_callback_add(bt, "clicked", _api_bt_clicked, (void *) api);
313    elm_box_pack_end(bxx, bt);
314    elm_object_disabled_set(bt, api->state == API_STATE_LAST);
315    evas_object_show(bt);
316
317    elm_box_pack_end(bxx, li);
318
319    ic = elm_icon_add(win);
320    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
321    elm_image_file_set(ic, buf, NULL);
322    list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
323    ic = elm_icon_add(win);
324    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
325    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
326    elm_image_file_set(ic, buf, NULL);
327    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
328    ic = elm_icon_add(win);
329    elm_icon_standard_set(ic, "edit");
330    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
331    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
332
333    ic = elm_icon_add(win);
334    elm_icon_standard_set(ic, "delete");
335    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
336    ic2 = elm_icon_add(win);
337    elm_icon_standard_set(ic2, "clock");
338    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
339    list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
340
341    bx = elm_box_add(win);
342    elm_box_horizontal_set(bx, EINA_TRUE);
343
344    ic = elm_icon_add(win);
345    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
346    elm_image_file_set(ic, buf, NULL);
347    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
348    evas_object_size_hint_align_set(ic, 0.5, 0.5);
349    elm_box_pack_end(bx, ic);
350    evas_object_show(ic);
351
352    ic = elm_icon_add(win);
353    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
354    elm_image_file_set(ic, buf, NULL);
355    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
356    evas_object_size_hint_align_set(ic, 0.5, 0.0);
357    elm_box_pack_end(bx, ic);
358    evas_object_show(ic);
359
360    ic = elm_icon_add(win);
361    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
362    elm_image_file_set(ic, buf, NULL);
363    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
364    evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
365    elm_box_pack_end(bx, ic);
366    evas_object_show(ic);
367    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
368
369    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
370    list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
371    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
372    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
373    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
374    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
375    list_it4 = elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
376    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
377    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
378    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
379    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
380    elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
381    list_it5 = elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
382
383    elm_list_go(li);
384
385    evas_object_show(li);
386
387    tb2 = elm_table_add(win);
388    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
389    elm_win_resize_object_add(win, tb2);
390
391    bt = elm_button_add(win);
392    elm_object_text_set(bt, "Hello");
393    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
394    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
395    evas_object_size_hint_align_set(bt, 0.9, 0.5);
396    elm_table_pack(tb2, bt, 0, 0, 1, 1);
397    evas_object_show(bt);
398
399    bt = elm_button_add(win);
400    elm_object_text_set(bt, "How");
401    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
402    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
403    evas_object_size_hint_align_set(bt, 0.9, 0.5);
404    elm_table_pack(tb2, bt, 0, 1, 1, 1);
405    evas_object_show(bt);
406
407    bt = elm_button_add(win);
408    elm_object_text_set(bt, "doing");
409    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
410    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
411    evas_object_size_hint_align_set(bt, 0.9, 0.5);
412    elm_table_pack(tb2, bt, 0, 2, 1, 1);
413    evas_object_show(bt);
414
415    bt = elm_button_add(win);
416    elm_object_text_set(bt, "Here");
417    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
418    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
419    evas_object_size_hint_align_set(bt, 0.9, 0.5);
420    elm_table_pack(tb2, bt, 0, 3, 1, 1);
421    evas_object_show(bt);
422
423    bt = elm_button_add(win);
424    elm_object_text_set(bt, "Maybe this...");
425    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it5);
426    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
427    evas_object_size_hint_align_set(bt, 0.9, 0.5);
428    elm_table_pack(tb2, bt, 0, 4, 1, 1);
429    evas_object_show(bt);
430
431    evas_object_show(tb2);
432
433    evas_object_resize(win, 320, 300);
434    evas_object_show(win);
435
436    evas_object_smart_callback_add(li, "edge,top", scroll_top, NULL);
437    evas_object_smart_callback_add(li, "edge,bottom", scroll_bottom, NULL);
438 }
439
440 void
441 test_list_horizontal(void        *data EINA_UNUSED,
442                      Evas_Object *obj EINA_UNUSED,
443                      void        *event_info EINA_UNUSED)
444 {
445    Evas_Object *win, *li, *ic, *ic2, *bx, *tb2, *bt;
446    char buf[PATH_MAX];
447    Elm_Object_Item *list_it1, *list_it2, *list_it3, *list_it4;
448
449    win = elm_win_util_standard_add("list-horizontal", "List Horizontal");
450    elm_win_autodel_set(win, EINA_TRUE);
451
452    li = elm_list_add(win);
453    elm_list_horizontal_set(li, EINA_TRUE);
454    elm_list_mode_set(li, ELM_LIST_LIMIT);
455    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
456    elm_win_resize_object_add(win, li);
457
458    evas_object_smart_callback_add(li, "edge,left", scroll_left, NULL);
459    evas_object_smart_callback_add(li, "edge,right", scroll_right, NULL);
460
461    ic = elm_icon_add(win);
462    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
463    elm_image_file_set(ic, buf, NULL);
464    list_it1 = elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
465    ic = elm_icon_add(win);
466    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
467    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
468    elm_image_file_set(ic, buf, NULL);
469    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
470    ic = elm_icon_add(win);
471    elm_icon_standard_set(ic, "edit");
472    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
473    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
474
475    ic = elm_icon_add(win);
476    elm_icon_standard_set(ic, "delete");
477    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
478    ic2 = elm_icon_add(win);
479    elm_icon_standard_set(ic2, "clock");
480    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
481    list_it2 = elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
482
483    bx = elm_box_add(win);
484
485    ic = elm_icon_add(win);
486    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
487    elm_image_file_set(ic, buf, NULL);
488    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
489    evas_object_size_hint_align_set(ic, 0.5, 0.5);
490    elm_box_pack_end(bx, ic);
491    evas_object_show(ic);
492
493    ic = elm_icon_add(win);
494    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
495    elm_image_file_set(ic, buf, NULL);
496    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
497    evas_object_size_hint_align_set(ic, 0.5, 0.0);
498    elm_box_pack_end(bx, ic);
499    evas_object_show(ic);
500
501    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
502
503    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
504    list_it3 = elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
505    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
506    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
507    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
508    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
509
510    list_it4 = elm_list_item_append(li, "And", NULL, NULL, NULL, NULL);
511    elm_list_item_append(li, "here", NULL, NULL, NULL, NULL);
512    elm_list_item_append(li, "we", NULL, NULL, NULL, NULL);
513    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
514    elm_list_item_append(li, "done", NULL, NULL, NULL, NULL);
515    elm_object_item_disabled_set(elm_list_item_append(li, "with", NULL, NULL, NULL, NULL), EINA_TRUE);
516    elm_object_item_disabled_set(elm_list_item_append(li, "items.", NULL, NULL, NULL, NULL), EINA_TRUE);
517
518    elm_list_go(li);
519
520    evas_object_show(li);
521
522    tb2 = elm_table_add(win);
523    evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
524    elm_win_resize_object_add(win, tb2);
525
526    bt = elm_button_add(win);
527    elm_object_text_set(bt, "Hello");
528    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it1);
529    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
530    evas_object_size_hint_align_set(bt, 0.5, 0.9);
531    elm_table_pack(tb2, bt, 0, 0, 1, 1);
532    evas_object_show(bt);
533
534    bt = elm_button_add(win);
535    elm_object_text_set(bt, "How");
536    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it2);
537    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
538    evas_object_size_hint_align_set(bt, 0.5, 0.9);
539    elm_table_pack(tb2, bt, 1, 0, 1, 1);
540    evas_object_show(bt);
541
542    bt = elm_button_add(win);
543    elm_object_text_set(bt, "doing");
544    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it3);
545    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
546    evas_object_size_hint_align_set(bt, 0.5, 0.9);
547    elm_table_pack(tb2, bt, 2, 0, 1, 1);
548    evas_object_show(bt);
549
550    bt = elm_button_add(win);
551    elm_object_text_set(bt, "And");
552    evas_object_smart_callback_add(bt, "clicked", my_show_it, list_it4);
553    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
554    evas_object_size_hint_align_set(bt, 0.5, 0.9);
555    elm_table_pack(tb2, bt, 3, 0, 1, 1);
556    evas_object_show(bt);
557
558    evas_object_show(tb2);
559
560    evas_object_resize(win, 320, 300);
561    evas_object_show(win);
562 }
563
564 /***********/
565
566 static void
567 my_li2_clear(void        *data,
568              Evas_Object *obj EINA_UNUSED,
569              void        *event_info EINA_UNUSED)
570 {
571    elm_list_clear(data);
572 }
573
574 static void
575 my_li2_sel(void        *data EINA_UNUSED,
576            Evas_Object *obj,
577            void        *event_info EINA_UNUSED)
578 {
579    Elm_Object_Item *list_it = elm_list_selected_item_get(obj);
580    elm_list_item_selected_set(list_it, EINA_FALSE);
581    printf("item selected\n");
582 }
583
584 void
585 test_list2(void        *data EINA_UNUSED,
586            Evas_Object *obj EINA_UNUSED,
587            void        *event_info EINA_UNUSED)
588 {
589    Evas_Object *win, *bg, *li, *ic, *ic2, *bx, *bx2, *bt;
590    char buf[PATH_MAX];
591    Elm_Object_Item *list_it;
592
593    win = elm_win_add(NULL, "list2", ELM_WIN_BASIC);
594    elm_win_title_set(win, "List 2");
595    elm_win_autodel_set(win, EINA_TRUE);
596
597    bg = elm_bg_add(win);
598    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
599    elm_bg_file_set(bg, buf, NULL);
600    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
601    elm_win_resize_object_add(win, bg);
602    evas_object_show(bg);
603
604    bx = elm_box_add(win);
605    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
606    elm_win_resize_object_add(win, bx);
607    evas_object_show(bx);
608
609    li = elm_list_add(bx);
610    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
611    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
612    elm_list_mode_set(li, ELM_LIST_LIMIT);
613
614    ic = elm_icon_add(win);
615    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
616    elm_image_file_set(ic, buf, NULL);
617    elm_list_item_append(li, "Unselect on selected", ic, NULL, my_li2_sel, NULL);
618
619    ic = elm_icon_add(win);
620    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
621    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
622    elm_image_file_set(ic, buf, NULL);
623    list_it = elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
624    elm_list_item_selected_set(list_it, EINA_TRUE);
625
626    ic = elm_icon_add(win);
627    elm_icon_standard_set(ic, "edit");
628    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
629    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
630
631    ic = elm_icon_add(win);
632    elm_icon_standard_set(ic, "delete");
633    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
634    ic2 = elm_icon_add(win);
635    elm_icon_standard_set(ic2, "clock");
636    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
637    elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
638
639    bx2 = elm_box_add(win);
640    elm_box_horizontal_set(bx2, EINA_TRUE);
641
642    ic = elm_icon_add(win);
643    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
644    elm_image_file_set(ic, buf, NULL);
645    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
646    evas_object_size_hint_align_set(ic, 0.5, 0.5);
647    elm_box_pack_end(bx2, ic);
648    evas_object_show(ic);
649
650    ic = elm_icon_add(win);
651    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
652    elm_image_file_set(ic, buf, NULL);
653    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
654    evas_object_size_hint_align_set(ic, 0.5, 0.0);
655    elm_box_pack_end(bx2, ic);
656    evas_object_show(ic);
657    elm_list_item_append(li, "are", bx2, NULL, NULL, NULL);
658
659    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
660    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
661    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
662    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
663    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
664    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
665    elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
666    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
667    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
668    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
669    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
670    elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL);
671
672    elm_list_go(li);
673
674    elm_box_pack_end(bx, li);
675    evas_object_show(li);
676
677    bt = elm_button_add(bx);
678    elm_object_text_set(bt, "Clear");
679    evas_object_smart_callback_add(bt, "clicked", my_li2_clear, li);
680    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
681    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
682    elm_box_pack_end(bx, bt);
683    evas_object_show(bt);
684
685    evas_object_resize(win, 320, 500);
686    evas_object_show(win);
687 }
688
689 /***********/
690
691 static void
692 _bt_clicked(void        *data EINA_UNUSED,
693             Evas_Object *obj EINA_UNUSED,
694             void        *event_info EINA_UNUSED)
695 {
696    printf("button was clicked\n");
697 }
698
699 static void
700 _it_clicked(void *data, Evas_Object *obj EINA_UNUSED,
701                  void *event_info EINA_UNUSED)
702 {
703    printf("item was clicked\n");
704    if (!data) return;
705    Evas_Object *li = data;
706    Evas_Object *lb;
707    char str[128];
708
709    Elm_Object_Item *lit = elm_list_selected_item_get(li);
710    if (!lit) return;
711    sprintf(str, "%s is selected", elm_object_item_text_get(lit));
712
713    lb = evas_object_data_get(li, "label");
714    elm_object_text_set(lb, str);
715 }
716
717 void
718 test_list3(void        *data EINA_UNUSED,
719            Evas_Object *obj EINA_UNUSED,
720            void        *event_info EINA_UNUSED)
721 {
722    Evas_Object *win, *li, *ic, *ic2, *bx;
723    char buf[PATH_MAX];
724
725    win = elm_win_util_standard_add("list3", "List 3");
726    elm_win_autodel_set(win, EINA_TRUE);
727
728    li = elm_list_add(win);
729    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
730    elm_win_resize_object_add(win, li);
731    elm_list_mode_set(li, ELM_LIST_COMPRESS);
732
733    ic = elm_icon_add(win);
734    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
735    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
736    elm_image_file_set(ic, buf, NULL);
737    ic2 = elm_button_add(win);
738    elm_object_text_set(ic2, "Click me");
739    evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
740    evas_object_propagate_events_set(ic2, EINA_FALSE);
741    elm_list_item_append(li, "Hello", ic, ic2, _it_clicked, NULL);
742
743    ic = elm_icon_add(win);
744    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
745    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
746    elm_image_file_set(ic, buf, NULL);
747    ic2 = elm_button_add(win);
748    elm_object_text_set(ic2, "Click me");
749    evas_object_smart_callback_add(ic2, "clicked", _bt_clicked, NULL);
750    elm_list_item_append(li, "world", ic, ic2, _it_clicked, NULL);
751
752    ic = elm_icon_add(win);
753    elm_icon_standard_set(ic, "edit");
754    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
755    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
756
757    ic = elm_icon_add(win);
758    elm_icon_standard_set(ic, "delete");
759    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
760    ic2 = elm_icon_add(win);
761    elm_icon_standard_set(ic2, "clock");
762    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
763    elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
764
765    bx = elm_box_add(win);
766    elm_box_horizontal_set(bx, EINA_TRUE);
767
768    ic = elm_icon_add(win);
769    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
770    elm_image_file_set(ic, buf, NULL);
771    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
772    evas_object_size_hint_align_set(ic, 0.5, 0.5);
773    elm_box_pack_end(bx, ic);
774    evas_object_show(ic);
775
776    ic = elm_icon_add(win);
777    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
778    elm_image_file_set(ic, buf, NULL);
779    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
780    evas_object_size_hint_align_set(ic, 0.5, 0.0);
781    elm_box_pack_end(bx, ic);
782    evas_object_show(ic);
783
784    ic = elm_icon_add(win);
785    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
786    elm_image_file_set(ic, buf, NULL);
787    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
788    evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
789    elm_box_pack_end(bx, ic);
790    evas_object_show(ic);
791
792    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
793    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
794    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
795    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
796    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
797    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
798    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
799    elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
800    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
801    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
802    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
803    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
804    elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL);
805    elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL);
806
807    elm_list_go(li);
808
809    evas_object_show(li);
810
811    evas_object_resize(win, 320, 300);
812    evas_object_show(win);
813 }
814
815 ///////////////////////////////////////////////////////////////////////////////////////
816
817 struct Pginfo
818 {
819    Evas_Object *naviframe, *win;
820 };
821
822 static void
823 test_list4_back_cb(void        *data,
824                    Evas_Object *obj EINA_UNUSED,
825                    void        *event_info EINA_UNUSED)
826 {
827    struct Pginfo *info = data;
828    if (!info) return;
829
830    elm_naviframe_item_pop(info->naviframe);
831 }
832
833 static void
834 test_list4_swipe(void        *data,
835                  Evas_Object *obj EINA_UNUSED,
836                  void        *event_info)
837 {
838    Evas_Object *box, *entry, *button;
839    struct Pginfo *info = data;
840    char *item_data;
841    if ((!event_info) || (!data)) return;
842
843    item_data = elm_object_item_data_get(event_info);
844
845    box = elm_box_add(info->win);
846    elm_box_horizontal_set(box, EINA_FALSE);
847    elm_box_homogeneous_set(box, EINA_FALSE);
848    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
849    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
850    evas_object_show(box);
851
852    entry = elm_entry_add(info->win);
853    elm_entry_scrollable_set(entry, EINA_TRUE);
854    elm_entry_editable_set(entry, EINA_FALSE);
855    elm_object_text_set(entry, item_data);
856    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
857    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
858    evas_object_show(entry);
859
860    button = elm_button_add(info->win);
861    elm_object_text_set(button, "back");
862    evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
863    evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
864    evas_object_smart_callback_add(button, "clicked", test_list4_back_cb, info);
865    evas_object_show(button);
866
867    elm_box_pack_start(box, entry);
868    elm_box_pack_end(box, button);
869
870    elm_naviframe_item_simple_push(info->naviframe, box);
871 }
872
873 void
874 test_list4(void        *data EINA_UNUSED,
875            Evas_Object *obj EINA_UNUSED,
876            void        *event_info EINA_UNUSED)
877 {
878    Evas_Object *win, *li, *ic, *ic2, *naviframe;
879    static struct Pginfo info = {NULL, NULL};
880    char buf[PATH_MAX];
881
882    win = elm_win_util_standard_add("list4", "List 4");
883    elm_win_autodel_set(win, EINA_TRUE);
884    info.win = win;
885
886    naviframe = elm_naviframe_add(win);
887    evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
888    elm_win_resize_object_add(win, naviframe);
889    evas_object_show(naviframe);
890    info.naviframe = naviframe;
891
892    li = elm_list_add(win);
893    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
894    elm_list_mode_set(li, ELM_LIST_COMPRESS);
895    evas_object_smart_callback_add(li, "swipe", test_list4_swipe, &info);
896    elm_naviframe_item_simple_push(naviframe, li);
897
898    static char pf_data[] = "Pink Floyd were formed in 1965, and originally consisted of university"                       \
899                            "students Roger Waters, Nick Mason, Richard Wright, and Syd Barrett. The group were a popular" \
900                            "fixture on London's underground music scene, and under Barrett's leadership released two "    \
901                            "charting singles, \"Arnold Layne\" and \"See Emily Play\", and a successful debut album, "    \
902                            "ThePiper at the Gates of Dawn. In 1968, guitarist and singer David Gilmour joined the "       \
903                            "line-up. Barrett was soon removed, due to his increasingly erratic behaviour. Following "     \
904                            "Barrett's departure, bass player and singer Roger Waters became the band's lyricist and "     \
905                            "conceptual leader, with Gilmour assuming lead guitar and much of the vocals. With this "      \
906                            "line-up, Floyd went on to achieve worldwide critical and commercial success with the "        \
907                            "conceptalbums The Dark Side of the Moon, Wish You Were Here, Animals, and The Wall.";
908    ic = elm_icon_add(win);
909    snprintf(buf, sizeof(buf), "%s/images/mystrale.jpg", elm_app_data_dir_get());
910    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
911    elm_image_file_set(ic, buf, NULL);
912    elm_list_item_append(li, "Pink Floyd", ic, NULL, NULL, &pf_data);
913
914    static char ds_data[] = "Dire Straits were a British rock band, formed by Mark Knopfler "                          \
915                            "(lead vocals and lead guitar), his younger brother David Knopfler (rhythm guitar and "    \
916                            "backing vocals), John Illsley (bass guitar and backing vocals), and Pick Withers (drums " \
917                            "and percussion), and managed by Ed Bicknell, active between 1977 and 1995. Although the " \
918                            "band was formed in an era when punk rock was at the forefront, Dire Straits played a more "
919                            "bluesy style, albeit with a stripped-down sound that appealed to audiences weary of the "   \
920                            "overproduced stadium rock of the 1970s.[citation needed] In their early days, Mark and "    \
921                            "David requested that pub owners turn down their sound so that patrons could converse "      \
922                            "while the band played, an indication of their unassuming demeanor. Despite this oddly "     \
923                            "self-effacing approach to rock and roll, Dire Straits soon became hugely successful, with " \
924                            "their first album going multi-platinum globally.";
925    ic = elm_icon_add(win);
926    snprintf(buf, sizeof(buf), "%s/images/mystrale_2.jpg", elm_app_data_dir_get());
927    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
928    elm_image_file_set(ic, buf, NULL);
929    elm_list_item_append(li, "Dire Straits", ic, NULL, NULL, &ds_data);
930
931    static char uh_data[] = "Uriah Heep are an English hard rock band. The band released several "                       \
932                            "commercially successful albums in the 1970s such as Uriah Heep Live (1973), but their "     \
933                            "audience declined by the 1980s, to the point where they became essentially a cult band in " \
934                            "the United States and United Kingdom. Uriah Heep maintain a significant following in "      \
935                            "Germany, the Netherlands, Scandinavia, the Balkans, Japan and Russia, where they still "    \
936                            "perform at stadium-sized venues.";
937    ic = elm_icon_add(win);
938    snprintf(buf, sizeof(buf), "%s/images/icon_17.png", elm_app_data_dir_get());
939    elm_image_file_set(ic, buf, NULL);
940    elm_list_item_append(li, "Uriah Heep", ic, NULL, NULL, &uh_data);
941
942    static char r_data[] = "Rush is a Canadian rock band formed in August 1968, in the Willowdale "                       \
943                           "neighbourhood of Toronto, Ontario. The band is composed of bassist, keyboardist, and lead "   \
944                           "vocalist Geddy Lee, guitarist Alex Lifeson, and drummer and lyricist Neil Peart. The band "   \
945                           "and its membership went through a number of re-configurations between 1968 and 1974, "        \
946                           "achieving their current form when Peart replaced original drummer John Rutsey in July 1974, " \
947                           "two weeks before the group's first United States tour.";
948    ic = elm_icon_add(win);
949    snprintf(buf, sizeof(buf), "%s/images/icon_21.png", elm_app_data_dir_get());
950    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
951    elm_image_file_set(ic, buf, NULL);
952    ic2 = elm_icon_add(win);
953    elm_icon_standard_set(ic2, "clock");
954    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
955    elm_list_item_append(li, "Rush", ic, ic2, NULL, &r_data);
956
957    elm_list_go(li);
958
959    evas_object_show(li);
960    evas_object_resize(win, 320, 300);
961    evas_object_show(win);
962 }
963
964 /////////////////////////////////////////////////////////////////////////////////////////
965 struct list5_data_cb
966 {
967    Evas_Object *win, *list;
968 };
969
970 static void
971 test_list5_item_del(void        *data,
972                     Evas_Object *obj EINA_UNUSED,
973                     void        *event_info EINA_UNUSED)
974 {
975    elm_object_item_del(data);
976 }
977
978 static void
979 test_list5_swipe(void        *data EINA_UNUSED,
980                  Evas_Object *obj EINA_UNUSED,
981                  void        *event_info)
982 {
983    Evas_Object *button;
984    struct list5_data_cb *info = elm_object_item_data_get(event_info);
985
986    if (elm_object_item_part_content_get(event_info, "end")) return;
987
988    button = elm_button_add(info->win);
989    elm_object_text_set(button, "delete");
990    evas_object_propagate_events_set(button, EINA_FALSE);
991    evas_object_smart_callback_add(button, "clicked", test_list5_item_del,
992                                   event_info);
993    elm_object_item_part_content_set(event_info, "end", button);
994    elm_object_item_part_text_set(event_info, "default", "Enlightenment");
995 }
996
997 void
998 test_list5(void        *data EINA_UNUSED,
999            Evas_Object *obj EINA_UNUSED,
1000            void        *event_info EINA_UNUSED)
1001 {
1002    Evas_Object *win, *li;
1003    static struct list5_data_cb info;
1004
1005    win = elm_win_util_standard_add("list5", "List 5");
1006    elm_win_autodel_set(win, EINA_TRUE);
1007    info.win = win;
1008
1009    li = elm_list_add(win);
1010    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1011    elm_list_mode_set(li, ELM_LIST_COMPRESS);
1012    evas_object_smart_callback_add(li, "swipe", test_list5_swipe, NULL);
1013    elm_win_resize_object_add(win, li);
1014    evas_object_show(li);
1015    info.list = li;
1016
1017    elm_list_item_append(li, "Network", NULL, NULL, NULL, &info);
1018    elm_list_item_append(li, "Audio", NULL, NULL, NULL, &info);
1019
1020    elm_list_go(li);
1021    evas_object_resize(win, 320, 300);
1022    evas_object_show(win);
1023 }
1024
1025 static void
1026 _first_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1027                   void *event_info EINA_UNUSED)
1028 {
1029    char str[128];
1030    Evas_Object *li = data, *lb;
1031    Elm_Object_Item *lit = elm_list_first_item_get(li);
1032    if (!lit) return;
1033
1034    sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1035    elm_list_item_bring_in(lit);
1036    elm_list_item_selected_set(lit, EINA_TRUE);
1037
1038    lb = evas_object_data_get(li, "label");
1039    elm_object_text_set(lb, str);
1040 }
1041
1042 static void
1043 _prev_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1044                  void *event_info EINA_UNUSED)
1045 {
1046    char str[128];
1047    Evas_Object *li = data, *lb;
1048
1049    Elm_Object_Item *lit = elm_list_selected_item_get(li);
1050    if (!lit) return;
1051    lit = elm_list_item_prev(lit);
1052    if (!lit) return;
1053
1054    sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1055    elm_list_item_bring_in(lit);
1056    elm_list_item_selected_set(lit, EINA_TRUE);
1057
1058    lb = evas_object_data_get(li, "label");
1059    elm_object_text_set(lb, str);
1060 }
1061
1062 static void
1063 _next_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1064                  void *event_info EINA_UNUSED)
1065 {
1066    char str[128];
1067    Evas_Object *li = data, *lb;
1068
1069    Elm_Object_Item *lit = elm_list_selected_item_get(li);
1070    if (!lit) return;
1071    lit = elm_list_item_next(lit);
1072    if (!lit) return;
1073
1074    sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1075    elm_list_item_bring_in(lit);
1076    elm_list_item_selected_set(lit, EINA_TRUE);
1077
1078    lb = evas_object_data_get(li, "label");
1079    elm_object_text_set(lb, str);
1080 }
1081
1082 static void
1083 _last_bt_clicked(void *data, Evas_Object *obj EINA_UNUSED,
1084                  void *event_info EINA_UNUSED)
1085 {
1086    char str[128];
1087    Evas_Object *li = data, *lb;
1088    Elm_Object_Item *lit = elm_list_last_item_get(li);
1089    if (!lit) return;
1090
1091    sprintf(str, "%s is selected", elm_object_item_text_get(lit));
1092    elm_list_item_bring_in(lit);
1093    elm_list_item_selected_set(lit, EINA_TRUE);
1094
1095    lb = evas_object_data_get(li, "label");
1096    elm_object_text_set(lb, str);
1097 }
1098
1099 void
1100 test_list6(void        *data EINA_UNUSED,
1101            Evas_Object *obj EINA_UNUSED,
1102            void        *event_info EINA_UNUSED)
1103 {
1104    Evas_Object *win, *gd, *bt, *li, *lb;
1105
1106    win = elm_win_util_standard_add("list6", "List 6");
1107    elm_win_autodel_set(win, EINA_TRUE);
1108
1109    gd = elm_grid_add(win);
1110    elm_grid_size_set(gd, 100, 100);
1111    evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1112    elm_win_resize_object_add(win, gd);
1113
1114    li = elm_list_add(win);
1115    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1116    elm_list_mode_set(li, ELM_LIST_COMPRESS);
1117    elm_grid_pack(gd, li, 4, 4, 92, 72);
1118    evas_object_show(li);
1119
1120    elm_list_item_append(li, "Eina", NULL, NULL, _it_clicked, li);
1121    elm_list_item_append(li, "Eet", NULL, NULL, _it_clicked, li);
1122    elm_list_item_append(li, "Evas", NULL, NULL, _it_clicked, li);
1123    elm_list_item_append(li, "Ecore", NULL, NULL, _it_clicked, li);
1124    elm_list_item_append(li, "Embryo", NULL, NULL, _it_clicked, li);
1125    elm_list_item_append(li, "Edje", NULL, NULL, _it_clicked, li);
1126    elm_list_item_append(li, "Efreet", NULL, NULL, _it_clicked, li);
1127    elm_list_item_append(li, "E_dbus", NULL, NULL, _it_clicked, li);
1128    elm_list_item_append(li, "Eeze", NULL, NULL, _it_clicked, li);
1129    elm_list_item_append(li, "Expedite", NULL, NULL, _it_clicked, li);
1130    elm_list_item_append(li, "Emotion", NULL, NULL, _it_clicked, li);
1131    elm_list_item_append(li, "Ethumb", NULL, NULL, _it_clicked, li);
1132    elm_list_item_append(li, "Elementary", NULL, NULL, _it_clicked, li);
1133    elm_list_go(li);
1134
1135    bt = elm_button_add(win);
1136    elm_object_text_set(bt, "First");
1137    evas_object_smart_callback_add(bt, "clicked", _first_bt_clicked, li);
1138    elm_grid_pack(gd, bt, 4, 80, 20, 10);
1139    evas_object_show(bt);
1140
1141    bt = elm_button_add(win);
1142    elm_object_text_set(bt, "Prev");
1143    evas_object_smart_callback_add(bt, "clicked", _prev_bt_clicked, li);
1144    elm_grid_pack(gd, bt, 28, 80, 20, 10);
1145    evas_object_show(bt);
1146
1147    bt = elm_button_add(win);
1148    elm_object_text_set(bt, "Next");
1149    evas_object_smart_callback_add(bt, "clicked", _next_bt_clicked, li);
1150    elm_grid_pack(gd, bt, 52, 80, 20, 10);
1151    evas_object_show(bt);
1152
1153    bt = elm_button_add(win);
1154    elm_object_text_set(bt, "Last");
1155    evas_object_smart_callback_add(bt, "clicked", _last_bt_clicked, li);
1156    elm_grid_pack(gd, bt, 76, 80, 20, 10);
1157    evas_object_show(bt);
1158
1159    lb = elm_label_add(win);
1160    elm_object_text_set(lb, "Nothing is selected");
1161    elm_grid_pack(gd, lb, 4, 90, 92, 10);
1162    evas_object_show(lb);
1163
1164    evas_object_data_set(li, "label", lb);
1165
1166    evas_object_show(gd);
1167    evas_object_resize(win, 480, 480);
1168    evas_object_show(win);
1169 }
1170
1171 static void
1172 _it_clicked_cb(void *data EINA_UNUSED, Evas_Object *li,
1173                  void *event_info EINA_UNUSED)
1174 {
1175    Elm_Object_Item *lit = elm_list_selected_item_get(li);
1176    printf("Item clicked. %s is selected\n", elm_object_item_text_get(lit));
1177 }
1178
1179 void
1180 test_list7(void        *data EINA_UNUSED,
1181            Evas_Object *obj EINA_UNUSED,
1182            void        *event_info EINA_UNUSED)
1183 {
1184    Evas_Object *win, *bg, *li;
1185    char buf[PATH_MAX];
1186
1187    win = elm_win_add(NULL, "list7", ELM_WIN_BASIC);
1188    elm_win_title_set(win, "List Always Select Mode");
1189    elm_win_autodel_set(win, EINA_TRUE);
1190
1191    bg = elm_bg_add(win);
1192    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
1193    elm_bg_file_set(bg, buf, NULL);
1194    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1195    elm_win_resize_object_add(win, bg);
1196    evas_object_show(bg);
1197
1198    li = elm_list_add(win);
1199    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1200    elm_win_resize_object_add(win, li);
1201    elm_list_select_mode_set(li, ELM_OBJECT_SELECT_MODE_ALWAYS);
1202
1203    elm_list_item_append(li, "Items", NULL, NULL, _it_clicked_cb, NULL);
1204    elm_list_item_append(li, "callbacks", NULL, NULL, _it_clicked_cb, NULL);
1205    elm_list_item_append(li, "should be called", NULL, NULL, _it_clicked_cb,
1206                         NULL);
1207    elm_list_item_append(li, "only once, each time", NULL, NULL, _it_clicked_cb,
1208                         NULL);
1209    elm_list_item_append(li, "an item is clicked.", NULL, NULL, _it_clicked_cb,
1210                         NULL);
1211    elm_list_item_append(li, "Including already", NULL, NULL, _it_clicked_cb,
1212                         NULL);
1213    elm_list_item_append(li, "selected ones.", NULL, NULL, _it_clicked_cb, NULL);
1214
1215    elm_list_go(li);
1216    evas_object_show(li);
1217
1218    evas_object_resize(win, 320, 300);
1219    evas_object_show(win);
1220 }
1221
1222 static const unsigned _list_focus_objects = 5;
1223 static const char *_list_focus_names[] = {"None", "Square", "Button", "Check", "Box"};
1224 static const int _list_focus_combo[] = { 1, 0, 2, 33, 43, 44, 10, 30, 22, 11, 10, -1 };
1225
1226 static Evas_Object *
1227 test_list_focus_content_get(Evas_Object *obj, unsigned type, Eina_Bool horiz)
1228 {
1229    Evas_Object *cnt = NULL;
1230
1231    switch(type)
1232      {
1233       case 1:
1234          cnt = elm_bg_add(obj);
1235          evas_object_color_set(cnt, 128, 18, 128, 255);
1236          evas_object_size_hint_min_set(cnt, 50, 50);
1237          break;
1238       case 2:
1239          cnt = elm_button_add(obj);
1240          break;
1241       case 3:
1242          cnt = elm_check_add(obj);
1243          break;
1244       case 4:
1245          cnt = elm_box_add(obj);
1246          elm_box_horizontal_set(cnt, !horiz);
1247          evas_object_size_hint_align_set(cnt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1248          elm_box_pack_end(cnt, test_list_focus_content_get(obj, 2, horiz));
1249          elm_box_pack_end(cnt, test_list_focus_content_get(obj, 3, horiz));
1250          elm_box_pack_end(cnt, test_list_focus_content_get(obj, 2, horiz));
1251          break;
1252       default:
1253          break;
1254
1255      }
1256
1257    if (cnt)
1258    {
1259        evas_object_size_hint_weight_set(cnt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1260        evas_object_show(cnt);
1261    }
1262
1263    return cnt;
1264 }
1265
1266 static void
1267 test_list_focus_focus_on_selection_set(Evas_Object *gl,
1268                                        Evas_Object *chk, Eina_Bool focus)
1269 {
1270     elm_list_focus_on_selection_set(gl, focus);
1271     elm_check_state_set(chk, focus);
1272     printf("list_focus_on_selection = %s\n", (focus) ? "true" : "false");
1273 }
1274
1275 static void
1276 test_list_focus_focus_check_changed(void *data, Evas_Object *obj,
1277                                     void *event_info  EINA_UNUSED)
1278 {
1279    Eina_Bool nextstate = !elm_list_focus_on_selection_get(data);
1280    test_list_focus_focus_on_selection_set(data, obj, nextstate);
1281 }
1282
1283 static void
1284 test_list_focus_focus_highlight_check_changed(void *data, Evas_Object *obj,
1285                                               void *event_info EINA_UNUSED)
1286 {
1287    elm_win_focus_highlight_enabled_set((Evas_Object *)data,
1288                                        elm_check_state_get(obj));
1289 }
1290
1291 static void
1292 test_list_focus_focus_animate_check_changed(void *data, Evas_Object *obj,
1293                                             void *event_info EINA_UNUSED)
1294 {
1295    elm_win_focus_highlight_animate_set((Evas_Object *)data,
1296                                        elm_check_state_get(obj));
1297 }
1298
1299 static void
1300 test_list_focus_focus_move_policy_changed(void *data EINA_UNUSED,
1301                                           Evas_Object *obj,
1302                                           void *event_info EINA_UNUSED)
1303 {
1304    int val = elm_radio_value_get(obj);
1305
1306    if (val == 0)
1307      elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
1308    else if (val == 1)
1309      elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN);
1310 }
1311
1312 static void
1313 test_list_focus_item_loop_enable_check_changed(void *data, Evas_Object *obj,
1314                                                void *event_info  EINA_UNUSED)
1315 {
1316    Evas_Object *li = data;
1317    elm_object_scroll_item_loop_enabled_set(li, elm_check_state_get(obj));
1318 }
1319
1320 static void
1321 _item_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
1322 {
1323    printf("%s: %p\n", (char *)data, event_info);
1324 }
1325
1326 static void
1327 _list_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
1328                   Evas_Object *obj EINA_UNUSED, void *event_info)
1329 {
1330    Evas_Event_Key_Down *ev = event_info;
1331    printf("\n=== Key Down : %s ===\n", ev->keyname);
1332 }
1333
1334 static Ecore_Timer *timer = NULL;
1335 static void
1336 _test_list_focus_win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
1337                             Evas_Object *obj EINA_UNUSED,
1338                             void *event_info EINA_UNUSED)
1339 {
1340    ecore_timer_del(timer);
1341    timer = NULL;
1342 }
1343
1344 static Eina_Bool
1345 _focus_timer_cb(void *data)
1346 {
1347    elm_object_item_focus_set(data, EINA_TRUE);
1348    timer = NULL;
1349
1350    return ECORE_CALLBACK_CANCEL;
1351 }
1352
1353 static Eina_Bool
1354 _select_timer_cb(void *data)
1355 {
1356    elm_list_item_selected_set(data, EINA_TRUE);
1357    timer = NULL;
1358
1359    return ECORE_CALLBACK_CANCEL;
1360 }
1361
1362 static void
1363 _focus_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1364               void *event_info EINA_UNUSED)
1365 {
1366    ecore_timer_del(timer);
1367    timer = ecore_timer_add(1.5, _focus_timer_cb, data);
1368 }
1369
1370 static void
1371 _sel_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1372             void *event_info EINA_UNUSED)
1373 {
1374    ecore_timer_del(timer);
1375    timer = ecore_timer_add(1.5, _select_timer_cb, data);
1376 }
1377
1378 static void
1379 _dis_btn_cb(void *data, Evas_Object *obj EINA_UNUSED,
1380             void *event_info EINA_UNUSED)
1381 {
1382    elm_object_item_disabled_set(data, EINA_TRUE);
1383 }
1384
1385 static void
1386 _focus_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
1387                          void *event_info EINA_UNUSED)
1388 {
1389    printf("Button clicked: %s\n", (char *)data);
1390 }
1391
1392 static void
1393 _test_list_focus(const char *name, const char *title, Eina_Bool horiz)
1394 {
1395    Evas_Object *win, *li, *btn, *bx, *bx2, *fr, *bx_opt, *chk, *bx_btn;
1396    Evas_Object *btn_focus, *btn_sel, *btn_dis, *bx_mv, *rd, *rdg;
1397    unsigned int lhand, rhand, idx;
1398    char buf[256];
1399    Elm_Object_Item *it = NULL, *it_0 = NULL, *it_3 = NULL;
1400
1401    win = elm_win_util_standard_add(name, title);
1402    elm_win_autodel_set(win, EINA_TRUE);
1403    evas_object_event_callback_add(win, EVAS_CALLBACK_DEL,
1404                                   _test_list_focus_win_del_cb, NULL);
1405
1406    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
1407    elm_win_focus_highlight_animate_set(win, EINA_TRUE);
1408
1409    bx = elm_box_add(win);
1410    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1411    elm_win_resize_object_add(win, bx);
1412    evas_object_show(bx);
1413
1414    btn = elm_button_add(bx);
1415    elm_object_text_set(btn, "Up");
1416    elm_box_pack_end(bx, btn);
1417    evas_object_smart_callback_add(btn, "clicked",
1418                                   _focus_button_clicked_cb, "Up");
1419    evas_object_show(btn);
1420
1421    bx2 = elm_box_add(bx);
1422    elm_box_horizontal_set(bx2, EINA_TRUE);
1423    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1424    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1425    elm_box_pack_end(bx, bx2);
1426    evas_object_show(bx2);
1427
1428    btn = elm_button_add(bx2);
1429    elm_object_text_set(btn, "Left");
1430    elm_box_pack_end(bx2, btn);
1431    evas_object_smart_callback_add(btn, "clicked",
1432                                   _focus_button_clicked_cb, "Left");
1433    evas_object_show(btn);
1434
1435    li = elm_list_add(win);
1436    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1437    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1438    elm_list_horizontal_set(li, horiz);
1439    elm_list_select_mode_set(li, ELM_OBJECT_SELECT_MODE_ALWAYS);
1440    elm_box_pack_end(bx2, li);
1441    evas_object_show(li);
1442    evas_object_smart_callback_add(li, "item,focused", _item_cb, "item,focused");
1443    evas_object_smart_callback_add(li, "item,unfocused", _item_cb, "item,unfocused");
1444    evas_object_smart_callback_add(li, "selected", _item_cb, "selected");
1445    evas_object_smart_callback_add(li, "unselected", _item_cb, "unselected");
1446    evas_object_smart_callback_add(li, "activated", _item_cb, "activated");
1447    evas_object_smart_callback_add(li, "highlighted", _item_cb, "highlighted");
1448    evas_object_smart_callback_add(li, "unhighlighted", _item_cb, "unhighlighted");
1449    evas_object_event_callback_add(li, EVAS_CALLBACK_KEY_DOWN, _list_key_down_cb, NULL);
1450
1451    btn = elm_button_add(bx2);
1452    elm_object_text_set(btn, "Right");
1453    elm_box_pack_end(bx2, btn);
1454    evas_object_smart_callback_add(btn, "clicked",
1455                                   _focus_button_clicked_cb, "Right");
1456    evas_object_show(btn);
1457
1458    btn = elm_button_add(bx);
1459    elm_object_text_set(btn, "Down");
1460    elm_box_pack_end(bx, btn);
1461    evas_object_smart_callback_add(btn, "clicked",
1462                                   _focus_button_clicked_cb, "Down");
1463    evas_object_show(btn);
1464
1465    // Options
1466    fr = elm_frame_add(bx);
1467    elm_object_text_set(fr, "Options");
1468    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1469    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1470    elm_box_pack_end(bx, fr);
1471    evas_object_show(fr);
1472
1473    bx_opt = elm_box_add(fr);
1474    elm_box_horizontal_set(bx_opt, EINA_TRUE);
1475    elm_object_content_set(fr, bx_opt);
1476    evas_object_show(bx_opt);
1477
1478    chk = elm_check_add(bx_opt);
1479    elm_object_text_set(chk, "Focus Highlight");
1480    elm_check_state_set(chk, EINA_TRUE);
1481    evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1482    evas_object_smart_callback_add(chk, "changed",
1483                                   test_list_focus_focus_highlight_check_changed,
1484                                   win);
1485    elm_box_pack_end(bx_opt, chk);
1486    evas_object_show(chk);
1487
1488    chk = elm_check_add(bx_opt);
1489    elm_object_text_set(chk, "Focus Animation");
1490    elm_check_state_set(chk, EINA_TRUE);
1491    evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1492    evas_object_smart_callback_add(chk, "changed",
1493                                   test_list_focus_focus_animate_check_changed,
1494                                   win);
1495    elm_box_pack_end(bx_opt, chk);
1496    evas_object_show(chk);
1497
1498    chk = elm_check_add(bx_opt);
1499    elm_object_text_set(chk, "Focus on selection");
1500    evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1501    evas_object_smart_callback_add(chk, "changed",
1502                                   test_list_focus_focus_check_changed, li);
1503    elm_box_pack_end(bx_opt, chk);
1504    evas_object_show(chk);
1505
1506    test_list_focus_focus_on_selection_set(li, chk, EINA_FALSE);
1507
1508    chk = elm_check_add(bx_opt);
1509    elm_object_text_set(chk, "Item Looping Enable");
1510    elm_check_state_set(chk, elm_object_scroll_item_loop_enabled_get(li));
1511    evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, 0.0);
1512    evas_object_smart_callback_add(chk, "changed",
1513                                   test_list_focus_item_loop_enable_check_changed,
1514                                   li);
1515    elm_box_pack_end(bx_opt, chk);
1516    evas_object_show(chk);
1517
1518    elm_box_pack_end(bx, bx_opt);
1519    // Focus Movement Policy
1520    fr = elm_frame_add(bx);
1521    elm_object_text_set(fr, "Focus Movement Policy");
1522    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1523    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1524    elm_box_pack_end(bx, fr);
1525    evas_object_show(fr);
1526
1527    bx_mv = elm_box_add(fr);
1528    elm_box_horizontal_set(bx_mv, EINA_TRUE);
1529    elm_object_content_set(fr, bx_mv);
1530    evas_object_show(bx_mv);
1531
1532    rdg = rd = elm_radio_add(bx_mv);
1533    elm_object_text_set(rd, "Focus Move by Click");
1534    elm_radio_state_value_set(rd, 0);
1535    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
1536    evas_object_smart_callback_add(rd, "changed",
1537                                   test_list_focus_focus_move_policy_changed,
1538                                   NULL);
1539    elm_box_pack_end(bx_mv, rd);
1540    evas_object_show(rd);
1541
1542    rd = elm_radio_add(bx_mv);
1543    elm_object_text_set(rd, "Focus Move by Mouse-In");
1544    elm_radio_group_add(rd, rdg);
1545    elm_radio_state_value_set(rd, 1);
1546    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0);
1547    evas_object_smart_callback_add(rd, "changed",
1548                                   test_list_focus_focus_move_policy_changed,
1549                                   NULL);
1550    elm_box_pack_end(bx_mv, rd);
1551    evas_object_show(rd);
1552
1553    // Focus/Selection
1554    fr = elm_frame_add(bx);
1555    elm_object_text_set(fr, "Focus/Selection");
1556    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1557    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1558    elm_box_pack_end(bx, fr);
1559    evas_object_show(fr);
1560
1561    bx_btn = elm_box_add(fr);
1562    elm_object_content_set(fr, bx_btn);
1563    evas_object_show(bx_btn);
1564
1565    btn_focus = elm_button_add(bx_btn);
1566    elm_object_text_set(btn_focus, "Focus 3rd Item after 1.5 seconds.");
1567    evas_object_size_hint_weight_set(btn_focus, 0.0, EVAS_HINT_EXPAND);
1568    evas_object_size_hint_align_set(btn_focus, EVAS_HINT_FILL, EVAS_HINT_FILL);
1569    elm_box_pack_end(bx_btn, btn_focus);
1570    evas_object_show(btn_focus);
1571
1572    btn_sel = elm_button_add(bx_btn);
1573    elm_object_text_set(btn_sel, "Select 3rd Item after 1.5 seconds.");
1574    evas_object_size_hint_weight_set(btn_sel, 0.0, EVAS_HINT_EXPAND);
1575    evas_object_size_hint_align_set(btn_sel, EVAS_HINT_FILL, EVAS_HINT_FILL);
1576    elm_box_pack_end(bx_btn, btn_sel);
1577    evas_object_show(btn_sel);
1578
1579    btn_dis = elm_button_add(bx_btn);
1580    elm_object_text_set(btn_dis, "Disable 1st Item.");
1581    evas_object_size_hint_weight_set(btn_dis, 0.0, EVAS_HINT_EXPAND);
1582    evas_object_size_hint_align_set(btn_dis, EVAS_HINT_FILL, EVAS_HINT_FILL);
1583    elm_box_pack_end(bx_btn, btn_dis);
1584    evas_object_show(btn_dis);
1585
1586    for (idx = 0; _list_focus_combo[idx] >= 0; idx++)
1587      {
1588         lhand = _list_focus_combo[idx] / 10;
1589         rhand = _list_focus_combo[idx] % 10;
1590
1591         if (lhand > 4) lhand = 4;
1592         if (rhand > 4) rhand = 4;
1593         snprintf(buf, sizeof(buf), " %s / %s ",
1594                                 _list_focus_names[lhand],
1595                                 _list_focus_names[rhand]);
1596
1597         it = elm_list_item_append(li, buf,
1598                                   test_list_focus_content_get(li, lhand, horiz),
1599                                   test_list_focus_content_get(li, rhand, horiz),
1600                                   NULL, NULL);
1601         if (idx == 0)
1602           it_0 = it;
1603         if (idx == 4)
1604           elm_object_item_disabled_set(it, EINA_TRUE);
1605         if (idx == 2)
1606           it_3 = it;
1607      }
1608
1609    evas_object_smart_callback_add(btn_focus, "clicked", _focus_btn_cb, it_3);
1610    evas_object_smart_callback_add(btn_sel, "clicked", _sel_btn_cb, it_3);
1611    evas_object_smart_callback_add(btn_dis, "clicked", _dis_btn_cb, it_0);
1612
1613    elm_list_go(li);
1614    evas_object_show(li);
1615
1616    evas_object_resize(win, 420, 600);
1617    evas_object_show(win);
1618 }
1619
1620 void
1621 test_list_focus(void        *data EINA_UNUSED,
1622                 Evas_Object *obj EINA_UNUSED,
1623                 void        *event_info EINA_UNUSED)
1624 {
1625    _test_list_focus("list-focus", "List Focus", EINA_FALSE);
1626 }
1627
1628 void
1629 test_list_horiz_focus(void        *data EINA_UNUSED,
1630                       Evas_Object *obj EINA_UNUSED,
1631                       void        *event_info EINA_UNUSED)
1632 {
1633    _test_list_focus("list-focus-horizontal", "List Focus Horizontal", EINA_TRUE);
1634 }
1635
1636 void
1637 test_list_separator(void        *data EINA_UNUSED,
1638                     Evas_Object *obj EINA_UNUSED,
1639                     void        *event_info EINA_UNUSED)
1640 {
1641    Evas_Object *win, *li, *ic, *ic2, *bx, *bxx;
1642    char buf[PATH_MAX];
1643    Elm_Object_Item *list_it_sep;
1644
1645    win = elm_win_util_standard_add("list", "List Separator");
1646    elm_win_autodel_set(win, EINA_TRUE);
1647
1648    bxx = elm_box_add(win);
1649    evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1650    elm_win_resize_object_add(win, bxx);
1651    evas_object_show(bxx);
1652
1653    li = elm_list_add(win);
1654    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1655    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1656    elm_box_pack_end(bxx, li);
1657
1658    ic = elm_icon_add(win);
1659    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1660    elm_image_file_set(ic, buf, NULL);
1661    elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL);
1662
1663    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1664    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1665
1666    ic = elm_icon_add(win);
1667    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1668    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1669    elm_image_file_set(ic, buf, NULL);
1670    elm_list_item_append(li, "world", ic, NULL, NULL, NULL);
1671
1672    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1673    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1674
1675    ic = elm_icon_add(win);
1676    elm_icon_standard_set(ic, "edit");
1677    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1678    elm_list_item_append(li, ".", ic, NULL, NULL, NULL);
1679
1680    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1681    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1682
1683    ic = elm_icon_add(win);
1684    elm_icon_standard_set(ic, "delete");
1685    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1686    ic2 = elm_icon_add(win);
1687    elm_icon_standard_set(ic2, "clock");
1688    elm_image_resizable_set(ic2, EINA_FALSE, EINA_FALSE);
1689    elm_list_item_append(li, "How", ic, ic2, NULL, NULL);
1690
1691    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1692    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1693
1694    bx = elm_box_add(win);
1695    elm_box_horizontal_set(bx, EINA_TRUE);
1696
1697    ic = elm_icon_add(win);
1698    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1699    elm_image_file_set(ic, buf, NULL);
1700    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1701    evas_object_size_hint_align_set(ic, 0.5, 0.5);
1702    elm_box_pack_end(bx, ic);
1703    evas_object_show(ic);
1704
1705    ic = elm_icon_add(win);
1706    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1707    elm_image_file_set(ic, buf, NULL);
1708    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1709    evas_object_size_hint_align_set(ic, 0.5, 0.0);
1710    elm_box_pack_end(bx, ic);
1711    evas_object_show(ic);
1712
1713    ic = elm_icon_add(win);
1714    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1715    elm_image_file_set(ic, buf, NULL);
1716    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
1717    evas_object_size_hint_align_set(ic, 0.0, EVAS_HINT_EXPAND);
1718    elm_box_pack_end(bx, ic);
1719    evas_object_show(ic);
1720    elm_list_item_append(li, "are", bx, NULL, NULL, NULL);
1721
1722    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1723    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1724
1725    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
1726
1727    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1728    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1729
1730    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
1731
1732    list_it_sep = elm_list_item_append(li, NULL, NULL, NULL, NULL, NULL);
1733    elm_list_item_separator_set(list_it_sep, EINA_TRUE);
1734
1735    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
1736
1737    elm_list_go(li);
1738
1739    evas_object_show(li);
1740
1741    evas_object_resize(win, 320, 300);
1742    evas_object_show(win);
1743 }
1744
1745 /***********/
1746
1747 typedef struct _List_Multi_Data List_Multi_Data;
1748 struct _List_Multi_Data
1749 {
1750    Evas_Object *list;
1751    Evas_Object *rd1;
1752    Evas_Object *rd2;
1753 };
1754
1755 static void
1756 _multi_select_changed_cb(void *data, Evas_Object *obj,
1757                          void *event_info EINA_UNUSED)
1758 {
1759    Eina_Bool multi = elm_check_state_get(obj);
1760    List_Multi_Data *ld = data;
1761    if (!ld) return;
1762
1763    elm_list_multi_select_set(ld->list, multi);
1764    elm_object_disabled_set(ld->rd1, !multi);
1765    elm_object_disabled_set(ld->rd2, !multi);
1766 }
1767
1768 static void
1769 _multi_select_mode_changed_cb(void *data, Evas_Object *obj,
1770                               void *event_info EINA_UNUSED)
1771 {
1772    elm_list_multi_select_mode_set(data, elm_radio_value_get(obj));
1773 }
1774
1775 static void
1776 _multi_select_frame_create(Evas_Object *bx, List_Multi_Data *ld)
1777 {
1778    Evas_Object *fr, *bx2, *bx3, *tg, *rd, *rdg;
1779    if (!ld) return;
1780
1781    fr = elm_frame_add(bx);
1782    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
1783    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.5);
1784    elm_object_text_set(fr, "Multi Select Option");
1785    elm_box_pack_end(bx, fr);
1786    evas_object_show(fr);
1787
1788    bx2 = elm_box_add(fr);
1789    elm_object_content_set(fr, bx2);
1790    evas_object_show(bx2);
1791
1792    tg = elm_check_add(bx2);
1793    elm_object_style_set(tg, "toggle");
1794    elm_object_text_set(tg, "Multi Select Mode");
1795    elm_box_pack_end(bx2, tg);
1796    evas_object_show(tg);
1797
1798    bx3 = elm_box_add(bx2);
1799    elm_box_horizontal_set(bx3, EINA_TRUE);
1800    elm_box_pack_end(bx2, bx3);
1801    evas_object_show(bx3);
1802
1803    ld->rd1 = rdg = rd = elm_radio_add(bx3);
1804    elm_radio_state_value_set(rd, ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT);
1805    elm_object_text_set(rd, "Default Mode");
1806    elm_box_pack_end(bx3, rd);
1807    evas_object_show(rd);
1808    elm_object_disabled_set(rd, EINA_TRUE);
1809    evas_object_smart_callback_add(rd, "changed",
1810                                   _multi_select_mode_changed_cb, ld->list);
1811
1812    ld->rd2 = rd = elm_radio_add(bx3);
1813    elm_radio_state_value_set(rd, ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL);
1814    elm_radio_group_add(rd, rdg);
1815    elm_object_text_set(rd, "With Control Mode");
1816    elm_box_pack_end(bx3, rd);
1817    evas_object_show(rd);
1818    elm_object_disabled_set(rd, EINA_TRUE);
1819    evas_object_smart_callback_add(rd, "changed",
1820                                   _multi_select_mode_changed_cb, ld->list);
1821
1822    evas_object_smart_callback_add(tg, "changed",
1823                                   _multi_select_changed_cb, ld);
1824 }
1825
1826 void
1827 test_list_multi_select(void *data EINA_UNUSED,
1828                        Evas_Object *obj EINA_UNUSED,
1829                        void *event_info EINA_UNUSED)
1830 {
1831    Evas_Object *win, *li, *bx;
1832    List_Multi_Data *ld = calloc(1, sizeof(List_Multi_Data));
1833
1834    win = elm_win_util_standard_add("list-multi-select", "List Multi Select");
1835    elm_win_autodel_set(win, EINA_TRUE);
1836    evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, ld);
1837
1838    bx = elm_box_add(win);
1839    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1840    elm_win_resize_object_add(win, bx);
1841    evas_object_show(bx);
1842
1843    ld->list = li = elm_list_add(bx);
1844    _multi_select_frame_create(bx, ld);
1845
1846    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1847    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
1848    elm_box_pack_end(bx, li);
1849    evas_object_show(li);
1850
1851    elm_list_item_append(li, "you", NULL, NULL, NULL, NULL);
1852    elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL);
1853    elm_list_item_append(li, "out", NULL, NULL, NULL, NULL);
1854    elm_list_item_append(li, "there", NULL, NULL, NULL, NULL);
1855    elm_list_item_append(li, "today", NULL, NULL, NULL, NULL);
1856    elm_list_item_append(li, "?", NULL, NULL, NULL, NULL);
1857    elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL);
1858    elm_list_item_append(li, "are", NULL, NULL, NULL, NULL);
1859    elm_list_item_append(li, "some", NULL, NULL, NULL, NULL);
1860    elm_list_item_append(li, "more", NULL, NULL, NULL, NULL);
1861    elm_list_item_append(li, "items", NULL, NULL, NULL, NULL);
1862    elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL);
1863
1864    elm_list_go(li);
1865
1866    evas_object_resize(win, 320, 500);
1867    evas_object_show(win);
1868 }