elementary_test: fix formatting
[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_Object_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_text_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         Evas_Object *icon = elm_bg_add(obj);
114         elm_bg_file_set(icon, ti->path, NULL);
115         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
116         evas_object_show(icon);
117         return icon;
118      }
119    else if (!strcmp(part, "elm.swallow.end"))
120      {
121         Evas_Object *ck;
122         ck = elm_check_add(obj);
123         evas_object_propagate_events_set(ck, 0);
124         elm_check_state_set(ck, ti->onoff);
125         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
126         evas_object_show(ck);
127         return ck;
128      }
129    return NULL;
130 }
131
132 Eina_Bool
133 grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
134 {
135    return EINA_FALSE;
136 }
137
138 void
139 grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
140 {
141 }
142
143 static void
144 grid_sel(void *data, Evas_Object *obj, void *event_info)
145 {
146    printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info);
147 }
148
149 void
150 test_gengrid(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
151 {
152    Evas_Object *win, *bg, *grid;
153    static Testitem ti[144];
154    int i, n;
155    char buf[PATH_MAX];
156
157    win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
158    elm_win_title_set(win, "GenGrid");
159    elm_win_autodel_set(win, EINA_TRUE);
160
161    bg = elm_bg_add(win);
162    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
163    elm_win_resize_object_add(win, bg);
164    evas_object_show(bg);
165
166    grid = elm_gengrid_add(win);
167    elm_gengrid_item_size_set(grid, 150, 150);
168    elm_gengrid_horizontal_set(grid, EINA_FALSE);
169    elm_gengrid_multi_select_set(grid, EINA_TRUE);
170    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
171    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
172    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
173    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
174    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
175    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
176    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
177    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
178    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
179    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
180    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
181
182    gic.item_style = "default";
183    gic.func.text_get = grid_text_get;
184    gic.func.content_get = grid_content_get;
185    gic.func.state_get = grid_state_get;
186    gic.func.del = grid_del;
187
188    n = 0;
189    for (i = 0; i < 12 * 12; i++)
190      {
191         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
192         n = (n + 1) % 9;
193         ti[i].mode = i;
194         ti[i].path = eina_stringshare_add(buf);
195         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
196         if (!(i % 5))
197           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
198      }
199
200    evas_object_show(grid);
201    elm_win_resize_object_add(win, grid);
202
203    evas_object_resize(win, 600, 600);
204    evas_object_show(win);
205 }
206
207 static void
208 _before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
209 {
210    Testitem *ti;
211    Evas_Object *grid = data;
212    Elm_Object_Item *sel;
213    char buf[PATH_MAX];
214
215    sel = elm_gengrid_selected_item_get(grid);
216    if (!sel)
217        return;
218    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
219    ti = malloc(sizeof(*ti));
220    ti->mode = 0;
221    ti->path = eina_stringshare_add(buf);
222    ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
223                                              NULL);
224 }
225
226 static void
227 _after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
228 {
229    Testitem *ti;
230    Evas_Object *grid = data;
231    Elm_Object_Item *sel;
232    char buf[PATH_MAX];
233
234    sel = elm_gengrid_selected_item_get(grid);
235    if (!sel)
236        return;
237    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
238    ti = malloc(sizeof(*ti));
239    ti->mode = 0;
240    ti->path = eina_stringshare_add(buf);
241    ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
242                                             NULL);
243 }
244
245 static void
246 _delete_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
247 {
248    Evas_Object *grid = data;
249    Eina_List *l, *l2, *l3;
250    Elm_Object_Item *gg_it;
251
252    l = (Eina_List*)elm_gengrid_selected_items_get(grid);
253    if (!l) return;
254    EINA_LIST_FOREACH_SAFE(l, l2, l3, gg_it)
255      elm_object_item_del(gg_it);
256 }
257
258 static void
259 _prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
260 {
261    Testitem *ti;
262    Evas_Object *grid = data;
263    char buf[PATH_MAX];
264
265    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
266    ti = malloc(sizeof(*ti));
267    ti->mode = 0;
268    ti->path = eina_stringshare_add(buf);
269    ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
270 }
271
272 static void
273 _append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
274 {
275    Testitem *ti;
276    Evas_Object *grid = data;
277    char buf[PATH_MAX];
278
279    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
280    ti = malloc(sizeof(*ti));
281    ti->mode = 0;
282    ti->path = eina_stringshare_add(buf);
283    ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
284 }
285
286 static void
287 _size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
288 {
289    Evas_Object *grid = data;
290    int size = elm_spinner_value_get(obj);
291    elm_gengrid_item_size_set(grid, size, size);
292 }
293
294 void
295 test_gengrid2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
296 {
297    Evas_Object *win, *bg, *grid, *bx, *hbx, *bt, *ck;
298
299    win = elm_win_add(NULL, "gengrid2", ELM_WIN_BASIC);
300    elm_win_title_set(win, "GenGrid2");
301    elm_win_autodel_set(win, EINA_TRUE);
302
303    bg = elm_bg_add(win);
304    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
305    elm_win_resize_object_add(win, bg);
306    evas_object_show(bg);
307
308    bx = elm_box_add(win);
309    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
310    elm_win_resize_object_add(win, bx);
311    evas_object_show(bx);
312
313    grid = elm_gengrid_add(win);
314    elm_gengrid_item_size_set(grid, 150, 150);
315    elm_gengrid_horizontal_set(grid, EINA_FALSE);
316    elm_gengrid_multi_select_set(grid, EINA_FALSE);
317    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
318    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
319    evas_object_size_hint_min_set(grid, 600, 500);
320    elm_box_pack_end(bx, grid);
321    evas_object_show(grid);
322
323    hbx = elm_box_add(win);
324    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
325    elm_box_horizontal_set(hbx, EINA_TRUE);
326    elm_box_pack_end(bx, hbx);
327    evas_object_show(hbx);
328
329    bt = elm_button_add(win);
330    elm_object_text_set(bt, "Append");
331    evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
332    elm_box_pack_end(hbx, bt);
333    evas_object_show(bt);
334
335    bt = elm_button_add(win);
336    elm_object_text_set(bt, "Prepend");
337    evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
338    elm_box_pack_end(hbx, bt);
339    evas_object_show(bt);
340
341    bt = elm_button_add(win);
342    elm_object_text_set(bt, "Insert before");
343    evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
344    elm_box_pack_end(hbx, bt);
345    evas_object_show(bt);
346
347    bt = elm_button_add(win);
348    elm_object_text_set(bt, "Insert after");
349    evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
350    elm_box_pack_end(hbx, bt);
351    evas_object_show(bt);
352
353    bt = elm_button_add(win);
354    elm_object_text_set(bt, "Delete");
355    evas_object_smart_callback_add(bt, "clicked", _delete_bt_clicked, grid);
356    elm_box_pack_end(hbx, bt);
357    evas_object_show(bt);
358
359    bt = elm_spinner_add(win);
360    elm_spinner_min_max_set(bt, 10, 1024);
361    elm_spinner_value_set(bt, 150);
362    elm_spinner_label_format_set(bt, "Item size: %.0f");
363    evas_object_smart_callback_add(bt, "changed", _size_changed, grid);
364    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
365    elm_box_pack_end(hbx, bt);
366    evas_object_show(bt);
367
368    ck = elm_check_add(win);
369    elm_object_text_set(ck, "Horizontal Mode");
370    evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
371    elm_box_pack_end(hbx, ck);
372    evas_object_show(ck);
373
374    gic.item_style = "default";
375    gic.func.text_get = grid_text_get;
376    gic.func.content_get = grid_content_get;
377    gic.func.state_get = grid_state_get;
378    gic.func.del = grid_del;
379
380    evas_object_resize(win, 600, 600);
381    evas_object_show(win);
382 }
383
384 void
385 test_gengrid3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
386 {
387    Evas_Object *win, *bg, *grid;
388    static Testitem ti[144];
389    int i, n;
390    char buf[PATH_MAX];
391
392    win = elm_win_add(NULL, "gengrid_group", ELM_WIN_BASIC);
393    elm_win_title_set(win, "GenGrid Group");
394    elm_win_autodel_set(win, EINA_TRUE);
395
396    bg = elm_bg_add(win);
397    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
398    elm_win_resize_object_add(win, bg);
399    evas_object_show(bg);
400
401    grid = elm_gengrid_add(win);
402    elm_gengrid_item_size_set(grid, 150, 150);
403    elm_gengrid_group_item_size_set(grid, 31, 31);
404    //elm_gengrid_horizontal_set(grid, EINA_TRUE);
405    elm_gengrid_horizontal_set(grid, EINA_FALSE);
406    elm_gengrid_multi_select_set(grid, EINA_TRUE);
407    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
408    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
409    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
410    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
411    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
412    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
413    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
414    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
415    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
416    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
417    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
418
419    gic.item_style = "default";
420    gic.func.text_get = grid_text_get;
421    gic.func.content_get = grid_content_get;
422    gic.func.state_get = grid_state_get;
423    gic.func.del = grid_del;
424
425    ggic.item_style = "group_index";
426    ggic.func.text_get = grid_text_get;
427    ggic.func.content_get = NULL;
428    ggic.func.state_get = NULL;
429    ggic.func.del = NULL;
430
431    n = 0;
432    for (i = 0; i < 12 * 12; i++)
433      {
434         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
435         n = (n + 1) % 9;
436         ti[i].mode = i;
437         ti[i].path = eina_stringshare_add(buf);
438         if (i == 0 || i == 18 || i == 53 || i == 100)
439           //if (i == 0 || i == 18)
440           ti[i].item = elm_gengrid_item_append(grid, &ggic, &(ti[i]), grid_sel, NULL);
441         else
442           ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
443         if (!(i % 5))
444           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
445      }
446
447    evas_object_show(grid);
448    elm_win_resize_object_add(win, grid);
449
450    evas_object_resize(win, 600, 600);
451    evas_object_show(win);
452 }
453
454 #endif