Merge with EFL svn repo
[framework/uifw/elementary.git] / src / bin / test_gengrid.c
1 #include <Elementary.h>
2 #ifndef ELM_LIB_QUICKLAUNCH
3 typedef struct _Testitem
4 {
5    Elm_Gengrid_Item *item;
6    const char *path;
7    int mode;
8    int onoff;
9 } Testitem;
10
11 static Elm_Gengrid_Item_Class gic;
12
13 static void
14 grid_drag_up(void *data, Evas_Object *obj, void *event_info)
15 {
16    printf("Drag up: %p\n", event_info);
17 }
18
19 static void
20 grid_drag_right(void *data, Evas_Object *obj, void *event_info)
21 {
22    printf("Drag right: %p\n", event_info);
23 }
24
25 static void
26 grid_drag_down(void *data, Evas_Object *obj, void *event_info)
27 {
28    printf("Drag down: %p\n", event_info);
29 }
30
31 static void
32 grid_drag_left(void *data, Evas_Object *obj, void *event_info)
33 {
34    printf("Drag left: %p\n", event_info);
35 }
36
37 static void
38 grid_drag_stop(void *data, Evas_Object *obj, void *event_info)
39 {
40    printf("Drag stop: %p\n", event_info);
41 }
42
43 static void
44 grid_selected(void *data, Evas_Object *obj, void *event_info)
45 {
46    printf("Selected: %p\n", event_info);
47 }
48
49 static void
50 grid_clicked(void *data, Evas_Object *obj, void *event_info)
51 {
52    printf("Clicked: %p\n", event_info);
53 }
54
55 static void
56 grid_longpress(void *data, Evas_Object *obj, void *event_info)
57 {
58    printf("longpress %p\n", event_info);
59 }
60
61 static void
62 grid_item_check_changed(void *data, Evas_Object *obj, void *event_info)
63 {
64    Testitem *ti = data;
65    ti->onoff = elm_check_state_get(obj);
66    printf("item %p onoff = %i\n", ti, ti->onoff);
67 }
68
69 char *
70 grid_label_get(const void *data, Evas_Object *obj, const char *part)
71 {
72    const Testitem *ti = data;
73    char buf[256];
74    snprintf(buf, sizeof(buf), "Photo %s", ti->path);
75    return strdup(buf);
76 }
77
78 Evas_Object *
79 grid_icon_get(const void *data, Evas_Object *obj, const char *part)
80 {
81    const Testitem *ti = data;
82    if (!strcmp(part, "elm.swallow.icon"))
83      {
84
85         Evas_Object *icon = elm_bg_add(obj);
86         elm_bg_file_set(icon, ti->path, NULL);
87         evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
88         evas_object_show(icon);
89         return icon;
90      }
91    else if (!strcmp(part, "elm.swallow.end"))
92      {
93         Evas_Object *ck;
94         ck = elm_check_add(obj);
95         evas_object_propagate_events_set(ck, 0);
96         elm_check_state_set(ck, ti->onoff);
97         evas_object_smart_callback_add(ck, "changed", grid_item_check_changed, data);
98         evas_object_show(ck);
99         return ck;
100      }
101    return NULL;
102 }
103
104 Eina_Bool
105 grid_state_get(const void *data, Evas_Object *obj, const char *part)
106 {
107    return EINA_FALSE;
108 }
109
110 void
111 grid_del(const void *data, Evas_Object *obj)
112 {
113 }
114
115 static void
116 grid_sel(void *data, Evas_Object *obj, void *event_info)
117 {
118    printf("sel item data [%p] on grid obj [%p], pointer [%p]\n", data, obj, event_info);
119 }
120
121 void
122 test_gengrid(void *data, Evas_Object *obj, void *event_info)
123 {
124    Evas_Object *win, *bg, *grid;
125    static Testitem ti[144];
126    int i, j, n;
127    char buf[PATH_MAX];
128    const char *img[9] =
129      {
130         "panel_01.jpg",
131         "plant_01.jpg",
132         "rock_01.jpg",
133         "rock_02.jpg",
134         "sky_01.jpg",
135         "sky_02.jpg",
136         "sky_03.jpg",
137         "sky_04.jpg",
138         "wood_01.jpg",
139      };
140
141    win = elm_win_add(NULL, "grid", ELM_WIN_BASIC);
142    elm_win_title_set(win, "Grid");
143    elm_win_autodel_set(win, 1);
144
145    bg = elm_bg_add(win);
146    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
147    elm_win_resize_object_add(win, bg);
148    evas_object_show(bg);
149
150    grid = elm_gengrid_add(win);
151    elm_gengrid_item_size_set(grid, 150, 150);
152    elm_gengrid_horizontal_set(grid, EINA_FALSE);
153    elm_gengrid_multi_select_set(grid, EINA_TRUE);
154    evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
155    evas_object_smart_callback_add(grid, "clicked", grid_clicked, NULL);
156    evas_object_smart_callback_add(grid, "longpressed", grid_longpress, NULL);
157    evas_object_smart_callback_add(grid, "drag,start,up", grid_drag_up, NULL);
158    evas_object_smart_callback_add(grid, "drag,start,right", grid_drag_right, NULL);
159    evas_object_smart_callback_add(grid, "drag,start,down", grid_drag_down, NULL);
160    evas_object_smart_callback_add(grid, "drag,start,left", grid_drag_left, NULL);
161    evas_object_smart_callback_add(grid, "drag,stop", grid_drag_stop, NULL);
162    evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
163
164    gic.item_style = "default";
165    gic.func.label_get = grid_label_get;
166    gic.func.icon_get = grid_icon_get;
167    gic.func.state_get = grid_state_get;
168    gic.func.del = grid_del;
169
170    n = 0;
171    for (i = 0; i < 12 * 12; i++)
172      {
173         snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[n]);
174         n = (n + 1) % 9;
175         ti[i].mode = i;
176         ti[i].path = eina_stringshare_add(buf);
177         ti[i].item = elm_gengrid_item_append(grid, &gic, &(ti[i]), grid_sel, NULL);
178         if (!(i % 5))
179           elm_gengrid_item_selected_set(ti[i].item, EINA_TRUE);
180      }
181
182    evas_object_show(grid);
183    elm_win_resize_object_add(win, grid);
184
185    evas_object_resize(win, 600, 600);
186    evas_object_show(win);
187 }
188 #endif