Merge remote-tracking branch 'remotes/origin/upstream'
[framework/uifw/elementary.git] / src / bin / test_gengrid.c
1 #include <Elementary.h>
2 <<<<<<< HEAD
3 =======
4 #include <Elementary_Cursor.h>
5 #include "test.h"
6 >>>>>>> remotes/origin/upstream
7 #ifdef HAVE_CONFIG_H
8 # include "elementary_config.h"
9 #endif
10 #ifndef ELM_LIB_QUICKLAUNCH
11 <<<<<<< HEAD
12 =======
13
14 static Elm_Gengrid_Item_Class *gic;
15 static Elm_Gengrid_Item_Class ggic;
16
17 Evas_Object *grid_content_get(void *data, Evas_Object *obj, const char *part);
18 char *grid_text_get(void *data, Evas_Object *obj __UNUSED__,
19                     const char *part __UNUSED__);
20 Eina_Bool grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__,
21                          const char *part __UNUSED__);
22 void grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__);
23
24 >>>>>>> remotes/origin/upstream
25 typedef struct _Testitem
26 {
27    Elm_Object_Item *item;
28    const char *path;
29    int mode;
30    int onoff;
31 } Testitem;
32
33 <<<<<<< HEAD
34 =======
35 struct _api_data
36 {
37    unsigned int state;  /* What state we are testing       */
38    Evas_Object *box;           /* Use this to get box content     */
39    Evas_Object *grid;
40 };
41 typedef struct _api_data api_data;
42
43 enum _api_state
44 {
45    GRID_ALIGN_SET,
46    GRID_BRING_IN,
47    GRID_NO_SELECT_MODE,
48    GRID_NO_BOUNCE,
49    GRID_PAGE_RELATIVE,
50    GRID_PAGE_SIZE,
51    GRID_TOOLTIP_SET_TEXT,
52    GRID_TOOLTIP_UNSET,
53    GRID_ITEM_CLASS_SET,
54    GRID_ITEM_UPDATE_SET,
55    GRID_PAGE_BRING_IN,
56    GRID_PAGE_SHOW,
57    GRID_TOOLTIP_CONTENT_CB,
58    GRID_TOOLTIP_STYLE_SET,
59    GRID_TOOLTIP_WINDOW_MODE_SET,
60    API_STATE_LAST
61 };
62 typedef enum _api_state api_state;
63
64 static void
65 set_api_state(api_data *api)
66 {
67    Evas_Object *grid = api->box;
68
69    /* use elm_box_children_get() to get list of children */
70    switch(api->state)
71      { /* Put all api-changes under switch */
72       case GRID_ALIGN_SET: /* 0 */
73          elm_gengrid_align_set(grid, 0.2, 0.8);
74          break;
75
76       case GRID_BRING_IN: /* 1 */
77          elm_gengrid_item_bring_in(elm_gengrid_first_item_get(grid), ELM_GENGRID_ITEM_SCROLLTO_IN);
78          break;
79
80       case GRID_NO_SELECT_MODE: /* 2 */
81          elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_NONE);
82          break;
83
84       case GRID_NO_BOUNCE: /* 3 */
85          elm_gengrid_bounce_set(grid, EINA_TRUE, EINA_FALSE);
86          break;
87
88       case GRID_PAGE_RELATIVE: /* 4 */
89          elm_gengrid_bounce_set(grid, EINA_TRUE, EINA_TRUE);
90          elm_gengrid_page_relative_set(grid, 0.5, 0.5);
91          break;
92
93       case GRID_PAGE_SIZE: /* 5 */
94          elm_gengrid_page_size_set(grid, 50, 25);
95          break;
96
97       case GRID_TOOLTIP_SET_TEXT: /* 6 */
98            {
99               Elm_Object_Item *item = elm_gengrid_first_item_get(grid);
100               elm_gengrid_item_tooltip_text_set(item, "This is the first item");
101            }
102          break;
103
104       case GRID_TOOLTIP_UNSET: /* 7 */
105            {
106               Elm_Object_Item *item = elm_gengrid_first_item_get(grid);
107               elm_gengrid_item_tooltip_unset(item);
108            }
109          break;
110
111       case API_STATE_LAST:
112          break;
113
114       default:
115          return;
116      }
117 }
118
119 static void
120 _api_bt_clicked(void *data, Evas_Object *obj, void *event_info __UNUSED__)
121 {  /* Will add here a SWITCH command containing code to modify test-object */
122    /* in accordance a->state value. */
123    api_data *a = data;
124    char str[128];
125
126    printf("clicked event on API Button: api_state=<%d>\n", a->state);
127    set_api_state(a);
128    a->state++;
129    sprintf(str, "Next API function (%u)", a->state);
130    elm_object_text_set(obj, str);
131    elm_object_disabled_set(obj, a->state == API_STATE_LAST);
132 }
133
134 >>>>>>> remotes/origin/upstream
135 static const char *img[9] =
136 {
137    "panel_01.jpg",
138    "plant_01.jpg",
139    "rock_01.jpg",
140    "rock_02.jpg",
141    "sky_01.jpg",
142    "sky_02.jpg",
143    "sky_03.jpg",
144    "sky_04.jpg",
145    "wood_01.jpg",
146 };
147
148 <<<<<<< HEAD
149 static Elm_Gengrid_Item_Class gic, ggic;
150
151 =======
152 static const char *cur[4] =
153 {
154    ELM_CURSOR_CIRCLE,
155    ELM_CURSOR_CLOCK,
156    ELM_CURSOR_COFFEE_MUG,
157    ELM_CURSOR_CROSS,
158 };
159
160 static int n_current_pic = 0;
161 >>>>>>> remotes/origin/upstream
162 static void
163 _horizontal_grid(void *data, Evas_Object *obj, void *event_info __UNUSED__)
164 {
165    Evas_Object *grid = data;
166    elm_gengrid_horizontal_set(grid, elm_check_state_get(obj));
167 }
168
169 static void
170 grid_drag_up(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
171 {
172    printf("Drag up: %p\n", event_info);
173 }
174
175 static void
176 grid_drag_right(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
177 {
178    printf("Drag right: %p\n", event_info);
179 }
180
181 static void
182 grid_drag_down(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
183 {
184    printf("Drag down: %p\n", event_info);
185 }
186
187 static void
188 grid_drag_left(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
189 {
190    printf("Drag left: %p\n", event_info);
191 }
192
193 static void
194 grid_drag_stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
195 {
196    printf("Drag stop: %p\n", event_info);
197 }
198
199 static void
200 grid_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
201 {
202    printf("Selected: %p\n", event_info);
203 }
204
205 static void
206 grid_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
207 {
208    printf("Double clicked: %p\n", event_info);
209 }
210
211 static void
212 grid_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
213 {
214    printf("longpress %p\n", event_info);
215 }
216
217 static void
218 grid_moved(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
219 {
220    printf("moved %p\n", event_info);
221 }
222
223 static void
224 grid_item_check_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
225 {
226    Testitem *ti = data;
227    ti->onoff = elm_check_state_get(obj);
228    printf("item %p onoff = %i\n", ti, ti->onoff);
229 }
230
231 char *
232 grid_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
233 {
234    const Testitem *ti = data;
235    char buf[256];
236    snprintf(buf, sizeof(buf), "Photo %s", ti->path);
237    return strdup(buf);
238 }
239
240 Evas_Object *
241 grid_content_get(void *data, Evas_Object *obj, const char *part)
242 {
243    const Testitem *ti = data;
244    if (!strcmp(part, "elm.swallow.icon"))
245      {
246 <<<<<<< HEAD
247
248         Evas_Object *icon = elm_bg_add(obj);
249         elm_bg_file_set(icon, ti->path, NULL);
250         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
251         evas_object_show(icon);
252         return icon;
253      }
254    else if (!strcmp(part, "elm.swallow.end"))
255      {
256         Evas_Object *ck;
257         ck = elm_check_add(obj);
258         evas_object_propagate_events_set(ck, 0);
259         elm_check_state_set(ck, ti->onoff);
260         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
261         evas_object_show(ck);
262         return ck;
263 =======
264         Evas_Object *icon = elm_bg_add(obj);
265         elm_bg_file_set(icon, ti->path, NULL);
266         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
267         evas_object_show(icon);
268         return icon;
269      }
270    else if (!strcmp(part, "elm.swallow.end"))
271      {
272         Evas_Object *ck;
273         ck = elm_check_add(obj);
274         evas_object_propagate_events_set(ck, 0);
275         elm_check_state_set(ck, ti->onoff);
276         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
277         evas_object_show(ck);
278         return ck;
279 >>>>>>> remotes/origin/upstream
280      }
281    return NULL;
282 }
283
284 Eina_Bool
285 grid_state_get(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
286 {
287    return EINA_FALSE;
288 }
289
290 void
291 grid_del(void *data __UNUSED__, Evas_Object *obj __UNUSED__)
292 {
293 }
294
295 static void
296 grid_sel(void *data, Evas_Object *obj, void *event_info)
297 {
298    printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info);
299 }
300
301 <<<<<<< HEAD
302 void
303 test_gengrid(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
304 {
305    Evas_Object *win, *bg, *grid;
306 =======
307 static void
308 _cleanup_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
309 {
310    free(data);
311 }
312
313 static void
314 always_select_mode_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
315 {
316    api_data *api = data;
317    if (elm_check_state_get(obj))
318      elm_gengrid_highlight_mode_set(api->grid, ELM_OBJECT_SELECT_MODE_ALWAYS);
319    else
320      elm_gengrid_highlight_mode_set(api->grid, ELM_OBJECT_SELECT_MODE_DEFAULT);
321 }
322
323 static void
324 multi_select_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
325 {
326    api_data *api = data;
327    elm_gengrid_multi_select_set(api->grid, elm_check_state_get(obj));
328 }
329
330 static void
331 clear_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
332 {
333    api_data *api = data;
334    elm_gengrid_clear(api->grid);
335 }
336
337 static Evas_Object *
338 create_gengrid(Evas_Object *obj, int items)
339 {
340    Evas_Object *grid = NULL;
341 >>>>>>> remotes/origin/upstream
342    static Testitem ti[144];
343    int i, n;
344    char buf[PATH_MAX];
345
346 <<<<<<< HEAD
347    win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
348    elm_win_title_set(win, "GenGrid");
349    elm_win_autodel_set(win, EINA_TRUE);
350
351    bg = elm_bg_add(win);
352    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
353    elm_win_resize_object_add(win, bg);
354    evas_object_show(bg);
355
356    grid = elm_gengrid_add(win);
357 =======
358    grid = elm_gengrid_add(obj);
359 >>>>>>> remotes/origin/upstream
360    elm_gengrid_item_size_set(grid, 150, 150);
361    elm_gengrid_horizontal_set(grid, EINA_FALSE);
362    elm_gengrid_multi_select_set(grid, EINA_TRUE);
363    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
364    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
365    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
366    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
367    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
368    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
369    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
370    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
371    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
372    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
373    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
374 <<<<<<< HEAD
375
376    gic.item_style = "default";
377    gic.func.text_get = grid_text_get;
378    gic.func.content_get = grid_content_get;
379    gic.func.state_get = grid_state_get;
380    gic.func.del = grid_del;
381
382    n = 0;
383    for (i = 0; i < 12 * 12; i++)
384      {
385         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
386         n = (n + 1) % 9;
387         ti[i].mode = i;
388         ti[i].path = eina_stringshare_add(buf);
389         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
390         if (!(i % 5))
391           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
392      }
393
394    evas_object_show(grid);
395    elm_win_resize_object_add(win, grid);
396 =======
397    evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
398
399    gic = elm_gengrid_item_class_new();
400    gic->item_style = "default";
401    gic->func.text_get = grid_text_get;
402    gic->func.content_get = grid_content_get;
403    gic->func.state_get = grid_state_get;
404    gic->func.del = grid_del;
405
406    n = 0;
407    for (i = 0; i < items; i++)
408      {
409         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
410         n = (n + 1) % 9;
411         ti[i].mode = i;
412         ti[i].path = eina_stringshare_add(buf);
413         ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL);
414         if (!(i % 5))
415           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
416      }
417    elm_gengrid_item_class_free(gic);
418
419    return grid;
420 }
421
422 static void
423 restore_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
424 {
425    api_data *api = data;
426    elm_box_clear(api->box);
427    api->grid = create_gengrid(obj, (12 * 12));
428    elm_box_pack_end(api->box, api->grid);
429    evas_object_show(api->grid);
430 }
431
432 static void
433 filled_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
434 {
435    Evas_Object *box = (Evas_Object *)data;
436    Evas_Object *grid;
437
438    elm_box_clear(box);
439    grid = create_gengrid(box, 1);
440    elm_gengrid_filled_set(grid, elm_check_state_get(obj));
441    elm_box_pack_end(box, grid);
442    evas_object_show(grid);
443 }
444
445 static void
446 filled_bt_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
447 {
448    Evas_Object *win, *box, *content_box, *grid, *tg;
449
450    win = elm_win_util_standard_add("test filled", "Test Filled");
451    elm_win_autodel_set(win, EINA_TRUE);
452
453    box = elm_box_add(win);
454    elm_win_resize_object_add(win, box);
455    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
456    evas_object_show(box);
457
458    content_box = elm_box_add(win);
459    elm_win_resize_object_add(win, content_box);
460    evas_object_size_hint_weight_set(content_box, EVAS_HINT_EXPAND,
461                                     EVAS_HINT_EXPAND);
462    evas_object_size_hint_align_set(content_box, EVAS_HINT_FILL,
463                                    EVAS_HINT_FILL);
464    elm_box_pack_end(box, content_box);
465    evas_object_show(content_box);
466
467    grid = create_gengrid(win, 1);
468    elm_box_pack_end(content_box, grid);
469    evas_object_show(grid);
470
471    tg = elm_check_add(win);
472    elm_object_text_set(tg, "Filled");
473    evas_object_smart_callback_add(tg, "changed", filled_cb, content_box);
474    elm_box_pack_end(box, tg);
475    evas_object_show(tg);
476
477    evas_object_resize(win, 450, 200);
478    evas_object_show(win);
479 }
480
481 static void
482 cursor_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
483 {
484    Evas_Object *grid = (Evas_Object *)data;
485    Elm_Object_Item *item = NULL;
486    int i = 0;
487
488    for ((item = elm_gengrid_first_item_get(grid)); item;
489         (item = elm_gengrid_item_next_get(item)))
490      {
491         if(!elm_check_state_get(obj))
492           {
493              elm_gengrid_item_cursor_unset(item);
494              continue;
495           }
496
497         elm_gengrid_item_cursor_set(item, cur[i]);
498         elm_gengrid_item_cursor_engine_only_set(item, EINA_FALSE);
499         i++;
500      }
501 }
502
503 static void
504 cursor_bt_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
505 {
506    Evas_Object *win, *box, *content_box, *hbox, *grid, *tg;
507
508    win = elm_win_util_standard_add("test cursor", "Test Cursor");
509    elm_win_autodel_set(win, EINA_TRUE);
510
511    box = elm_box_add(win);
512    elm_win_resize_object_add(win, box);
513    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
514    evas_object_show(box);
515
516    content_box = elm_box_add(win);
517    elm_win_resize_object_add(win, content_box);
518    evas_object_size_hint_weight_set(content_box, EVAS_HINT_EXPAND,
519                                     EVAS_HINT_EXPAND);
520    evas_object_size_hint_align_set(content_box, EVAS_HINT_FILL,
521                                    EVAS_HINT_FILL);
522    elm_box_pack_end(box, content_box);
523    evas_object_show(content_box);
524
525    grid = create_gengrid(win, 4);
526    elm_box_pack_end(content_box, grid);
527    evas_object_show(grid);
528
529    hbox = elm_box_add(win);
530    elm_box_horizontal_set(hbox, EINA_TRUE);
531
532    tg = elm_check_add(win);
533    elm_object_text_set(tg, "Cursor");
534    evas_object_smart_callback_add(tg, "changed", cursor_cb, grid);
535    elm_box_pack_end(hbox, tg);
536    evas_object_show(tg);
537
538    elm_box_pack_end(box, hbox);
539    evas_object_show(hbox);
540
541    evas_object_resize(win, 450, 450);
542    evas_object_show(win);
543 }
544
545 void
546 test_gengrid(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
547 {
548    Evas_Object *win, *bg, *bt, *content_box, *bxx, *bx, *tg;
549    api_data *api = calloc(1, sizeof(api_data));
550
551    win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
552    elm_win_title_set(win, "GenGrid");
553    elm_win_autodel_set(win, EINA_TRUE);
554    evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _cleanup_cb, api);
555
556    bg = elm_bg_add(win);
557    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
558    elm_win_resize_object_add(win, bg);
559    evas_object_show(bg);
560
561    bxx = elm_box_add(win);
562    api->box = bxx;
563    elm_win_resize_object_add(win, bxx);
564    evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
565    evas_object_show(bxx);
566
567    content_box = elm_box_add(win);
568    api->box = content_box;
569    evas_object_size_hint_weight_set(content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
570    evas_object_size_hint_align_set(content_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
571    evas_object_show(content_box);
572
573    /* Create GenGrid */
574    api->grid = create_gengrid(win, (12 * 12));
575
576    bt = elm_button_add(win);
577    elm_object_text_set(bt, "Next API function");
578    evas_object_smart_callback_add(bt, "clicked", _api_bt_clicked,
579                                   (void *)api);
580    elm_box_pack_end(bxx, bt);
581    elm_object_disabled_set(bt, api->state == API_STATE_LAST);
582    evas_object_show(bt);
583
584    elm_box_pack_end(content_box, api->grid);
585    elm_box_pack_end(bxx, content_box);
586    evas_object_show(api->grid);
587
588    bx = elm_box_add(win);
589    elm_box_horizontal_set(bx, EINA_TRUE);
590    elm_box_pack_end(bxx, bx);
591    evas_object_show(bx);
592
593    /* Gengrid Always Select Mode Test */
594    tg = elm_check_add(win);
595    evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
596    evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
597    elm_object_text_set(tg, "Always Select Mode");
598    evas_object_smart_callback_add(tg, "changed", always_select_mode_cb,
599                                   (void *)api);
600    elm_box_pack_end(bx, tg);
601    evas_object_show(tg);
602
603    tg = elm_check_add(win);
604    evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
605    evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
606    elm_object_text_set(tg, "Multi Select Mode");
607    elm_check_state_set(tg, EINA_TRUE);
608    evas_object_smart_callback_add(tg, "changed", multi_select_cb,
609                                   (void *)api);
610    elm_box_pack_end(bx, tg);
611    evas_object_show(tg);
612
613    /* Gengrid Clear Test */
614    bt = elm_button_add(win);
615    elm_object_text_set(bt, "Clear");
616    evas_object_smart_callback_add(bt, "clicked", clear_bt_clicked,
617                                   (void *)api);
618    elm_box_pack_end(bx, bt);
619    evas_object_show(bt);
620
621    bt = elm_button_add(win);
622    elm_object_text_set(bt, "Restore");
623    evas_object_smart_callback_add(bt, "clicked", restore_bt_clicked,
624                                   (void *) api);
625    elm_box_pack_end(bx, bt);
626    evas_object_show(bt);
627
628    /* Gengrid Filled Test */
629    bt = elm_button_add(win);
630    elm_object_text_set(bt, "Check Filled");
631    evas_object_smart_callback_add(bt, "clicked", filled_bt_clicked, NULL);
632    elm_box_pack_end(bx, bt);
633    evas_object_show(bt);
634
635    /* Item Cursor Test */
636    bt = elm_button_add(win);
637    elm_object_text_set(bt, "Check Cursor");
638    evas_object_smart_callback_add(bt, "clicked", cursor_bt_clicked,
639                                   (void *) api);
640    elm_box_pack_end(bx, bt);
641    evas_object_show(bt);
642 >>>>>>> remotes/origin/upstream
643
644    evas_object_resize(win, 600, 600);
645    evas_object_show(win);
646 }
647
648 static void
649 _before_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
650 {
651    Testitem *ti;
652    Evas_Object *grid = data;
653    Elm_Object_Item *sel;
654    char buf[PATH_MAX];
655
656    sel = elm_gengrid_selected_item_get(grid);
657    if (!sel)
658        return;
659 <<<<<<< HEAD
660    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
661    ti = malloc(sizeof(*ti));
662    ti->mode = 0;
663    ti->path = eina_stringshare_add(buf);
664    ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
665 =======
666    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n_current_pic]);
667    n_current_pic = ((n_current_pic +1) % 9);
668    ti = calloc(1, sizeof(*ti));
669    ti->mode = 0;
670    ti->path = eina_stringshare_add(buf);
671    ti->item = elm_gengrid_item_insert_before(grid, gic, ti, sel, grid_sel,
672                                              NULL);
673 }
674
675 static int
676 compare_cb(const void *data1, const void *data2)
677 {
678    Testitem *ti1 = (Testitem *)data1;
679    Testitem *ti2 = (Testitem *)data2;
680    return strlen(ti1->path) - strlen(ti2->path);
681 }
682
683 static void
684 _sorted_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
685 {
686    Testitem *ti;
687    Evas_Object *grid = data;
688    char buf[PATH_MAX];
689
690    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n_current_pic]);
691    n_current_pic = ((n_current_pic +1) % 9);
692    ti = calloc(1, sizeof(*ti));
693    ti->mode = 0;
694    ti->path = eina_stringshare_add(buf);
695    ti->item = elm_gengrid_item_sorted_insert(grid, gic, ti, compare_cb, grid_sel,
696 >>>>>>> remotes/origin/upstream
697                                              NULL);
698 }
699
700 static void
701 _after_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
702 {
703    Testitem *ti;
704    Evas_Object *grid = data;
705    Elm_Object_Item *sel;
706    char buf[PATH_MAX];
707
708    sel = elm_gengrid_selected_item_get(grid);
709    if (!sel)
710        return;
711 <<<<<<< HEAD
712    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
713    ti = malloc(sizeof(*ti));
714    ti->mode = 0;
715    ti->path = eina_stringshare_add(buf);
716    ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
717 =======
718    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n_current_pic]);
719    n_current_pic = ((n_current_pic +1) % 9);
720    ti = calloc(1, sizeof(*ti));
721    ti->mode = 0;
722    ti->path = eina_stringshare_add(buf);
723    ti->item = elm_gengrid_item_insert_after(grid, gic, ti, sel, grid_sel,
724 >>>>>>> remotes/origin/upstream
725                                             NULL);
726 }
727
728 static void
729 _delete_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
730 {
731    Evas_Object *grid = data;
732    Eina_List *l, *l2, *l3;
733    Elm_Object_Item *gg_it;
734
735    l = (Eina_List*)elm_gengrid_selected_items_get(grid);
736    if (!l) return;
737    EINA_LIST_FOREACH_SAFE(l, l2, l3, gg_it)
738      elm_object_item_del(gg_it);
739 }
740
741 static void
742 _prepend_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
743 {
744    Testitem *ti;
745    Evas_Object *grid = data;
746    char buf[PATH_MAX];
747
748 <<<<<<< HEAD
749    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
750    ti = malloc(sizeof(*ti));
751    ti->mode = 0;
752    ti->path = eina_stringshare_add(buf);
753    ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
754 =======
755    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n_current_pic]);
756    n_current_pic = ((n_current_pic +1) % 9);
757    ti = calloc(1, sizeof(*ti));
758    ti->mode = 0;
759    ti->path = eina_stringshare_add(buf);
760    ti->item = elm_gengrid_item_prepend(grid, gic, ti, grid_sel, NULL);
761 >>>>>>> remotes/origin/upstream
762 }
763
764 static void
765 _append_bt_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
766 {
767    Testitem *ti;
768    Evas_Object *grid = data;
769    char buf[PATH_MAX];
770
771 <<<<<<< HEAD
772    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[rand() % 9]);
773    ti = malloc(sizeof(*ti));
774    ti->mode = 0;
775    ti->path = eina_stringshare_add(buf);
776    ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
777 =======
778    snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n_current_pic]);
779    n_current_pic = ((n_current_pic +1) % 9);
780    ti = calloc(1, sizeof(*ti));
781    ti->mode = 0;
782    ti->path = eina_stringshare_add(buf);
783    ti->item = elm_gengrid_item_append(grid, gic, ti, grid_sel, NULL);
784 >>>>>>> remotes/origin/upstream
785 }
786
787 static void
788 _size_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__)
789 {
790    Evas_Object *grid = data;
791    int size = elm_spinner_value_get(obj);
792    elm_gengrid_item_size_set(grid, size, size);
793 }
794
795 void
796 test_gengrid2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
797 {
798    Evas_Object *win, *bg, *grid, *bx, *hbx, *bt, *ck;
799
800    win = elm_win_add(NULL, "gengrid2", ELM_WIN_BASIC);
801    elm_win_title_set(win, "GenGrid2");
802    elm_win_autodel_set(win, EINA_TRUE);
803
804    bg = elm_bg_add(win);
805    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
806    elm_win_resize_object_add(win, bg);
807    evas_object_show(bg);
808
809    bx = elm_box_add(win);
810    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
811    elm_win_resize_object_add(win, bx);
812    evas_object_show(bx);
813
814    grid = elm_gengrid_add(win);
815    elm_gengrid_item_size_set(grid, 150, 150);
816    elm_gengrid_horizontal_set(grid, EINA_FALSE);
817    elm_gengrid_multi_select_set(grid, EINA_FALSE);
818    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
819    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
820    evas_object_size_hint_min_set(grid, 600, 500);
821    elm_box_pack_end(bx, grid);
822    evas_object_show(grid);
823
824    hbx = elm_box_add(win);
825    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
826    elm_box_horizontal_set(hbx, EINA_TRUE);
827    elm_box_pack_end(bx, hbx);
828    evas_object_show(hbx);
829
830    bt = elm_button_add(win);
831    elm_object_text_set(bt, "Append");
832    evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
833    elm_box_pack_end(hbx, bt);
834    evas_object_show(bt);
835
836    bt = elm_button_add(win);
837    elm_object_text_set(bt, "Prepend");
838    evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
839    elm_box_pack_end(hbx, bt);
840    evas_object_show(bt);
841
842    bt = elm_button_add(win);
843    elm_object_text_set(bt, "Insert before");
844    evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
845    elm_box_pack_end(hbx, bt);
846    evas_object_show(bt);
847
848    bt = elm_button_add(win);
849    elm_object_text_set(bt, "Insert after");
850    evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
851    elm_box_pack_end(hbx, bt);
852    evas_object_show(bt);
853
854    bt = elm_button_add(win);
855 <<<<<<< HEAD
856 =======
857    elm_object_text_set(bt, "Sorted insert");
858    evas_object_smart_callback_add(bt, "clicked", _sorted_bt_clicked, grid);
859    elm_box_pack_end(hbx, bt);
860    evas_object_show(bt);
861
862    bt = elm_button_add(win);
863 >>>>>>> remotes/origin/upstream
864    elm_object_text_set(bt, "Delete");
865    evas_object_smart_callback_add(bt, "clicked", _delete_bt_clicked, grid);
866    elm_box_pack_end(hbx, bt);
867    evas_object_show(bt);
868
869    bt = elm_spinner_add(win);
870    elm_spinner_min_max_set(bt, 10, 1024);
871    elm_spinner_value_set(bt, 150);
872    elm_spinner_label_format_set(bt, "Item size: %.0f");
873    evas_object_smart_callback_add(bt, "changed", _size_changed, grid);
874    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
875    elm_box_pack_end(hbx, bt);
876    evas_object_show(bt);
877
878    ck = elm_check_add(win);
879    elm_object_text_set(ck, "Horizontal Mode");
880    evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
881    elm_box_pack_end(hbx, ck);
882    evas_object_show(ck);
883
884 <<<<<<< HEAD
885    gic.item_style = "default";
886    gic.func.text_get = grid_text_get;
887    gic.func.content_get = grid_content_get;
888    gic.func.state_get = grid_state_get;
889    gic.func.del = grid_del;
890 =======
891    gic = elm_gengrid_item_class_new();
892
893    gic->item_style = "default";
894    gic->func.text_get = grid_text_get;
895    gic->func.content_get = grid_content_get;
896    gic->func.state_get = grid_state_get;
897    gic->func.del = grid_del;
898
899    /* item_class_ref is needed for gic. some items can be added in callbacks */
900    elm_gengrid_item_class_ref(gic);
901    elm_gengrid_item_class_free(gic);
902 >>>>>>> remotes/origin/upstream
903
904    evas_object_resize(win, 600, 600);
905    evas_object_show(win);
906 }
907
908 void
909 test_gengrid3(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
910 {
911    Evas_Object *win, *bg, *grid;
912    static Testitem ti[144];
913    int i, n;
914    char buf[PATH_MAX];
915
916    win = elm_win_add(NULL, "gengrid_group", ELM_WIN_BASIC);
917    elm_win_title_set(win, "GenGrid Group");
918    elm_win_autodel_set(win, EINA_TRUE);
919
920    bg = elm_bg_add(win);
921    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
922    elm_win_resize_object_add(win, bg);
923    evas_object_show(bg);
924
925    grid = elm_gengrid_add(win);
926    elm_gengrid_item_size_set(grid, 150, 150);
927    elm_gengrid_group_item_size_set(grid, 31, 31);
928    //elm_gengrid_horizontal_set(grid, EINA_TRUE);
929    elm_gengrid_horizontal_set(grid, EINA_FALSE);
930    elm_gengrid_multi_select_set(grid, EINA_TRUE);
931    elm_gengrid_reorder_mode_set(grid, EINA_TRUE);
932    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
933    evas_object_smart_callback_add(grid, "clicked,double", grid_double_clicked, NULL);
934    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
935    evas_object_smart_callback_add(grid, "moved", grid_moved, NULL);
936    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
937    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
938    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
939    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
940    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
941    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
942
943 <<<<<<< HEAD
944    gic.item_style = "default";
945    gic.func.text_get = grid_text_get;
946    gic.func.content_get = grid_content_get;
947    gic.func.state_get = grid_state_get;
948    gic.func.del = grid_del;
949 =======
950    gic = elm_gengrid_item_class_new();
951    gic->item_style = "default";
952    gic->func.text_get = grid_text_get;
953    gic->func.content_get = grid_content_get;
954    gic->func.state_get = grid_state_get;
955    gic->func.del = grid_del;
956 >>>>>>> remotes/origin/upstream
957
958    ggic.item_style = "group_index";
959    ggic.func.text_get = grid_text_get;
960    ggic.func.content_get = NULL;
961    ggic.func.state_get = NULL;
962    ggic.func.del = NULL;
963
964 <<<<<<< HEAD
965
966    n = 0;
967    for (i = 0; i < 12 * 12; i++)
968      {
969         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
970         n = (n + 1) % 9;
971         ti[i].mode = i;
972         ti[i].path = eina_stringshare_add(buf);
973         if (i == 0 || i == 18 || i == 53 || i == 100)
974         //if (i == 0 || i == 18)
975           ti[i].item = elm_gengrid_item_append(grid, &ggic, &(ti[i]), grid_sel, NULL);
976         else
977           ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
978         if (!(i % 5))
979           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
980      }
981 =======
982    n = 0;
983    for (i = 0; i < 12 * 12; i++)
984      {
985         snprintf(buf, sizeof(buf), "%s/images/%s", elm_app_data_dir_get(), img[n]);
986         n = (n + 1) % 9;
987         ti[i].mode = i;
988         ti[i].path = eina_stringshare_add(buf);
989         if (i == 0 || i == 18 || i == 53 || i == 100)
990           //if (i == 0 || i == 18)
991           ti[i].item = elm_gengrid_item_append(grid, &ggic, &(ti[i]), grid_sel, NULL);
992         else
993           ti[i].item = elm_gengrid_item_append(grid, gic, &(ti[i]), grid_sel, NULL);
994         if (!(i % 5))
995           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
996      }
997    elm_gengrid_item_class_free(gic);
998 >>>>>>> remotes/origin/upstream
999
1000    evas_object_show(grid);
1001    elm_win_resize_object_add(win, grid);
1002
1003    evas_object_resize(win, 600, 600);
1004    evas_object_show(win);
1005 }
1006
1007 #endif