================================================================
[framework/uifw/elementary.git] / src / bin / test_genlist.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 /* Hint:
8  * In this example some calls to elm_genlist_item_append() are used which give the 
9  * value of an int as 'item data' and 'func data' after casting into (void*). For 
10  * sure this works only on architectures where sizeof(int)==sizeof(void*).
11  * For real world usage you should hold a data structure or value in your 
12  * application and then give only a pointer to this data as data pointer.
13  */
14
15 typedef struct _Testitem
16 {
17    Elm_Genlist_Item *item;
18    int mode;
19    int onoff;
20 } Testitem;
21
22
23 static Elm_Genlist_Item_Class itc1;
24 char *gl_label_get(const void *data, Evas_Object *obj, const char *part)
25 {
26    char buf[256];
27    snprintf(buf, sizeof(buf), "Item # %i", (int)data);
28    return strdup(buf);
29 }
30
31 Evas_Object *gl_icon_get(const void *data, Evas_Object *obj, const char *part)
32 {
33    char buf[PATH_MAX];
34    Evas_Object *ic = elm_icon_add(obj);
35    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
36    elm_icon_file_set(ic, buf, NULL);
37    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
38    return ic;
39 }
40 Eina_Bool gl_state_get(const void *data, Evas_Object *obj, const char *part)
41 {
42    return EINA_FALSE;
43 }
44 void gl_del(const void *data, Evas_Object *obj)
45 {
46 }
47
48 static void
49 gl_sel(void *data, Evas_Object *obj, void *event_info)
50 {
51    printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info);
52 }
53
54 static void
55 _move(void *data, Evas *evas, Evas_Object *obj, void *event_info)
56 {
57    Evas_Object *gl = data;
58    Evas_Event_Mouse_Move *ev = event_info;
59    int where = 0;
60    Elm_Genlist_Item *gli;
61    gli = elm_genlist_at_xy_item_get(gl, ev->cur.canvas.x, ev->cur.canvas.y, &where);
62    if (gli)
63      printf("over %p, where %i\n", elm_genlist_item_data_get(gli), where);
64    else
65      printf("over none, where %i\n", where);
66 }
67
68 static void
69 _bt50_cb(void *data, Evas_Object *obj, void *event_info)
70 {
71     elm_genlist_item_bring_in(data);
72 }
73
74 static void
75 _bt1500_cb(void *data, Evas_Object *obj, void *event_info)
76 {
77     elm_genlist_item_middle_bring_in(data);
78 }
79
80 static void
81 _gl_selected(void *data, Evas_Object *obj, void *event_info)
82 {
83    printf("selected: %p\n", event_info);
84 }
85
86 static void
87 _gl_clicked(void *data, Evas_Object *obj, void *event_info)
88 {
89    printf("clicked: %p\n", event_info);
90 }
91
92 static void
93 _gl_longpress(void *data, Evas_Object *obj, void *event_info)
94 {
95    printf("longpress %p\n", event_info);
96 }
97
98 void
99 test_genlist(void *data, Evas_Object *obj, void *event_info)
100 {
101    Evas_Object *win, *bg, *gl, *bt_50, *bt_1500, *bx;
102    Evas_Object *over;
103    Elm_Genlist_Item *gli;
104    int i;
105
106    win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC);
107    elm_win_title_set(win, "Genlist");
108    elm_win_autodel_set(win, 1);
109
110    bg = elm_bg_add(win);
111    elm_win_resize_object_add(win, bg);
112    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113    evas_object_show(bg);
114
115    bx = elm_box_add(win);
116    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
117    elm_win_resize_object_add(win, bx);
118    evas_object_show(bx);
119
120    gl = elm_genlist_add(win);
121    evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
122    evas_object_smart_callback_add(gl, "clicked", _gl_clicked, NULL);
123    evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
124    // FIXME: This causes genlist to resize the horiz axis very slowly :(
125    // Reenable this and resize the window horizontally, then try to resize it back
126    //elm_genlist_horizontal_mode_set(gl, ELM_LIST_LIMIT);
127    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
128    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
129    elm_box_pack_end(bx, gl);
130    evas_object_show(gl);
131
132    over = evas_object_rectangle_add(evas_object_evas_get(win));
133    evas_object_color_set(over, 0, 0, 0, 0);
134    evas_object_event_callback_add(over, EVAS_CALLBACK_MOUSE_MOVE, _move, gl);
135    evas_object_repeat_events_set(over, 1);
136    evas_object_show(over);
137    evas_object_size_hint_weight_set(over, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
138    elm_win_resize_object_add(win, over);
139
140    itc1.item_style     = "default";
141    itc1.func.label_get = gl_label_get;
142    itc1.func.icon_get  = gl_icon_get;
143    itc1.func.state_get = gl_state_get;
144    itc1.func.del       = gl_del;
145
146    bt_50 = elm_button_add(win);
147    elm_button_label_set(bt_50, "Go to 50");
148    evas_object_show(bt_50);
149    elm_box_pack_end(bx, bt_50);
150
151    bt_1500 = elm_button_add(win);
152    elm_button_label_set(bt_1500, "Go to 1500");
153    evas_object_show(bt_1500);
154    elm_box_pack_end(bx, bt_1500);
155
156    for (i = 0; i < 2000; i++)
157      {
158         gli = elm_genlist_item_append(gl, &itc1,
159                                       (void *)i/* item data */,
160                                       NULL/* parent */,
161                                       ELM_GENLIST_ITEM_NONE,
162                                       gl_sel/* func */,
163                                       (void *)(i * 10)/* func data */);
164         if (i == 50)
165           evas_object_smart_callback_add(bt_50, "clicked", _bt50_cb, gli);
166         else if (i == 1500)
167           evas_object_smart_callback_add(bt_1500, "clicked", _bt1500_cb, gli);
168      }
169    evas_object_resize(win, 480, 800);
170    evas_object_show(win);
171 }
172
173 /*************/
174
175 static void
176 my_gl_clear(void *data, Evas_Object *obj, void *event_info)
177 {
178    Evas_Object *gl = data;
179    elm_genlist_clear(gl);
180 }
181
182 static void
183 my_gl_add(void *data, Evas_Object *obj, void *event_info)
184 {
185    Evas_Object *gl = data;
186    Elm_Genlist_Item *gli;
187    static int i = 0;
188
189    itc1.item_style     = "default";
190    itc1.func.label_get = gl_label_get;
191    itc1.func.icon_get  = gl_icon_get;
192    itc1.func.state_get = gl_state_get;
193    itc1.func.del       = gl_del;
194
195    gli = elm_genlist_item_append(gl, &itc1,
196                                  (void *)i/* item data */,
197                                  NULL/* parent */,
198                                  ELM_GENLIST_ITEM_NONE,
199                                  gl_sel/* func */,
200                                  (void *)(i * 10)/* func data */);
201    i++;
202 }
203
204 static void
205 my_gl_insert_before(void *data, Evas_Object *obj, void *event_info)
206 {
207    Evas_Object *gl = data;
208    Elm_Genlist_Item *gli;
209    static int i = 0;
210    Elm_Genlist_Item *gli_selected;
211
212    itc1.item_style     = "default";
213    itc1.func.label_get = gl_label_get;
214    itc1.func.icon_get  = gl_icon_get;
215    itc1.func.state_get = gl_state_get;
216    itc1.func.del       = gl_del;
217
218    gli_selected = elm_genlist_selected_item_get(gl);
219    if(!gli_selected)
220    {
221        printf("no item selected\n");
222        return ;
223    }
224
225    elm_genlist_item_insert_before(gl, &itc1,
226                                   (void *)(long)i/* item data */,
227                                   NULL/* parent */,
228                                  gli_selected /* item before */,
229                                  ELM_GENLIST_ITEM_NONE,
230                                  gl_sel/* func */,
231                                   (void *)(long)(i * 10)/* func data */);
232
233    i++;
234 }
235
236 static void
237 my_gl_insert_after(void *data, Evas_Object *obj, void *event_info)
238 {
239    Evas_Object *gl = data;
240    Elm_Genlist_Item *gli;
241    static int i = 0;
242    Elm_Genlist_Item *gli_selected;
243
244    itc1.item_style     = "default";
245    itc1.func.label_get = gl_label_get;
246    itc1.func.icon_get  = gl_icon_get;
247    itc1.func.state_get = gl_state_get;
248    itc1.func.del       = gl_del;
249
250    gli_selected = elm_genlist_selected_item_get(gl);
251    if(!gli_selected)
252    {
253        printf("no item selected\n");
254        return ;
255    }
256
257    elm_genlist_item_insert_after(gl, &itc1,
258                                  (void *)(long)i/* item data */,
259                                  NULL/* parent */,
260                                  gli_selected /* item after */,
261                                  ELM_GENLIST_ITEM_NONE,
262                                  gl_sel/* func */,
263                                  (void *)(long)(i * 10)/* func data */);
264
265    i++;
266 }
267
268 static void
269 my_gl_del(void *data, Evas_Object *obj, void *event_info)
270 {
271    Evas_Object *gl = data;
272    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
273    if (!gli)
274      {
275         printf("no item selected\n");
276         return;
277      }
278    elm_genlist_item_del(gli);
279 }
280
281 static void
282 my_gl_disable(void *data, Evas_Object *obj, void *event_info)
283 {
284    Evas_Object *gl = data;
285    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
286    if (!gli)
287      {
288         printf("no item selected\n");
289         return;
290      }
291    elm_genlist_item_disabled_set(gli, 1);
292    elm_genlist_item_selected_set(gli, 0);
293    elm_genlist_item_update(gli);
294 }
295
296 static void
297 my_gl_update_all(void *data, Evas_Object *obj, void *event_info)
298 {
299    Evas_Object *gl = data;
300    int i = 0;
301    Elm_Genlist_Item *it = elm_genlist_first_item_get(gl);
302    while (it)
303      {
304         elm_genlist_item_update(it);
305         printf("%i\n", i);
306         i++;
307         it = elm_genlist_item_next_get(it);
308      }
309 }
310
311 static void
312 my_gl_first(void *data, Evas_Object *obj, void *event_info)
313 {
314    Evas_Object *gl = data;
315    Elm_Genlist_Item *gli = elm_genlist_first_item_get(gl);
316    if (!gli) return;
317    elm_genlist_item_show(gli);
318    elm_genlist_item_selected_set(gli, 1);
319 }
320
321 static void
322 my_gl_last(void *data, Evas_Object *obj, void *event_info)
323 {
324    Evas_Object *gl = data;
325    Elm_Genlist_Item *gli = elm_genlist_last_item_get(gl);
326    if (!gli) return;
327    elm_genlist_item_show(gli);
328    elm_genlist_item_selected_set(gli, 1);
329 }
330
331 static Eina_Bool
332 my_gl_flush_delay(void *data)
333 {
334    elm_all_flush();
335    return ECORE_CALLBACK_CANCEL;
336 }
337
338 static void
339 my_gl_flush(void *data, Evas_Object *obj, void *event_info)
340 {
341    ecore_timer_add(1.2, my_gl_flush_delay, NULL);
342 }
343
344 void
345 test_genlist2(void *data, Evas_Object *obj, void *event_info)
346 {
347    Evas_Object *win, *bg, *gl, *bx, *bx2, *bx3, *bt;
348    Elm_Genlist_Item *gli[10];
349    char buf[PATH_MAX];
350
351    win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC);
352    elm_win_title_set(win, "Genlist 2");
353    elm_win_autodel_set(win, 1);
354
355    bg = elm_bg_add(win);
356    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR);
357    elm_bg_file_set(bg, buf, NULL);
358    elm_win_resize_object_add(win, bg);
359    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
360    evas_object_show(bg);
361
362    bx = elm_box_add(win);
363    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
364    elm_win_resize_object_add(win, bx);
365    evas_object_show(bx);
366
367    gl = elm_genlist_add(win);
368    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
369    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
370    evas_object_show(gl);
371
372    itc1.item_style     = "default";
373    itc1.func.label_get = gl_label_get;
374    itc1.func.icon_get  = gl_icon_get;
375    itc1.func.state_get = gl_state_get;
376    itc1.func.del       = gl_del;
377
378    gli[0] = elm_genlist_item_append(gl, &itc1,
379                                     (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
380                                     (void *)1001/* func data */);
381    gli[1] = elm_genlist_item_append(gl, &itc1,
382                                     (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
383                                     (void *)1002/* func data */);
384    gli[2] = elm_genlist_item_append(gl, &itc1,
385                                     (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
386                                     (void *)1003/* func data */);
387    gli[3] = elm_genlist_item_prepend(gl, &itc1,
388                                      (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
389                                      (void *)1004/* func data */);
390    gli[4] = elm_genlist_item_prepend(gl, &itc1,
391                                      (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
392                                      (void *)1005/* func data */);
393    gli[5] = elm_genlist_item_insert_before(gl, &itc1,
394                                            (void *)1006/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
395                                            gl_sel/* func */, (void *)1006/* func data */);
396    gli[6] = elm_genlist_item_insert_after(gl, &itc1,
397                                           (void *)1007/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
398                                           gl_sel/* func */, (void *)1007/* func data */);
399
400
401    elm_box_pack_end(bx, gl);
402
403    bx2 = elm_box_add(win);
404    elm_box_horizontal_set(bx2, 1);
405    elm_box_homogenous_set(bx2, 1);
406    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
407    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
408
409    bt = elm_button_add(win);
410    elm_button_label_set(bt, "/\\");
411    evas_object_smart_callback_add(bt, "clicked", my_gl_first, 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_last, 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, "#");
427    evas_object_smart_callback_add(bt, "clicked", my_gl_disable, 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    bt = elm_button_add(win);
434    elm_button_label_set(bt, "U");
435    evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl);
436    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
437    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
438    elm_box_pack_end(bx2, bt);
439    evas_object_show(bt);
440
441    elm_box_pack_end(bx, bx2);
442    evas_object_show(bx2);
443
444    bx2 = elm_box_add(win);
445    elm_box_horizontal_set(bx2, 1);
446    elm_box_homogenous_set(bx2, 1);
447    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
448    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
449
450    bt = elm_button_add(win);
451    elm_button_label_set(bt, "X");
452    evas_object_smart_callback_add(bt, "clicked", my_gl_clear, 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_add, 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    bt = elm_button_add(win);
467    elm_button_label_set(bt, "-");
468    evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl);
469    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
470    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
471    elm_box_pack_end(bx2, bt);
472    evas_object_show(bt);
473
474    elm_box_pack_end(bx, bx2);
475    evas_object_show(bx2);
476
477    bx3 = elm_box_add(win);
478    elm_box_horizontal_set(bx3, 1);
479    elm_box_homogenous_set(bx3, 1);
480    evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
481    evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
482
483    bt = elm_button_add(win);
484    elm_button_label_set(bt, "+ before");
485    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before, 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, "+ after");
493    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after, 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    bt = elm_button_add(win);
500    elm_button_label_set(bt, "Flush");
501    evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl);
502    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
503    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
504    elm_box_pack_end(bx3, bt);
505    evas_object_show(bt);
506
507    elm_box_pack_end(bx, bx3);
508    evas_object_show(bx3);
509
510
511    evas_object_resize(win, 320, 320);
512    evas_object_show(win);
513 }
514
515 /*************/
516
517 static Elm_Genlist_Item_Class itc2;
518 char *gl2_label_get(const void *data, Evas_Object *obj, const char *part)
519 {
520    const Testitem *tit = data;
521    char buf[256];
522    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
523    return strdup(buf);
524 }
525 Evas_Object *gl2_icon_get(const void *data, Evas_Object *obj, const char *part)
526 {
527    const Testitem *tit = data;
528    char buf[PATH_MAX];
529    Evas_Object *ic = elm_icon_add(obj);
530    if (!strcmp(part, "elm.swallow.icon"))
531      {
532         if (!(tit->mode & 0x3))
533           snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
534         else if ((tit->mode & 0x3) == 1)
535           snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR);
536         else if ((tit->mode & 0x3) == 2)
537           snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", PACKAGE_DATA_DIR);
538         else if ((tit->mode & 0x3) == 3)
539           snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", PACKAGE_DATA_DIR);
540         elm_icon_file_set(ic, buf, NULL);
541      }
542    else if (!strcmp(part, "elm.swallow.end"))
543      {
544         if (!(tit->mode & 0x3))
545           snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", PACKAGE_DATA_DIR);
546         else if ((tit->mode & 0x3) == 1)
547           snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR);
548         else if ((tit->mode & 0x3) == 2)
549           snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR);
550         else if ((tit->mode & 0x3) == 3)
551           snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR);
552         elm_icon_file_set(ic, buf, NULL);
553      }
554    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
555    return ic;
556 }
557 Eina_Bool gl2_state_get(const void *data, Evas_Object *obj, const char *part)
558 {
559    return EINA_FALSE;
560 }
561 void gl2_del(const void *data, Evas_Object *obj)
562 {
563 }
564
565 static void
566 my_gl_update(void *data, Evas_Object *obj, void *event_info)
567 {
568    Testitem *tit = data;
569    tit->mode++;
570    elm_genlist_item_update(tit->item);
571 }
572
573 void
574 test_genlist3(void *data, Evas_Object *obj, void *event_info)
575 {
576    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
577    static Testitem tit[3];
578
579    win = elm_win_add(NULL, "genlist-3", ELM_WIN_BASIC);
580    elm_win_title_set(win, "Genlist 3");
581    elm_win_autodel_set(win, 1);
582
583    bg = elm_bg_add(win);
584    elm_win_resize_object_add(win, bg);
585    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
586    evas_object_show(bg);
587
588    bx = elm_box_add(win);
589    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
590    elm_win_resize_object_add(win, bx);
591    evas_object_show(bx);
592
593    gl = elm_genlist_add(win);
594    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
595    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
596    evas_object_show(gl);
597
598    itc2.item_style     = "default";
599    itc2.func.label_get = gl2_label_get;
600    itc2.func.icon_get  = gl2_icon_get;
601    itc2.func.state_get = gl2_state_get;
602    itc2.func.del       = gl2_del;
603
604    tit[0].mode = 0;
605    tit[0].item = elm_genlist_item_append(gl, &itc2,
606                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
607                                          NULL/* func data */);
608    tit[1].mode = 1;
609    tit[1].item = elm_genlist_item_append(gl, &itc2,
610                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
611                                          NULL/* func data */);
612    tit[2].mode = 2;
613    tit[2].item = elm_genlist_item_append(gl, &itc2,
614                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
615                                          NULL/* func data */);
616
617    elm_box_pack_end(bx, gl);
618    evas_object_show(bx);
619
620    bx2 = elm_box_add(win);
621    elm_box_horizontal_set(bx2, 1);
622    elm_box_homogenous_set(bx2, 1);
623    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
624    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
625
626    bt = elm_button_add(win);
627    elm_button_label_set(bt, "[1]");
628    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
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, "[2]");
636    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
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    bt = elm_button_add(win);
643    elm_button_label_set(bt, "[3]");
644    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
645    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
646    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
647    elm_box_pack_end(bx2, bt);
648    evas_object_show(bt);
649
650    elm_box_pack_end(bx, bx2);
651    evas_object_show(bx2);
652
653    evas_object_resize(win, 320, 320);
654    evas_object_show(win);
655 }
656
657 /*************/
658
659 static void
660 my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info)
661 {
662    Testitem *tit = data;
663    tit->onoff = elm_check_state_get(obj);
664    printf("item %p onoff = %i\n", tit, tit->onoff);
665 }
666
667 static Elm_Genlist_Item_Class itc3;
668 char *gl3_label_get(const void *data, Evas_Object *obj, const char *part)
669 {
670    const Testitem *tit = data;
671    char buf[256];
672    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
673    return strdup(buf);
674 }
675 Evas_Object *gl3_icon_get(const void *data, Evas_Object *obj, const char *part)
676 {
677    const Testitem *tit = data;
678    char buf[PATH_MAX];
679    if (!strcmp(part, "elm.swallow.icon"))
680      {
681         Evas_Object *lb;
682         
683         lb = elm_label_add(obj);
684         elm_label_line_wrap_set(lb, 1);
685         elm_label_wrap_width_set(lb, 201);
686         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");
687         evas_object_show(lb);
688         return lb;
689         
690         Evas_Object *bx = elm_box_add(obj);
691         Evas_Object *ic;
692         ic = elm_icon_add(obj);
693         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
694         elm_icon_file_set(ic, buf, NULL);
695         elm_icon_scale_set(ic, 0, 0);
696         evas_object_show(ic);
697         elm_box_pack_end(bx, ic);
698         ic = elm_icon_add(obj);
699         elm_icon_file_set(ic, buf, NULL);
700         elm_icon_scale_set(ic, 0, 0);
701         evas_object_show(ic);
702         elm_box_pack_end(bx, ic);
703         elm_box_horizontal_set(bx, 1);
704         evas_object_show(bx);
705         return bx;
706      }
707    else if (!strcmp(part, "elm.swallow.end"))
708      {
709         Evas_Object *ck;
710         ck = elm_check_add(obj);
711         evas_object_propagate_events_set(ck, 0);
712         elm_check_state_set(ck, tit->onoff);
713         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data);
714         evas_object_show(ck);
715         return ck;
716      }
717    return NULL;
718 }
719 Eina_Bool gl3_state_get(const void *data, Evas_Object *obj, const char *part)
720 {
721    return EINA_FALSE;
722 }
723 void gl3_del(const void *data, Evas_Object *obj)
724 {
725 }
726
727 void
728 test_genlist4(void *data, Evas_Object *obj, void *event_info)
729 {
730    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
731    static Testitem tit[3];
732
733    win = elm_win_add(NULL, "genlist-4", ELM_WIN_BASIC);
734    elm_win_title_set(win, "Genlist 4");
735    elm_win_autodel_set(win, 1);
736
737    bg = elm_bg_add(win);
738    elm_win_resize_object_add(win, bg);
739    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
740    evas_object_show(bg);
741
742    bx = elm_box_add(win);
743    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
744    elm_win_resize_object_add(win, bx);
745    evas_object_show(bx);
746
747    gl = elm_genlist_add(win);
748    elm_genlist_multi_select_set(gl, 1);
749    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
750    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
751    evas_object_show(gl);
752
753    itc3.item_style     = "default";
754    itc3.func.label_get = gl3_label_get;
755    itc3.func.icon_get  = gl3_icon_get;
756    itc3.func.state_get = gl3_state_get;
757    itc3.func.del       = gl3_del;
758
759    tit[0].mode = 0;
760    tit[0].item = elm_genlist_item_append(gl, &itc3,
761                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
762                                          NULL/* func data */);
763    tit[1].mode = 1;
764    tit[1].item = elm_genlist_item_append(gl, &itc3,
765                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
766                                          NULL/* func data */);
767    tit[2].mode = 2;
768    tit[2].item = elm_genlist_item_append(gl, &itc3,
769                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
770                                          NULL/* func data */);
771
772    elm_box_pack_end(bx, gl);
773    evas_object_show(bx);
774
775    bx2 = elm_box_add(win);
776    elm_box_horizontal_set(bx2, 1);
777    elm_box_homogenous_set(bx2, 1);
778    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
779    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
780
781    bt = elm_button_add(win);
782    elm_button_label_set(bt, "[1]");
783    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
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, "[2]");
791    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
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    bt = elm_button_add(win);
798    elm_button_label_set(bt, "[3]");
799    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
800    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
801    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
802    elm_box_pack_end(bx2, bt);
803    evas_object_show(bt);
804
805    elm_box_pack_end(bx, bx2);
806    evas_object_show(bx2);
807
808    evas_object_resize(win, 320, 320);
809    evas_object_show(win);
810 }
811
812
813 /*************/
814 static void
815 my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info)
816 {
817    Testitem *tit = data;
818    tit->onoff = elm_check_state_get(obj);
819    printf("item %p onoff = %i\n", tit, tit->onoff);
820 }
821
822 static Elm_Genlist_Item_Class itc5;
823 char *gl5_label_get(const void *data, Evas_Object *obj, const char *part)
824 {
825    const Testitem *tit = data;
826    char buf[256];
827    if (!strcmp(part, "elm.text"))
828      {
829         snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
830      }
831    else if (!strcmp(part, "elm.text.sub"))
832      {
833         snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode);
834      }
835    return strdup(buf);
836 }
837 Evas_Object *gl5_icon_get(const void *data, Evas_Object *obj, const char *part)
838 {
839    const Testitem *tit = data;
840    char buf[PATH_MAX];
841    if (!strcmp(part, "elm.swallow.icon"))
842      {
843         Evas_Object *bx = elm_box_add(obj);
844         Evas_Object *ic;
845         elm_box_horizontal_set(bx, 1);
846         ic = elm_icon_add(obj);
847         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
848         elm_icon_file_set(ic, buf, NULL);
849         elm_icon_scale_set(ic, 0, 0);
850         evas_object_show(ic);
851         elm_box_pack_end(bx, ic);
852         ic = elm_icon_add(obj);
853         elm_icon_file_set(ic, buf, NULL);
854         elm_icon_scale_set(ic, 0, 0);
855         evas_object_show(ic);
856         elm_box_pack_end(bx, ic);
857         elm_box_horizontal_set(bx, 1);
858         evas_object_show(bx);
859         return bx;
860      }
861    else if (!strcmp(part, "elm.swallow.end"))
862      {
863         Evas_Object *ck;
864         ck = elm_check_add(obj);
865         evas_object_propagate_events_set(ck, 0);
866         elm_check_state_set(ck, tit->onoff);
867         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data);
868         evas_object_show(ck);
869         return ck;
870      }
871    return NULL;
872 }
873 Eina_Bool gl5_state_get(const void *data, Evas_Object *obj, const char *part)
874 {
875    return EINA_FALSE;
876 }
877 void gl5_del(const void *data, Evas_Object *obj)
878 {
879 }
880
881 static void
882 item_drag_up(void *data, Evas_Object *obj, void *event_info)
883 {
884    printf("drag up\n");
885 }
886
887 static void
888 item_drag_down(void *data, Evas_Object *obj, void *event_info)
889 {
890    printf("drag down\n");
891 }
892
893 static void
894 item_drag_left(void *data, Evas_Object *obj, void *event_info)
895 {
896    printf("drag left\n");
897 }
898
899 static void
900 item_drag_right(void *data, Evas_Object *obj, void *event_info)
901 {
902    printf("drag right\n");
903 }
904
905 static void
906 scroll_top(void *data, Evas_Object *obj, void *event_info)
907 {
908    printf("Top edge!\n");
909 }
910
911 static void
912 scroll_bottom(void *data, Evas_Object *obj, void *event_info)
913 {
914    printf("Bottom edge!\n");
915 }
916
917 static void
918 scroll_left(void *data, Evas_Object *obj, void *event_info)
919 {
920    printf("Left edge!\n");
921 }
922
923 static void
924 scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
925 {
926    printf("Right edge!\n");
927 }
928
929 static void
930 item_drag(void *data, Evas_Object *obj, void *event_info)
931 {
932    printf("drag\n");
933 }
934
935 static void
936 item_drag_stop(void *data, Evas_Object *obj, void *event_info)
937 {
938    printf("drag stop\n");
939 }
940
941 static void
942 item_longpress(void *data, Evas_Object *obj, void *event_info)
943 {
944    printf("longpress\n");
945 }
946
947 void
948 test_genlist5(void *data, Evas_Object *obj, void *event_info)
949 {
950    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
951    static Testitem tit[5];
952
953    win = elm_win_add(NULL, "genlist-5", ELM_WIN_BASIC);
954    elm_win_title_set(win, "Genlist 5");
955    elm_win_autodel_set(win, 1);
956
957    bg = elm_bg_add(win);
958    elm_win_resize_object_add(win, bg);
959    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
960    evas_object_show(bg);
961
962    bx = elm_box_add(win);
963    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
964    elm_win_resize_object_add(win, bx);
965    evas_object_show(bx);
966
967    gl = elm_genlist_add(win);
968    elm_genlist_always_select_mode_set(gl, 1);
969    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
970    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
971    evas_object_show(gl);
972    itc5.item_style     = "double_label";
973    itc5.func.label_get = gl5_label_get;
974    itc5.func.icon_get  = gl5_icon_get;
975    itc5.func.state_get = gl5_state_get;
976    itc5.func.del       = gl5_del;
977
978    tit[0].mode = 0;
979    tit[0].item = elm_genlist_item_append(gl, &itc5,
980                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
981                                          NULL/* func data */);
982    tit[1].mode = 1;
983    tit[1].item = elm_genlist_item_append(gl, &itc5,
984                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
985                                          NULL/* func data */);
986    tit[2].mode = 2;
987    tit[2].item = elm_genlist_item_append(gl, &itc5,
988                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
989                                          NULL/* func data */);
990    tit[3].mode = 3;
991    tit[3].item = elm_genlist_item_append(gl, &itc5,
992                                          &(tit[3])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
993                                          NULL/* func data */);
994
995    tit[4].mode = 4;
996    tit[4].item = elm_genlist_item_append(gl, &itc5,
997                                          &(tit[4])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
998                                          NULL/* func data */);
999    elm_box_pack_end(bx, gl);
1000    evas_object_show(bx);
1001
1002    evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL);
1003    evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
1004    evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
1005    evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
1006    evas_object_smart_callback_add(gl, "scroll,edge,top", scroll_top, NULL);
1007    evas_object_smart_callback_add(gl, "scroll,edge,bottom", scroll_bottom, NULL);
1008    evas_object_smart_callback_add(gl, "scroll,edge,left", scroll_left, NULL);
1009    evas_object_smart_callback_add(gl, "scroll,edge,right", scroll_right, NULL);
1010    evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
1011    evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
1012    evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
1013
1014    bx2 = elm_box_add(win);
1015    elm_box_horizontal_set(bx2, 1);
1016    elm_box_homogenous_set(bx2, 1);
1017    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1018    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1019
1020    bt = elm_button_add(win);
1021    elm_button_label_set(bt, "[1]");
1022    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1023    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1024    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1025    elm_box_pack_end(bx2, bt);
1026    evas_object_show(bt);
1027
1028    bt = elm_button_add(win);
1029    elm_button_label_set(bt, "[2]");
1030    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1031    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1032    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1033    elm_box_pack_end(bx2, bt);
1034    evas_object_show(bt);
1035
1036    bt = elm_button_add(win);
1037    elm_button_label_set(bt, "[3]");
1038    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1039    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1040    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1041    elm_box_pack_end(bx2, bt);
1042    evas_object_show(bt);
1043
1044    elm_box_pack_end(bx, bx2);
1045    evas_object_show(bx2);
1046
1047    evas_object_resize(win, 320, 320);
1048    evas_object_show(win);
1049 }
1050
1051 /*************/
1052
1053 static Elm_Genlist_Item_Class itc4;
1054
1055 static void
1056 gl4_sel(void *data, Evas_Object *obj, void *event_info)
1057 {
1058 }
1059 static void
1060 gl4_exp(void *data, Evas_Object *obj, void *event_info)
1061 {
1062    Elm_Genlist_Item *it = event_info;
1063    Evas_Object *gl = elm_genlist_item_genlist_get(it);
1064    int val = (int)elm_genlist_item_data_get(it);
1065    val *= 10;
1066    elm_genlist_item_append(gl, &itc4,
1067                            (void *)(val + 1)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1068                            NULL/* func data */);
1069    elm_genlist_item_append(gl, &itc4,
1070                            (void *)(val + 2)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1071                            NULL/* func data */);
1072    elm_genlist_item_append(gl, &itc4,
1073                            (void *)(val + 3)/* item data */, it/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1074                            NULL/* func data */);
1075 }
1076 static void
1077 gl4_con(void *data, Evas_Object *obj, void *event_info)
1078 {
1079    Elm_Genlist_Item *it = event_info;
1080    elm_genlist_item_subitems_clear(it);
1081 }
1082
1083 static void
1084 gl4_exp_req(void *data, Evas_Object *obj, void *event_info)
1085 {
1086    Elm_Genlist_Item *it = event_info;
1087    elm_genlist_item_expanded_set(it, 1);
1088 }
1089 static void
1090 gl4_con_req(void *data, Evas_Object *obj, void *event_info)
1091 {
1092    Elm_Genlist_Item *it = event_info;
1093    elm_genlist_item_expanded_set(it, 0);
1094 }
1095
1096 char *gl4_label_get(const void *data, Evas_Object *obj, const char *part)
1097 {
1098    char buf[256];
1099    snprintf(buf, sizeof(buf), "Item mode %i", (int)data);
1100    return strdup(buf);
1101 }
1102 Evas_Object *gl4_icon_get(const void *data, Evas_Object *obj, const char *part)
1103 {
1104    char buf[PATH_MAX];
1105    if (!strcmp(part, "elm.swallow.icon"))
1106      {
1107         Evas_Object *ic = elm_icon_add(obj);
1108         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
1109         elm_icon_file_set(ic, buf, NULL);
1110         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1111         evas_object_show(ic);
1112         return ic;
1113      }
1114    else if (!strcmp(part, "elm.swallow.end"))
1115      {
1116         Evas_Object *ck;
1117         ck = elm_check_add(obj);
1118         evas_object_show(ck);
1119         return ck;
1120      }
1121    return NULL;
1122 }
1123 Eina_Bool gl4_state_get(const void *data, Evas_Object *obj, const char *part)
1124 {
1125    return EINA_FALSE;
1126 }
1127 void gl4_del(const void *data, Evas_Object *obj)
1128 {
1129 }
1130
1131 void
1132 test_genlist6(void *data, Evas_Object *obj, void *event_info)
1133 {
1134    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
1135
1136    win = elm_win_add(NULL, "genlist-tree", ELM_WIN_BASIC);
1137    elm_win_title_set(win, "Genlist Tree");
1138    elm_win_autodel_set(win, 1);
1139
1140    bg = elm_bg_add(win);
1141    elm_win_resize_object_add(win, bg);
1142    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1143    evas_object_show(bg);
1144
1145    bx = elm_box_add(win);
1146    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1147    elm_win_resize_object_add(win, bx);
1148    evas_object_show(bx);
1149
1150    gl = elm_genlist_add(win);
1151    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1152    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1153    evas_object_show(gl);
1154
1155    itc4.item_style     = "default";
1156    itc4.func.label_get = gl4_label_get;
1157    itc4.func.icon_get  = gl4_icon_get;
1158    itc4.func.state_get = gl4_state_get;
1159    itc4.func.del       = gl4_del;
1160
1161    elm_genlist_item_append(gl, &itc4,
1162                            (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1163                            NULL/* func data */);
1164    elm_genlist_item_append(gl, &itc4,
1165                            (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1166                            NULL/* func data */);
1167    elm_genlist_item_append(gl, &itc4,
1168                            (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1169                            NULL/* func data */);
1170
1171    evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl);
1172    evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl);
1173    evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl);
1174    evas_object_smart_callback_add(gl, "contracted", gl4_con, gl);
1175
1176    elm_box_pack_end(bx, gl);
1177    evas_object_show(bx);
1178
1179    bx2 = elm_box_add(win);
1180    elm_box_horizontal_set(bx2, 1);
1181    elm_box_homogenous_set(bx2, 1);
1182    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1183    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1184
1185    bt = elm_button_add(win);
1186    elm_button_label_set(bt, "[1]");
1187 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1188    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1189    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1190    elm_box_pack_end(bx2, bt);
1191    evas_object_show(bt);
1192
1193    bt = elm_button_add(win);
1194    elm_button_label_set(bt, "[2]");
1195 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1196    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1197    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1198    elm_box_pack_end(bx2, bt);
1199    evas_object_show(bt);
1200
1201    bt = elm_button_add(win);
1202    elm_button_label_set(bt, "[3]");
1203 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1204    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1205    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1206    elm_box_pack_end(bx2, bt);
1207    evas_object_show(bt);
1208
1209    elm_box_pack_end(bx, bx2);
1210    evas_object_show(bx2);
1211
1212    evas_object_resize(win, 320, 320);
1213    evas_object_show(win);
1214 }
1215
1216 /*************/
1217
1218 struct genlist7_data
1219 {
1220   Evas_Object *win, *pager;
1221 };
1222
1223 static Elm_Genlist_Item_Class itc7;
1224 static void
1225 gl_sel7(void *data, Evas_Object *obj, void *event_info)
1226 {
1227    if (!event_info) return;
1228    elm_genlist_item_item_class_update(event_info, &itc7);
1229    printf("sel item data [%p] on genlist obj [%p], item pointer [%p], new item style [%s] \n", data, obj, event_info, itc7.item_style);
1230 }
1231
1232 static void
1233 test_genlist7_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1234 {
1235     struct genlist7_data *info = data;
1236     if (!info) return;
1237
1238     elm_pager_content_pop(info->pager);
1239 }
1240
1241 static void
1242 test_genlist7_swipe(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1243 {
1244    struct genlist7_data *info = data;
1245    Evas_Object *box, *entry, *button;
1246    char item_data[] = "Just a simple test";
1247
1248    if ((!event_info) || (!data)) return;
1249
1250    box = elm_box_add(info->win);
1251    elm_box_homogenous_set(box, 0);
1252    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1253    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1254    evas_object_show(box);
1255
1256    entry = elm_scrolled_entry_add(info->win);
1257    elm_scrolled_entry_editable_set(entry, EINA_FALSE);
1258    elm_scrolled_entry_entry_set(entry, item_data);
1259    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1260    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
1261    evas_object_show(entry);
1262
1263    button = elm_button_add(info->win);
1264    elm_button_label_set(button, "back");
1265    evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
1266    evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
1267    evas_object_smart_callback_add(button, "clicked", test_genlist7_back_cb,
1268                                   info);
1269    evas_object_show(button);
1270
1271    elm_box_pack_start(box, entry);
1272    elm_box_pack_end(box, button);
1273
1274    elm_pager_content_push(info->pager, box);
1275 }
1276
1277 void
1278 test_genlist7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1279 {
1280    Evas_Object *win, *bg, *gl, *pager;
1281    static struct genlist7_data info;
1282    static Testitem tit[3];
1283
1284    win = elm_win_add(NULL, "genlist-7", ELM_WIN_BASIC);
1285    elm_win_title_set(win, "Genlist 7");
1286    elm_win_autodel_set(win, 1);
1287    info.win = win;
1288
1289    bg = elm_bg_add(win);
1290    elm_win_resize_object_add(win, bg);
1291    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1292    evas_object_show(bg);
1293
1294    pager = elm_pager_add(win);
1295    elm_win_resize_object_add(win, pager);
1296    evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1297    evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL);
1298    evas_object_show(pager);
1299    info.pager = pager;
1300
1301    gl = elm_genlist_add(win);
1302    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1303    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1304    evas_object_smart_callback_add(gl, "swipe", test_genlist7_swipe, &info);
1305    evas_object_show(gl);
1306    elm_pager_content_push(pager, gl);
1307
1308    itc2.item_style     = "default";
1309    itc2.func.label_get = gl2_label_get;
1310    itc2.func.icon_get  = gl2_icon_get;
1311    itc2.func.state_get = gl2_state_get;
1312    itc2.func.del       = gl2_del;
1313
1314    itc7.item_style     = "double_label";
1315    itc7.func.label_get = gl5_label_get;
1316    itc7.func.icon_get  = gl5_icon_get;
1317    itc7.func.state_get = gl5_state_get;
1318    itc7.func.del       = gl5_del;
1319
1320    tit[0].mode = 0;
1321    tit[0].item = elm_genlist_item_append(gl, &itc2,
1322                                          &(tit[0])/* item data */, NULL/* parent */,
1323                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1324                                          NULL/* func data */);
1325    tit[1].mode = 1;
1326    tit[1].item = elm_genlist_item_append(gl, &itc2,
1327                                          &(tit[1])/* item data */, NULL/* parent */,
1328                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1329                                          NULL/* func data */);
1330    tit[2].mode = 2;
1331    tit[2].item = elm_genlist_item_append(gl, &itc2,
1332                                          &(tit[2])/* item data */, NULL/* parent */,
1333                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1334                                          NULL/* func data */);
1335
1336    evas_object_resize(win, 320, 320);
1337    evas_object_show(win);
1338 }
1339 /*************/
1340
1341 static Elm_Genlist_Item_Class itc_group;
1342 char *gl8_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
1343 {
1344    char buf[256];
1345    snprintf(buf, sizeof(buf), "Group Index # %i (Item # %i)",  (int)((long)data / 10), (int)(long)data);
1346    return strdup(buf);
1347 }
1348
1349 static void
1350 _bt_show_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1351 {
1352     elm_genlist_item_top_show(data);
1353     //elm_genlist_item_show(data);
1354     //elm_genlist_item_middle_show(data);
1355 }
1356 static void
1357 _bt_bring_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1358 {
1359     elm_genlist_item_top_bring_in(data);
1360     //elm_genlist_item_bring_in(data);
1361     //elm_genlist_item_middle_bring_in(data);
1362 }
1363
1364 void
1365 test_genlist8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1366 {
1367    Evas_Object *win, *bg, *gl, *bt[8], *bx, *bx2, *bx3;
1368    Evas_Object *over;
1369    Elm_Genlist_Item *gli, *git;
1370    int i, bt_count, bt_num;
1371
1372    win = elm_win_add(NULL, "genlist-group", ELM_WIN_BASIC);
1373    elm_win_title_set(win, "Genlist Group");
1374    elm_win_autodel_set(win, 1);
1375
1376    bg = elm_bg_add(win);
1377    elm_win_resize_object_add(win, bg);
1378    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1379    evas_object_show(bg);
1380
1381    bx = elm_box_add(win);
1382    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1383    elm_win_resize_object_add(win, bx);
1384    evas_object_show(bx);
1385
1386    gl = elm_genlist_add(win);
1387    evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
1388    evas_object_smart_callback_add(gl, "clicked", _gl_clicked, NULL);
1389    evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
1390    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1391    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1392    elm_box_pack_end(bx, gl);
1393    evas_object_show(gl);
1394
1395    itc1.item_style     = "default";
1396    itc1.func.label_get = gl_label_get;
1397    itc1.func.icon_get  = gl_icon_get;
1398    itc1.func.state_get = gl_state_get;
1399    itc1.func.del       = gl_del;
1400
1401    itc_group.item_style     = "group_title";
1402    itc_group.func.label_get = gl8_label_get;
1403    itc_group.func.icon_get  = NULL;
1404    itc_group.func.state_get = NULL;
1405    itc_group.func.del       = gl_del;
1406
1407    bx2 = elm_box_add(win);
1408    elm_box_horizontal_set(bx2, EINA_TRUE);
1409    elm_box_homogenous_set(bx2, EINA_TRUE);
1410    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1411    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1412
1413    bt_num = 0;
1414    bt[bt_num] = elm_button_add(win);
1415    elm_button_label_set(bt[bt_num], "Show 0");
1416    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1417    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1418    evas_object_show(bt[bt_num]);
1419    elm_box_pack_end(bx2, bt[bt_num]);
1420
1421    bt[++bt_num] = elm_button_add(win);
1422    elm_button_label_set(bt[bt_num], "Show 26");
1423    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1424    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1425    evas_object_show(bt[bt_num]);
1426    elm_box_pack_end(bx2, bt[bt_num]);
1427
1428    bt[++bt_num] = elm_button_add(win);
1429    elm_button_label_set(bt[bt_num], "Show 101");
1430    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1431    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1432    evas_object_show(bt[bt_num]);
1433    elm_box_pack_end(bx2, bt[bt_num]);
1434
1435    bt[++bt_num] = elm_button_add(win);
1436    elm_button_label_set(bt[bt_num], "Show 480");
1437    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1438    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1439    evas_object_show(bt[bt_num]);
1440    elm_box_pack_end(bx2, bt[bt_num]);
1441
1442    elm_box_pack_end(bx, bx2);
1443    evas_object_show(bx2);
1444
1445    bx3 = elm_box_add(win);
1446    elm_box_horizontal_set(bx3, EINA_TRUE);
1447    elm_box_homogenous_set(bx3, EINA_TRUE);
1448    evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
1449    evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
1450
1451    bt[++bt_num] = elm_button_add(win);
1452    elm_button_label_set(bt[bt_num], "Bring top 0");
1453    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1454    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1455    evas_object_show(bt[bt_num]);
1456    elm_box_pack_end(bx3, bt[bt_num]);
1457
1458    bt[++bt_num] = elm_button_add(win);
1459    elm_button_label_set(bt[bt_num], "Bring top 31");
1460    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1461    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1462    evas_object_show(bt[bt_num]);
1463    elm_box_pack_end(bx3, bt[bt_num]);
1464
1465    bt[++bt_num] = elm_button_add(win);
1466    elm_button_label_set(bt[bt_num], "Bring top 239");
1467    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1468    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1469    evas_object_show(bt[bt_num]);
1470    elm_box_pack_end(bx3, bt[bt_num]);
1471
1472    bt[++bt_num] = elm_button_add(win);
1473    elm_button_label_set(bt[bt_num], "Bring top 477");
1474    evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1475    evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1476    evas_object_show(bt[bt_num]);
1477    elm_box_pack_end(bx3, bt[bt_num]);
1478
1479    elm_box_pack_end(bx, bx3);
1480    evas_object_show(bx3);
1481
1482    bt_count = 0;
1483    for (i = 0; i < 500; i++)
1484      {
1485         if (!(i % 10))
1486           {
1487              gli = git = elm_genlist_item_append(gl, &itc_group,
1488                                            (void *)(long)i/* item data */,
1489                                            NULL/* parent */,
1490                                            ELM_GENLIST_ITEM_GROUP,
1491                                            gl_sel/* func */,
1492                                            (void *)(long)(i * 10)/* func data */);
1493           }
1494         else if (git)
1495           {
1496              gli = elm_genlist_item_append(gl, &itc1,
1497                                            (void *)(long)i/* item data */,
1498                                            git/* parent */,
1499                                            ELM_GENLIST_ITEM_NONE,
1500                                            gl_sel/* func */,
1501                                            (void *)(long)(i * 10)/* func data */);
1502           }
1503         //elm_genlist_item_display_only_set(gli, EINA_TRUE);
1504         switch (i)
1505           {
1506            case 0: 
1507               evas_object_smart_callback_add(bt[0], "clicked", _bt_show_cb, gli);
1508               evas_object_smart_callback_add(bt[4], "clicked", _bt_bring_cb, gli);
1509               break;
1510            case 26: 
1511               evas_object_smart_callback_add(bt[1], "clicked", _bt_show_cb, gli);
1512               break;
1513            case 31: 
1514               evas_object_smart_callback_add(bt[5], "clicked", _bt_bring_cb, gli);
1515               break;
1516            case 101: 
1517               evas_object_smart_callback_add(bt[2], "clicked", _bt_show_cb, gli);
1518               break;
1519            case 239: 
1520               evas_object_smart_callback_add(bt[6], "clicked", _bt_bring_cb, gli);
1521               break;
1522            case 477: 
1523               evas_object_smart_callback_add(bt[7], "clicked", _bt_bring_cb, gli);
1524               break;
1525            case 480: 
1526               evas_object_smart_callback_add(bt[3], "clicked", _bt_show_cb, gli);
1527               break;
1528           }
1529      }
1530
1531    evas_object_resize(win, 480, 800);
1532    evas_object_show(win);
1533 }
1534
1535 /*************/
1536
1537 static void
1538 gl9_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1539 {
1540    Elm_Genlist_Item *it = event_info;
1541    Evas_Object *gl = elm_genlist_item_genlist_get(it);
1542    int val = (int)(long)elm_genlist_item_data_get(it);
1543    val *= 10;
1544    elm_genlist_item_append(gl, &itc1,
1545                            (void *)(long)(val + 1)/* item data */, it/* parent */,
1546                            ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1547                            NULL/* func data */);
1548    elm_genlist_item_append(gl, &itc1,
1549                            (void *)(long)(val + 2)/* item data */, it/* parent */,
1550                            ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1551                            NULL/* func data */);
1552    elm_genlist_item_append(gl, &itc1,
1553                            (void *)(long)(val + 3)/* item data */, it/* parent */,
1554                            ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1555                            NULL/* func data */);
1556 }
1557 static void
1558 gl9_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1559 {
1560    Elm_Genlist_Item *it = event_info;
1561    elm_genlist_item_subitems_clear(it);
1562 }
1563
1564 static void
1565 gl9_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1566 {
1567    Elm_Genlist_Item *it = event_info;
1568    elm_genlist_item_expanded_set(it, EINA_TRUE);
1569 }
1570 static void
1571 gl9_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1572 {
1573    Elm_Genlist_Item *it = event_info;
1574    elm_genlist_item_expanded_set(it, EINA_FALSE);
1575 }
1576
1577 void
1578 test_genlist9(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1579 {
1580    Evas_Object *win, *bg, *gl, *bt[8], *bx, *bx2, *bx3;
1581    Evas_Object *over;
1582    Elm_Genlist_Item *git;
1583
1584    win = elm_win_add(NULL, "genlist-group-tree", ELM_WIN_BASIC);
1585    elm_win_title_set(win, "Genlist Group Tree");
1586    elm_win_autodel_set(win, 1);
1587
1588    bg = elm_bg_add(win);
1589    elm_win_resize_object_add(win, bg);
1590    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1591    evas_object_show(bg);
1592
1593    bx = elm_box_add(win);
1594    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1595    elm_win_resize_object_add(win, bx);
1596    evas_object_show(bx);
1597
1598    gl = elm_genlist_add(win);
1599    evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
1600    evas_object_smart_callback_add(gl, "clicked", _gl_clicked, NULL);
1601    evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
1602    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1603    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1604    elm_box_pack_end(bx, gl);
1605    evas_object_show(gl);
1606
1607    itc1.item_style     = "default";
1608    itc1.func.label_get = gl_label_get;
1609    itc1.func.icon_get  = gl_icon_get;
1610    itc1.func.state_get = gl_state_get;
1611    itc1.func.del       = gl_del;
1612
1613    itc_group.item_style     = "group_title";
1614    itc_group.func.label_get = gl8_label_get;
1615    itc_group.func.icon_get  = NULL;
1616    itc_group.func.state_get = NULL;
1617    itc_group.func.del       = gl_del;
1618
1619    git = elm_genlist_item_append(gl, &itc_group,
1620                            (void *)0/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */,
1621                            NULL/* func data */);
1622    elm_genlist_item_append(gl, &itc1,
1623                            (void *)1/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1624                            NULL/* func data */);
1625    elm_genlist_item_append(gl, &itc1,
1626                            (void *)2/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1627                            NULL/* func data */);
1628    elm_genlist_item_append(gl, &itc1,
1629                            (void *)3/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1630                            NULL/* func data */);
1631    git = elm_genlist_item_append(gl, &itc_group,
1632                            (void *)4/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */,
1633                            NULL/* func data */);
1634    elm_genlist_item_append(gl, &itc1,
1635                            (void *)5/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1636                            NULL/* func data */);
1637    elm_genlist_item_append(gl, &itc1,
1638                            (void *)6/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1639                            NULL/* func data */);
1640    elm_genlist_item_append(gl, &itc1,
1641                            (void *)7/* item data */, git/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1642                            NULL/* func data */);
1643
1644    evas_object_smart_callback_add(gl, "expand,request", gl9_exp_req, gl);
1645    evas_object_smart_callback_add(gl, "contract,request", gl9_con_req, gl);
1646    evas_object_smart_callback_add(gl, "expanded", gl9_exp, gl);
1647    evas_object_smart_callback_add(gl, "contracted", gl9_con, gl);
1648
1649    evas_object_resize(win, 480, 800);
1650    evas_object_show(win);
1651 }
1652
1653 #endif