package upload
[framework/uifw/elementary.git] / src / bin / test_naviframe_complex.c
1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4 #include <Elementary.h>
5 #ifndef ELM_LIB_QUICKLAUNCH
6
7 #define WEIGHT evas_object_size_hint_weight_set
8 #define ALIGN_ evas_object_size_hint_align_set
9 #define EXPAND(X) WEIGHT((X), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND)
10 #define FILL(X) ALIGN_((X), EVAS_HINT_FILL, EVAS_HINT_FILL)
11
12 #define BUTTON_TEXT_SET(BT, TEXT) \
13    elm_object_text_set((BT), (TEXT)); \
14    elm_object_tooltip_text_set((BT), (TEXT)); \
15    elm_object_tooltip_window_mode_set((BT), EINA_TRUE)
16
17 static const char *img1 = PACKAGE_DATA_DIR "/images/logo.png";
18 static const char *img2 = PACKAGE_DATA_DIR "/images/plant_01.jpg";
19 static const char *img3 = PACKAGE_DATA_DIR "/images/rock_01.jpg";
20 static const char *img4 = PACKAGE_DATA_DIR "/images/rock_02.jpg";
21 static const char *img5 = PACKAGE_DATA_DIR "/images/sky_01.jpg";
22 static const char *img6 = PACKAGE_DATA_DIR "/images/sky_02.jpg";
23 static const char *img7 = PACKAGE_DATA_DIR "/images/sky_03.jpg";
24
25 static char *
26 gl_text_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
27 {
28    char buf[256];
29    snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data);
30    return strdup(buf);
31 }
32
33 static Evas_Object *
34 gl_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
35 {
36    char buf[PATH_MAX];
37    Evas_Object *ic = elm_icon_add(obj);
38    if (!strcmp(part, "elm.swallow.end"))
39      snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());
40    else
41      snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
42    elm_image_file_set(ic, buf, NULL);
43    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
44    return ic;
45 }
46
47 static Elm_Genlist_Item_Class itc =
48 {
49    .version = ELM_GENLIST_ITEM_CLASS_VERSION,
50    .item_style = "default",
51    .func =
52      {
53         .text_get = gl_text_get,
54         .content_get  = gl_content_get,
55         .state_get = NULL,
56         .del       = NULL
57      }
58 };
59
60 static Evas_Object *
61 _content_image_new(Evas_Object *parent, const char *img)
62 {
63    Evas_Object *ic;
64
65    ic = elm_icon_add(parent);
66    elm_image_file_set(ic, img, NULL);
67    elm_image_fill_outside_set(ic, EINA_FALSE);
68    return ic;
69 }
70
71 static void
72 _gl_selected(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
73 {
74    printf("selected: %p\n", event_info);
75 }
76
77 static void
78 _gl_double_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
79 {
80    printf("double clicked: %p\n", event_info);
81 }
82
83 static void
84 _gl_longpress(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
85 {
86    printf("longpress %p\n", event_info);
87 }
88
89 static void
90 _content_list_populate_cb(Evas_Object *gl)
91 {
92    int i;
93    for (i = 0; i < 10; i++)
94      elm_genlist_item_append(gl, &itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
95    if (elm_genlist_items_count(gl) < 500)
96      ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);
97 }
98
99 static Evas_Object *
100 _content_list_new(Evas_Object *parent)
101 {
102    Evas_Object *gl;
103
104    gl = elm_genlist_add(parent);
105    evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
106    evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
107    evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
108    // FIXME: This causes genlist to resize the horiz axis very slowly :(
109    // Reenable this and resize the window horizontally, then try to resize it back
110    //elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
111
112    ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);
113    return gl;
114 }
115
116 static void
117 _navi_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
118 {
119    elm_naviframe_item_pop(data);
120 }
121
122 static void
123 _navi_it_del(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
124 {
125    elm_object_item_del(data);
126 }
127
128 static void
129 _title_visible(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
130 {
131    elm_naviframe_item_title_visible_set(data,
132                                !elm_naviframe_item_title_visible_get(data));
133 }
134
135 static void
136 _promote(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
137 {
138    elm_naviframe_item_promote(data);
139 }
140
141 static void
142 _page7(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
143 {
144    Evas_Object *bt, *bt2, *content, *nf = data;
145    Elm_Object_Item *it;
146
147    bt = elm_button_add(nf);
148    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
149    BUTTON_TEXT_SET(bt, "Page 6");
150
151    bt2 = elm_button_add(nf);
152    evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
153    BUTTON_TEXT_SET(bt2, "Page 1");
154    evas_object_smart_callback_add(bt2, "clicked", _promote,
155                                   evas_object_data_get(nf, "page1"));
156    content = _content_image_new(nf, img6);
157    it = elm_naviframe_item_push(nf, "Page 7", bt, bt2, content, "overlap");
158    elm_object_item_part_text_set(it, "subtitle", "Overlap style!");
159
160    evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
161 }
162
163 static void
164 _page6(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
165 {
166    Evas_Object *bt, *bt2, *content, *nf = data;
167    Elm_Object_Item *it;
168
169    bt = elm_button_add(nf);
170    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
171    BUTTON_TEXT_SET(bt, "Page 5");
172
173    bt2 = elm_button_add(nf);
174    evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
175    BUTTON_TEXT_SET(bt2, "Page 7");
176    evas_object_smart_callback_add(bt2, "clicked", _page7, nf);
177
178    content = _content_image_new(nf, img7);
179    it = elm_naviframe_item_push(nf, "Page 6", bt, bt2, content, "overlap");
180    elm_object_item_part_text_set(it, "subtitle", "Overlap style!");
181
182    evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
183 }
184
185 static void
186 _page5(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
187 {
188    Evas_Object *bt, *bt2, *content, *nf = data;
189    Elm_Object_Item *it;
190
191    bt = elm_button_add(nf);
192    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
193    BUTTON_TEXT_SET(bt, "Page 4");
194
195    bt2 = elm_button_add(nf);
196    evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
197    BUTTON_TEXT_SET(bt2, "Page 6");
198    evas_object_smart_callback_add(bt2, "clicked", _page6, nf);
199
200    content = _content_image_new(nf, img5);
201    it = elm_naviframe_item_insert_after(nf,
202                                         elm_naviframe_top_item_get(nf),
203                                         "Page 5",
204                                         bt,
205                                         bt2,
206                                         content,
207                                         NULL);
208    elm_object_item_part_text_set(it, "subtitle", "This page is inserted without transition");
209    evas_object_smart_callback_add(bt, "clicked", _navi_it_del, it);
210 }
211
212 static void
213 _page4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
214 {
215    Evas_Object *bt, *ic, *content, *nf = data;
216    char buf[PATH_MAX];
217    Elm_Object_Item *it;
218
219    ic = elm_icon_add(nf);
220    snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",
221             elm_app_data_dir_get());
222    elm_image_file_set(ic, buf, NULL);
223    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
224
225    bt = elm_button_add(nf);
226    evas_object_smart_callback_add(bt, "clicked", _page5, nf);
227    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
228    elm_object_part_content_set(bt, "icon", ic);
229
230    content = _content_image_new(nf, img4);
231
232    it = elm_naviframe_item_push(nf,
233                                 "Page 4",
234                                 NULL,
235                                 bt,
236                                 content,
237                                 NULL);
238    elm_object_item_part_text_set(it, "subtitle", "Title area visibility test");
239
240    ic = elm_icon_add(nf);
241    snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
242             elm_app_data_dir_get());
243    elm_image_file_set(ic, buf, NULL);
244    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
245    elm_object_item_part_content_set(it, "icon", ic);
246    elm_naviframe_item_title_visible_set(it, EINA_FALSE);
247    evas_object_smart_callback_add(content, "clicked", _title_visible, it);
248 }
249
250 static void
251 _page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
252 {
253    Evas_Object *bt, *bt2, *ic, *content, *nf = data;
254    char buf[PATH_MAX];
255    Elm_Object_Item *it;
256
257    bt = elm_button_add(nf);
258    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
259    BUTTON_TEXT_SET(bt, "Prev");
260    evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
261
262    bt2 = elm_button_add(nf);
263    evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
264    BUTTON_TEXT_SET(bt2, "Next");
265    evas_object_smart_callback_add(bt2, "clicked", _page4, nf);
266
267    content = _content_image_new(nf, img3);
268
269    it = elm_naviframe_item_push(nf,
270                                 "Page 3",
271                                 bt,
272                                 bt2,
273                                 content,
274                                 NULL);
275    ic = elm_icon_add(nf);
276    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
277    elm_image_file_set(ic, buf, NULL);
278    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
279
280    elm_object_item_part_content_set(it, "icon", ic);
281 }
282
283 static void
284 _page2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
285 {
286    Evas_Object *bt, *content, *ic, *nf = data;
287    char buf[PATH_MAX];
288    Elm_Object_Item *it;
289
290    bt = elm_button_add(nf);
291    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
292    evas_object_smart_callback_add(bt, "clicked", _page3, nf);
293
294    ic = elm_icon_add(nf);
295    snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",
296             elm_app_data_dir_get());
297    elm_image_file_set(ic, buf, NULL);
298    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
299    elm_object_part_content_set(bt, "icon", ic);
300
301    content = _content_image_new(nf, img2);
302
303    it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content,  NULL);
304    elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");
305 }
306
307 void
308 test_naviframe_complex(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
309 {
310    Evas_Object *win, *nf, *btn, *box, *content, *tb, *o;
311    Elm_Object_Item *it;
312    int x;
313
314    win = elm_win_util_standard_add("naviframe", "Naviframe");
315    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
316    elm_win_autodel_set(win, EINA_TRUE);
317
318    box = elm_box_add(win);
319    EXPAND(box);
320    FILL(box);
321    elm_box_horizontal_set(box, EINA_TRUE);
322    elm_win_resize_object_add(win, box);
323    evas_object_show(box);
324
325    tb = elm_toolbar_add(win);
326    WEIGHT(tb, 0, EVAS_HINT_EXPAND);
327    FILL(tb);
328    elm_toolbar_horizontal_set(tb, EINA_FALSE);
329    elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS);
330    elm_box_pack_end(box, tb);
331    evas_object_show(tb);
332
333    nf = elm_naviframe_add(win);
334    EXPAND(nf);
335    FILL(nf);
336    elm_box_pack_end(box, nf);
337    evas_object_show(nf);
338
339    for (x = 0; x < 4; x++)
340      {
341         const char *label[] = { "View 1", "View 2", "View 3", "View 4" };
342         o = elm_naviframe_add(win);
343         EXPAND(o);
344
345         btn = elm_button_add(o);
346         evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
347         evas_object_smart_callback_add(btn, "clicked", _page2, o);
348         BUTTON_TEXT_SET(btn, "Next");
349         evas_object_show(btn);
350
351         if (x % 2)
352           content = _content_image_new(o, img1);
353         else
354           content = _content_list_new(o);
355         evas_object_data_set(o, "page1", elm_naviframe_item_push(o, "Page 1", NULL, btn, content, NULL));
356
357         it = elm_naviframe_item_simple_push(nf, o);
358         it = elm_toolbar_item_append(tb, NULL, label[x], _promote, it);
359         evas_object_show(o);
360      }
361
362    elm_toolbar_item_selected_set(elm_toolbar_last_item_get(tb), EINA_TRUE);
363    evas_object_resize(win, 400, 400);
364    evas_object_show(win);
365 }
366 #endif