elm gen/gengrid/genlist: Changed item class's icon_get to content_get.
[framework/uifw/elementary.git] / src / bin / test_gengrid.c
1 #include <Elementary.h>
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5 #ifndef ELM_LIB_QUICKLAUNCH
6 typedef struct _Testitem
7 {
8    Elm_Gengrid_Item *item;
9    const char *path;
10    int mode;
11    int onoff;
12 } Testitem;
13
14 static const char *img[9] =
15 {
16    "panel_01.jpg",
17    "plant_01.jpg",
18    "rock_01.jpg",
19    "rock_02.jpg",
20    "sky_01.jpg",
21    "sky_02.jpg",
22    "sky_03.jpg",
23    "sky_04.jpg",
24    "wood_01.jpg",
25 };
26
27 static Elm_Gengrid_Item_Class gic, ggic;
28
29 static void
30 _horizontal_grid(void *data, Evas_Object *obj, void *event_info __UNUSED__)
31 {
32    Evas_Object *grid = data;
33    elm_gengrid_horizontal_set(grid, elm_check_state_get(obj));
34 }
35
36 static void
37 grid_drag_up(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
38 {
39    printf("Drag up: %p\n", event_info);
40 }
41
42 static void
43 grid_drag_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
44 {
45    printf("Drag right: %p\n", event_info);
46 }
47
48 static void
49 grid_drag_down(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
50 {
51    printf("Drag down: %p\n", event_info);
52 }
53
54 static void
55 grid_drag_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
56 {
57    printf("Drag left: %p\n", event_info);
58 }
59
60 static void
61 grid_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
62 {
63    printf("Drag stop: %p\n", event_info);
64 }
65
66 static void
67 grid_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
68 {
69    printf("Selected: %p\n", event_info);
70 }
71
72 static void
73 grid_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
74 {
75    printf("Double clicked: %p\n", event_info);
76 }
77
78 static void
79 grid_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
80 {
81    printf("longpress %p\n", event_info);
82 }
83
84 static void
85 grid_moved(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
86 {
87    printf("moved %p\n", event_info);
88 }
89
90 static void
91 grid_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
92 {
93    Testitem *ti = data;
94    ti->onoff = elm_check_state_get(obj);
95    printf("item %p onoff = %i\n", ti, ti->onoff);
96 }
97
98 char *
99 grid_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
100 {
101    const Testitem *ti = data;
102    char buf[256];
103    snprintf(buf, sizeof(buf), "Photo %s", ti->path);
104    return strdup(buf);
105 }
106
107 Evas_Object *
108 grid_content_get(void *data, Evas_Object *obj, const char *part)
109 {
110    const Testitem *ti = data;
111    if (!strcmp(part, "elm.swallow.icon"))
112      {
113
114         Evas_Object *icon = elm_bg_add(obj);
115         elm_bg_file_set(icon, ti->path, NULL);
116         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
117         evas_object_show(icon);
118         return icon;
119      }
120    else if (!strcmp(part, "elm.swallow.end"))
121      {
122         Evas_Object *ck;
123         ck = elm_check_add(obj);
124         evas_object_propagate_events_set(ck, 0);
125         elm_check_state_set(ck, ti->onoff);
126         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
127         evas_object_show(ck);
128         return ck;
129      }
130    return NULL;
131 }
132
133 Eina_Bool
134 grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
135 {
136    return EINA_FALSE;
137 }
138
139 void
140 grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
141 {
142 }
143
144 static void
145 grid_sel(void *data, Evas_Object *obj, void *event_info)
146 {
147    printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info);
148 }
149
150 void
151 test_gengrid(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
152 {
153    Evas_Object *win, *bg, *grid;
154    static Testitem ti[144];
155    int i, n;
156    char buf[PATH_MAX];
157
158    win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
159    elm_win_title_set(win, "GenGrid");
160    elm_win_autodel_set(win, EINA_TRUE);
161
162    bg = elm_bg_add(win);
163    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
164    elm_win_resize_object_add(win, bg);
165    evas_object_show(bg);
166
167    grid = elm_gengrid_add(win);
168    elm_gengrid_item_size_set(grid, 150, 150);
169    elm_gengrid_horizontal_set(grid, EINA_FALSE);
170    elm_gengrid_multi_select_set(grid, EINA_TRUE);
171    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
172    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
173    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
174    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
175    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
176    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
177    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
178    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
179    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
180    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
181    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182
183    gic.item_style = "default";
184    gic.func.label_get = grid_label_get;
185    gic.func.content_get = grid_content_get;
186    gic.func.state_get = grid_state_get;
187    gic.func.del = grid_del;
188
189    n = 0;
190    for (i = 0; i < 12 * 12; i++)
191      {
192         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
193         n = (n + 1) % 9;
194         ti[i].mode = i;
195         ti[i].path = eina_stringshare_add(buf);
196         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
197         if (!(i % 5))
198           elm_gen_item_selected_set(ti[i].item, EINA_TRUE);
199      }
200
201    evas_object_show(grid);
202    elm_win_resize_object_add(win, grid);
203
204    evas_object_resize(win, 600, 600);
205    evas_object_show(win);
206 }
207
208 static void
209 _before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
210 {
211    Testitem *ti;
212    Evas_Object *grid = data;
213    Elm_Gengrid_Item *sel;
214    char buf[PATH_MAX];
215
216    sel = elm_gengrid_selected_item_get(grid);
217    if (!sel)
218        return;
219    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
220    ti = malloc(sizeof(*ti));
221    ti->mode = 0;
222    ti->path = eina_stringshare_add(buf);
223    ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
224                                              NULL);
225 }
226
227 static void
228 _after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
229 {
230    Testitem *ti;
231    Evas_Object *grid = data;
232    Elm_Gengrid_Item *sel;
233    char buf[PATH_MAX];
234
235    sel = elm_gengrid_selected_item_get(grid);
236    if (!sel)
237        return;
238    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
239    ti = malloc(sizeof(*ti));
240    ti->mode = 0;
241    ti->path = eina_stringshare_add(buf);
242    ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
243                                             NULL);
244 }
245
246 static void
247 _delete_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
248 {
249    Evas_Object *grid = data;
250    Eina_List *l, *l2, *l3;
251    Elm_Gengrid_Item *it;
252
253    l = (Eina_List*)elm_gengrid_selected_items_get(grid);
254    if (!l) return;
255    EINA_LIST_FOREACH_SAFE(l, l2, l3, it)
256      elm_gengrid_item_del(it);
257 }
258
259 static void
260 _prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
261 {
262    Testitem *ti;
263    Evas_Object *grid = data;
264    char buf[PATH_MAX];
265
266    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
267    ti = malloc(sizeof(*ti));
268    ti->mode = 0;
269    ti->path = eina_stringshare_add(buf);
270    ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
271 }
272
273 static void
274 _append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
275 {
276    Testitem *ti;
277    Evas_Object *grid = data;
278    char buf[PATH_MAX];
279
280    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
281    ti = malloc(sizeof(*ti));
282    ti->mode = 0;
283    ti->path = eina_stringshare_add(buf);
284    ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
285 }
286
287 static void
288 _size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
289 {
290    Evas_Object *grid = data;
291    int size = elm_spinner_value_get(obj);
292    elm_gengrid_item_size_set(grid, size, size);
293 }
294
295 void
296 test_gengrid2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
297 {
298    Evas_Object *win, *bg, *grid, *bx, *hbx, *bt, *ck;
299
300    win = elm_win_add(NULL, "gengrid2", ELM_WIN_BASIC);
301    elm_win_title_set(win, "GenGrid2");
302    elm_win_autodel_set(win, EINA_TRUE);
303
304    bg = elm_bg_add(win);
305    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
306    elm_win_resize_object_add(win, bg);
307    evas_object_show(bg);
308
309    bx = elm_box_add(win);
310    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
311    elm_win_resize_object_add(win, bx);
312    evas_object_show(bx);
313
314    grid = elm_gengrid_add(win);
315    elm_gengrid_item_size_set(grid, 150, 150);
316    elm_gengrid_horizontal_set(grid, EINA_FALSE);
317    elm_gengrid_multi_select_set(grid, EINA_FALSE);
318    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
319    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
320    evas_object_size_hint_min_set(grid, 600, 500);
321    elm_box_pack_end(bx, grid);
322    evas_object_show(grid);
323
324    hbx = elm_box_add(win);
325    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
326    elm_box_horizontal_set(hbx, EINA_TRUE);
327    elm_box_pack_end(bx, hbx);
328    evas_object_show(hbx);
329
330    bt = elm_button_add(win);
331    elm_object_text_set(bt, "Append");
332    evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
333    elm_box_pack_end(hbx, bt);
334    evas_object_show(bt);
335
336    bt = elm_button_add(win);
337    elm_object_text_set(bt, "Prepend");
338    evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
339    elm_box_pack_end(hbx, bt);
340    evas_object_show(bt);
341
342    bt = elm_button_add(win);
343    elm_object_text_set(bt, "Insert before");
344    evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
345    elm_box_pack_end(hbx, bt);
346    evas_object_show(bt);
347
348    bt = elm_button_add(win);
349    elm_object_text_set(bt, "Insert after");
350    evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
351    elm_box_pack_end(hbx, bt);
352    evas_object_show(bt);
353
354    bt = elm_button_add(win);
355    elm_object_text_set(bt, "Delete");
356    evas_object_smart_callback_add(bt, "clicked", _delete_bt_clicked, grid);
357    elm_box_pack_end(hbx, bt);
358    evas_object_show(bt);
359
360    bt = elm_spinner_add(win);
361    elm_spinner_min_max_set(bt, 10, 1024);
362    elm_spinner_value_set(bt, 150);
363    elm_spinner_label_format_set(bt, "Item size: %.0f");
364    evas_object_smart_callback_add(bt, "changed", _size_changed, grid);
365    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
366    elm_box_pack_end(hbx, bt);
367    evas_object_show(bt);
368
369    ck = elm_check_add(win);
370    elm_object_text_set(ck, "Horizontal Mode");
371    evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
372    elm_box_pack_end(hbx, ck);
373    evas_object_show(ck);
374
375    gic.item_style = "default";
376    gic.func.label_get = grid_label_get;
377    gic.func.content_get = grid_content_get;
378    gic.func.state_get = grid_state_get;
379    gic.func.del = grid_del;
380
381    evas_object_resize(win, 600, 600);
382    evas_object_show(win);
383 }
384
385 void
386 test_gengrid3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
387 {
388    Evas_Object *win, *bg, *grid;
389    static Testitem ti[144];
390    int i, n;
391    char buf[PATH_MAX];
392
393    win = elm_win_add(NULL, "gengrid_group", ELM_WIN_BASIC);
394    elm_win_title_set(win, "GenGrid Group");
395    elm_win_autodel_set(win, EINA_TRUE);
396
397    bg = elm_bg_add(win);
398    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
399    elm_win_resize_object_add(win, bg);
400    evas_object_show(bg);
401
402    grid = elm_gengrid_add(win);
403    elm_gengrid_item_size_set(grid, 150, 150);
404    elm_gengrid_group_item_size_set(grid, 31, 31);
405    //elm_gengrid_horizontal_set(grid, EINA_TRUE);
406    elm_gengrid_horizontal_set(grid, EINA_FALSE);
407    elm_gengrid_multi_select_set(grid, EINA_TRUE);
408    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
409    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
410    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
411    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
412    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
413    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
414    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
415    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
416    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
417    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
418    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
419
420    gic.item_style = "default";
421    gic.func.label_get = grid_label_get;
422    gic.func.content_get = grid_content_get;
423    gic.func.state_get = grid_state_get;
424    gic.func.del = grid_del;
425
426    ggic.item_style = "group_index";
427    ggic.func.label_get = grid_label_get;
428    ggic.func.content_get = NULL;
429    ggic.func.state_get = NULL;
430    ggic.func.del = NULL;
431
432
433    n = 0;
434    for (i = 0; i < 12 * 12; i++)
435      {
436         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
437         n = (n + 1) % 9;
438         ti[i].mode = i;
439         ti[i].path = eina_stringshare_add(buf);
440         if (i == 0 || i == 18 || i == 53 || i == 100)
441         //if (i == 0 || i == 18)
442           ti[i].item = elm_gengrid_item_append(grid, &ggic, &(ti[i]), grid_sel, NULL);
443         else
444           ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
445         if (!(i % 5))
446           elm_gen_item_selected_set(ti[i].item, EINA_TRUE);
447      }
448
449    evas_object_show(grid);
450    elm_win_resize_object_add(win, grid);
451
452    evas_object_resize(win, 600, 600);
453    evas_object_show(win);
454 }
455
456 #endif