18909aeb6564ce7e3c9c01d4bf8569b5f23d23ae
[framework/uifw/elementary.git] / src / bin / test_genlist.c
1 #include <Elementary.h>
2 #ifndef ELM_LIB_QUICKLAUNCH
3
4 /* Hint:
5  * In this example some calls to elm_genlist_item_append() are used which give the 
6  * value of an int as 'item data' and 'func data' after casting into (void*). For 
7  * sure this works only on architectures where sizeof(int)==sizeof(void*).
8  * For real world usage you should hold a data structure or value in your 
9  * application and then give only a pointer to this data as data pointer.
10  */
11
12 typedef struct _Testitem
13 {
14    Elm_Genlist_Item *item;
15    int mode;
16    int onoff;
17 } Testitem;
18
19
20 static Elm_Genlist_Item_Class itc1;
21 char *gl_label_get(const void *data, Evas_Object *obj, const char *part)
22 {
23    char buf[256];
24    snprintf(buf, sizeof(buf), "Item # %i", (int)data);
25    return strdup(buf);
26 }
27
28 Evas_Object *gl_icon_get(const void *data, Evas_Object *obj, const char *part)
29 {
30    char buf[PATH_MAX];
31    Evas_Object *ic = elm_icon_add(obj);
32    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
33    elm_icon_file_set(ic, buf, NULL);
34    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
35    return ic;
36 }
37 Eina_Bool gl_state_get(const void *data, Evas_Object *obj, const char *part)
38 {
39    return EINA_FALSE;
40 }
41 void gl_del(const void *data, Evas_Object *obj)
42 {
43 }
44
45 static void
46 gl_sel(void *data, Evas_Object *obj, void *event_info)
47 {
48    printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info);
49 }
50
51 static void
52 _move(void *data, Evas *evas, Evas_Object *obj, void *event_info)
53 {
54    Evas_Object *gl = data;
55    Evas_Event_Mouse_Move *ev = event_info;
56    int where = 0;
57    Elm_Genlist_Item *gli;
58    gli = elm_genlist_at_xy_item_get(gl, ev->cur.canvas.x, ev->cur.canvas.y, &where);
59    if (gli)
60      printf("over %p, where %i\n", elm_genlist_item_data_get(gli), where);
61    else
62      printf("over none, where %i\n", where);
63 }
64
65 static void
66 _bt50_cb(void *data, Evas_Object *obj, void *event_info)
67 {
68     elm_genlist_item_bring_in(data);
69 }
70
71 static void
72 _bt1500_cb(void *data, Evas_Object *obj, void *event_info)
73 {
74     elm_genlist_item_middle_bring_in(data);
75 }
76
77 static void
78 _gl_selected(void *data, Evas_Object *obj, void *event_info)
79 {
80    printf("selected: %p\n", event_info);
81 }
82
83 static void
84 _gl_clicked(void *data, Evas_Object *obj, void *event_info)
85 {
86    printf("clicked: %p\n", event_info);
87 }
88
89 static void
90 _gl_longpress(void *data, Evas_Object *obj, void *event_info)
91 {
92    printf("longpress %p\n", event_info);
93 }
94
95 void
96 test_genlist(void *data, Evas_Object *obj, void *event_info)
97 {
98    Evas_Object *win, *bg, *gl, *bt_50, *bt_1500, *bx;
99    Evas_Object *over;
100    Elm_Genlist_Item *gli;
101    int i;
102
103    win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC);
104    elm_win_title_set(win, "Genlist");
105    elm_win_autodel_set(win, 1);
106
107    bg = elm_bg_add(win);
108    elm_win_resize_object_add(win, bg);
109    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
110    evas_object_show(bg);
111
112    bx = elm_box_add(win);
113    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
114    elm_win_resize_object_add(win, bx);
115    evas_object_show(bx);
116
117    gl = elm_genlist_add(win);
118    evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
119    evas_object_smart_callback_add(gl, "clicked", _gl_clicked, NULL);
120    evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
121    // FIXME: This causes genlist to resize the horiz axis very slowly :(
122    // Reenable this and resize the window horizontally, then try to resize it back
123    //elm_genlist_horizontal_mode_set(gl, ELM_LIST_LIMIT);
124    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
125    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
126    elm_box_pack_end(bx, gl);
127    evas_object_show(gl);
128
129    over = evas_object_rectangle_add(evas_object_evas_get(win));
130    evas_object_color_set(over, 0, 0, 0, 0);
131    evas_object_event_callback_add(over, EVAS_CALLBACK_MOUSE_MOVE, _move, gl);
132    evas_object_repeat_events_set(over, 1);
133    evas_object_show(over);
134    evas_object_size_hint_weight_set(over, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
135    elm_win_resize_object_add(win, over);
136
137    itc1.item_style     = "default";
138    itc1.func.label_get = gl_label_get;
139    itc1.func.icon_get  = gl_icon_get;
140    itc1.func.state_get = gl_state_get;
141    itc1.func.del       = gl_del;
142
143    bt_50 = elm_button_add(win);
144    elm_button_label_set(bt_50, "Go to 50");
145    evas_object_show(bt_50);
146    elm_box_pack_end(bx, bt_50);
147
148    bt_1500 = elm_button_add(win);
149    elm_button_label_set(bt_1500, "Go to 1500");
150    evas_object_show(bt_1500);
151    elm_box_pack_end(bx, bt_1500);
152
153    for (i = 0; i < 2000; i++)
154      {
155         gli = elm_genlist_item_append(gl, &itc1,
156                                       (void *)i/* item data */,
157                                       NULL/* parent */,
158                                       ELM_GENLIST_ITEM_NONE,
159                                       gl_sel/* func */,
160                                       (void *)(i * 10)/* func data */);
161         if (i == 50)
162           evas_object_smart_callback_add(bt_50, "clicked", _bt50_cb, gli);
163         else if (i == 1500)
164           evas_object_smart_callback_add(bt_1500, "clicked", _bt1500_cb, gli);
165      }
166    evas_object_resize(win, 480, 800);
167    evas_object_show(win);
168 }
169
170 /*************/
171
172 static void
173 my_gl_clear(void *data, Evas_Object *obj, void *event_info)
174 {
175    Evas_Object *gl = data;
176    elm_genlist_clear(gl);
177 }
178
179 static void
180 my_gl_add(void *data, Evas_Object *obj, void *event_info)
181 {
182    Evas_Object *gl = data;
183    Elm_Genlist_Item *gli;
184    static int i = 0;
185
186    itc1.item_style     = "default";
187    itc1.func.label_get = gl_label_get;
188    itc1.func.icon_get  = gl_icon_get;
189    itc1.func.state_get = gl_state_get;
190    itc1.func.del       = gl_del;
191
192    gli = elm_genlist_item_append(gl, &itc1,
193                                  (void *)i/* item data */,
194                                  NULL/* parent */,
195                                  ELM_GENLIST_ITEM_NONE,
196                                  gl_sel/* func */,
197                                  (void *)(i * 10)/* func data */);
198    i++;
199 }
200
201 static void
202 my_gl_insert_before(void *data, Evas_Object *obj, void *event_info)
203 {
204    Evas_Object *gl = data;
205    Elm_Genlist_Item *gli;
206    static int i = 0;
207    Elm_Genlist_Item *gli_selected;
208
209    itc1.item_style     = "default";
210    itc1.func.label_get = gl_label_get;
211    itc1.func.icon_get  = gl_icon_get;
212    itc1.func.state_get = gl_state_get;
213    itc1.func.del       = gl_del;
214
215    gli_selected = elm_genlist_selected_item_get(gl);
216    if(!gli_selected)
217    {
218        printf("no item selected\n");
219        return ;
220    }
221
222    gli = elm_genlist_item_insert_before(gl, &itc1,
223                                  (void *)i/* item data */,
224                                  gli_selected /* item before */,
225                                  ELM_GENLIST_ITEM_NONE,
226                                  gl_sel/* func */,
227                                  (void *)(i * 10)/* func data */);
228    i++;
229 }
230
231 static void
232 my_gl_insert_after(void *data, Evas_Object *obj, void *event_info)
233 {
234    Evas_Object *gl = data;
235    Elm_Genlist_Item *gli;
236    static int i = 0;
237    Elm_Genlist_Item *gli_selected;
238
239    itc1.item_style     = "default";
240    itc1.func.label_get = gl_label_get;
241    itc1.func.icon_get  = gl_icon_get;
242    itc1.func.state_get = gl_state_get;
243    itc1.func.del       = gl_del;
244
245    gli_selected = elm_genlist_selected_item_get(gl);
246    if(!gli_selected)
247    {
248        printf("no item selected\n");
249        return ;
250    }
251
252    gli = elm_genlist_item_insert_after(gl, &itc1,
253                                  (void *)i/* item data */,
254                                  gli_selected /* item after */,
255                                  ELM_GENLIST_ITEM_NONE,
256                                  gl_sel/* func */,
257                                  (void *)(i * 10)/* func data */);
258    i++;
259 }
260
261 static void
262 my_gl_del(void *data, Evas_Object *obj, void *event_info)
263 {
264    Evas_Object *gl = data;
265    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
266    if (!gli)
267      {
268         printf("no item selected\n");
269         return;
270      }
271    elm_genlist_item_del(gli);
272 }
273
274 static void
275 my_gl_disable(void *data, Evas_Object *obj, void *event_info)
276 {
277    Evas_Object *gl = data;
278    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
279    if (!gli)
280      {
281         printf("no item selected\n");
282         return;
283      }
284    elm_genlist_item_disabled_set(gli, 1);
285    elm_genlist_item_selected_set(gli, 0);
286    elm_genlist_item_update(gli);
287 }
288
289 static void
290 my_gl_update_all(void *data, Evas_Object *obj, void *event_info)
291 {
292    Evas_Object *gl = data;
293    int i = 0;
294    Elm_Genlist_Item *it = elm_genlist_first_item_get(gl);
295    while (it)
296      {
297         elm_genlist_item_update(it);
298         printf("%i\n", i);
299         i++;
300         it = elm_genlist_item_next_get(it);
301      }
302 }
303
304 static void
305 my_gl_first(void *data, Evas_Object *obj, void *event_info)
306 {
307    Evas_Object *gl = data;
308    Elm_Genlist_Item *gli = elm_genlist_first_item_get(gl);
309    if (!gli) return;
310    elm_genlist_item_show(gli);
311    elm_genlist_item_selected_set(gli, 1);
312 }
313
314 static void
315 my_gl_last(void *data, Evas_Object *obj, void *event_info)
316 {
317    Evas_Object *gl = data;
318    Elm_Genlist_Item *gli = elm_genlist_last_item_get(gl);
319    if (!gli) return;
320    elm_genlist_item_show(gli);
321    elm_genlist_item_selected_set(gli, 1);
322 }
323
324 static int
325 my_gl_flush_delay(void *data)
326 {
327    elm_all_flush();
328    return 0;
329 }
330
331 static void
332 my_gl_flush(void *data, Evas_Object *obj, void *event_info)
333 {
334    ecore_timer_add(1.2, my_gl_flush_delay, NULL);
335 }
336
337 void
338 test_genlist2(void *data, Evas_Object *obj, void *event_info)
339 {
340    Evas_Object *win, *bg, *gl, *bx, *bx2, *bx3, *bt;
341    Elm_Genlist_Item *gli[10];
342    char buf[PATH_MAX];
343
344    win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC);
345    elm_win_title_set(win, "Genlist 2");
346    elm_win_autodel_set(win, 1);
347
348    bg = elm_bg_add(win);
349    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR);
350    elm_bg_file_set(bg, buf, NULL);
351    elm_win_resize_object_add(win, bg);
352    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
353    evas_object_show(bg);
354
355    bx = elm_box_add(win);
356    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
357    elm_win_resize_object_add(win, bx);
358    evas_object_show(bx);
359
360    gl = elm_genlist_add(win);
361    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
362    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
363    evas_object_show(gl);
364
365    itc1.item_style     = "default";
366    itc1.func.label_get = gl_label_get;
367    itc1.func.icon_get  = gl_icon_get;
368    itc1.func.state_get = gl_state_get;
369    itc1.func.del       = gl_del;
370
371    gli[0] = elm_genlist_item_append(gl, &itc1,
372                                     (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
373                                     (void *)1001/* func data */);
374    gli[1] = elm_genlist_item_append(gl, &itc1,
375                                     (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
376                                     (void *)1002/* func data */);
377    gli[2] = elm_genlist_item_append(gl, &itc1,
378                                     (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
379                                     (void *)1003/* func data */);
380    gli[3] = elm_genlist_item_prepend(gl, &itc1,
381                                      (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
382                                      (void *)1004/* func data */);
383    gli[4] = elm_genlist_item_prepend(gl, &itc1,
384                                      (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
385                                      (void *)1005/* func data */);
386    gli[5] = elm_genlist_item_insert_before(gl, &itc1,
387                                            (void *)1006/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
388                                            (void *)1006/* func data */);
389    gli[6] = elm_genlist_item_insert_after(gl, &itc1,
390                                           (void *)1007/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
391                                           (void *)1007/* func data */);
392
393    elm_box_pack_end(bx, gl);
394
395    bx2 = elm_box_add(win);
396    elm_box_horizontal_set(bx2, 1);
397    elm_box_homogenous_set(bx2, 1);
398    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
399    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
400
401    bt = elm_button_add(win);
402    elm_button_label_set(bt, "/\\");
403    evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl);
404    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
405    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
406    elm_box_pack_end(bx2, bt);
407    evas_object_show(bt);
408
409    bt = elm_button_add(win);
410    elm_button_label_set(bt, "\\/");
411    evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl);
412    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
413    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
414    elm_box_pack_end(bx2, bt);
415    evas_object_show(bt);
416
417    bt = elm_button_add(win);
418    elm_button_label_set(bt, "#");
419    evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl);
420    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
421    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
422    elm_box_pack_end(bx2, bt);
423    evas_object_show(bt);
424
425    bt = elm_button_add(win);
426    elm_button_label_set(bt, "U");
427    evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl);
428    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
429    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
430    elm_box_pack_end(bx2, bt);
431    evas_object_show(bt);
432
433    elm_box_pack_end(bx, bx2);
434    evas_object_show(bx2);
435
436    bx2 = elm_box_add(win);
437    elm_box_horizontal_set(bx2, 1);
438    elm_box_homogenous_set(bx2, 1);
439    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
440    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
441
442    bt = elm_button_add(win);
443    elm_button_label_set(bt, "X");
444    evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl);
445    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
446    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
447    elm_box_pack_end(bx2, bt);
448    evas_object_show(bt);
449
450    bt = elm_button_add(win);
451    elm_button_label_set(bt, "+");
452    evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl);
453    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
454    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
455    elm_box_pack_end(bx2, bt);
456    evas_object_show(bt);
457
458    bt = elm_button_add(win);
459    elm_button_label_set(bt, "-");
460    evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl);
461    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
462    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
463    elm_box_pack_end(bx2, bt);
464    evas_object_show(bt);
465
466    elm_box_pack_end(bx, bx2);
467    evas_object_show(bx2);
468
469    bx3 = elm_box_add(win);
470    elm_box_horizontal_set(bx3, 1);
471    elm_box_homogenous_set(bx3, 1);
472    evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
473    evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
474
475    bt = elm_button_add(win);
476    elm_button_label_set(bt, "+ before");
477    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before, gl);
478    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
479    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
480    elm_box_pack_end(bx3, bt);
481    evas_object_show(bt);
482
483    bt = elm_button_add(win);
484    elm_button_label_set(bt, "+ after");
485    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after, gl);
486    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
487    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
488    elm_box_pack_end(bx3, bt);
489    evas_object_show(bt);
490
491    bt = elm_button_add(win);
492    elm_button_label_set(bt, "Flush");
493    evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl);
494    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
495    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
496    elm_box_pack_end(bx3, bt);
497    evas_object_show(bt);
498
499    elm_box_pack_end(bx, bx3);
500    evas_object_show(bx3);
501
502
503    evas_object_resize(win, 320, 320);
504    evas_object_show(win);
505 }
506
507 /*************/
508
509 static Elm_Genlist_Item_Class itc2;
510 char *gl2_label_get(const void *data, Evas_Object *obj, const char *part)
511 {
512    const Testitem *tit = data;
513    char buf[256];
514    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
515    return strdup(buf);
516 }
517 Evas_Object *gl2_icon_get(const void *data, Evas_Object *obj, const char *part)
518 {
519    const Testitem *tit = data;
520    char buf[PATH_MAX];
521    Evas_Object *ic = elm_icon_add(obj);
522    if (!strcmp(part, "elm.swallow.icon"))
523      {
524         if ((tit->mode & 0x3) == 0)
525           snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
526         else if ((tit->mode & 0x3) == 1)
527           snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR);
528         else if ((tit->mode & 0x3) == 2)
529           snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", PACKAGE_DATA_DIR);
530         else if ((tit->mode & 0x3) == 3)
531           snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", PACKAGE_DATA_DIR);
532         elm_icon_file_set(ic, buf, NULL);
533      }
534    else if (!strcmp(part, "elm.swallow.end"))
535      {
536         if ((tit->mode & 0x3) == 0)
537           snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", PACKAGE_DATA_DIR);
538         else if ((tit->mode & 0x3) == 1)
539           snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR);
540         else if ((tit->mode & 0x3) == 2)
541           snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR);
542         else if ((tit->mode & 0x3) == 3)
543           snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR);
544         elm_icon_file_set(ic, buf, NULL);
545      }
546    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
547    return ic;
548 }
549 Eina_Bool gl2_state_get(const void *data, Evas_Object *obj, const char *part)
550 {
551    return EINA_FALSE;
552 }
553 void gl2_del(const void *data, Evas_Object *obj)
554 {
555 }
556
557 static void
558 my_gl_update(void *data, Evas_Object *obj, void *event_info)
559 {
560    Testitem *tit = data;
561    tit->mode++;
562    elm_genlist_item_update(tit->item);
563 }
564
565 void
566 test_genlist3(void *data, Evas_Object *obj, void *event_info)
567 {
568    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
569    static Testitem tit[3];
570
571    win = elm_win_add(NULL, "genlist-3", ELM_WIN_BASIC);
572    elm_win_title_set(win, "Genlist 3");
573    elm_win_autodel_set(win, 1);
574
575    bg = elm_bg_add(win);
576    elm_win_resize_object_add(win, bg);
577    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
578    evas_object_show(bg);
579
580    bx = elm_box_add(win);
581    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
582    elm_win_resize_object_add(win, bx);
583    evas_object_show(bx);
584
585    gl = elm_genlist_add(win);
586    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
587    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
588    evas_object_show(gl);
589
590    itc2.item_style     = "default";
591    itc2.func.label_get = gl2_label_get;
592    itc2.func.icon_get  = gl2_icon_get;
593    itc2.func.state_get = gl2_state_get;
594    itc2.func.del       = gl2_del;
595
596    tit[0].mode = 0;
597    tit[0].item = elm_genlist_item_append(gl, &itc2,
598                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
599                                          NULL/* func data */);
600    tit[1].mode = 1;
601    tit[1].item = elm_genlist_item_append(gl, &itc2,
602                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
603                                          NULL/* func data */);
604    tit[2].mode = 2;
605    tit[2].item = elm_genlist_item_append(gl, &itc2,
606                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
607                                          NULL/* func data */);
608
609    elm_box_pack_end(bx, gl);
610    evas_object_show(bx);
611
612    bx2 = elm_box_add(win);
613    elm_box_horizontal_set(bx2, 1);
614    elm_box_homogenous_set(bx2, 1);
615    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
616    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
617
618    bt = elm_button_add(win);
619    elm_button_label_set(bt, "[1]");
620    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
621    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
622    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
623    elm_box_pack_end(bx2, bt);
624    evas_object_show(bt);
625
626    bt = elm_button_add(win);
627    elm_button_label_set(bt, "[2]");
628    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
629    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
630    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
631    elm_box_pack_end(bx2, bt);
632    evas_object_show(bt);
633
634    bt = elm_button_add(win);
635    elm_button_label_set(bt, "[3]");
636    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
637    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
638    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
639    elm_box_pack_end(bx2, bt);
640    evas_object_show(bt);
641
642    elm_box_pack_end(bx, bx2);
643    evas_object_show(bx2);
644
645    evas_object_resize(win, 320, 320);
646    evas_object_show(win);
647 }
648
649 /*************/
650
651 static void
652 my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info)
653 {
654    Testitem *tit = data;
655    tit->onoff = elm_check_state_get(obj);
656    printf("item %p onoff = %i\n", tit, tit->onoff);
657 }
658
659 static Elm_Genlist_Item_Class itc3;
660 char *gl3_label_get(const void *data, Evas_Object *obj, const char *part)
661 {
662    const Testitem *tit = data;
663    char buf[256];
664    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
665    return strdup(buf);
666 }
667 Evas_Object *gl3_icon_get(const void *data, Evas_Object *obj, const char *part)
668 {
669    const Testitem *tit = data;
670    char buf[PATH_MAX];
671    if (!strcmp(part, "elm.swallow.icon"))
672      {
673         Evas_Object *lb;
674         
675         lb = elm_label_add(obj);
676         elm_label_line_wrap_set(lb, 1);
677         elm_label_wrap_width_set(lb, 201);
678         elm_label_label_set(lb, "ashj ascjscjh n asjkl hcjlh ls hzshnn zjh sh zxjcjsnd h dfw sdv edev efe fwefvv vsd cvs ws wf  fvwf wd fwe f  we wef we wfe rfwewef wfv wswf wefg sdfws w wsdcfwcf wsc vdv  sdsd sdcd cv wsc sdcv wsc d sdcdcsd sdcdsc wdvd sdcsd wscxcv wssvd sd");
679         evas_object_show(lb);
680         return lb;
681         
682         Evas_Object *bx = elm_box_add(obj);
683         Evas_Object *ic;
684         ic = elm_icon_add(obj);
685         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
686         elm_icon_file_set(ic, buf, NULL);
687         elm_icon_scale_set(ic, 0, 0);
688         evas_object_show(ic);
689         elm_box_pack_end(bx, ic);
690         ic = elm_icon_add(obj);
691         elm_icon_file_set(ic, buf, NULL);
692         elm_icon_scale_set(ic, 0, 0);
693         evas_object_show(ic);
694         elm_box_pack_end(bx, ic);
695         elm_box_horizontal_set(bx, 1);
696         evas_object_show(bx);
697         return bx;
698      }
699    else if (!strcmp(part, "elm.swallow.end"))
700      {
701         Evas_Object *ck;
702         ck = elm_check_add(obj);
703         evas_object_propagate_events_set(ck, 0);
704         elm_check_state_set(ck, tit->onoff);
705         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data);
706         evas_object_show(ck);
707         return ck;
708      }
709    return NULL;
710 }
711 Eina_Bool gl3_state_get(const void *data, Evas_Object *obj, const char *part)
712 {
713    return EINA_FALSE;
714 }
715 void gl3_del(const void *data, Evas_Object *obj)
716 {
717 }
718
719 void
720 test_genlist4(void *data, Evas_Object *obj, void *event_info)
721 {
722    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
723    static Testitem tit[3];
724
725    win = elm_win_add(NULL, "genlist-4", ELM_WIN_BASIC);
726    elm_win_title_set(win, "Genlist 4");
727    elm_win_autodel_set(win, 1);
728
729    bg = elm_bg_add(win);
730    elm_win_resize_object_add(win, bg);
731    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
732    evas_object_show(bg);
733
734    bx = elm_box_add(win);
735    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
736    elm_win_resize_object_add(win, bx);
737    evas_object_show(bx);
738
739    gl = elm_genlist_add(win);
740    elm_genlist_multi_select_set(gl, 1);
741    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
742    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
743    evas_object_show(gl);
744
745    itc3.item_style     = "default";
746    itc3.func.label_get = gl3_label_get;
747    itc3.func.icon_get  = gl3_icon_get;
748    itc3.func.state_get = gl3_state_get;
749    itc3.func.del       = gl3_del;
750
751    tit[0].mode = 0;
752    tit[0].item = elm_genlist_item_append(gl, &itc3,
753                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
754                                          NULL/* func data */);
755    tit[1].mode = 1;
756    tit[1].item = elm_genlist_item_append(gl, &itc3,
757                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
758                                          NULL/* func data */);
759    tit[2].mode = 2;
760    tit[2].item = elm_genlist_item_append(gl, &itc3,
761                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
762                                          NULL/* func data */);
763
764    elm_box_pack_end(bx, gl);
765    evas_object_show(bx);
766
767    bx2 = elm_box_add(win);
768    elm_box_horizontal_set(bx2, 1);
769    elm_box_homogenous_set(bx2, 1);
770    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
771    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
772
773    bt = elm_button_add(win);
774    elm_button_label_set(bt, "[1]");
775    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
776    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
777    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
778    elm_box_pack_end(bx2, bt);
779    evas_object_show(bt);
780
781    bt = elm_button_add(win);
782    elm_button_label_set(bt, "[2]");
783    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
784    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
785    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
786    elm_box_pack_end(bx2, bt);
787    evas_object_show(bt);
788
789    bt = elm_button_add(win);
790    elm_button_label_set(bt, "[3]");
791    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
792    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
793    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
794    elm_box_pack_end(bx2, bt);
795    evas_object_show(bt);
796
797    elm_box_pack_end(bx, bx2);
798    evas_object_show(bx2);
799
800    evas_object_resize(win, 320, 320);
801    evas_object_show(win);
802 }
803
804
805 /*************/
806 static void
807 my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info)
808 {
809    Testitem *tit = data;
810    tit->onoff = elm_check_state_get(obj);
811    printf("item %p onoff = %i\n", tit, tit->onoff);
812 }
813
814 static Elm_Genlist_Item_Class itc5;
815 char *gl5_label_get(const void *data, Evas_Object *obj, const char *part)
816 {
817    const Testitem *tit = data;
818    char buf[256];
819    if (!strcmp(part, "elm.text"))
820      {
821         snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
822      }
823    else if (!strcmp(part, "elm.text.sub"))
824      {
825         snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode);
826      }
827    return strdup(buf);
828 }
829 Evas_Object *gl5_icon_get(const void *data, Evas_Object *obj, const char *part)
830 {
831    const Testitem *tit = data;
832    char buf[PATH_MAX];
833    if (!strcmp(part, "elm.swallow.icon"))
834      {
835         Evas_Object *bx = elm_box_add(obj);
836         Evas_Object *ic;
837         elm_box_horizontal_set(bx, 1);
838         ic = elm_icon_add(obj);
839         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
840         elm_icon_file_set(ic, buf, NULL);
841         elm_icon_scale_set(ic, 0, 0);
842         evas_object_show(ic);
843         elm_box_pack_end(bx, ic);
844         ic = elm_icon_add(obj);
845         elm_icon_file_set(ic, buf, NULL);
846         elm_icon_scale_set(ic, 0, 0);
847         evas_object_show(ic);
848         elm_box_pack_end(bx, ic);
849         elm_box_horizontal_set(bx, 1);
850         evas_object_show(bx);
851         return bx;
852      }
853    else if (!strcmp(part, "elm.swallow.end"))
854      {
855         Evas_Object *ck;
856         ck = elm_check_add(obj);
857         evas_object_propagate_events_set(ck, 0);
858         elm_check_state_set(ck, tit->onoff);
859         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data);
860         evas_object_show(ck);
861         return ck;
862      }
863    return NULL;
864 }
865 Eina_Bool gl5_state_get(const void *data, Evas_Object *obj, const char *part)
866 {
867    return EINA_FALSE;
868 }
869 void gl5_del(const void *data, Evas_Object *obj)
870 {
871 }
872
873 static void
874 item_drag_up(void *data, Evas_Object *obj, void *event_info)
875 {
876    printf("drag up\n");
877 }
878
879 static void
880 item_drag_down(void *data, Evas_Object *obj, void *event_info)
881 {
882    printf("drag down\n");
883 }
884
885 static void
886 item_drag_left(void *data, Evas_Object *obj, void *event_info)
887 {
888    printf("drag left\n");
889 }
890
891 static void
892 item_drag_right(void *data, Evas_Object *obj, void *event_info)
893 {
894    printf("drag right\n");
895 }
896
897 static void
898 item_drag(void *data, Evas_Object *obj, void *event_info)
899 {
900    printf("drag\n");
901 }
902
903 static void
904 item_drag_stop(void *data, Evas_Object *obj, void *event_info)
905 {
906    printf("drag stop\n");
907 }
908
909 static void
910 item_longpress(void *data, Evas_Object *obj, void *event_info)
911 {
912    printf("longpress\n");
913 }
914
915 void
916 test_genlist5(void *data, Evas_Object *obj, void *event_info)
917 {
918    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
919    static Testitem tit[3];
920
921    win = elm_win_add(NULL, "genlist-5", ELM_WIN_BASIC);
922    elm_win_title_set(win, "Genlist 5");
923    elm_win_autodel_set(win, 1);
924
925    bg = elm_bg_add(win);
926    elm_win_resize_object_add(win, bg);
927    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
928    evas_object_show(bg);
929
930    bx = elm_box_add(win);
931    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
932    elm_win_resize_object_add(win, bx);
933    evas_object_show(bx);
934
935    gl = elm_genlist_add(win);
936    elm_genlist_always_select_mode_set(gl, 1);
937    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
938    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
939    evas_object_show(gl);
940    itc5.item_style     = "double_label";
941    itc5.func.label_get = gl5_label_get;
942    itc5.func.icon_get  = gl5_icon_get;
943    itc5.func.state_get = gl5_state_get;
944    itc5.func.del       = gl5_del;
945
946    tit[0].mode = 0;
947    tit[0].item = elm_genlist_item_append(gl, &itc5,
948                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
949                                          NULL/* func data */);
950    tit[1].mode = 1;
951    tit[1].item = elm_genlist_item_append(gl, &itc5,
952                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
953                                          NULL/* func data */);
954    tit[2].mode = 2;
955    tit[2].item = elm_genlist_item_append(gl, &itc5,
956                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
957                                          NULL/* func data */);
958
959    elm_box_pack_end(bx, gl);
960    evas_object_show(bx);
961
962    evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL);
963    evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
964    evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
965    evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
966    evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
967    evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
968    evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
969
970    bx2 = elm_box_add(win);
971    elm_box_horizontal_set(bx2, 1);
972    elm_box_homogenous_set(bx2, 1);
973    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
974    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
975
976    bt = elm_button_add(win);
977    elm_button_label_set(bt, "[1]");
978    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
979    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
980    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
981    elm_box_pack_end(bx2, bt);
982    evas_object_show(bt);
983
984    bt = elm_button_add(win);
985    elm_button_label_set(bt, "[2]");
986    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
987    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
988    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
989    elm_box_pack_end(bx2, bt);
990    evas_object_show(bt);
991
992    bt = elm_button_add(win);
993    elm_button_label_set(bt, "[3]");
994    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
995    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
996    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
997    elm_box_pack_end(bx2, bt);
998    evas_object_show(bt);
999
1000    elm_box_pack_end(bx, bx2);
1001    evas_object_show(bx2);
1002
1003    evas_object_resize(win, 320, 320);
1004    evas_object_show(win);
1005 }
1006
1007 /*************/
1008
1009 static Elm_Genlist_Item_Class itc4;
1010
1011 static void
1012 gl4_sel(void *data, Evas_Object *obj, void *event_info)
1013 {
1014 }
1015 static void
1016 gl4_exp(void *data, Evas_Object *obj, void *event_info)
1017 {
1018    Elm_Genlist_Item *it = event_info;
1019    Evas_Object *gl = elm_genlist_item_genlist_get(it);
1020    int val = (int)elm_genlist_item_data_get(it);
1021    val *= 10;
1022    elm_genlist_item_append(gl, &itc4,
1023                            (void *)(val + 1)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1024                            NULL/* func data */);
1025    elm_genlist_item_append(gl, &itc4,
1026                            (void *)(val + 2)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1027                            NULL/* func data */);
1028    elm_genlist_item_append(gl, &itc4,
1029                            (void *)(val + 3)/* item data */, it/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1030                            NULL/* func data */);
1031 }
1032 static void
1033 gl4_con(void *data, Evas_Object *obj, void *event_info)
1034 {
1035    Elm_Genlist_Item *it = event_info;
1036    elm_genlist_item_subitems_clear(it);
1037 }
1038
1039 static void
1040 gl4_exp_req(void *data, Evas_Object *obj, void *event_info)
1041 {
1042    Elm_Genlist_Item *it = event_info;
1043    elm_genlist_item_expanded_set(it, 1);
1044 }
1045 static void
1046 gl4_con_req(void *data, Evas_Object *obj, void *event_info)
1047 {
1048    Elm_Genlist_Item *it = event_info;
1049    elm_genlist_item_expanded_set(it, 0);
1050 }
1051
1052 char *gl4_label_get(const void *data, Evas_Object *obj, const char *part)
1053 {
1054    char buf[256];
1055    snprintf(buf, sizeof(buf), "Item mode %i", (int)data);
1056    return strdup(buf);
1057 }
1058 Evas_Object *gl4_icon_get(const void *data, Evas_Object *obj, const char *part)
1059 {
1060    char buf[PATH_MAX];
1061    if (!strcmp(part, "elm.swallow.icon"))
1062      {
1063         Evas_Object *ic = elm_icon_add(obj);
1064         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
1065         elm_icon_file_set(ic, buf, NULL);
1066         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1067         evas_object_show(ic);
1068         return ic;
1069      }
1070    else if (!strcmp(part, "elm.swallow.end"))
1071      {
1072         Evas_Object *ck;
1073         ck = elm_check_add(obj);
1074         evas_object_show(ck);
1075         return ck;
1076      }
1077    return NULL;
1078 }
1079 Eina_Bool gl4_state_get(const void *data, Evas_Object *obj, const char *part)
1080 {
1081    return EINA_FALSE;
1082 }
1083 void gl4_del(const void *data, Evas_Object *obj)
1084 {
1085 }
1086
1087 void
1088 test_genlist6(void *data, Evas_Object *obj, void *event_info)
1089 {
1090    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
1091
1092    win = elm_win_add(NULL, "genlist-tree", ELM_WIN_BASIC);
1093    elm_win_title_set(win, "Genlist Tree");
1094    elm_win_autodel_set(win, 1);
1095
1096    bg = elm_bg_add(win);
1097    elm_win_resize_object_add(win, bg);
1098    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1099    evas_object_show(bg);
1100
1101    bx = elm_box_add(win);
1102    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1103    elm_win_resize_object_add(win, bx);
1104    evas_object_show(bx);
1105
1106    gl = elm_genlist_add(win);
1107    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1108    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1109    evas_object_show(gl);
1110
1111    itc4.item_style     = "default";
1112    itc4.func.label_get = gl4_label_get;
1113    itc4.func.icon_get  = gl4_icon_get;
1114    itc4.func.state_get = gl4_state_get;
1115    itc4.func.del       = gl4_del;
1116
1117    elm_genlist_item_append(gl, &itc4,
1118                            (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1119                            NULL/* func data */);
1120    elm_genlist_item_append(gl, &itc4,
1121                            (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1122                            NULL/* func data */);
1123    elm_genlist_item_append(gl, &itc4,
1124                            (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1125                            NULL/* func data */);
1126
1127    evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl);
1128    evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl);
1129    evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl);
1130    evas_object_smart_callback_add(gl, "contracted", gl4_con, gl);
1131
1132    elm_box_pack_end(bx, gl);
1133    evas_object_show(bx);
1134
1135    bx2 = elm_box_add(win);
1136    elm_box_horizontal_set(bx2, 1);
1137    elm_box_homogenous_set(bx2, 1);
1138    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1139    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1140
1141    bt = elm_button_add(win);
1142    elm_button_label_set(bt, "[1]");
1143 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1144    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1145    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1146    elm_box_pack_end(bx2, bt);
1147    evas_object_show(bt);
1148
1149    bt = elm_button_add(win);
1150    elm_button_label_set(bt, "[2]");
1151 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1152    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1153    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1154    elm_box_pack_end(bx2, bt);
1155    evas_object_show(bt);
1156
1157    bt = elm_button_add(win);
1158    elm_button_label_set(bt, "[3]");
1159 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1160    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1161    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1162    elm_box_pack_end(bx2, bt);
1163    evas_object_show(bt);
1164
1165    elm_box_pack_end(bx, bx2);
1166    evas_object_show(bx2);
1167
1168    evas_object_resize(win, 320, 320);
1169    evas_object_show(win);
1170 }
1171 #endif