30d7063ddffafb7c44f434bdb07662d00cf3b545
[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    gli = elm_genlist_item_insert_before(gl, &itc1,
226                                  (void *)i/* item data */,
227                                  gli_selected /* item before */,
228                                  ELM_GENLIST_ITEM_NONE,
229                                  gl_sel/* func */,
230                                  (void *)(i * 10)/* func data */);
231    i++;
232 }
233
234 static void
235 my_gl_insert_after(void *data, Evas_Object *obj, void *event_info)
236 {
237    Evas_Object *gl = data;
238    Elm_Genlist_Item *gli;
239    static int i = 0;
240    Elm_Genlist_Item *gli_selected;
241
242    itc1.item_style     = "default";
243    itc1.func.label_get = gl_label_get;
244    itc1.func.icon_get  = gl_icon_get;
245    itc1.func.state_get = gl_state_get;
246    itc1.func.del       = gl_del;
247
248    gli_selected = elm_genlist_selected_item_get(gl);
249    if(!gli_selected)
250    {
251        printf("no item selected\n");
252        return ;
253    }
254
255    gli = elm_genlist_item_insert_after(gl, &itc1,
256                                  (void *)i/* item data */,
257                                  gli_selected /* item after */,
258                                  ELM_GENLIST_ITEM_NONE,
259                                  gl_sel/* func */,
260                                  (void *)(i * 10)/* func data */);
261    i++;
262 }
263
264 static void
265 my_gl_del(void *data, Evas_Object *obj, void *event_info)
266 {
267    Evas_Object *gl = data;
268    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
269    if (!gli)
270      {
271         printf("no item selected\n");
272         return;
273      }
274    elm_genlist_item_del(gli);
275 }
276
277 static void
278 my_gl_disable(void *data, Evas_Object *obj, void *event_info)
279 {
280    Evas_Object *gl = data;
281    Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl);
282    if (!gli)
283      {
284         printf("no item selected\n");
285         return;
286      }
287    elm_genlist_item_disabled_set(gli, 1);
288    elm_genlist_item_selected_set(gli, 0);
289    elm_genlist_item_update(gli);
290 }
291
292 static void
293 my_gl_update_all(void *data, Evas_Object *obj, void *event_info)
294 {
295    Evas_Object *gl = data;
296    int i = 0;
297    Elm_Genlist_Item *it = elm_genlist_first_item_get(gl);
298    while (it)
299      {
300         elm_genlist_item_update(it);
301         printf("%i\n", i);
302         i++;
303         it = elm_genlist_item_next_get(it);
304      }
305 }
306
307 static void
308 my_gl_first(void *data, Evas_Object *obj, void *event_info)
309 {
310    Evas_Object *gl = data;
311    Elm_Genlist_Item *gli = elm_genlist_first_item_get(gl);
312    if (!gli) return;
313    elm_genlist_item_show(gli);
314    elm_genlist_item_selected_set(gli, 1);
315 }
316
317 static void
318 my_gl_last(void *data, Evas_Object *obj, void *event_info)
319 {
320    Evas_Object *gl = data;
321    Elm_Genlist_Item *gli = elm_genlist_last_item_get(gl);
322    if (!gli) return;
323    elm_genlist_item_show(gli);
324    elm_genlist_item_selected_set(gli, 1);
325 }
326
327 static Eina_Bool
328 my_gl_flush_delay(void *data)
329 {
330    elm_all_flush();
331    return ECORE_CALLBACK_CANCEL;
332 }
333
334 static void
335 my_gl_flush(void *data, Evas_Object *obj, void *event_info)
336 {
337    ecore_timer_add(1.2, my_gl_flush_delay, NULL);
338 }
339
340 void
341 test_genlist2(void *data, Evas_Object *obj, void *event_info)
342 {
343    Evas_Object *win, *bg, *gl, *bx, *bx2, *bx3, *bt;
344    Elm_Genlist_Item *gli[10];
345    char buf[PATH_MAX];
346
347    win = elm_win_add(NULL, "genlist-2", ELM_WIN_BASIC);
348    elm_win_title_set(win, "Genlist 2");
349    elm_win_autodel_set(win, 1);
350
351    bg = elm_bg_add(win);
352    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR);
353    elm_bg_file_set(bg, buf, NULL);
354    elm_win_resize_object_add(win, bg);
355    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
356    evas_object_show(bg);
357
358    bx = elm_box_add(win);
359    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
360    elm_win_resize_object_add(win, bx);
361    evas_object_show(bx);
362
363    gl = elm_genlist_add(win);
364    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
365    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
366    evas_object_show(gl);
367
368    itc1.item_style     = "default";
369    itc1.func.label_get = gl_label_get;
370    itc1.func.icon_get  = gl_icon_get;
371    itc1.func.state_get = gl_state_get;
372    itc1.func.del       = gl_del;
373
374    gli[0] = elm_genlist_item_append(gl, &itc1,
375                                     (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
376                                     (void *)1001/* func data */);
377    gli[1] = elm_genlist_item_append(gl, &itc1,
378                                     (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
379                                     (void *)1002/* func data */);
380    gli[2] = elm_genlist_item_append(gl, &itc1,
381                                     (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
382                                     (void *)1003/* func data */);
383    gli[3] = elm_genlist_item_prepend(gl, &itc1,
384                                      (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
385                                      (void *)1004/* func data */);
386    gli[4] = elm_genlist_item_prepend(gl, &itc1,
387                                      (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
388                                      (void *)1005/* func data */);
389    gli[5] = elm_genlist_item_insert_before(gl, &itc1,
390                                            (void *)1006/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
391                                            (void *)1006/* func data */);
392    gli[6] = elm_genlist_item_insert_after(gl, &itc1,
393                                           (void *)1007/* item data */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
394                                           (void *)1007/* func data */);
395
396    elm_box_pack_end(bx, gl);
397
398    bx2 = elm_box_add(win);
399    elm_box_horizontal_set(bx2, 1);
400    elm_box_homogenous_set(bx2, 1);
401    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
402    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
403
404    bt = elm_button_add(win);
405    elm_button_label_set(bt, "/\\");
406    evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl);
407    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
408    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
409    elm_box_pack_end(bx2, bt);
410    evas_object_show(bt);
411
412    bt = elm_button_add(win);
413    elm_button_label_set(bt, "\\/");
414    evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl);
415    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
416    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
417    elm_box_pack_end(bx2, bt);
418    evas_object_show(bt);
419
420    bt = elm_button_add(win);
421    elm_button_label_set(bt, "#");
422    evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl);
423    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
424    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
425    elm_box_pack_end(bx2, bt);
426    evas_object_show(bt);
427
428    bt = elm_button_add(win);
429    elm_button_label_set(bt, "U");
430    evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl);
431    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
432    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
433    elm_box_pack_end(bx2, bt);
434    evas_object_show(bt);
435
436    elm_box_pack_end(bx, bx2);
437    evas_object_show(bx2);
438
439    bx2 = elm_box_add(win);
440    elm_box_horizontal_set(bx2, 1);
441    elm_box_homogenous_set(bx2, 1);
442    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
443    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
444
445    bt = elm_button_add(win);
446    elm_button_label_set(bt, "X");
447    evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl);
448    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
449    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
450    elm_box_pack_end(bx2, bt);
451    evas_object_show(bt);
452
453    bt = elm_button_add(win);
454    elm_button_label_set(bt, "+");
455    evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl);
456    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
457    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
458    elm_box_pack_end(bx2, bt);
459    evas_object_show(bt);
460
461    bt = elm_button_add(win);
462    elm_button_label_set(bt, "-");
463    evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl);
464    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
465    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
466    elm_box_pack_end(bx2, bt);
467    evas_object_show(bt);
468
469    elm_box_pack_end(bx, bx2);
470    evas_object_show(bx2);
471
472    bx3 = elm_box_add(win);
473    elm_box_horizontal_set(bx3, 1);
474    elm_box_homogenous_set(bx3, 1);
475    evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
476    evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
477
478    bt = elm_button_add(win);
479    elm_button_label_set(bt, "+ before");
480    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before, gl);
481    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
482    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
483    elm_box_pack_end(bx3, bt);
484    evas_object_show(bt);
485
486    bt = elm_button_add(win);
487    elm_button_label_set(bt, "+ after");
488    evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after, gl);
489    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
490    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
491    elm_box_pack_end(bx3, bt);
492    evas_object_show(bt);
493
494    bt = elm_button_add(win);
495    elm_button_label_set(bt, "Flush");
496    evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl);
497    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
498    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
499    elm_box_pack_end(bx3, bt);
500    evas_object_show(bt);
501
502    elm_box_pack_end(bx, bx3);
503    evas_object_show(bx3);
504
505
506    evas_object_resize(win, 320, 320);
507    evas_object_show(win);
508 }
509
510 /*************/
511
512 static Elm_Genlist_Item_Class itc2;
513 char *gl2_label_get(const void *data, Evas_Object *obj, const char *part)
514 {
515    const Testitem *tit = data;
516    char buf[256];
517    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
518    return strdup(buf);
519 }
520 Evas_Object *gl2_icon_get(const void *data, Evas_Object *obj, const char *part)
521 {
522    const Testitem *tit = data;
523    char buf[PATH_MAX];
524    Evas_Object *ic = elm_icon_add(obj);
525    if (!strcmp(part, "elm.swallow.icon"))
526      {
527         if (!(tit->mode & 0x3))
528           snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
529         else if ((tit->mode & 0x3) == 1)
530           snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR);
531         else if ((tit->mode & 0x3) == 2)
532           snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", PACKAGE_DATA_DIR);
533         else if ((tit->mode & 0x3) == 3)
534           snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", PACKAGE_DATA_DIR);
535         elm_icon_file_set(ic, buf, NULL);
536      }
537    else if (!strcmp(part, "elm.swallow.end"))
538      {
539         if (!(tit->mode & 0x3))
540           snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", PACKAGE_DATA_DIR);
541         else if ((tit->mode & 0x3) == 1)
542           snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", PACKAGE_DATA_DIR);
543         else if ((tit->mode & 0x3) == 2)
544           snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR);
545         else if ((tit->mode & 0x3) == 3)
546           snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR);
547         elm_icon_file_set(ic, buf, NULL);
548      }
549    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
550    return ic;
551 }
552 Eina_Bool gl2_state_get(const void *data, Evas_Object *obj, const char *part)
553 {
554    return EINA_FALSE;
555 }
556 void gl2_del(const void *data, Evas_Object *obj)
557 {
558 }
559
560 static void
561 my_gl_update(void *data, Evas_Object *obj, void *event_info)
562 {
563    Testitem *tit = data;
564    tit->mode++;
565    elm_genlist_item_update(tit->item);
566 }
567
568 void
569 test_genlist3(void *data, Evas_Object *obj, void *event_info)
570 {
571    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
572    static Testitem tit[3];
573
574    win = elm_win_add(NULL, "genlist-3", ELM_WIN_BASIC);
575    elm_win_title_set(win, "Genlist 3");
576    elm_win_autodel_set(win, 1);
577
578    bg = elm_bg_add(win);
579    elm_win_resize_object_add(win, bg);
580    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
581    evas_object_show(bg);
582
583    bx = elm_box_add(win);
584    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
585    elm_win_resize_object_add(win, bx);
586    evas_object_show(bx);
587
588    gl = elm_genlist_add(win);
589    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
590    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
591    evas_object_show(gl);
592
593    itc2.item_style     = "default";
594    itc2.func.label_get = gl2_label_get;
595    itc2.func.icon_get  = gl2_icon_get;
596    itc2.func.state_get = gl2_state_get;
597    itc2.func.del       = gl2_del;
598
599    tit[0].mode = 0;
600    tit[0].item = elm_genlist_item_append(gl, &itc2,
601                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
602                                          NULL/* func data */);
603    tit[1].mode = 1;
604    tit[1].item = elm_genlist_item_append(gl, &itc2,
605                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
606                                          NULL/* func data */);
607    tit[2].mode = 2;
608    tit[2].item = elm_genlist_item_append(gl, &itc2,
609                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
610                                          NULL/* func data */);
611
612    elm_box_pack_end(bx, gl);
613    evas_object_show(bx);
614
615    bx2 = elm_box_add(win);
616    elm_box_horizontal_set(bx2, 1);
617    elm_box_homogenous_set(bx2, 1);
618    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
619    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
620
621    bt = elm_button_add(win);
622    elm_button_label_set(bt, "[1]");
623    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
624    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
625    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
626    elm_box_pack_end(bx2, bt);
627    evas_object_show(bt);
628
629    bt = elm_button_add(win);
630    elm_button_label_set(bt, "[2]");
631    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
632    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
633    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
634    elm_box_pack_end(bx2, bt);
635    evas_object_show(bt);
636
637    bt = elm_button_add(win);
638    elm_button_label_set(bt, "[3]");
639    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
640    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
641    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
642    elm_box_pack_end(bx2, bt);
643    evas_object_show(bt);
644
645    elm_box_pack_end(bx, bx2);
646    evas_object_show(bx2);
647
648    evas_object_resize(win, 320, 320);
649    evas_object_show(win);
650 }
651
652 /*************/
653
654 static void
655 my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info)
656 {
657    Testitem *tit = data;
658    tit->onoff = elm_check_state_get(obj);
659    printf("item %p onoff = %i\n", tit, tit->onoff);
660 }
661
662 static Elm_Genlist_Item_Class itc3;
663 char *gl3_label_get(const void *data, Evas_Object *obj, const char *part)
664 {
665    const Testitem *tit = data;
666    char buf[256];
667    snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
668    return strdup(buf);
669 }
670 Evas_Object *gl3_icon_get(const void *data, Evas_Object *obj, const char *part)
671 {
672    const Testitem *tit = data;
673    char buf[PATH_MAX];
674    if (!strcmp(part, "elm.swallow.icon"))
675      {
676         Evas_Object *lb;
677         
678         lb = elm_label_add(obj);
679         elm_label_line_wrap_set(lb, 1);
680         elm_label_wrap_width_set(lb, 201);
681         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");
682         evas_object_show(lb);
683         return lb;
684         
685         Evas_Object *bx = elm_box_add(obj);
686         Evas_Object *ic;
687         ic = elm_icon_add(obj);
688         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
689         elm_icon_file_set(ic, buf, NULL);
690         elm_icon_scale_set(ic, 0, 0);
691         evas_object_show(ic);
692         elm_box_pack_end(bx, ic);
693         ic = elm_icon_add(obj);
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         elm_box_horizontal_set(bx, 1);
699         evas_object_show(bx);
700         return bx;
701      }
702    else if (!strcmp(part, "elm.swallow.end"))
703      {
704         Evas_Object *ck;
705         ck = elm_check_add(obj);
706         evas_object_propagate_events_set(ck, 0);
707         elm_check_state_set(ck, tit->onoff);
708         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data);
709         evas_object_show(ck);
710         return ck;
711      }
712    return NULL;
713 }
714 Eina_Bool gl3_state_get(const void *data, Evas_Object *obj, const char *part)
715 {
716    return EINA_FALSE;
717 }
718 void gl3_del(const void *data, Evas_Object *obj)
719 {
720 }
721
722 void
723 test_genlist4(void *data, Evas_Object *obj, void *event_info)
724 {
725    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
726    static Testitem tit[3];
727
728    win = elm_win_add(NULL, "genlist-4", ELM_WIN_BASIC);
729    elm_win_title_set(win, "Genlist 4");
730    elm_win_autodel_set(win, 1);
731
732    bg = elm_bg_add(win);
733    elm_win_resize_object_add(win, bg);
734    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
735    evas_object_show(bg);
736
737    bx = elm_box_add(win);
738    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
739    elm_win_resize_object_add(win, bx);
740    evas_object_show(bx);
741
742    gl = elm_genlist_add(win);
743    elm_genlist_multi_select_set(gl, 1);
744    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
745    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
746    evas_object_show(gl);
747
748    itc3.item_style     = "default";
749    itc3.func.label_get = gl3_label_get;
750    itc3.func.icon_get  = gl3_icon_get;
751    itc3.func.state_get = gl3_state_get;
752    itc3.func.del       = gl3_del;
753
754    tit[0].mode = 0;
755    tit[0].item = elm_genlist_item_append(gl, &itc3,
756                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
757                                          NULL/* func data */);
758    tit[1].mode = 1;
759    tit[1].item = elm_genlist_item_append(gl, &itc3,
760                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
761                                          NULL/* func data */);
762    tit[2].mode = 2;
763    tit[2].item = elm_genlist_item_append(gl, &itc3,
764                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
765                                          NULL/* func data */);
766
767    elm_box_pack_end(bx, gl);
768    evas_object_show(bx);
769
770    bx2 = elm_box_add(win);
771    elm_box_horizontal_set(bx2, 1);
772    elm_box_homogenous_set(bx2, 1);
773    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
774    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
775
776    bt = elm_button_add(win);
777    elm_button_label_set(bt, "[1]");
778    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
779    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
780    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
781    elm_box_pack_end(bx2, bt);
782    evas_object_show(bt);
783
784    bt = elm_button_add(win);
785    elm_button_label_set(bt, "[2]");
786    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
787    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
788    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
789    elm_box_pack_end(bx2, bt);
790    evas_object_show(bt);
791
792    bt = elm_button_add(win);
793    elm_button_label_set(bt, "[3]");
794    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
795    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
796    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
797    elm_box_pack_end(bx2, bt);
798    evas_object_show(bt);
799
800    elm_box_pack_end(bx, bx2);
801    evas_object_show(bx2);
802
803    evas_object_resize(win, 320, 320);
804    evas_object_show(win);
805 }
806
807
808 /*************/
809 static void
810 my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info)
811 {
812    Testitem *tit = data;
813    tit->onoff = elm_check_state_get(obj);
814    printf("item %p onoff = %i\n", tit, tit->onoff);
815 }
816
817 static Elm_Genlist_Item_Class itc5;
818 char *gl5_label_get(const void *data, Evas_Object *obj, const char *part)
819 {
820    const Testitem *tit = data;
821    char buf[256];
822    if (!strcmp(part, "elm.text"))
823      {
824         snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
825      }
826    else if (!strcmp(part, "elm.text.sub"))
827      {
828         snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode);
829      }
830    return strdup(buf);
831 }
832 Evas_Object *gl5_icon_get(const void *data, Evas_Object *obj, const char *part)
833 {
834    const Testitem *tit = data;
835    char buf[PATH_MAX];
836    if (!strcmp(part, "elm.swallow.icon"))
837      {
838         Evas_Object *bx = elm_box_add(obj);
839         Evas_Object *ic;
840         elm_box_horizontal_set(bx, 1);
841         ic = elm_icon_add(obj);
842         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
843         elm_icon_file_set(ic, buf, NULL);
844         elm_icon_scale_set(ic, 0, 0);
845         evas_object_show(ic);
846         elm_box_pack_end(bx, ic);
847         ic = elm_icon_add(obj);
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         elm_box_horizontal_set(bx, 1);
853         evas_object_show(bx);
854         return bx;
855      }
856    else if (!strcmp(part, "elm.swallow.end"))
857      {
858         Evas_Object *ck;
859         ck = elm_check_add(obj);
860         evas_object_propagate_events_set(ck, 0);
861         elm_check_state_set(ck, tit->onoff);
862         evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data);
863         evas_object_show(ck);
864         return ck;
865      }
866    return NULL;
867 }
868 Eina_Bool gl5_state_get(const void *data, Evas_Object *obj, const char *part)
869 {
870    return EINA_FALSE;
871 }
872 void gl5_del(const void *data, Evas_Object *obj)
873 {
874 }
875
876 static void
877 item_drag_up(void *data, Evas_Object *obj, void *event_info)
878 {
879    printf("drag up\n");
880 }
881
882 static void
883 item_drag_down(void *data, Evas_Object *obj, void *event_info)
884 {
885    printf("drag down\n");
886 }
887
888 static void
889 item_drag_left(void *data, Evas_Object *obj, void *event_info)
890 {
891    printf("drag left\n");
892 }
893
894 static void
895 item_drag_right(void *data, Evas_Object *obj, void *event_info)
896 {
897    printf("drag right\n");
898 }
899
900 static void
901 scroll_top(void *data, Evas_Object *obj, void *event_info)
902 {
903    printf("Top edge!\n");
904 }
905
906 static void
907 scroll_bottom(void *data, Evas_Object *obj, void *event_info)
908 {
909    printf("Bottom edge!\n");
910 }
911
912 static void
913 scroll_left(void *data, Evas_Object *obj, void *event_info)
914 {
915    printf("Left edge!\n");
916 }
917
918 static void
919 scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
920 {
921    printf("Right edge!\n");
922 }
923
924 static void
925 item_drag(void *data, Evas_Object *obj, void *event_info)
926 {
927    printf("drag\n");
928 }
929
930 static void
931 item_drag_stop(void *data, Evas_Object *obj, void *event_info)
932 {
933    printf("drag stop\n");
934 }
935
936 static void
937 item_longpress(void *data, Evas_Object *obj, void *event_info)
938 {
939    printf("longpress\n");
940 }
941
942 void
943 test_genlist5(void *data, Evas_Object *obj, void *event_info)
944 {
945    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
946    static Testitem tit[5];
947
948    win = elm_win_add(NULL, "genlist-5", ELM_WIN_BASIC);
949    elm_win_title_set(win, "Genlist 5");
950    elm_win_autodel_set(win, 1);
951
952    bg = elm_bg_add(win);
953    elm_win_resize_object_add(win, bg);
954    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
955    evas_object_show(bg);
956
957    bx = elm_box_add(win);
958    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
959    elm_win_resize_object_add(win, bx);
960    evas_object_show(bx);
961
962    gl = elm_genlist_add(win);
963    elm_genlist_always_select_mode_set(gl, 1);
964    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
965    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
966    evas_object_show(gl);
967    itc5.item_style     = "double_label";
968    itc5.func.label_get = gl5_label_get;
969    itc5.func.icon_get  = gl5_icon_get;
970    itc5.func.state_get = gl5_state_get;
971    itc5.func.del       = gl5_del;
972
973    tit[0].mode = 0;
974    tit[0].item = elm_genlist_item_append(gl, &itc5,
975                                          &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
976                                          NULL/* func data */);
977    tit[1].mode = 1;
978    tit[1].item = elm_genlist_item_append(gl, &itc5,
979                                          &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
980                                          NULL/* func data */);
981    tit[2].mode = 2;
982    tit[2].item = elm_genlist_item_append(gl, &itc5,
983                                          &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
984                                          NULL/* func data */);
985    tit[3].mode = 3;
986    tit[3].item = elm_genlist_item_append(gl, &itc5,
987                                          &(tit[3])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
988                                          NULL/* func data */);
989
990    tit[4].mode = 4;
991    tit[4].item = elm_genlist_item_append(gl, &itc5,
992                                          &(tit[4])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
993                                          NULL/* func data */);
994    elm_box_pack_end(bx, gl);
995    evas_object_show(bx);
996
997    evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL);
998    evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
999    evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
1000    evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
1001    evas_object_smart_callback_add(gl, "scroll,edge,top", scroll_top, NULL);
1002    evas_object_smart_callback_add(gl, "scroll,edge,bottom", scroll_bottom, NULL);
1003    evas_object_smart_callback_add(gl, "scroll,edge,left", scroll_left, NULL);
1004    evas_object_smart_callback_add(gl, "scroll,edge,right", scroll_right, NULL);
1005    evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
1006    evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
1007    evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
1008
1009    bx2 = elm_box_add(win);
1010    elm_box_horizontal_set(bx2, 1);
1011    elm_box_homogenous_set(bx2, 1);
1012    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1013    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1014
1015    bt = elm_button_add(win);
1016    elm_button_label_set(bt, "[1]");
1017    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1018    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1019    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1020    elm_box_pack_end(bx2, bt);
1021    evas_object_show(bt);
1022
1023    bt = elm_button_add(win);
1024    elm_button_label_set(bt, "[2]");
1025    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1026    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1027    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1028    elm_box_pack_end(bx2, bt);
1029    evas_object_show(bt);
1030
1031    bt = elm_button_add(win);
1032    elm_button_label_set(bt, "[3]");
1033    evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1034    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1035    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1036    elm_box_pack_end(bx2, bt);
1037    evas_object_show(bt);
1038
1039    elm_box_pack_end(bx, bx2);
1040    evas_object_show(bx2);
1041
1042    evas_object_resize(win, 320, 320);
1043    evas_object_show(win);
1044 }
1045
1046 /*************/
1047
1048 static Elm_Genlist_Item_Class itc4;
1049
1050 static void
1051 gl4_sel(void *data, Evas_Object *obj, void *event_info)
1052 {
1053 }
1054 static void
1055 gl4_exp(void *data, Evas_Object *obj, void *event_info)
1056 {
1057    Elm_Genlist_Item *it = event_info;
1058    Evas_Object *gl = elm_genlist_item_genlist_get(it);
1059    int val = (int)elm_genlist_item_data_get(it);
1060    val *= 10;
1061    elm_genlist_item_append(gl, &itc4,
1062                            (void *)(val + 1)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1063                            NULL/* func data */);
1064    elm_genlist_item_append(gl, &itc4,
1065                            (void *)(val + 2)/* item data */, it/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1066                            NULL/* func data */);
1067    elm_genlist_item_append(gl, &itc4,
1068                            (void *)(val + 3)/* item data */, it/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1069                            NULL/* func data */);
1070 }
1071 static void
1072 gl4_con(void *data, Evas_Object *obj, void *event_info)
1073 {
1074    Elm_Genlist_Item *it = event_info;
1075    elm_genlist_item_subitems_clear(it);
1076 }
1077
1078 static void
1079 gl4_exp_req(void *data, Evas_Object *obj, void *event_info)
1080 {
1081    Elm_Genlist_Item *it = event_info;
1082    elm_genlist_item_expanded_set(it, 1);
1083 }
1084 static void
1085 gl4_con_req(void *data, Evas_Object *obj, void *event_info)
1086 {
1087    Elm_Genlist_Item *it = event_info;
1088    elm_genlist_item_expanded_set(it, 0);
1089 }
1090
1091 char *gl4_label_get(const void *data, Evas_Object *obj, const char *part)
1092 {
1093    char buf[256];
1094    snprintf(buf, sizeof(buf), "Item mode %i", (int)data);
1095    return strdup(buf);
1096 }
1097 Evas_Object *gl4_icon_get(const void *data, Evas_Object *obj, const char *part)
1098 {
1099    char buf[PATH_MAX];
1100    if (!strcmp(part, "elm.swallow.icon"))
1101      {
1102         Evas_Object *ic = elm_icon_add(obj);
1103         snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
1104         elm_icon_file_set(ic, buf, NULL);
1105         evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1106         evas_object_show(ic);
1107         return ic;
1108      }
1109    else if (!strcmp(part, "elm.swallow.end"))
1110      {
1111         Evas_Object *ck;
1112         ck = elm_check_add(obj);
1113         evas_object_show(ck);
1114         return ck;
1115      }
1116    return NULL;
1117 }
1118 Eina_Bool gl4_state_get(const void *data, Evas_Object *obj, const char *part)
1119 {
1120    return EINA_FALSE;
1121 }
1122 void gl4_del(const void *data, Evas_Object *obj)
1123 {
1124 }
1125
1126 void
1127 test_genlist6(void *data, Evas_Object *obj, void *event_info)
1128 {
1129    Evas_Object *win, *bg, *gl, *bx, *bx2, *bt;
1130
1131    win = elm_win_add(NULL, "genlist-tree", ELM_WIN_BASIC);
1132    elm_win_title_set(win, "Genlist Tree");
1133    elm_win_autodel_set(win, 1);
1134
1135    bg = elm_bg_add(win);
1136    elm_win_resize_object_add(win, bg);
1137    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1138    evas_object_show(bg);
1139
1140    bx = elm_box_add(win);
1141    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1142    elm_win_resize_object_add(win, bx);
1143    evas_object_show(bx);
1144
1145    gl = elm_genlist_add(win);
1146    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1147    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1148    evas_object_show(gl);
1149
1150    itc4.item_style     = "default";
1151    itc4.func.label_get = gl4_label_get;
1152    itc4.func.icon_get  = gl4_icon_get;
1153    itc4.func.state_get = gl4_state_get;
1154    itc4.func.del       = gl4_del;
1155
1156    elm_genlist_item_append(gl, &itc4,
1157                            (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1158                            NULL/* func data */);
1159    elm_genlist_item_append(gl, &itc4,
1160                            (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_SUBITEMS, gl4_sel/* func */,
1161                            NULL/* func data */);
1162    elm_genlist_item_append(gl, &itc4,
1163                            (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1164                            NULL/* func data */);
1165
1166    evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl);
1167    evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl);
1168    evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl);
1169    evas_object_smart_callback_add(gl, "contracted", gl4_con, gl);
1170
1171    elm_box_pack_end(bx, gl);
1172    evas_object_show(bx);
1173
1174    bx2 = elm_box_add(win);
1175    elm_box_horizontal_set(bx2, 1);
1176    elm_box_homogenous_set(bx2, 1);
1177    evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1178    evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1179
1180    bt = elm_button_add(win);
1181    elm_button_label_set(bt, "[1]");
1182 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1183    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1184    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1185    elm_box_pack_end(bx2, bt);
1186    evas_object_show(bt);
1187
1188    bt = elm_button_add(win);
1189    elm_button_label_set(bt, "[2]");
1190 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1191    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1192    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1193    elm_box_pack_end(bx2, bt);
1194    evas_object_show(bt);
1195
1196    bt = elm_button_add(win);
1197    elm_button_label_set(bt, "[3]");
1198 //   evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1199    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1200    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1201    elm_box_pack_end(bx2, bt);
1202    evas_object_show(bt);
1203
1204    elm_box_pack_end(bx, bx2);
1205    evas_object_show(bx2);
1206
1207    evas_object_resize(win, 320, 320);
1208    evas_object_show(win);
1209 }
1210
1211 /*************/
1212
1213 struct genlist7_data
1214 {
1215   Evas_Object *win, *pager;
1216 };
1217
1218 static Elm_Genlist_Item_Class itc7;
1219 static void
1220 gl_sel7(void *data, Evas_Object *obj, void *event_info)
1221 {
1222    if (!event_info) return;
1223    elm_genlist_item_item_class_update(event_info, &itc7);
1224    printf("sel item data [%p] on genlist obj [%p], item pointer [%p], new item style [%s] \n", data, obj, event_info, itc7.item_style);
1225 }
1226
1227 static void
1228 test_genlist7_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1229 {
1230     struct genlist7_data *info = data;
1231     if (!info) return;
1232
1233     elm_pager_content_pop(info->pager);
1234 }
1235
1236 static void
1237 test_genlist7_swipe(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1238 {
1239    struct genlist7_data *info = data;
1240    Evas_Object *box, *entry, *button;
1241    char item_data[] = "Just a simple test";
1242
1243    if ((!event_info) || (!data)) return;
1244
1245    box = elm_box_add(info->win);
1246    elm_box_homogenous_set(box, 0);
1247    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1248    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1249    evas_object_show(box);
1250
1251    entry = elm_scrolled_entry_add(info->win);
1252    elm_scrolled_entry_editable_set(entry, EINA_FALSE);
1253    elm_scrolled_entry_entry_set(entry, item_data);
1254    evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1255    evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
1256    evas_object_show(entry);
1257
1258    button = elm_button_add(info->win);
1259    elm_button_label_set(button, "back");
1260    evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
1261    evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
1262    evas_object_smart_callback_add(button, "clicked", test_genlist7_back_cb,
1263                                   info);
1264    evas_object_show(button);
1265
1266    elm_box_pack_start(box, entry);
1267    elm_box_pack_end(box, button);
1268
1269    elm_pager_content_push(info->pager, box);
1270 }
1271
1272 void
1273 test_genlist7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1274 {
1275    Evas_Object *win, *bg, *gl, *pager;
1276    static struct genlist7_data info;
1277    static Testitem tit[3];
1278
1279    win = elm_win_add(NULL, "genlist-7", ELM_WIN_BASIC);
1280    elm_win_title_set(win, "Genlist 7");
1281    elm_win_autodel_set(win, 1);
1282    info.win = win;
1283
1284    bg = elm_bg_add(win);
1285    elm_win_resize_object_add(win, bg);
1286    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1287    evas_object_show(bg);
1288
1289    pager = elm_pager_add(win);
1290    elm_win_resize_object_add(win, pager);
1291    evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1292    evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL);
1293    evas_object_show(pager);
1294    info.pager = pager;
1295
1296    gl = elm_genlist_add(win);
1297    evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1298    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1299    evas_object_smart_callback_add(gl, "swipe", test_genlist7_swipe, &info);
1300    evas_object_show(gl);
1301    elm_pager_content_push(pager, gl);
1302
1303    itc2.item_style     = "default";
1304    itc2.func.label_get = gl2_label_get;
1305    itc2.func.icon_get  = gl2_icon_get;
1306    itc2.func.state_get = gl2_state_get;
1307    itc2.func.del       = gl2_del;
1308
1309    itc7.item_style     = "double_label";
1310    itc7.func.label_get = gl5_label_get;
1311    itc7.func.icon_get  = gl5_icon_get;
1312    itc7.func.state_get = gl5_state_get;
1313    itc7.func.del       = gl5_del;
1314
1315    tit[0].mode = 0;
1316    tit[0].item = elm_genlist_item_append(gl, &itc2,
1317                                          &(tit[0])/* item data */, NULL/* parent */,
1318                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1319                                          NULL/* func data */);
1320    tit[1].mode = 1;
1321    tit[1].item = elm_genlist_item_append(gl, &itc2,
1322                                          &(tit[1])/* item data */, NULL/* parent */,
1323                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1324                                          NULL/* func data */);
1325    tit[2].mode = 2;
1326    tit[2].item = elm_genlist_item_append(gl, &itc2,
1327                                          &(tit[2])/* item data */, NULL/* parent */,
1328                                          ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1329                                          NULL/* func data */);
1330
1331    evas_object_resize(win, 320, 320);
1332    evas_object_show(win);
1333 }
1334 #endif