move elementary to trunk base. out of TMP/st.
[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, "grid", ELM_WIN_BASIC);
153    elm_win_title_set(win, "Grid");
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    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
166    evas_object_smart_callback_add(grid, "clicked", grid_clicked, NULL);
167    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
168    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
169    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
170    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
171    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
172    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
173    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
174
175    gic.item_style = "default";
176    gic.func.label_get = grid_label_get;
177    gic.func.icon_get = grid_icon_get;
178    gic.func.state_get = grid_state_get;
179    gic.func.del = grid_del;
180
181    n = 0;
182    for (i = 0; i < 12 * 12; i++)
183      {
184         snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[n]);
185         n = (n + 1) % 9;
186         ti[i].mode = i;
187         ti[i].path = eina_stringshare_add(buf);
188         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
189         if (!(i % 5))
190           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
191      }
192
193    evas_object_show(grid);
194    elm_win_resize_object_add(win, grid);
195
196    evas_object_resize(win, 600, 600);
197    evas_object_show(win);
198 }
199
200 static void
201 _before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
202 {
203    Testitem *ti;
204    Evas_Object *grid = data;
205    Elm_Gengrid_Item *sel;
206    char buf[PATH_MAX];
207
208    sel = elm_gengrid_selected_item_get(grid);
209    if (!sel)
210        return;
211    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
212    ti = malloc(sizeof(*ti));
213    ti->mode = 0;
214    ti->path = eina_stringshare_add(buf);
215    ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
216                                              NULL);
217 }
218
219 static void
220 _after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
221 {
222    Testitem *ti;
223    Evas_Object *grid = data;
224    Elm_Gengrid_Item *sel;
225    char buf[PATH_MAX];
226
227    sel = elm_gengrid_selected_item_get(grid);
228    if (!sel)
229        return;
230    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
231    ti = malloc(sizeof(*ti));
232    ti->mode = 0;
233    ti->path = eina_stringshare_add(buf);
234    ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
235                                             NULL);
236 }
237
238 static void
239 _prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
240 {
241    Testitem *ti;
242    Evas_Object *grid = data;
243    char buf[PATH_MAX];
244
245    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
246    ti = malloc(sizeof(*ti));
247    ti->mode = 0;
248    ti->path = eina_stringshare_add(buf);
249    ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
250 }
251
252 static void
253 _append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
254 {
255    Testitem *ti;
256    Evas_Object *grid = data;
257    char buf[PATH_MAX];
258
259    snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
260    ti = malloc(sizeof(*ti));
261    ti->mode = 0;
262    ti->path = eina_stringshare_add(buf);
263    ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
264 }
265
266 static void
267 _size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
268 {
269    Evas_Object *grid = data;
270    int size = elm_spinner_value_get(obj);
271    elm_gengrid_item_size_set(grid, size, size);
272 }
273
274 void
275 test_gengrid2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
276 {
277    Evas_Object *win, *bg, *grid, *bx, *hbx, *bt, *ck;
278
279    win = elm_win_add(NULL, "grid2", ELM_WIN_BASIC);
280    elm_win_title_set(win, "Grid2");
281    elm_win_autodel_set(win, 1);
282
283    bg = elm_bg_add(win);
284    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
285    elm_win_resize_object_add(win, bg);
286    evas_object_show(bg);
287
288    bx = elm_box_add(win);
289    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
290    elm_win_resize_object_add(win, bx);
291    evas_object_show(bx);
292
293    grid = elm_gengrid_add(win);
294    elm_gengrid_item_size_set(grid, 150, 150);
295    elm_gengrid_horizontal_set(grid, EINA_FALSE);
296    elm_gengrid_multi_select_set(grid, EINA_FALSE);
297    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
298    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
299    evas_object_size_hint_min_set(grid, 600, 500);
300    elm_box_pack_end(bx, grid);
301    evas_object_show(grid);
302
303    hbx = elm_box_add(win);
304    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
305    elm_box_horizontal_set(hbx, EINA_TRUE);
306    elm_box_pack_end(bx, hbx);
307    evas_object_show(hbx);
308
309    bt = elm_button_add(win);
310    elm_button_label_set(bt, "Append");
311    evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
312    elm_box_pack_end(hbx, bt);
313    evas_object_show(bt);
314
315    bt = elm_button_add(win);
316    elm_button_label_set(bt, "Prepend");
317    evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
318    elm_box_pack_end(hbx, bt);
319    evas_object_show(bt);
320
321    bt = elm_button_add(win);
322    elm_button_label_set(bt, "Insert before");
323    evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
324    elm_box_pack_end(hbx, bt);
325    evas_object_show(bt);
326
327    bt = elm_button_add(win);
328    elm_button_label_set(bt, "Insert after");
329    evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
330    elm_box_pack_end(hbx, bt);
331    evas_object_show(bt);
332
333    bt = elm_spinner_add(win);
334    elm_spinner_min_max_set(bt, 10, 1024);
335    elm_spinner_value_set(bt, 150);
336    elm_spinner_label_format_set(bt, "Item size: %.0f");
337    evas_object_smart_callback_add(bt, "changed", _size_changed, grid);
338    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
339    elm_box_pack_end(hbx, bt);
340    evas_object_show(bt);
341
342    ck = elm_check_add(win);
343    elm_check_label_set(ck, "Horizontal Mode");
344    evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
345    elm_box_pack_end(hbx, ck);
346    evas_object_show(ck);
347
348    gic.item_style = "default";
349    gic.func.label_get = grid_label_get;
350    gic.func.icon_get = grid_icon_get;
351    gic.func.state_get = grid_state_get;
352    gic.func.del = grid_del;
353
354    evas_object_resize(win, 600, 600);
355    evas_object_show(win);
356 }
357 #endif