gengrid reorder mode added
[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;
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_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
74 {
75    printf("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_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
86 {
87    Testitem *ti = data;
88    ti->onoff = elm_check_state_get(obj);
89    printf("item %p onoff = %i\n", ti, ti->onoff);
90 }
91
92 char *
93 grid_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
94 {
95    const Testitem *ti = data;
96    char buf[256];
97    snprintf(buf, sizeof(buf), "Photo %s", ti->path);
98    return strdup(buf);
99 }
100
101 Evas_Object *
102 grid_icon_get(void *data, Evas_Object *obj, const char *part)
103 {
104    const Testitem *ti = data;
105    if (!strcmp(part, "elm.swallow.icon"))
106      {
107
108         Evas_Object *icon = elm_bg_add(obj);
109         elm_bg_file_set(icon, ti->path, NULL);
110         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
111         evas_object_show(icon);
112         return icon;
113      }
114    else if (!strcmp(part, "elm.swallow.end"))
115      {
116         Evas_Object *ck;
117         ck = elm_check_add(obj);
118         evas_object_propagate_events_set(ck, 0);
119         elm_check_state_set(ck, ti->onoff);
120         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
121         evas_object_show(ck);
122         return ck;
123      }
124    return NULL;
125 }
126
127 Eina_Bool
128 grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
129 {
130    return EINA_FALSE;
131 }
132
133 void
134 grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
135 {
136 }
137
138 static void
139 grid_sel(void *data, Evas_Object *obj, void *event_info)
140 {
141    printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info);
142 }
143
144 void
145 test_gengrid(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
146 {
147    Evas_Object *win, *bg, *grid;
148    static Testitem ti[144];
149    int i, n;
150    char buf[PATH_MAX];
151
152    win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
153    elm_win_title_set(win, "GenGrid");
154    elm_win_autodel_set(win, 1);
155
156    bg = elm_bg_add(win);
157    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
158    elm_win_resize_object_add(win, bg);
159    evas_object_show(bg);
160
161    grid = elm_gengrid_add(win);
162    elm_gengrid_item_size_set(grid, 150, 150);
163    elm_gengrid_horizontal_set(grid, EINA_FALSE);
164    elm_gengrid_multi_select_set(grid, EINA_TRUE);
165    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
166    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
167    evas_object_smart_callback_add(grid, "clicked", grid_clicked, NULL);
168    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
169    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
170    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
171    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
172    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
173    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
174    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
175
176    gic.item_style = "default";
177    gic.func.label_get = grid_label_get;
178    gic.func.icon_get = grid_icon_get;
179    gic.func.state_get = grid_state_get;
180    gic.func.del = grid_del;
181
182    n = 0;
183    for (i = 0; i < 12 * 12; i++)
184      {
185         snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[n]);
186         n = (n + 1) % 9;
187         ti[i].mode = i;
188         ti[i].path = eina_stringshare_add(buf);
189         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
190         if (!(i % 5))
191           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
192      }
193
194    evas_object_show(grid);
195    elm_win_resize_object_add(win, grid);
196
197    evas_object_resize(win, 600, 600);
198    evas_object_show(win);
199 }
200
201 static void
202 _before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
203 {
204    Testitem *ti;
205    Evas_Object *grid = data;
206    Elm_Gengrid_Item *sel;
207    char buf[PATH_MAX];
208
209    sel = elm_gengrid_selected_item_get(grid);
210    if (!sel)
211        return;
212    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
213    ti = malloc(sizeof(*ti));
214    ti->mode = 0;
215    ti->path = eina_stringshare_add(buf);
216    ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
217                                              NULL);
218 }
219
220 static void
221 _after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
222 {
223    Testitem *ti;
224    Evas_Object *grid = data;
225    Elm_Gengrid_Item *sel;
226    char buf[PATH_MAX];
227
228    sel = elm_gengrid_selected_item_get(grid);
229    if (!sel)
230        return;
231    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
232    ti = malloc(sizeof(*ti));
233    ti->mode = 0;
234    ti->path = eina_stringshare_add(buf);
235    ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
236                                             NULL);
237 }
238
239 static void
240 _prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
241 {
242    Testitem *ti;
243    Evas_Object *grid = data;
244    char buf[PATH_MAX];
245
246    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
247    ti = malloc(sizeof(*ti));
248    ti->mode = 0;
249    ti->path = eina_stringshare_add(buf);
250    ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
251 }
252
253 static void
254 _append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
255 {
256    Testitem *ti;
257    Evas_Object *grid = data;
258    char buf[PATH_MAX];
259
260    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
261    ti = malloc(sizeof(*ti));
262    ti->mode = 0;
263    ti->path = eina_stringshare_add(buf);
264    ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
265 }
266
267 static void
268 _size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
269 {
270    Evas_Object *grid = data;
271    int size = elm_spinner_value_get(obj);
272    elm_gengrid_item_size_set(grid, size, size);
273 }
274
275 void
276 test_gengrid2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
277 {
278    Evas_Object *win, *bg, *grid, *bx, *hbx, *bt, *ck;
279
280    win = elm_win_add(NULL, "gengrid2", ELM_WIN_BASIC);
281    elm_win_title_set(win, "GenGrid2");
282    elm_win_autodel_set(win, 1);
283
284    bg = elm_bg_add(win);
285    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
286    elm_win_resize_object_add(win, bg);
287    evas_object_show(bg);
288
289    bx = elm_box_add(win);
290    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
291    elm_win_resize_object_add(win, bx);
292    evas_object_show(bx);
293
294    grid = elm_gengrid_add(win);
295    elm_gengrid_item_size_set(grid, 150, 150);
296    elm_gengrid_horizontal_set(grid, EINA_FALSE);
297    elm_gengrid_multi_select_set(grid, EINA_FALSE);
298    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
299    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
300    evas_object_size_hint_min_set(grid, 600, 500);
301    elm_box_pack_end(bx, grid);
302    evas_object_show(grid);
303
304    hbx = elm_box_add(win);
305    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
306    elm_box_horizontal_set(hbx, EINA_TRUE);
307    elm_box_pack_end(bx, hbx);
308    evas_object_show(hbx);
309
310    bt = elm_button_add(win);
311    elm_button_label_set(bt, "Append");
312    evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
313    elm_box_pack_end(hbx, bt);
314    evas_object_show(bt);
315
316    bt = elm_button_add(win);
317    elm_button_label_set(bt, "Prepend");
318    evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
319    elm_box_pack_end(hbx, bt);
320    evas_object_show(bt);
321
322    bt = elm_button_add(win);
323    elm_button_label_set(bt, "Insert before");
324    evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
325    elm_box_pack_end(hbx, bt);
326    evas_object_show(bt);
327
328    bt = elm_button_add(win);
329    elm_button_label_set(bt, "Insert after");
330    evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
331    elm_box_pack_end(hbx, bt);
332    evas_object_show(bt);
333
334    bt = elm_spinner_add(win);
335    elm_spinner_min_max_set(bt, 10, 1024);
336    elm_spinner_value_set(bt, 150);
337    elm_spinner_label_format_set(bt, "Item size: %.0f");
338    evas_object_smart_callback_add(bt, "changed", _size_changed, grid);
339    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
340    elm_box_pack_end(hbx, bt);
341    evas_object_show(bt);
342
343    ck = elm_check_add(win);
344    elm_check_label_set(ck, "Horizontal Mode");
345    evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
346    elm_box_pack_end(hbx, ck);
347    evas_object_show(ck);
348
349    gic.item_style = "default";
350    gic.func.label_get = grid_label_get;
351    gic.func.icon_get = grid_icon_get;
352    gic.func.state_get = grid_state_get;
353    gic.func.del = grid_del;
354
355    evas_object_resize(win, 600, 600);
356    evas_object_show(win);
357 }
358 #endif