aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/bin/test_genlist.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-04-22 09:20:32 +1000
committerDavid Walter Seikel2012-04-22 09:20:32 +1000
commit3ad3455551be0d7859ecb02290376206d5e66498 (patch)
tree497917e12b4d7f458dff9765d9b53f64c4e03fc3 /libraries/elementary/src/bin/test_genlist.c
parentUpdate EFL to latest beta. (diff)
downloadSledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.zip
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.gz
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.bz2
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.xz
And actually include new files, plus elementary libraries.
Diffstat (limited to 'libraries/elementary/src/bin/test_genlist.c')
-rw-r--r--libraries/elementary/src/bin/test_genlist.c2814
1 files changed, 2814 insertions, 0 deletions
diff --git a/libraries/elementary/src/bin/test_genlist.c b/libraries/elementary/src/bin/test_genlist.c
new file mode 100644
index 0000000..9e69942
--- /dev/null
+++ b/libraries/elementary/src/bin/test_genlist.c
@@ -0,0 +1,2814 @@
1#include <Elementary_Cursor.h>
2#include "test.h"
3#ifdef HAVE_CONFIG_H
4#include "elementary_config.h"
5#endif
6#include <Elementary.h>
7#ifndef ELM_LIB_QUICKLAUNCH
8struct _api_data
9{
10 unsigned int state; /* What state we are testing */
11 void *box; /* Use this to get box content */
12};
13typedef struct _api_data api_data;
14
15enum _api_state
16{
17 HORIZONTAL_SET,
18 NO_SELECT_MODE_SET,
19 COMPRESS_MODE_SET,
20 BOUNCE_SET,
21 HOMOGENEOUS_SET,
22 SCROLLER_POLICY_SET,
23 TOOLTIP_TEXT_SET,
24 ITEM_CURSOR_SET,
25 API_STATE_LAST
26};
27typedef enum _api_state api_state;
28
29static void
30set_api_state(api_data *api)
31{
32 const Eina_List *items = elm_box_children_get(api->box);
33 if (!eina_list_count(items))
34 return;
35
36 Evas_Object *gl = eina_list_nth(items, 0); /* Genlist is the first item */
37 /* use elm_box_children_get() to get list of children */
38 switch(api->state)
39 {/* Put all api-changes under switch */
40 case HORIZONTAL_SET: /* 0 */
41 elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
42 break;
43
44 case NO_SELECT_MODE_SET: /* 1 */
45 elm_genlist_select_mode_set(gl, ELM_OBJECT_SELECT_MODE_NONE);
46 elm_genlist_mode_set(gl, ELM_LIST_SCROLL); /* Back to default */
47 break;
48
49 case COMPRESS_MODE_SET: /* 2 */
50 elm_genlist_select_mode_set(gl, ELM_OBJECT_SELECT_MODE_DEFAULT);
51 elm_genlist_mode_set(gl, ELM_LIST_COMPRESS);
52 break;
53
54 case BOUNCE_SET: /* 3 */
55 elm_genlist_bounce_set(gl, EINA_FALSE, EINA_FALSE);
56 break;
57
58 case HOMOGENEOUS_SET: /* 4 */
59 elm_genlist_bounce_set(gl, EINA_TRUE, EINA_TRUE); /* Back to default */
60 elm_genlist_homogeneous_set(gl, EINA_TRUE);
61 break;
62
63 case SCROLLER_POLICY_SET: /* 5 */
64 elm_genlist_homogeneous_set(gl, EINA_FALSE); /* Back to default */
65 elm_genlist_scroller_policy_set(gl, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
66 break;
67
68 case TOOLTIP_TEXT_SET: /* 6 */
69 {
70 elm_genlist_item_tooltip_text_set(elm_genlist_first_item_get(gl), "Tooltip text from API");
71 elm_genlist_item_bring_in(elm_genlist_first_item_get(gl),
72 ELM_GENLIST_ITEM_SCROLLTO_IN);
73 }
74 break;
75
76 case ITEM_CURSOR_SET: /* 7 */
77 elm_genlist_item_cursor_set(elm_genlist_first_item_get(gl), ELM_CURSOR_HAND2);
78 break;
79
80 default:
81 return;
82 }
83}
84
85static void
86_api_bt_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__)
87{ /* Will add here a SWITCH command containing code to modify test-object */
88 /* in accordance a->state value. */
89 api_data *a = data;
90 char str[128];
91
92 printf("clicked event on API Button: api_state=<%d>\n", a->state);
93 set_api_state(a);
94 a->state++;
95 sprintf(str, "Next API function (%u)", a->state);
96 elm_object_text_set(obj, str);
97 elm_object_disabled_set(obj, a->state == API_STATE_LAST);
98}
99/* Hint:
100 * In this example some calls to elm_genlist_item_append() are used which give the
101 * value of an int as 'item data' and 'func data' after casting into (void*). For
102 * sure this works only on architectures where sizeof(int)==sizeof(void*).
103 * For real world usage you should hold a data structure or value in your
104 * application and then give only a pointer to this data as data pointer.
105 */
106
107typedef struct _Testitem
108{
109 Elm_Object_Item *item;
110 int mode;
111 int onoff;
112 Eina_Bool checked;
113} Testitem;
114
115static Elm_Genlist_Item_Class *itc1;
116char *gl_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
117{
118 char buf[256];
119 snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data);
120 return strdup(buf);
121}
122
123Evas_Object *gl_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
124{
125 char buf[PATH_MAX];
126 Evas_Object *ic = elm_icon_add(obj);
127 if (!strcmp(part, "elm.swallow.end"))
128 snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());
129 else
130 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
131 elm_icon_file_set(ic, buf, NULL);
132 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
133 return ic;
134}
135
136Eina_Bool gl_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
137{
138 return EINA_FALSE;
139}
140
141static void
142gl_sel(void *data, Evas_Object *obj, void *event_info)
143{
144 printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", data, obj, event_info);
145}
146
147static void
148_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
149{
150 Evas_Object *gl = data;
151 Evas_Event_Mouse_Move *ev = event_info;
152 int where = 0;
153 Elm_Object_Item *gli;
154 gli = elm_genlist_at_xy_item_get(gl, ev->cur.canvas.x, ev->cur.canvas.y, &where);
155 if (gli)
156 printf("over %p, where %i\n", elm_object_item_data_get(gli), where);
157 else
158 printf("over none, where %i\n", where);
159}
160
161static void
162_bt50_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
163{
164 elm_genlist_item_bring_in(data, ELM_GENLIST_ITEM_SCROLLTO_IN);
165}
166
167static void
168_bt1500_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
169{
170 elm_genlist_item_bring_in(data, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
171}
172
173static void
174_gl_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
175{
176 printf("selected: %p\n", event_info);
177}
178
179static void
180_gl_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
181{
182 printf("double clicked: %p\n", event_info);
183}
184
185static void
186_gl_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
187{
188 printf("longpress %p\n", event_info);
189}
190
191static void
192_cleanup_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
193{
194 free(data);
195}
196
197void
198test_genlist(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
199{
200 Evas_Object *win, *gl, *bt_50, *bt_1500, *bx, *bxx, *bt;
201 Evas_Object *over;
202 Elm_Object_Item *gli;
203 int i;
204 api_data *api = calloc(1, sizeof(api_data));
205
206 win = elm_win_util_standard_add("genlist", "Genlist");
207 elm_win_autodel_set(win, EINA_TRUE);
208 evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
209
210 bxx = elm_box_add(win);
211 elm_win_resize_object_add(win, bxx);
212 evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
213 evas_object_show(bxx);
214
215 bx = elm_box_add(win);
216 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
217 evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
218 api->box = bx;
219 evas_object_show(bx);
220
221 bt = elm_button_add(win);
222 elm_object_text_set(bt, "Next API function");
223 evas_object_smart_callback_add(bt, "clicked", _api_bt_clicked, (void *) api);
224 elm_box_pack_end(bxx, bt);
225 elm_object_disabled_set(bt, api->state == API_STATE_LAST);
226 evas_object_show(bt);
227
228 elm_box_pack_end(bxx, bx);
229
230 gl = elm_genlist_add(win);
231 evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
232 evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
233 evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
234 // FIXME: This causes genlist to resize the horiz axis very slowly :(
235 // Reenable this and resize the window horizontally, then try to resize it back
236 //elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
237 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
238 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
239 elm_box_pack_end(bx, gl);
240 evas_object_show(gl);
241
242 over = evas_object_rectangle_add(evas_object_evas_get(win));
243 evas_object_color_set(over, 0, 0, 0, 0);
244 evas_object_event_callback_add(over, EVAS_CALLBACK_MOUSE_MOVE, _move, gl);
245 evas_object_repeat_events_set(over, 1);
246 evas_object_show(over);
247 evas_object_size_hint_weight_set(over, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
248 elm_win_resize_object_add(win, over);
249
250 itc1 = elm_genlist_item_class_new();
251 itc1->item_style = "default";
252 itc1->func.text_get = gl_text_get;
253 itc1->func.content_get = gl_content_get;
254 itc1->func.state_get = gl_state_get;
255 itc1->func.del = NULL;
256
257 bt_50 = elm_button_add(win);
258 elm_object_text_set(bt_50, "Go to 50");
259 evas_object_show(bt_50);
260 elm_box_pack_end(bx, bt_50);
261
262 bt_1500 = elm_button_add(win);
263 elm_object_text_set(bt_1500, "Go to 1500");
264 evas_object_show(bt_1500);
265 elm_box_pack_end(bx, bt_1500);
266
267 for (i = 0; i < 2000; i++)
268 {
269 gli = elm_genlist_item_append(gl, itc1,
270 (void *)(long)i/* item data */,
271 NULL/* parent */,
272 ELM_GENLIST_ITEM_NONE,
273 gl_sel/* func */,
274 (void *)(long)(i * 10)/* func data */);
275 if (i == 50)
276 evas_object_smart_callback_add(bt_50, "clicked", _bt50_cb, gli);
277 else if (i == 1500)
278 evas_object_smart_callback_add(bt_1500, "clicked", _bt1500_cb, gli);
279 }
280 elm_genlist_item_class_free(itc1);
281
282 evas_object_resize(win, 480, 800);
283 evas_object_show(win);
284}
285
286/*************/
287
288static void
289my_gl_clear(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
290{
291 Evas_Object *gl = data;
292 elm_genlist_clear(gl);
293}
294
295static void
296my_gl_add(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
297{
298 Evas_Object *gl = data;
299 static int i = 0;
300
301 itc1->item_style = "default";
302 itc1->func.text_get = gl_text_get;
303 itc1->func.content_get = gl_content_get;
304 itc1->func.state_get = gl_state_get;
305 itc1->func.del = NULL;
306
307 elm_genlist_item_append(gl, itc1,
308 (void *)(long)i/* item data */,
309 NULL/* parent */,
310 ELM_GENLIST_ITEM_NONE,
311 gl_sel/* func */,
312 (void *)(long)(i * 10)/* func data */);
313 i++;
314}
315
316static void
317my_gl_insert_before(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
318{
319 Evas_Object *gl = data;
320 static int i = 0;
321 Elm_Object_Item *gli_selected;
322
323 itc1->item_style = "default";
324 itc1->func.text_get = gl_text_get;
325 itc1->func.content_get = gl_content_get;
326 itc1->func.state_get = gl_state_get;
327 itc1->func.del = NULL;
328
329 gli_selected = elm_genlist_selected_item_get(gl);
330 if (!gli_selected)
331 {
332 printf("no item selected\n");
333 return ;
334 }
335
336 elm_genlist_item_insert_before(gl, itc1,
337 (void *)(long)i/* item data */,
338 NULL/* parent */,
339 gli_selected /* item before */,
340 ELM_GENLIST_ITEM_NONE,
341 gl_sel/* func */,
342 (void *)(long)(i * 10)/* func data */);
343 i++;
344}
345
346static void
347my_gl_insert_after(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
348{
349 Evas_Object *gl = data;
350 static int i = 0;
351 Elm_Object_Item *gli_selected;
352
353 itc1->item_style = "default";
354 itc1->func.text_get = gl_text_get;
355 itc1->func.content_get = gl_content_get;
356 itc1->func.state_get = gl_state_get;
357 itc1->func.del = NULL;
358
359 gli_selected = elm_genlist_selected_item_get(gl);
360 if (!gli_selected)
361 {
362 printf("no item selected\n");
363 return ;
364 }
365
366 elm_genlist_item_insert_after(gl, itc1,
367 (void *)(long)i/* item data */,
368 NULL/* parent */,
369 gli_selected /* item after */,
370 ELM_GENLIST_ITEM_NONE,
371 gl_sel/* func */,
372 (void *)(long)(i * 10)/* func data */);
373 i++;
374}
375
376static void
377my_gl_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
378{
379 Evas_Object *gl = data;
380 Elm_Object_Item *gli = elm_genlist_selected_item_get(gl);
381 if (!gli)
382 {
383 printf("no item selected\n");
384 return;
385 }
386 elm_object_item_del(gli);
387}
388
389static void
390my_gl_disable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
391{
392 Evas_Object *gl = data;
393 Elm_Object_Item *gli = elm_genlist_selected_item_get(gl);
394 if (!gli)
395 {
396 printf("no item selected\n");
397 return;
398 }
399 elm_object_item_disabled_set(gli, EINA_TRUE);
400 elm_genlist_item_selected_set(gli, EINA_FALSE);
401 elm_genlist_item_update(gli);
402}
403
404static void
405my_gl_update_all(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
406{
407 Evas_Object *gl = data;
408 int i = 0;
409 Elm_Object_Item *it = elm_genlist_first_item_get(gl);
410 while (it)
411 {
412 elm_genlist_item_update(it);
413 printf("%i\n", i);
414 i++;
415 it = elm_genlist_item_next_get(it);
416 }
417}
418
419static void
420my_gl_first(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
421{
422 Evas_Object *gl = data;
423 Elm_Object_Item *gli = elm_genlist_first_item_get(gl);
424 if (!gli) return;
425 elm_genlist_item_show(gli, ELM_GENLIST_ITEM_SCROLLTO_IN);
426 elm_genlist_item_selected_set(gli, 1);
427}
428
429static void
430my_gl_last(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
431{
432 Evas_Object *gl = data;
433 Elm_Object_Item *gli = elm_genlist_last_item_get(gl);
434 if (!gli) return;
435 elm_genlist_item_show(gli, ELM_GENLIST_ITEM_SCROLLTO_IN);
436 elm_genlist_item_selected_set(gli, 1);
437}
438
439static Eina_Bool
440my_gl_flush_delay(void *data __UNUSED__)
441{
442 elm_cache_all_flush();
443 return ECORE_CALLBACK_CANCEL;
444}
445
446static void
447my_gl_flush(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
448{
449 ecore_timer_add(1.2, my_gl_flush_delay, NULL);
450}
451
452void
453test_genlist2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
454{
455 Evas_Object *win, *bg, *gl, *bx, *bx2, *bx3, *bt;
456 Elm_Object_Item *gli[10];
457 char buf[PATH_MAX];
458
459 win = elm_win_add(NULL, "genlist2", ELM_WIN_BASIC);
460 elm_win_title_set(win, "Genlist 2");
461 elm_win_autodel_set(win, EINA_TRUE);
462
463 bg = elm_bg_add(win);
464 snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get());
465 elm_bg_file_set(bg, buf, NULL);
466 elm_win_resize_object_add(win, bg);
467 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
468 evas_object_show(bg);
469
470 bx = elm_box_add(win);
471 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
472 elm_win_resize_object_add(win, bx);
473 evas_object_show(bx);
474
475 gl = elm_genlist_add(win);
476 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
477 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
478 evas_object_show(gl);
479
480 itc1 = elm_genlist_item_class_new();
481 itc1->item_style = "default";
482 itc1->func.text_get = gl_text_get;
483 itc1->func.content_get = gl_content_get;
484 itc1->func.state_get = gl_state_get;
485 itc1->func.del = NULL;
486
487 gli[0] = elm_genlist_item_append(gl, itc1,
488 (void *)1001/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
489 (void *)1001/* func data */);
490 gli[1] = elm_genlist_item_append(gl, itc1,
491 (void *)1002/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
492 (void *)1002/* func data */);
493 gli[2] = elm_genlist_item_append(gl, itc1,
494 (void *)1003/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
495 (void *)1003/* func data */);
496 gli[3] = elm_genlist_item_prepend(gl, itc1,
497 (void *)1004/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
498 (void *)1004/* func data */);
499 gli[4] = elm_genlist_item_prepend(gl, itc1,
500 (void *)1005/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
501 (void *)1005/* func data */);
502 gli[5] = elm_genlist_item_insert_before(gl, itc1,
503 (void *)1006/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
504 gl_sel/* func */, (void *)1006/* func data */);
505 gli[6] = elm_genlist_item_insert_after(gl, itc1,
506 (void *)1007/* item data */, NULL/* parent */, gli[2]/* rel */, ELM_GENLIST_ITEM_NONE,
507 gl_sel/* func */, (void *)1007/* func data */);
508 elm_box_pack_end(bx, gl);
509
510 bx2 = elm_box_add(win);
511 elm_box_horizontal_set(bx2, EINA_TRUE);
512 elm_box_homogeneous_set(bx2, EINA_TRUE);
513 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
514 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
515
516 bt = elm_button_add(win);
517 elm_object_text_set(bt, "/\\");
518 evas_object_smart_callback_add(bt, "clicked", my_gl_first, gl);
519 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
520 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
521 elm_box_pack_end(bx2, bt);
522 evas_object_show(bt);
523
524 bt = elm_button_add(win);
525 elm_object_text_set(bt, "\\/");
526 evas_object_smart_callback_add(bt, "clicked", my_gl_last, gl);
527 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
528 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
529 elm_box_pack_end(bx2, bt);
530 evas_object_show(bt);
531
532 bt = elm_button_add(win);
533 elm_object_text_set(bt, "#");
534 evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl);
535 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
536 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
537 elm_box_pack_end(bx2, bt);
538 evas_object_show(bt);
539
540 bt = elm_button_add(win);
541 elm_object_text_set(bt, "U");
542 evas_object_smart_callback_add(bt, "clicked", my_gl_update_all, gl);
543 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
544 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
545 elm_box_pack_end(bx2, bt);
546 evas_object_show(bt);
547
548 elm_box_pack_end(bx, bx2);
549 evas_object_show(bx2);
550
551 bx2 = elm_box_add(win);
552 elm_box_horizontal_set(bx2, EINA_TRUE);
553 elm_box_homogeneous_set(bx2, EINA_TRUE);
554 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
555 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
556
557 bt = elm_button_add(win);
558 elm_object_text_set(bt, "X");
559 evas_object_smart_callback_add(bt, "clicked", my_gl_clear, gl);
560 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
561 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
562 elm_box_pack_end(bx2, bt);
563 evas_object_show(bt);
564
565 bt = elm_button_add(win);
566 elm_object_text_set(bt, "+");
567 evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl);
568 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
569 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
570 elm_box_pack_end(bx2, bt);
571 evas_object_show(bt);
572
573 bt = elm_button_add(win);
574 elm_object_text_set(bt, "-");
575 evas_object_smart_callback_add(bt, "clicked", my_gl_del, gl);
576 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
577 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
578 elm_box_pack_end(bx2, bt);
579 evas_object_show(bt);
580
581 elm_box_pack_end(bx, bx2);
582 evas_object_show(bx2);
583
584 bx3 = elm_box_add(win);
585 elm_box_horizontal_set(bx3, EINA_TRUE);
586 elm_box_homogeneous_set(bx3, EINA_TRUE);
587 evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
588 evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
589
590 bt = elm_button_add(win);
591 elm_object_text_set(bt, "+ before");
592 evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before, gl);
593 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
594 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
595 elm_box_pack_end(bx3, bt);
596 evas_object_show(bt);
597
598 bt = elm_button_add(win);
599 elm_object_text_set(bt, "+ after");
600 evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after, gl);
601 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
602 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
603 elm_box_pack_end(bx3, bt);
604 evas_object_show(bt);
605
606 bt = elm_button_add(win);
607 elm_object_text_set(bt, "Flush");
608 evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl);
609 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
610 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
611 elm_box_pack_end(bx3, bt);
612 evas_object_show(bt);
613
614 elm_box_pack_end(bx, bx3);
615 evas_object_show(bx3);
616
617 /* item_class_ref is needed for itc1. some items can be added in callbacks */
618 elm_genlist_item_class_ref(itc1);
619 elm_genlist_item_class_free(itc1);
620
621 evas_object_resize(win, 320, 320);
622 evas_object_show(win);
623}
624
625/*************/
626
627static Elm_Genlist_Item_Class itc2;
628
629char *gl2_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
630{
631 const Testitem *tit = data;
632 char buf[256];
633 snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
634 return strdup(buf);
635}
636
637Evas_Object *gl2_content_get(void *data, Evas_Object *obj, const char *part)
638{
639 const Testitem *tit = data;
640 char buf[PATH_MAX];
641 Evas_Object *ic = elm_icon_add(obj);
642 if (!strcmp(part, "elm.swallow.icon"))
643 {
644 if (!(tit->mode & 0x3))
645 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
646 else if ((tit->mode & 0x3) == 1)
647 snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
648 else if ((tit->mode & 0x3) == 2)
649 snprintf(buf, sizeof(buf), "%s/images/panel_01.jpg", elm_app_data_dir_get());
650 else if ((tit->mode & 0x3) == 3)
651 snprintf(buf, sizeof(buf), "%s/images/rock_01.jpg", elm_app_data_dir_get());
652 elm_icon_file_set(ic, buf, NULL);
653 }
654 else if (!strcmp(part, "elm.swallow.end"))
655 {
656 if (!(tit->mode & 0x3))
657 snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get());
658 else if ((tit->mode & 0x3) == 1)
659 snprintf(buf, sizeof(buf), "%s/images/sky_02.jpg", elm_app_data_dir_get());
660 else if ((tit->mode & 0x3) == 2)
661 snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", elm_app_data_dir_get());
662 else if ((tit->mode & 0x3) == 3)
663 snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", elm_app_data_dir_get());
664 elm_icon_file_set(ic, buf, NULL);
665 }
666 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
667 return ic;
668}
669
670Eina_Bool gl2_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
671{
672 return EINA_FALSE;
673}
674
675static void
676my_gl_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
677{
678 Testitem *tit = data;
679 tit->mode++;
680 elm_genlist_item_update(tit->item);
681}
682
683static void
684my_gl_labels_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
685{
686 Testitem *tit = data;
687 tit->mode++;
688 elm_genlist_item_fields_update(tit->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
689}
690
691static void
692my_gl_contents_update(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
693{
694 Testitem *tit = data;
695 tit->mode++;
696 elm_genlist_item_fields_update(tit->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
697}
698
699void
700test_genlist3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
701{
702 Evas_Object *win, *gl, *bx, *bx2, *bt;
703 static Testitem tit[3];
704
705 win = elm_win_util_standard_add("genlist3", "Genlist 3");
706 elm_win_autodel_set(win, EINA_TRUE);
707
708 bx = elm_box_add(win);
709 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
710 elm_win_resize_object_add(win, bx);
711 evas_object_show(bx);
712
713 gl = elm_genlist_add(win);
714 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
715 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
716 evas_object_show(gl);
717
718 itc2.item_style = "default";
719 itc2.func.text_get = gl2_text_get;
720 itc2.func.content_get = gl2_content_get;
721 itc2.func.state_get = gl2_state_get;
722 itc2.func.del = NULL;
723
724 tit[0].mode = 0;
725 tit[0].item = elm_genlist_item_append(gl, &itc2,
726 &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
727 NULL/* func data */);
728 tit[1].mode = 1;
729 tit[1].item = elm_genlist_item_append(gl, &itc2,
730 &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
731 NULL/* func data */);
732 tit[2].mode = 2;
733 tit[2].item = elm_genlist_item_append(gl, &itc2,
734 &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
735 NULL/* func data */);
736
737 elm_box_pack_end(bx, gl);
738 evas_object_show(bx);
739
740 bx2 = elm_box_add(win);
741 elm_box_horizontal_set(bx2, EINA_TRUE);
742 elm_box_homogeneous_set(bx2, EINA_TRUE);
743 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
744 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
745
746 bt = elm_button_add(win);
747 elm_object_text_set(bt, "[1]");
748 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
749 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
750 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
751 elm_box_pack_end(bx2, bt);
752 evas_object_show(bt);
753
754 bt = elm_button_add(win);
755 elm_object_text_set(bt, "labels");
756 evas_object_smart_callback_add(bt, "clicked", my_gl_labels_update, &(tit[1]));
757 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
758 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
759 elm_box_pack_end(bx2, bt);
760 evas_object_show(bt);
761
762 bt = elm_button_add(win);
763 elm_object_text_set(bt, "contents");
764 evas_object_smart_callback_add(bt, "clicked", my_gl_contents_update, &(tit[2]));
765 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
766 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
767 elm_box_pack_end(bx2, bt);
768 evas_object_show(bt);
769
770 elm_box_pack_end(bx, bx2);
771 evas_object_show(bx2);
772
773 evas_object_resize(win, 320, 320);
774 evas_object_show(win);
775}
776
777/*************/
778
779static void
780my_gl_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
781{
782 Testitem *tit = data;
783 tit->onoff = elm_check_state_get(obj);
784 printf("item %p onoff = %i\n", tit, tit->onoff);
785}
786
787static Elm_Genlist_Item_Class itc3;
788
789char *gl3_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
790{
791 const Testitem *tit = data;
792 char buf[256];
793 snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
794 return strdup(buf);
795}
796
797Evas_Object *gl3_content_get(void *data, Evas_Object *obj, const char *part)
798{
799 const Testitem *tit = data;
800 if (!strcmp(part, "elm.swallow.icon"))
801 {
802 Evas_Object *lb;
803
804 lb = elm_label_add(obj);
805 elm_label_line_wrap_set(lb, ELM_WRAP_CHAR);
806 elm_label_wrap_width_set(lb, 201);
807 elm_object_text_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");
808 return lb;
809 }
810 else if (!strcmp(part, "elm.swallow.end"))
811 {
812 Evas_Object *ck;
813 ck = elm_check_add(obj);
814 evas_object_propagate_events_set(ck, EINA_FALSE);
815 elm_check_state_set(ck, tit->onoff);
816 evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed, data);
817 return ck;
818 }
819 return NULL;
820}
821
822Eina_Bool gl3_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
823{
824 return EINA_FALSE;
825}
826
827void
828test_genlist4(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
829{
830 Evas_Object *win, *gl, *bx, *bx2, *bt;
831 static Testitem tit[3];
832
833 win = elm_win_util_standard_add("genlist4", "Genlist 4");
834 elm_win_autodel_set(win, EINA_TRUE);
835
836 bx = elm_box_add(win);
837 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
838 elm_win_resize_object_add(win, bx);
839 evas_object_show(bx);
840
841 gl = elm_genlist_add(win);
842 elm_genlist_mode_set(gl, ELM_LIST_COMPRESS);
843 elm_genlist_multi_select_set(gl, 1);
844 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
845 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
846 evas_object_show(gl);
847
848 itc3.item_style = "default";
849 itc3.func.text_get = gl3_text_get;
850 itc3.func.content_get = gl3_content_get;
851 itc3.func.state_get = gl3_state_get;
852 itc3.func.del = NULL;
853
854 tit[0].mode = 0;
855 tit[0].item = elm_genlist_item_append(gl, &itc3,
856 &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
857 NULL/* func data */);
858 tit[1].mode = 1;
859 tit[1].item = elm_genlist_item_append(gl, &itc3,
860 &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
861 NULL/* func data */);
862 tit[2].mode = 2;
863 tit[2].item = elm_genlist_item_append(gl, &itc3,
864 &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
865 NULL/* func data */);
866
867 elm_box_pack_end(bx, gl);
868 evas_object_show(bx);
869
870 bx2 = elm_box_add(win);
871 elm_box_horizontal_set(bx2, EINA_TRUE);
872 elm_box_homogeneous_set(bx2, EINA_TRUE);
873 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
874 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
875
876 bt = elm_button_add(win);
877 elm_object_text_set(bt, "[1]");
878 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
879 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
880 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
881 elm_box_pack_end(bx2, bt);
882 evas_object_show(bt);
883
884 bt = elm_button_add(win);
885 elm_object_text_set(bt, "[2]");
886 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
887 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
888 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
889 elm_box_pack_end(bx2, bt);
890 evas_object_show(bt);
891
892 bt = elm_button_add(win);
893 elm_object_text_set(bt, "[3]");
894 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
895 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
896 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
897 elm_box_pack_end(bx2, bt);
898 evas_object_show(bt);
899
900 elm_box_pack_end(bx, bx2);
901 evas_object_show(bx2);
902
903 evas_object_resize(win, 320, 320);
904 evas_object_show(win);
905}
906
907
908/*************/
909static void
910my_gl_item_check_changed2(void *data, Evas_Object *obj, void *event_info __UNUSED__)
911{
912 Testitem *tit = data;
913 tit->onoff = elm_check_state_get(obj);
914 printf("item %p onoff = %i\n", tit, tit->onoff);
915}
916
917static Elm_Genlist_Item_Class itc5;
918
919char *gl5_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
920{
921 const Testitem *tit = data;
922 char buf[256];
923 if (!strcmp(part, "elm.text"))
924 {
925 snprintf(buf, sizeof(buf), "Item mode %i", tit->mode);
926 }
927 else if (!strcmp(part, "elm.text.sub"))
928 {
929 snprintf(buf, sizeof(buf), "%i bottles on the wall", tit->mode);
930 }
931 return strdup(buf);
932}
933
934Evas_Object *gl5_content_get(void *data, Evas_Object *obj, const char *part)
935{
936 const Testitem *tit = data;
937 char buf[PATH_MAX];
938 if (!strcmp(part, "elm.swallow.icon"))
939 {
940 Evas_Object *bx = elm_box_add(obj);
941 Evas_Object *ic;
942 elm_box_horizontal_set(bx, EINA_TRUE);
943 ic = elm_icon_add(obj);
944 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
945 elm_icon_file_set(ic, buf, NULL);
946 elm_icon_resizable_set(ic, 0, 0);
947 evas_object_show(ic);
948 elm_box_pack_end(bx, ic);
949 ic = elm_icon_add(obj);
950 elm_icon_file_set(ic, buf, NULL);
951 elm_icon_resizable_set(ic, 0, 0);
952 evas_object_show(ic);
953 elm_box_pack_end(bx, ic);
954 elm_box_horizontal_set(bx, EINA_TRUE);
955 evas_object_show(bx);
956 return bx;
957 }
958 else if (!strcmp(part, "elm.swallow.end"))
959 {
960 Evas_Object *ck;
961 ck = elm_check_add(obj);
962 evas_object_propagate_events_set(ck, EINA_FALSE);
963 elm_check_state_set(ck, tit->onoff);
964 evas_object_smart_callback_add(ck, "changed", my_gl_item_check_changed2, data);
965 evas_object_show(ck);
966 return ck;
967 }
968 return NULL;
969}
970
971Eina_Bool gl5_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
972{
973 return EINA_FALSE;
974}
975
976static void
977item_drag_up(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
978{
979 printf("drag up\n");
980}
981
982static void
983item_drag_down(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
984{
985 printf("drag down\n");
986}
987
988static void
989item_drag_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
990{
991 printf("drag left\n");
992}
993
994static void
995item_drag_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
996{
997 printf("drag right\n");
998}
999
1000static void
1001scroll_top(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1002{
1003 printf("Top edge!\n");
1004}
1005
1006static void
1007scroll_bottom(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1008{
1009 printf("Bottom edge!\n");
1010}
1011
1012static void
1013scroll_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1014{
1015 printf("Left edge!\n");
1016}
1017
1018static void
1019scroll_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1020{
1021 printf("Right edge!\n");
1022}
1023
1024static void
1025item_drag(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1026{
1027 printf("drag\n");
1028}
1029
1030static void
1031item_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1032{
1033 printf("drag stop\n");
1034}
1035
1036static void
1037item_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1038{
1039 printf("longpress\n");
1040}
1041
1042void
1043test_genlist5(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1044{
1045 Evas_Object *win, *gl, *bx, *bx2, *bt;
1046 static Testitem tit[3];
1047
1048 win = elm_win_util_standard_add("genlist5", "Genlist 5");
1049 elm_win_autodel_set(win, EINA_TRUE);
1050
1051 bx = elm_box_add(win);
1052 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1053 elm_win_resize_object_add(win, bx);
1054 evas_object_show(bx);
1055
1056 gl = elm_genlist_add(win);
1057 elm_genlist_select_mode_set(gl, ELM_OBJECT_SELECT_MODE_ALWAYS);
1058 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1059 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1060 evas_object_show(gl);
1061 itc5.item_style = "double_label";
1062 itc5.func.text_get = gl5_text_get;
1063 itc5.func.content_get = gl5_content_get;
1064 itc5.func.state_get = gl5_state_get;
1065 itc5.func.del = NULL;
1066
1067 tit[0].mode = 0;
1068 tit[0].item = elm_genlist_item_append(gl, &itc5,
1069 &(tit[0])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
1070 NULL/* func data */);
1071 tit[1].mode = 1;
1072 tit[1].item = elm_genlist_item_append(gl, &itc5,
1073 &(tit[1])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
1074 NULL/* func data */);
1075 tit[2].mode = 2;
1076 tit[2].item = elm_genlist_item_append(gl, &itc5,
1077 &(tit[2])/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl_sel/* func */,
1078 NULL/* func data */);
1079
1080 elm_box_pack_end(bx, gl);
1081 evas_object_show(bx);
1082
1083 evas_object_smart_callback_add(gl, "drag,start,up", item_drag_up, NULL);
1084 evas_object_smart_callback_add(gl, "drag,start,down", item_drag_down, NULL);
1085 evas_object_smart_callback_add(gl, "drag,start,left", item_drag_left, NULL);
1086 evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL);
1087 evas_object_smart_callback_add(gl, "scroll,edge,top", scroll_top, NULL);
1088 evas_object_smart_callback_add(gl, "scroll,edge,bottom", scroll_bottom, NULL);
1089 evas_object_smart_callback_add(gl, "scroll,edge,left", scroll_left, NULL);
1090 evas_object_smart_callback_add(gl, "scroll,edge,right", scroll_right, NULL);
1091 evas_object_smart_callback_add(gl, "drag", item_drag, NULL);
1092 evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL);
1093 evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL);
1094
1095 bx2 = elm_box_add(win);
1096 elm_box_horizontal_set(bx2, EINA_TRUE);
1097 elm_box_homogeneous_set(bx2, EINA_TRUE);
1098 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1099 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1100
1101 bt = elm_button_add(win);
1102 elm_object_text_set(bt, "[1]");
1103 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1104 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1105 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1106 elm_box_pack_end(bx2, bt);
1107 evas_object_show(bt);
1108
1109 bt = elm_button_add(win);
1110 elm_object_text_set(bt, "[2]");
1111 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1112 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1113 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1114 elm_box_pack_end(bx2, bt);
1115 evas_object_show(bt);
1116
1117 bt = elm_button_add(win);
1118 elm_object_text_set(bt, "[3]");
1119 evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1120 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1121 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1122 elm_box_pack_end(bx2, bt);
1123 evas_object_show(bt);
1124
1125 elm_box_pack_end(bx, bx2);
1126 evas_object_show(bx2);
1127
1128 evas_object_resize(win, 320, 320);
1129 evas_object_show(win);
1130}
1131
1132/*************/
1133
1134static Elm_Genlist_Item_Class *itc4;
1135
1136static void
1137gl4_sel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1138{
1139 Elm_Object_Item *glit = event_info;
1140 int depth = elm_genlist_item_expanded_depth_get(glit);
1141 printf("expanded depth for selected item is %d\n", depth);
1142}
1143
1144static void
1145gl4_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1146{
1147 Elm_Object_Item *glit = event_info;
1148 Evas_Object *gl = elm_object_item_widget_get(glit);
1149 int val = (int)(long) elm_object_item_data_get(glit);
1150 val *= 10;
1151 elm_genlist_item_append(gl, itc4,
1152 (void *)(long) (val + 1)/* item data */,
1153 glit/* parent */, ELM_GENLIST_ITEM_NONE,
1154 gl4_sel/* func */,
1155 NULL/* func data */);
1156 elm_genlist_item_append(gl, itc4,
1157 (void *)(long) (val + 2)/* item data */,
1158 glit/* parent */, ELM_GENLIST_ITEM_NONE,
1159 gl4_sel/* func */,
1160 NULL/* func data */);
1161 elm_genlist_item_append(gl, itc4,
1162 (void *)(long) (val + 3)/* item data */,
1163 glit/* parent */,
1164 ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1165 NULL/* func data */);
1166}
1167static void
1168gl4_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1169{
1170 Elm_Object_Item *glit = event_info;
1171 elm_genlist_item_subitems_clear(glit);
1172}
1173
1174static void
1175gl4_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1176{
1177 Elm_Object_Item *glit = event_info;
1178 elm_genlist_item_expanded_set(glit, EINA_TRUE);
1179}
1180
1181static void
1182gl4_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1183{
1184 Elm_Object_Item *glit = event_info;
1185 elm_genlist_item_expanded_set(glit, EINA_FALSE);
1186}
1187
1188char *gl4_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
1189{
1190 char buf[256];
1191 snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data);
1192 return strdup(buf);
1193}
1194
1195Evas_Object *gl4_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
1196{
1197 char buf[PATH_MAX];
1198 if (!strcmp(part, "elm.swallow.icon"))
1199 {
1200 Evas_Object *ic = elm_icon_add(obj);
1201 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1202 elm_icon_file_set(ic, buf, NULL);
1203 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1204 evas_object_show(ic);
1205 return ic;
1206 }
1207 else if (!strcmp(part, "elm.swallow.end"))
1208 {
1209 Evas_Object *ck;
1210 ck = elm_check_add(obj);
1211 evas_object_propagate_events_set(ck, EINA_FALSE);
1212 evas_object_show(ck);
1213 return ck;
1214 }
1215 return NULL;
1216}
1217
1218Eina_Bool gl4_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
1219{
1220 return EINA_FALSE;
1221}
1222
1223void gl4_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
1224{
1225 printf("item deleted.\n");
1226}
1227
1228void
1229test_genlist6(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1230{
1231 Evas_Object *win, *gl, *bx, *bx2, *bt;
1232
1233 win = elm_win_util_standard_add("genlist-tree", "Genlist Tree");
1234 elm_win_autodel_set(win, EINA_TRUE);
1235
1236 bx = elm_box_add(win);
1237 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1238 elm_win_resize_object_add(win, bx);
1239 evas_object_show(bx);
1240
1241 gl = elm_genlist_add(win);
1242 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1243 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1244 evas_object_show(gl);
1245
1246 itc4 = elm_genlist_item_class_new();
1247 itc4->item_style = "default";
1248 itc4->func.text_get = gl4_text_get;
1249 itc4->func.content_get = gl4_content_get;
1250 itc4->func.state_get = gl4_state_get;
1251 itc4->func.del = gl4_del;
1252
1253 elm_genlist_item_append(gl, itc4,
1254 (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1255 NULL/* func data */);
1256 elm_genlist_item_append(gl, itc4,
1257 (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1258 NULL/* func data */);
1259 elm_genlist_item_append(gl, itc4,
1260 (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1261 NULL/* func data */);
1262 elm_genlist_item_class_free(itc4);
1263 evas_object_smart_callback_add(gl, "expand,request", gl4_exp_req, gl);
1264 evas_object_smart_callback_add(gl, "contract,request", gl4_con_req, gl);
1265 evas_object_smart_callback_add(gl, "expanded", gl4_exp, gl);
1266 evas_object_smart_callback_add(gl, "contracted", gl4_con, gl);
1267
1268 elm_box_pack_end(bx, gl);
1269 evas_object_show(bx);
1270
1271 bx2 = elm_box_add(win);
1272 elm_box_horizontal_set(bx2, EINA_TRUE);
1273 elm_box_homogeneous_set(bx2, EINA_TRUE);
1274 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1275 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1276
1277 bt = elm_button_add(win);
1278 elm_object_text_set(bt, "[1]");
1279 // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[0]));
1280 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1281 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1282 elm_box_pack_end(bx2, bt);
1283 evas_object_show(bt);
1284
1285 bt = elm_button_add(win);
1286 elm_object_text_set(bt, "[2]");
1287 // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[1]));
1288 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1289 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1290 elm_box_pack_end(bx2, bt);
1291 evas_object_show(bt);
1292
1293 bt = elm_button_add(win);
1294 elm_object_text_set(bt, "[3]");
1295 // evas_object_smart_callback_add(bt, "clicked", my_gl_update, &(tit[2]));
1296 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
1297 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
1298 elm_box_pack_end(bx2, bt);
1299 evas_object_show(bt);
1300
1301 elm_box_pack_end(bx, bx2);
1302 evas_object_show(bx2);
1303
1304 evas_object_resize(win, 320, 320);
1305 evas_object_show(win);
1306}
1307
1308/*************/
1309
1310struct genlist7_data
1311{
1312 Evas_Object *win, *naviframe;
1313};
1314
1315static Elm_Genlist_Item_Class itc7;
1316
1317static void
1318gl_sel7(void *data, Evas_Object *obj, void *event_info)
1319{
1320 if (!event_info) return;
1321 elm_genlist_item_item_class_update(event_info, &itc7);
1322 printf("sel item data [%p] on genlist obj [%p], item pointer [%p], new item style [%s] \n", data, obj, event_info, itc7.item_style);
1323}
1324
1325static void
1326test_genlist7_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1327{
1328 struct genlist7_data *info = data;
1329 if (!info) return;
1330
1331 elm_naviframe_item_pop(info->naviframe);
1332}
1333
1334static void
1335test_genlist7_swipe(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1336{
1337 struct genlist7_data *info = data;
1338 Evas_Object *box, *entry, *button;
1339 char item_data[] = "Just a simple test";
1340
1341 if ((!event_info) || (!data)) return;
1342
1343 box = elm_box_add(info->win);
1344 elm_box_homogeneous_set(box, EINA_FALSE);
1345 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1346 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1347 evas_object_show(box);
1348
1349 entry = elm_entry_add(info->win);
1350 elm_entry_scrollable_set(entry, EINA_TRUE);
1351 elm_entry_editable_set(entry, EINA_FALSE);
1352 elm_object_text_set(entry, item_data);
1353 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1354 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
1355 evas_object_show(entry);
1356
1357 button = elm_button_add(info->win);
1358 elm_object_text_set(button, "back");
1359 evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0);
1360 evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0);
1361 evas_object_smart_callback_add(button, "clicked", test_genlist7_back_cb,
1362 info);
1363 evas_object_show(button);
1364
1365 elm_box_pack_start(box, entry);
1366 elm_box_pack_end(box, button);
1367
1368 elm_naviframe_item_simple_push(info->naviframe, box);
1369}
1370
1371void
1372test_genlist7(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1373{
1374 Evas_Object *win, *gl, *naviframe;
1375 static struct genlist7_data info;
1376 static Testitem tit[3];
1377
1378 win = elm_win_util_standard_add("genlist7", "Genlist 7");
1379 elm_win_autodel_set(win, EINA_TRUE);
1380 info.win = win;
1381
1382 naviframe = elm_naviframe_add(win);
1383 elm_win_resize_object_add(win, naviframe);
1384 evas_object_size_hint_weight_set(naviframe, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1385 evas_object_size_hint_align_set(naviframe, EVAS_HINT_FILL, EVAS_HINT_FILL);
1386 evas_object_show(naviframe);
1387 info.naviframe = naviframe;
1388
1389 gl = elm_genlist_add(win);
1390 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1391 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1392 evas_object_smart_callback_add(gl, "swipe", test_genlist7_swipe, &info);
1393 evas_object_show(gl);
1394 elm_naviframe_item_simple_push(naviframe, gl);
1395
1396 itc2.item_style = "default";
1397 itc2.func.text_get = gl2_text_get;
1398 itc2.func.content_get = gl2_content_get;
1399 itc2.func.state_get = gl2_state_get;
1400 itc2.func.del = NULL;
1401
1402 itc7.item_style = "double_label";
1403 itc7.func.text_get = gl5_text_get;
1404 itc7.func.content_get = gl5_content_get;
1405 itc7.func.state_get = gl5_state_get;
1406 itc7.func.del = NULL;
1407
1408 tit[0].mode = 0;
1409 tit[0].item = elm_genlist_item_append(gl, &itc2,
1410 &(tit[0])/* item data */, NULL/* parent */,
1411 ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1412 NULL/* func data */);
1413 tit[1].mode = 1;
1414 tit[1].item = elm_genlist_item_append(gl, &itc2,
1415 &(tit[1])/* item data */, NULL/* parent */,
1416 ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1417 NULL/* func data */);
1418 tit[2].mode = 2;
1419 tit[2].item = elm_genlist_item_append(gl, &itc2,
1420 &(tit[2])/* item data */, NULL/* parent */,
1421 ELM_GENLIST_ITEM_NONE, gl_sel7/* func */,
1422 NULL/* func data */);
1423
1424 evas_object_resize(win, 320, 320);
1425 evas_object_show(win);
1426}
1427
1428/*************/
1429
1430static Elm_Genlist_Item_Class itc_group;
1431
1432char *gl8_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
1433{
1434 char buf[256];
1435 snprintf(buf, sizeof(buf), "Group Index # %i (Item # %i)", (int)((long)data / 10), (int)(long)data);
1436 return strdup(buf);
1437}
1438
1439static void
1440_bt_show_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1441{
1442 elm_genlist_item_show(data, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1443}
1444
1445static void
1446_bt_bring_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1447{
1448 elm_genlist_item_bring_in(data, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1449}
1450
1451void
1452test_genlist8(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1453{
1454 Evas_Object *win, *gl, *bt[8], *bx, *bx2, *bx3;
1455 Elm_Object_Item *gli = NULL, *git = NULL;
1456 int i, bt_num;
1457
1458 win = elm_win_util_standard_add("genlist-group", "Genlist Group");
1459 elm_win_autodel_set(win, EINA_TRUE);
1460
1461 bx = elm_box_add(win);
1462 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1463 elm_win_resize_object_add(win, bx);
1464 evas_object_show(bx);
1465
1466 gl = elm_genlist_add(win);
1467 evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
1468 evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
1469 evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
1470 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1471 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1472 elm_box_pack_end(bx, gl);
1473 evas_object_show(gl);
1474
1475 itc1 = elm_genlist_item_class_new();
1476 itc1->item_style = "default";
1477 itc1->func.text_get = gl_text_get;
1478 itc1->func.content_get = gl_content_get;
1479 itc1->func.state_get = gl_state_get;
1480 itc1->func.del = NULL;
1481
1482 itc_group.item_style = "group_index";
1483 itc_group.func.text_get = gl8_text_get;
1484 itc_group.func.content_get = NULL;
1485 itc_group.func.state_get = NULL;
1486 itc_group.func.del = NULL;
1487
1488 bx2 = elm_box_add(win);
1489 elm_box_horizontal_set(bx2, EINA_TRUE);
1490 elm_box_homogeneous_set(bx2, EINA_TRUE);
1491 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
1492 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1493
1494 bt_num = 0;
1495 bt[bt_num] = elm_button_add(win);
1496 elm_object_text_set(bt[bt_num], "Show 0");
1497 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1498 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1499 evas_object_show(bt[bt_num]);
1500 elm_box_pack_end(bx2, bt[bt_num]);
1501
1502 bt[++bt_num] = elm_button_add(win);
1503 elm_object_text_set(bt[bt_num], "Show 26");
1504 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1505 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1506 evas_object_show(bt[bt_num]);
1507 elm_box_pack_end(bx2, bt[bt_num]);
1508
1509 bt[++bt_num] = elm_button_add(win);
1510 elm_object_text_set(bt[bt_num], "Show 101");
1511 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1512 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1513 evas_object_show(bt[bt_num]);
1514 elm_box_pack_end(bx2, bt[bt_num]);
1515
1516 bt[++bt_num] = elm_button_add(win);
1517 elm_object_text_set(bt[bt_num], "Show 480");
1518 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1519 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1520 evas_object_show(bt[bt_num]);
1521 elm_box_pack_end(bx2, bt[bt_num]);
1522
1523 elm_box_pack_end(bx, bx2);
1524 evas_object_show(bx2);
1525
1526 bx3 = elm_box_add(win);
1527 elm_box_horizontal_set(bx3, EINA_TRUE);
1528 elm_box_homogeneous_set(bx3, EINA_TRUE);
1529 evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
1530 evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
1531
1532 bt[++bt_num] = elm_button_add(win);
1533 elm_object_text_set(bt[bt_num], "Bring top 0");
1534 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1535 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1536 evas_object_show(bt[bt_num]);
1537 elm_box_pack_end(bx3, bt[bt_num]);
1538
1539 bt[++bt_num] = elm_button_add(win);
1540 elm_object_text_set(bt[bt_num], "Bring top 31");
1541 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1542 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1543 evas_object_show(bt[bt_num]);
1544 elm_box_pack_end(bx3, bt[bt_num]);
1545
1546 bt[++bt_num] = elm_button_add(win);
1547 elm_object_text_set(bt[bt_num], "Bring top 239");
1548 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1549 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1550 evas_object_show(bt[bt_num]);
1551 elm_box_pack_end(bx3, bt[bt_num]);
1552
1553 bt[++bt_num] = elm_button_add(win);
1554 elm_object_text_set(bt[bt_num], "Bring top 477");
1555 evas_object_size_hint_align_set(bt[bt_num], EVAS_HINT_FILL, EVAS_HINT_FILL);
1556 evas_object_size_hint_weight_set(bt[bt_num], EVAS_HINT_EXPAND, 0.0);
1557 evas_object_show(bt[bt_num]);
1558 elm_box_pack_end(bx3, bt[bt_num]);
1559
1560 elm_box_pack_end(bx, bx3);
1561 evas_object_show(bx3);
1562
1563 for (i = 0; i < 500; i++)
1564 {
1565 if (!(i % 10))
1566 {
1567 gli = git = elm_genlist_item_append(gl, &itc_group,
1568 (void *)(long)i/* item data */,
1569 NULL/* parent */,
1570 ELM_GENLIST_ITEM_GROUP,
1571 gl_sel/* func */,
1572 (void *)(long)(i * 10)/* func data */);
1573 elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1574 }
1575 else if (git)
1576 {
1577 gli = elm_genlist_item_append(gl, itc1,
1578 (void *)(long)i/* item data */,
1579 git/* parent */,
1580 ELM_GENLIST_ITEM_NONE,
1581 gl_sel/* func */,
1582 (void *)(long)(i * 10)/* func data */);
1583 }
1584 switch (i)
1585 {
1586 case 0:
1587 evas_object_smart_callback_add(bt[0], "clicked", _bt_show_cb, gli);
1588 evas_object_smart_callback_add(bt[4], "clicked", _bt_bring_cb, gli);
1589 break;
1590 case 26:
1591 evas_object_smart_callback_add(bt[1], "clicked", _bt_show_cb, gli);
1592 break;
1593 case 31:
1594 evas_object_smart_callback_add(bt[5], "clicked", _bt_bring_cb, gli);
1595 break;
1596 case 101:
1597 evas_object_smart_callback_add(bt[2], "clicked", _bt_show_cb, gli);
1598 break;
1599 case 239:
1600 evas_object_smart_callback_add(bt[6], "clicked", _bt_bring_cb, gli);
1601 break;
1602 case 477:
1603 evas_object_smart_callback_add(bt[7], "clicked", _bt_bring_cb, gli);
1604 break;
1605 case 480:
1606 evas_object_smart_callback_add(bt[3], "clicked", _bt_show_cb, gli);
1607 break;
1608 }
1609 }
1610 elm_genlist_item_class_free(itc1);
1611
1612 evas_object_resize(win, 480, 800);
1613 evas_object_show(win);
1614}
1615
1616/*************/
1617
1618static void
1619gl9_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1620{
1621 Elm_Object_Item *glit = event_info;
1622 Evas_Object *gl = elm_object_item_widget_get(glit);
1623 int val = (int)(long) elm_object_item_data_get(glit);
1624 val *= 10;
1625 elm_genlist_item_append(gl, itc1,
1626 (void *)(long) (val + 1)/* item data */,
1627 glit/* parent */,
1628 ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1629 NULL/* func data */);
1630 elm_genlist_item_append(gl, itc1,
1631 (void *)(long) (val + 2)/* item data */,
1632 glit/* parent */,
1633 ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1634 NULL/* func data */);
1635 elm_genlist_item_append(gl, itc1,
1636 (void *)(long) (val + 3)/* item data */,
1637 glit/* parent */,
1638 ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1639 NULL/* func data */);
1640}
1641
1642static void
1643gl9_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1644{
1645 Elm_Object_Item *glit = event_info;
1646 elm_genlist_item_subitems_clear(glit);
1647}
1648
1649static void
1650gl9_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1651{
1652 Elm_Object_Item *glit = event_info;
1653 elm_genlist_item_expanded_set(glit, EINA_TRUE);
1654}
1655
1656static void
1657gl9_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
1658{
1659 Elm_Object_Item *glit = event_info;
1660 elm_genlist_item_expanded_set(glit, EINA_FALSE);
1661}
1662
1663void
1664test_genlist9(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1665{
1666 Evas_Object *win, *gl, *bx;
1667 Elm_Object_Item *git;
1668
1669 win = elm_win_util_standard_add("genlist-group-tree", "Genlist Group Tree");
1670 elm_win_autodel_set(win, EINA_TRUE);
1671
1672 bx = elm_box_add(win);
1673 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1674 elm_win_resize_object_add(win, bx);
1675 evas_object_show(bx);
1676
1677 gl = elm_genlist_add(win);
1678 evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
1679 evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
1680 evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
1681 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1682 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1683 elm_box_pack_end(bx, gl);
1684 evas_object_show(gl);
1685
1686 itc1 = elm_genlist_item_class_new();
1687 itc1->item_style = "default";
1688 itc1->func.text_get = gl_text_get;
1689 itc1->func.content_get = gl_content_get;
1690 itc1->func.state_get = gl_state_get;
1691 itc1->func.del = NULL;
1692
1693 itc_group.item_style = "group_index";
1694 itc_group.func.text_get = gl8_text_get;
1695 itc_group.func.content_get = NULL;
1696 itc_group.func.state_get = NULL;
1697 itc_group.func.del = NULL;
1698
1699 git = elm_genlist_item_append(gl, &itc_group,
1700 (void *)0/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */,
1701 NULL/* func data */);
1702 elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1703
1704 elm_genlist_item_append(gl, itc1,
1705 (void *)1/* item data */, git/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1706 NULL/* func data */);
1707 elm_genlist_item_append(gl, itc1,
1708 (void *)2/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1709 NULL/* func data */);
1710 elm_genlist_item_append(gl, itc1,
1711 (void *)3/* item data */, git/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1712 NULL/* func data */);
1713 git = elm_genlist_item_append(gl, &itc_group,
1714 (void *)4/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_GROUP, gl4_sel/* func */,
1715 NULL/* func data */);
1716 elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1717
1718 elm_genlist_item_append(gl, itc1,
1719 (void *)5/* item data */, git/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1720 NULL/* func data */);
1721 elm_genlist_item_append(gl, itc1,
1722 (void *)6/* item data */, git/* parent */, ELM_GENLIST_ITEM_NONE, gl4_sel/* func */,
1723 NULL/* func data */);
1724 elm_genlist_item_append(gl, itc1,
1725 (void *)7/* item data */, git/* parent */, ELM_GENLIST_ITEM_TREE, gl4_sel/* func */,
1726 NULL/* func data */);
1727 elm_genlist_item_class_free(itc1);
1728
1729 evas_object_smart_callback_add(gl, "expand,request", gl9_exp_req, gl);
1730 evas_object_smart_callback_add(gl, "contract,request", gl9_con_req, gl);
1731 evas_object_smart_callback_add(gl, "expanded", gl9_exp, gl);
1732 evas_object_smart_callback_add(gl, "contracted", gl9_con, gl);
1733
1734 evas_object_resize(win, 480, 800);
1735 evas_object_show(win);
1736}
1737
1738/*************/
1739
1740static Elm_Genlist_Item_Class itc10;
1741static char *mode_type[] = { "slide", "rotate" };
1742
1743char *gl10_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
1744{
1745 char buf[256];
1746 if (!strcmp(part, "elm.text.mode"))
1747 snprintf(buf, sizeof(buf), "Mode # %i", (int)(long)data);
1748 else
1749 snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data);
1750 return strdup(buf);
1751}
1752
1753Evas_Object *gl10_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
1754{
1755 char buf[PATH_MAX];
1756 Evas_Object *ic = elm_icon_add(obj);
1757 if (!strcmp(part, "elm.swallow.end"))
1758 snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());
1759 else
1760 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
1761 elm_icon_file_set(ic, buf, NULL);
1762 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1763 return ic;
1764}
1765
1766static void
1767_gl_sel10(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1768{
1769 if (!data) return;
1770 int v = elm_radio_value_get(data);
1771 if (v == 1)
1772 elm_genlist_item_decorate_mode_set(event_info, mode_type[v], EINA_TRUE);
1773}
1774
1775static void
1776_my_gl_mode_right(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1777{
1778 if (!data) return;
1779 int v = elm_radio_value_get(data);
1780 if (v == 0)
1781 elm_genlist_item_decorate_mode_set(event_info, mode_type[v], EINA_TRUE);
1782}
1783
1784static void
1785_my_gl_mode_left(void *data, Evas_Object *obj __UNUSED__, void *event_info)
1786{
1787 if (!data) return;
1788 int v = elm_radio_value_get(data);
1789 if (v == 0)
1790 elm_genlist_item_decorate_mode_set(event_info, mode_type[v], EINA_FALSE);
1791}
1792
1793static void
1794_my_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info __UNUSED__)
1795{
1796 fprintf(stderr, "drag\n");
1797 if (!data) return;
1798 int v = elm_radio_value_get(data);
1799 Elm_Object_Item *glit = (Elm_Object_Item *) elm_genlist_decorated_item_get(obj);
1800 if (glit) elm_genlist_item_decorate_mode_set(glit, mode_type[v], EINA_FALSE);
1801}
1802
1803void
1804test_genlist10(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1805{
1806 Evas_Object *win, *fr, *bx, *bx2, *rd, *rdg, *gl;
1807 int i;
1808
1809 win = elm_win_util_standard_add("genlist-decorate-item-mode", "Genlist Decorate Item Mode");
1810 elm_win_autodel_set(win, EINA_TRUE);
1811
1812 bx = elm_box_add(win);
1813 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1814 elm_win_resize_object_add(win, bx);
1815 evas_object_show(bx);
1816
1817 fr = elm_frame_add(win);
1818 elm_object_text_set(fr, "Decorate Mode Type");
1819 elm_box_pack_end(bx, fr);
1820 evas_object_show(fr);
1821
1822 bx2 = elm_box_add(win);
1823 elm_object_content_set(fr, bx2);
1824 evas_object_show(bx2);
1825
1826 rd = elm_radio_add(win);
1827 evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1828 elm_radio_state_value_set(rd, 0);
1829 elm_object_text_set(rd, "Slide : Sweep genlist items to the right.");
1830 evas_object_show(rd);
1831 elm_box_pack_end(bx2, rd);
1832 rdg = rd;
1833
1834 rd = elm_radio_add(win);
1835 evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1836 elm_radio_state_value_set(rd, 1);
1837 elm_object_text_set(rd, "Rotate : Click each item.");
1838 elm_radio_group_add(rd, rdg);
1839 evas_object_show(rd);
1840 elm_box_pack_end(bx2, rd);
1841
1842 gl = elm_genlist_add(win);
1843 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1844 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1845 evas_object_smart_callback_add(gl, "drag,start,right", _my_gl_mode_right, rdg);
1846 evas_object_smart_callback_add(gl, "drag,start,left", _my_gl_mode_left, rdg);
1847 evas_object_smart_callback_add(gl, "drag,start,up", _my_gl_mode_cancel, rdg);
1848 evas_object_smart_callback_add(gl, "drag,start,down", _my_gl_mode_cancel, rdg);
1849 evas_object_show(gl);
1850
1851 itc10.item_style = "default";
1852 itc10.decorate_item_style = "mode";
1853 itc10.func.text_get = gl10_text_get;
1854 itc10.func.content_get = gl10_content_get;
1855 itc10.func.state_get = gl_state_get;
1856 itc10.func.del = NULL;
1857
1858 for (i = 0; i < 50; i++)
1859 elm_genlist_item_append(gl,
1860 &itc10,
1861 (void *)(long)(1000 + i)/* item data */,
1862 NULL/* parent */,
1863 ELM_GENLIST_ITEM_NONE/* flags */,
1864 _gl_sel10/* func */,
1865 rdg/* func data */);
1866
1867 elm_box_pack_end(bx, gl);
1868
1869 evas_object_resize(win, 520, 520);
1870 evas_object_show(win);
1871}
1872
1873/*************/
1874
1875static void
1876_reorder_tg_changed_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
1877{
1878 elm_genlist_reorder_mode_set(data, elm_check_state_get(obj));
1879}
1880
1881/**
1882 * gl_moved is called after an item was reordered.
1883 * This is only called when reorder mode is enabled.
1884 *
1885 * @param data : the genlist object passed as data.
1886 * @param obj : the genlist object.
1887 * @param item : the moved item.
1888 *
1889 * the item(*item) had been moved
1890 *
1891 */
1892static void gl_moved(Evas_Object *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Object_Item *item __UNUSED__)
1893{
1894 // if needed, add application logic.
1895}
1896
1897/**
1898 * gl_moved_after is called after an item was reordered.
1899 * This is only called when reorder mode is enabled.
1900 *
1901 * @param data : the genlist object passed as data.
1902 * @param obj : the genlist object.
1903 * @param item : the moved item.
1904 *
1905 * the item(*item) had been moved after the given relative item(*rel_item) in list.
1906 *
1907 */
1908static void gl_moved_after(Evas_Object *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Object_Item *item __UNUSED__)
1909{
1910 // if needed, add application logic.
1911 Elm_Object_Item *it;
1912 it = elm_genlist_item_prev_get(item);
1913 printf("it=%p, prev_it=%p\n",item,it);
1914}
1915
1916/**
1917 * gl_moved_before is called after an item was reordered.
1918 * This is only called when reorder mode is enabled.
1919 *
1920 * @param data : the genlist object passed as data.
1921 * @param obj : the genlist object.
1922 * @param item : the moved item.
1923 *
1924 * the item(*item) had been moved before the given relative item(*rel_item) in list.
1925 *
1926 */
1927static void gl_moved_before(Evas_Object *data __UNUSED__, Evas_Object *obj __UNUSED__, Elm_Object_Item *item __UNUSED__)
1928{
1929 // if needed, add application logic.
1930 Elm_Object_Item *it;
1931 it = elm_genlist_item_next_get(item);
1932 printf("it=%p, next_it=%p\n",item,it);
1933}
1934
1935void
1936test_genlist11(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
1937{
1938 Evas_Object *win, *fr, *lb, *bx, *tg, *gl;
1939 int i;
1940
1941 win = elm_win_util_standard_add("genlist-reorder-mode", "Genlist Reorder Mode");
1942 elm_win_autodel_set(win, EINA_TRUE);
1943
1944 bx = elm_box_add(win);
1945 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1946 elm_win_resize_object_add(win, bx);
1947 evas_object_show(bx);
1948
1949 fr = elm_frame_add(win);
1950
1951 elm_object_text_set(fr, "Reorder Mode");
1952 elm_box_pack_end(bx, fr);
1953 evas_object_show(fr);
1954
1955 lb = elm_label_add(win);
1956 elm_object_text_set(lb,
1957 "Enable reorder mode if you want to move item.<br/>"
1958 "Then long press and drag item.");
1959 elm_object_content_set(fr, lb);
1960 evas_object_show(lb);
1961
1962 gl = elm_genlist_add(win);
1963 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1964 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1965 evas_object_show(gl);
1966
1967 tg = elm_check_add(win);
1968 elm_object_style_set(tg, "toggle");
1969 elm_object_text_set(tg, "Reorder Mode:");
1970 elm_check_state_set(tg, elm_config_mirrored_get());
1971 evas_object_smart_callback_add(tg, "changed", _reorder_tg_changed_cb, gl);
1972 elm_box_pack_end(bx, tg);
1973 evas_object_show(tg);
1974
1975 itc1 = elm_genlist_item_class_new();
1976 itc1->item_style = "default";
1977 itc1->func.text_get = gl_text_get;
1978 itc1->func.content_get = gl_content_get;
1979 itc1->func.state_get = gl_state_get;
1980 itc1->func.del = NULL;
1981 evas_object_smart_callback_add(gl, "moved", (Evas_Smart_Cb)gl_moved, gl);
1982 evas_object_smart_callback_add(gl, "moved,after", (Evas_Smart_Cb)gl_moved_after, gl);
1983 evas_object_smart_callback_add(gl, "moved,before", (Evas_Smart_Cb)gl_moved_before, gl);
1984
1985 for (i = 0; i < 50; i++)
1986 elm_genlist_item_append(gl,
1987 itc1,
1988 (void *)(long)(1 + i)/* item data */,
1989 NULL/* parent */,
1990 ELM_GENLIST_ITEM_NONE/* flags */,
1991 NULL/* func */,
1992 NULL/* func data */);
1993
1994 elm_genlist_item_class_free(itc1);
1995
1996 elm_box_pack_end(bx, gl);
1997
1998 evas_object_resize(win, 400, 500);
1999 evas_object_show(win);
2000}
2001
2002char *gl12_text_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
2003{
2004 return strdup("Enlightenment is not just a window manager for Linux/X11 and others, but also a whole suite of libraries to help you create beautiful user interfaces with much less work than doing it the old fashioned way and fighting with traditional toolkits, not to mention a traditional window manager. It covers uses from small mobile devices like phones all the way to powerful multi-core desktops (which are the primary development environment).");
2005}
2006
2007void
2008test_genlist12(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2009{
2010 Evas_Object *win, *bx, *gl;
2011 int i;
2012
2013 win = elm_win_util_standard_add("genlist-textblock", "Genlist Textblock");
2014 elm_win_autodel_set(win, EINA_TRUE);
2015
2016 bx = elm_box_add(win);
2017 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2018 elm_win_resize_object_add(win, bx);
2019 evas_object_show(bx);
2020
2021 gl = elm_genlist_add(win);
2022 elm_genlist_mode_set(gl, ELM_LIST_COMPRESS);
2023 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2024 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2025 elm_box_pack_end(bx, gl);
2026 evas_object_show(gl);
2027
2028 itc1 = elm_genlist_item_class_new();
2029 itc1->item_style = "message";
2030 itc1->func.text_get = gl12_text_get;
2031 itc1->func.content_get = gl_content_get;
2032 itc1->func.state_get = gl_state_get;
2033 itc1->func.del = NULL;
2034
2035 for (i = 0; i < 1000; i++)
2036 {
2037 elm_genlist_item_append(gl, itc1,
2038 (void *)(long)i/* item data */,
2039 NULL/* parent */,
2040 ELM_GENLIST_ITEM_NONE,
2041 gl_sel/* func */,
2042 (void *)(long)(i * 10)/* func data */);
2043 }
2044 elm_genlist_item_class_free(itc1);
2045
2046 evas_object_resize(win, 400, 500);
2047 evas_object_show(win);
2048}
2049
2050static int
2051gl13_cmp(const void *pa, const void *pb)
2052{
2053 const Elm_Object_Item *ia = pa, *ib = pb;
2054 int a = (int)(long) elm_object_item_data_get(ia);
2055 int b = (int)(long) elm_object_item_data_get(ib);
2056 return a - b;
2057}
2058
2059void
2060test_genlist13(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2061{
2062 Elm_Object_Item *pi[6];
2063 Evas_Object *win, *bx, *gl; int i, base, idx[3] = {1, 10, 15};
2064
2065 win = elm_win_util_standard_add("genlist-tree-insert-sorted", "Genlist Tree, Insert Sorted");
2066 elm_win_autodel_set(win, EINA_TRUE);
2067
2068 bx = elm_box_add(win);
2069 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2070 elm_win_resize_object_add(win, bx);
2071 evas_object_show(bx);
2072
2073 gl = elm_genlist_add(win);
2074 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2075 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2076 evas_object_show(gl);
2077
2078 itc4 = elm_genlist_item_class_new();
2079 itc4->item_style = "default";
2080 itc4->func.text_get = gl4_text_get;
2081 itc4->func.content_get = NULL;
2082 itc4->func.state_get = NULL;
2083 itc4->func.del = NULL;
2084
2085 /* mixed order to test insert sorted */
2086
2087 for (i = 0; i < 3; i++)
2088 {
2089 pi[i] = elm_genlist_item_sorted_insert
2090 (gl, itc4, (void *)(long)idx[i]/* item data */, NULL/* parent */,
2091 ELM_GENLIST_ITEM_TREE, gl13_cmp/* cmp */,
2092 NULL/* func */, NULL/* func data */);
2093 }
2094
2095 for (i = 0, base = 100; i < 3; i++, base += 100)
2096 {
2097 int j;
2098 for (j = 0; j < 3; j++)
2099 {
2100 elm_genlist_item_sorted_insert
2101 (gl, itc4, (void *)(long)(idx[j] + base)/* item data */,
2102 pi[i]/* parent */, ELM_GENLIST_ITEM_NONE,
2103 gl13_cmp/* cmp */, NULL/* func */, NULL/* func data */);
2104 }
2105 }
2106
2107 for (i = 0; i < 3; i++)
2108 {
2109 pi[i + 3] = elm_genlist_item_sorted_insert
2110 (gl, itc4, (void *)(long)(idx[i] * 2)/* item data */, NULL/* parent */,
2111 ELM_GENLIST_ITEM_TREE, gl13_cmp/* cmp */, NULL/* func */,
2112 NULL/* func data */);
2113 }
2114
2115
2116 for (i = 0, base = 10000; i < 3; i++, base += 10000)
2117 {
2118 int j;
2119 for (j = 0; j < 3; j++)
2120 {
2121 elm_genlist_item_sorted_insert
2122 (gl, itc4, (void *)(long)(idx[j] + base)/* item data */,
2123 pi[i + 3]/* parent */, ELM_GENLIST_ITEM_NONE,
2124 gl13_cmp/* cmp */, NULL/* func */, NULL/* func data */);
2125 }
2126 }
2127 elm_genlist_item_class_free(itc4);
2128 elm_box_pack_end(bx, gl);
2129 evas_object_show(bx);
2130
2131 evas_object_resize(win, 320, 320);
2132 evas_object_show(win);
2133}
2134
2135static void
2136my_gl_insert_before_rel(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2137{
2138 Evas_Object *gl = data;
2139 static int i = 1000;
2140 Elm_Object_Item *gli_selected;
2141
2142 itc1->item_style = "default";
2143 itc1->func.text_get = gl_text_get;
2144 itc1->func.content_get = NULL;
2145 itc1->func.state_get = NULL;
2146 itc1->func.del = NULL;
2147
2148 gli_selected = elm_genlist_selected_item_get(gl);
2149 if (!gli_selected)
2150 {
2151 printf("no item selected\n");
2152 return;
2153 }
2154
2155 elm_genlist_item_insert_before(gl, itc1,
2156 (void *)(long)i/* item data */,
2157 elm_genlist_item_parent_get(gli_selected),
2158 gli_selected/* item before */,
2159 ELM_GENLIST_ITEM_NONE,
2160 NULL/* func */, NULL/* func data */);
2161 i++;
2162}
2163
2164static void
2165my_gl_insert_after_rel(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2166{
2167 Evas_Object *gl = data;
2168 static int i = 0;
2169 Elm_Object_Item *gli_selected;
2170
2171 itc1->item_style = "default";
2172 itc1->func.text_get = gl_text_get;
2173 itc1->func.content_get = NULL;
2174 itc1->func.state_get = NULL;
2175 itc1->func.del = NULL;
2176
2177 gli_selected = elm_genlist_selected_item_get(gl);
2178 if (!gli_selected)
2179 {
2180 printf("no item selected\n");
2181 return;
2182 }
2183
2184 elm_genlist_item_insert_after(gl, itc1,
2185 (void *)(long)i/* item data */,
2186 elm_genlist_item_parent_get(gli_selected),
2187 gli_selected/* item after */,
2188 ELM_GENLIST_ITEM_NONE,
2189 NULL/* func */, NULL/* func data */);
2190 i++;
2191}
2192
2193void
2194test_genlist14(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2195{
2196 Elm_Object_Item *pi[6];
2197 Evas_Object *win, *bx, *bx2, *bt, *gl;
2198 int i, base;
2199 /* index: 0, 1, 2, 3, 4, 5
2200 * items: 1, 15, 11, 2, 33, 21
2201 * final: 1, 2, 11, 15, 21, 33
2202 */
2203 const int idx[6] = {1, 15, 11, 2, 33, 21};
2204 const int relative[6] = {
2205 0, /* item '1' - not used */
2206 0, /* item '15' - insert after pi[0], item '1' */
2207 -1, /* item '11' - insert before pi[1], item '15' */
2208 -2, /* item '2' - insert before pi[2], item '11' */
2209 1, /* item '33' - insert after pi[1], item '15' */
2210 -4 /* item '21' - insert before pi[4], item '33' */
2211 };
2212
2213 win = elm_win_util_standard_add("genlist-tree-insert-relative", "Genlist Tree, Insert Relative");
2214 elm_win_autodel_set(win, EINA_TRUE);
2215
2216 bx = elm_box_add(win);
2217 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2218 elm_win_resize_object_add(win, bx);
2219 evas_object_show(bx);
2220
2221 gl = elm_genlist_add(win);
2222 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2223 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2224 evas_object_show(gl);
2225
2226 itc4 = elm_genlist_item_class_new();
2227 itc4->item_style = "default";
2228 itc4->func.text_get = gl4_text_get;
2229 itc4->func.content_get = NULL;
2230 itc4->func.state_get = NULL;
2231 itc4->func.del = NULL;
2232
2233 /* mixed order to test insert sorted */
2234
2235 // BUG1: should be able to insert before=NULL, prepend
2236 // BUG2: should be able to insert after=NULL, append
2237
2238 pi[0] = elm_genlist_item_append
2239 (gl, itc4, (void *)(long)idx[0]/* item data */,
2240 NULL/* parent */,
2241 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2242
2243 for (i = 1; i < 3; i++)
2244 {
2245 if (relative[i] < 0)
2246 pi[i] = elm_genlist_item_insert_before
2247 (gl, itc4, (void *)(long)idx[i]/* item data */,
2248 NULL/* parent */, pi[-relative[i]],
2249 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2250 else
2251 pi[i] = elm_genlist_item_insert_after
2252 (gl, itc4, (void *)(long)idx[i]/* item data */,
2253 NULL/* parent */, pi[relative[i]],
2254 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2255 }
2256
2257 for (i = 0; i < 3; i++)
2258 {
2259 Elm_Object_Item *sub_glit[6];
2260 int j;
2261
2262 base = 1000 * (int)(long) elm_object_item_data_get(pi[i]);
2263
2264 sub_glit[0] = elm_genlist_item_append
2265 (gl, itc4, (void *)(long) (idx[0] + base)/* item data */, pi[i]/* parent */,
2266 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2267
2268 for (j = 1; j < 6; j++) {
2269 if (relative[j] < 0)
2270 sub_glit[j] = elm_genlist_item_insert_before
2271 (gl, itc4, (void *)(long) (idx[j] + base)/* item data */,
2272 pi[i]/* parent */, sub_glit[-relative[j]],
2273 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2274 else
2275 sub_glit[j] = elm_genlist_item_insert_after
2276 (gl, itc4, (void *)(long) (idx[j] + base)/* item data */,
2277 pi[i]/* parent */, sub_glit[relative[j]],
2278 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2279 }
2280 }
2281
2282 for (i = 3; i < 6; i++)
2283 {
2284 if (relative[i] < 0)
2285 pi[i] = elm_genlist_item_insert_before
2286 (gl, itc4, (void *)(long) idx[i]/* item data */,
2287 NULL/* parent */, pi[-relative[i]],
2288 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2289 else
2290 pi[i] = elm_genlist_item_insert_after
2291 (gl, itc4, (void *)(long) idx[i]/* item data */,
2292 NULL/* parent */, pi[relative[i]],
2293 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2294 }
2295
2296 for (i = 3; i < 6; i++)
2297 {
2298 Elm_Object_Item *sub_glit[6];
2299 int j;
2300
2301 base = 1000 * (int)(long) elm_object_item_data_get(pi[i]);
2302
2303 sub_glit[0] = elm_genlist_item_append
2304 (gl, itc4, (void *)(long) (idx[0] + base)/* item data */, pi[i]/* parent */,
2305 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2306
2307 for (j = 1; j < 6; j++) {
2308 if (relative[j] < 0)
2309 sub_glit[j] = elm_genlist_item_insert_before
2310 (gl, itc4, (void *)(long) (idx[j] + base)/* item data */,
2311 pi[i]/* parent */, sub_glit[-relative[j]],
2312 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2313 else
2314 sub_glit[j] = elm_genlist_item_insert_after
2315 (gl, itc4, (void *)(long) (idx[j] + base)/* item data */,
2316 pi[i]/* parent */, sub_glit[relative[j]],
2317 ELM_GENLIST_ITEM_TREE, NULL/* func */, NULL/* func data */);
2318 }
2319 }
2320
2321 elm_box_pack_end(bx, gl);
2322 evas_object_show(bx);
2323
2324 bx2 = elm_box_add(win);
2325 elm_box_horizontal_set(bx2, EINA_TRUE);
2326 elm_box_homogeneous_set(bx2, EINA_TRUE);
2327 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
2328 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
2329
2330 bt = elm_button_add(win);
2331 elm_object_text_set(bt, "+ before");
2332 evas_object_smart_callback_add(bt, "clicked", my_gl_insert_before_rel, gl);
2333 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2334 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2335 elm_box_pack_end(bx2, bt);
2336 evas_object_show(bt);
2337
2338 bt = elm_button_add(win);
2339 elm_object_text_set(bt, "+ after");
2340 evas_object_smart_callback_add(bt, "clicked", my_gl_insert_after_rel, gl);
2341 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2342 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2343 elm_box_pack_end(bx2, bt);
2344 evas_object_show(bt);
2345
2346 elm_box_pack_end(bx, bx2);
2347 evas_object_show(bx2);
2348
2349 /* item_class_ref is needed for itc4. some items can be added in callbacks */
2350 elm_genlist_item_class_ref(itc4);
2351 elm_genlist_item_class_free(itc4);
2352
2353 evas_object_resize(win, 320, 320);
2354 evas_object_show(win);
2355}
2356
2357static void _edit_icon_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2358{
2359 Elm_Object_Item *item = (Elm_Object_Item *)data;
2360 elm_object_item_del(item);
2361}
2362
2363char *gl15_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
2364{
2365 const Testitem *tit = data;
2366 char buf[256];
2367 snprintf(buf, sizeof(buf), "Item #%i", tit->mode);
2368 return strdup(buf);
2369}
2370
2371Evas_Object *gl15_content_get(void *data, Evas_Object *obj, const char *part)
2372{
2373 Testitem *tit = data;
2374 char buf[PATH_MAX];
2375
2376 // "edit_default" EDC layout is like below. each part is swallow part.
2377 // the existing item is swllowed to elm.swallow.edit.content part.
2378 // --------------------------------------------------------------------
2379 // | elm.edit.icon.1 | elm.swallow.decorate.content | elm.edit.icon,2 |
2380 // --------------------------------------------------------------------
2381
2382 if (!strcmp(part, "elm.swallow.end"))
2383 {
2384 Evas_Object *ic = elm_icon_add(obj);
2385 snprintf(buf, sizeof(buf), "%s/images/bubble.png", PACKAGE_DATA_DIR);
2386 elm_icon_file_set(ic, buf, NULL);
2387 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2388 return ic;
2389 }
2390 else if (!strcmp(part, "elm.edit.icon.1"))
2391 {
2392 Evas_Object *ck;
2393 ck = elm_check_add(obj);
2394 elm_check_state_pointer_set(ck, &tit->checked);
2395 evas_object_propagate_events_set(ck, EINA_FALSE);
2396 evas_object_show(ck);
2397 return ck;
2398 }
2399 else if (!strcmp(part, "elm.edit.icon.2"))
2400 {
2401 Evas_Object *icn = elm_icon_add(obj);
2402 snprintf(buf, sizeof(buf), "%s/images/icon_06.png", PACKAGE_DATA_DIR);
2403 elm_icon_file_set(icn, buf, NULL);
2404 evas_object_propagate_events_set(icn, EINA_FALSE);
2405 evas_object_size_hint_aspect_set(icn, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2406 evas_object_smart_callback_add(icn, "clicked", _edit_icon_clicked_cb, (void *)tit->item);
2407 return icn;
2408 }
2409 else return NULL;
2410}
2411
2412static void
2413gl15_sel(void *data, Evas_Object *obj, void *event_info __UNUSED__)
2414{
2415 Testitem *tit = data;
2416 if (elm_genlist_decorate_mode_get(obj))
2417 {
2418 if (!tit->checked) tit->checked = EINA_TRUE;
2419 else tit->checked = EINA_FALSE;
2420 }
2421 elm_genlist_item_update(tit->item);
2422}
2423
2424static void
2425gl15_deco_all_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2426{
2427 elm_genlist_decorate_mode_set(data, EINA_TRUE);
2428 elm_genlist_select_mode_set(data, ELM_OBJECT_SELECT_MODE_ALWAYS);
2429}
2430
2431static void
2432gl15_normal_mode(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2433{
2434 elm_genlist_decorate_mode_set(data, EINA_FALSE);
2435 elm_genlist_select_mode_set(data, ELM_OBJECT_SELECT_MODE_DEFAULT);
2436}
2437
2438void gl15_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
2439{
2440 printf("item deleted.\n");
2441}
2442
2443static Elm_Genlist_Item_Class *itc15;
2444void
2445test_genlist15(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2446{
2447 Evas_Object *win, *bx, *bx2, *bt, *gl;
2448 int i;
2449 static Testitem tit[100];
2450
2451 win = elm_win_util_standard_add("genlist-decorate-all-mode", "Genlist Decorate All Mode");
2452 elm_win_autodel_set(win, EINA_TRUE);
2453
2454 bx = elm_box_add(win);
2455 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2456 elm_win_resize_object_add(win, bx);
2457 evas_object_show(bx);
2458
2459 gl = elm_genlist_add(win);
2460 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2461 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2462 evas_object_show(gl);
2463
2464 itc15 = elm_genlist_item_class_new();
2465 itc15->item_style = "default";
2466 itc15->func.text_get = gl15_text_get;
2467 itc15->func.content_get = gl15_content_get;
2468 itc15->func.state_get = gl_state_get;
2469 itc15->func.del = gl15_del;
2470 itc15->decorate_all_item_style = "edit";
2471
2472 for (i = 0; i < 100; i++)
2473 {
2474 tit[i].mode = i;
2475 tit[i].item = elm_genlist_item_append(gl, itc15,
2476 &(tit[i])/* item data */,
2477 NULL/* parent */,
2478 ELM_GENLIST_ITEM_NONE/* flags */,
2479 gl15_sel/* func */,
2480 (void *)(long)&(tit[i])/* func data */);
2481 }
2482 elm_genlist_item_class_free(itc15);
2483 elm_box_pack_end(bx, gl);
2484 evas_object_show(bx);
2485
2486 bx2 = elm_box_add(win);
2487 elm_box_horizontal_set(bx2, EINA_TRUE);
2488 elm_box_homogeneous_set(bx2, EINA_TRUE);
2489 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
2490 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
2491
2492 bt = elm_button_add(win);
2493 elm_object_text_set(bt, "Decorate All mode");
2494 evas_object_smart_callback_add(bt, "clicked", gl15_deco_all_mode, gl);
2495 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2496 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2497 elm_box_pack_end(bx2, bt);
2498 evas_object_show(bt);
2499
2500 bt = elm_button_add(win);
2501 elm_object_text_set(bt, "Normal mode");
2502 evas_object_smart_callback_add(bt, "clicked", gl15_normal_mode,gl);
2503 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2504 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2505 elm_box_pack_end(bx2, bt);
2506 evas_object_show(bt);
2507
2508 elm_box_pack_end(bx, bx2);
2509 evas_object_show(bx2);
2510
2511 evas_object_resize(win, 520, 520);
2512 evas_object_show(win);
2513}
2514
2515static void _flip_icon_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2516{
2517 const Testitem *tit = data;
2518
2519 if (elm_genlist_item_flip_get(tit->item))
2520 elm_genlist_item_flip_set(tit->item, EINA_FALSE);
2521 else
2522 elm_genlist_item_flip_set(tit->item, EINA_TRUE);
2523}
2524
2525char *gl16_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
2526{
2527 const Testitem *tit = data;
2528 char buf[256];
2529 snprintf(buf, sizeof(buf), "Item #%i", tit->mode);
2530 return strdup(buf);
2531}
2532
2533Evas_Object *gl16_content_get(void *data, Evas_Object *obj, const char *part)
2534{
2535 Testitem *tit = data;
2536 char buf[PATH_MAX];
2537
2538 if (!strcmp(part, "elm.text.flip"))
2539 {
2540 Evas_Object *btn = elm_button_add(obj);
2541 elm_object_text_set(btn, "flipped content placement");
2542 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
2543 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
2544 evas_object_smart_callback_add(btn, "clicked", _flip_icon_clicked_cb, (void *)tit);
2545 evas_object_show(btn);
2546 return btn;
2547 }
2548 else if (!strcmp(part, "elm.edit.icon.1"))
2549 {
2550 Evas_Object *icn = elm_icon_add(obj);
2551 snprintf(buf, sizeof(buf), "%s/images/icon_04.png", PACKAGE_DATA_DIR);
2552 elm_icon_file_set(icn, buf, NULL);
2553 evas_object_propagate_events_set(icn, EINA_FALSE);
2554 evas_object_size_hint_aspect_set(icn, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2555 return icn;
2556 }
2557 else if (!strcmp(part, "elm.edit.icon.2"))
2558 {
2559 Evas_Object *icn = elm_icon_add(obj);
2560 snprintf(buf, sizeof(buf), "%s/images/icon_09.png", PACKAGE_DATA_DIR);
2561 elm_icon_file_set(icn, buf, NULL);
2562 evas_object_propagate_events_set(icn, EINA_FALSE);
2563 evas_object_size_hint_aspect_set(icn, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2564 evas_object_smart_callback_add(icn, "clicked", _flip_icon_clicked_cb, (void *)tit);
2565 return icn;
2566 }
2567 else return NULL;
2568}
2569
2570void
2571test_genlist16(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2572{
2573 Evas_Object *win, *bx, *gl;
2574 int i;
2575 static Testitem tit[100];
2576
2577 win = elm_win_util_standard_add("genlist-flip-mode", "Genlist Flip Mode");
2578 elm_win_autodel_set(win, EINA_TRUE);
2579
2580 bx = elm_box_add(win);
2581 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2582 elm_win_resize_object_add(win, bx);
2583 evas_object_show(bx);
2584
2585 gl = elm_genlist_add(win);
2586 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2587 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2588 evas_object_show(gl);
2589
2590 /* note: flip mode can be used with/without edit mode */
2591 elm_genlist_decorate_mode_set(gl, EINA_TRUE);
2592 elm_genlist_select_mode_set(gl, ELM_OBJECT_SELECT_MODE_ALWAYS);
2593
2594 itc15 = elm_genlist_item_class_new();
2595 itc15->item_style = "default";
2596 itc15->func.text_get = gl16_text_get;
2597 itc15->func.content_get = gl16_content_get;
2598 itc15->func.state_get = gl_state_get;
2599 itc15->func.del = NULL;
2600 itc15->decorate_all_item_style = "edit";
2601
2602 for (i = 0; i < 100; i++)
2603 {
2604 tit[i].mode = i;
2605 tit[i].item = elm_genlist_item_append(gl, itc15,
2606 &(tit[i])/* item data */,
2607 NULL/* parent */,
2608 ELM_GENLIST_ITEM_NONE/* flags */,
2609 gl_sel/* func */,
2610 (void *)(long)&(tit[i])/* func data */);
2611 }
2612 elm_genlist_item_class_free(itc15);
2613 elm_box_pack_end(bx, gl);
2614 evas_object_show(bx);
2615
2616 evas_object_resize(win, 520, 520);
2617 evas_object_show(win);
2618}
2619
2620static Elm_Genlist_Item_Class itc17;
2621
2622static void
2623gl17_sel(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
2624{
2625 Elm_Object_Item *glit = event_info;
2626 int depth = elm_genlist_item_expanded_depth_get(glit);
2627 printf("expanded depth for selected item is %d\n", depth);
2628}
2629
2630static void
2631gl17_exp(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
2632{
2633 Elm_Object_Item *glit = event_info;
2634 Evas_Object *gl = elm_object_item_widget_get(glit);
2635 int val = (int)(long) elm_object_item_data_get(glit);
2636 val *= 10;
2637 elm_genlist_item_append(gl, &itc17,
2638 (void *)(long) (val + 1)/* item data */,
2639 glit/* parent */,
2640 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2641 NULL/* func data */);
2642 elm_genlist_item_append(gl, &itc17,
2643 (void *)(long) (val + 2)/* item data */,
2644 glit/* parent */,
2645 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2646 NULL/* func data */);
2647 elm_genlist_item_append(gl, &itc17,
2648 (void *)(long) (val + 3)/* item data */,
2649 glit/* parent */,
2650 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2651 NULL/* func data */);
2652 elm_genlist_item_append(gl, &itc17,
2653 (void *)(long) (val + 4)/* item data */,
2654 glit/* parent */,
2655 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2656 NULL/* func data */);
2657 elm_genlist_item_append(gl, &itc17,
2658 (void *)(long) (val + 5)/* item data */,
2659 glit/* parent */,
2660 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2661 NULL/* func data */);
2662 elm_genlist_item_append(gl, &itc17,
2663 (void *)(long) (val + 6)/* item data */,
2664 glit/* parent */,
2665 ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2666 NULL/* func data */);
2667}
2668
2669static void
2670gl17_con(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
2671{
2672 Elm_Object_Item *glit = event_info;
2673 elm_genlist_item_subitems_clear(glit);
2674}
2675
2676static void
2677gl17_exp_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
2678{
2679 Elm_Object_Item *glit = event_info;
2680 elm_genlist_item_expanded_set(glit, EINA_TRUE);
2681}
2682
2683static void
2684gl17_con_req(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
2685{
2686 Elm_Object_Item *glit = event_info;
2687 elm_genlist_item_expanded_set(glit, EINA_FALSE);
2688}
2689
2690char *gl17_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
2691{
2692 char buf[256];
2693 snprintf(buf, sizeof(buf), "Item mode %i", (int)(long)data);
2694 return strdup(buf);
2695}
2696
2697Evas_Object *gl17_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
2698{
2699 char buf[PATH_MAX];
2700 if (!strcmp(part, "elm.swallow.icon"))
2701 {
2702 Evas_Object *ic = elm_icon_add(obj);
2703 snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
2704 elm_icon_file_set(ic, buf, NULL);
2705 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2706 evas_object_show(ic);
2707 return ic;
2708 }
2709 else if (!strcmp(part, "elm.swallow.end"))
2710 {
2711 Evas_Object *ck;
2712 ck = elm_check_add(obj);
2713 evas_object_propagate_events_set(ck, EINA_FALSE);
2714 evas_object_show(ck);
2715 return ck;
2716 }
2717 return NULL;
2718}
2719
2720Eina_Bool gl17_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
2721{
2722 return EINA_FALSE;
2723}
2724
2725void gl17_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
2726{
2727 printf("item deleted.\n");
2728}
2729
2730static void
2731gl17_enabled_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2732{
2733 elm_genlist_tree_effect_enabled_set(data, EINA_TRUE);
2734}
2735
2736static void
2737gl17_disabled_set(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2738{
2739 elm_genlist_tree_effect_enabled_set(data, EINA_FALSE);
2740}
2741
2742void
2743test_genlist17(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
2744{
2745 Evas_Object *win, *gl, *bx, *bx2, *bt;
2746
2747 win = elm_win_util_standard_add("genlist17", "Genlist Tree Effect");
2748 elm_win_autodel_set(win, EINA_TRUE);
2749
2750 bx = elm_box_add(win);
2751 evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2752 elm_win_resize_object_add(win, bx);
2753 evas_object_show(bx);
2754
2755 gl = elm_genlist_add(win);
2756 evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
2757 evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2758 evas_object_show(gl);
2759
2760 elm_genlist_tree_effect_enabled_set(gl,EINA_TRUE);
2761
2762 itc17.item_style = "tree_effect";
2763 itc17.func.text_get = gl17_text_get;
2764 itc17.func.content_get = gl17_content_get;
2765 itc17.func.state_get = gl17_state_get;
2766 itc17.func.del = gl17_del;
2767
2768 elm_genlist_item_append(gl, &itc17,
2769 (void *)1/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2770 NULL/* func data */);
2771 elm_genlist_item_append(gl, &itc17,
2772 (void *)2/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2773 NULL/* func data */);
2774 elm_genlist_item_append(gl, &itc17,
2775 (void *)3/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_TREE, gl17_sel/* func */,
2776 NULL/* func data */);
2777
2778 evas_object_smart_callback_add(gl, "expand,request", gl17_exp_req, gl);
2779 evas_object_smart_callback_add(gl, "contract,request", gl17_con_req, gl);
2780 evas_object_smart_callback_add(gl, "expanded", gl17_exp, gl);
2781 evas_object_smart_callback_add(gl, "contracted", gl17_con, gl);
2782
2783 elm_box_pack_end(bx, gl);
2784 evas_object_show(bx);
2785
2786 bx2 = elm_box_add(win);
2787 elm_box_horizontal_set(bx2, EINA_TRUE);
2788 elm_box_homogeneous_set(bx2, EINA_TRUE);
2789 evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
2790 evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
2791
2792 bt = elm_button_add(win);
2793 elm_object_text_set(bt, "Enable");
2794 evas_object_smart_callback_add(bt, "clicked", gl17_enabled_set, gl);
2795 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2796 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2797 elm_box_pack_end(bx2, bt);
2798 evas_object_show(bt);
2799
2800 bt = elm_button_add(win);
2801 elm_object_text_set(bt, "Disable");
2802 evas_object_smart_callback_add(bt, "clicked", gl17_disabled_set, gl);
2803 evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
2804 evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
2805 elm_box_pack_end(bx2, bt);
2806 evas_object_show(bt);
2807
2808 elm_box_pack_end(bx, bx2);
2809 evas_object_show(bx2);
2810
2811 evas_object_resize(win, 320, 320);
2812 evas_object_show(win);
2813}
2814#endif