[genlist] no scale at theme_hook
[framework/uifw/elementary.git] / src / bin / test_pager.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 _Pginfo Pginfo;
7
8 struct _Pginfo
9 {
10     Evas_Object *win, *pager, *pg1, *pg2, *pg3, *pg4;
11 };
12
13 static void
14 my_pager_1(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
15 {
16    Pginfo *info = data;
17    elm_pager_content_promote(info->pager, info->pg2);
18 }
19
20 static void
21 my_pager_2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
22 {
23    Pginfo *info = data;
24    elm_pager_content_promote(info->pager, info->pg3);
25 }
26
27 static void
28 my_pager_3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
29 {
30    Pginfo *info = data;
31    elm_pager_content_promote(info->pager, info->pg4);
32 }
33
34
35 static void
36 my_pager_4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
37 {
38    Pginfo *info = data;
39    elm_pager_content_promote(info->pager, info->pg1);
40 }
41
42
43 static void
44 my_pager_pop(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
45 {
46    Pginfo *info = data;
47    elm_pager_content_pop(info->pager);
48 }
49
50 struct style_tuple {
51      const char *label;
52      const char *name;
53 };
54 static const struct style_tuple styles[] = {
55        { "Default", "default"},
56        { "Slide", "slide"},
57        { "Slide Invisible", "slide_invisible"},
58        { "Fade", "fade"},
59        { "Fade Translucide", "fade_translucide"},
60        { "Fade Invisible", "fade_invisible"},
61        { "Flip", "flip"},
62 };
63
64 static void
65 _style(void *data, Evas_Object *obj, void *event_info __UNUSED__)
66 {
67    Evas_Object *pg = data;
68    elm_object_style_set(pg, styles[elm_radio_value_get(obj)].name);
69 }
70
71 void
72 test_pager(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
73 {
74    Evas_Object *win, *bg, *pg, *bx, *lb, *bt;
75    static Pginfo info;
76
77    win = elm_win_add(NULL, "pager", ELM_WIN_BASIC);
78    elm_win_title_set(win, "Pager");
79    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
80    elm_win_autodel_set(win, EINA_TRUE);
81    info.win = win;
82
83    bg = elm_bg_add(win);
84    elm_win_resize_object_add(win, bg);
85    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
86    evas_object_show(bg);
87
88    pg = elm_pager_add(win);
89    evas_object_size_hint_weight_set(pg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
90    elm_win_resize_object_add(win, pg);
91    evas_object_show(pg);
92
93    info.pager = pg;
94
95    bx = elm_box_add(win);
96    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
97    evas_object_show(bx);
98
99    lb = elm_label_add(win);
100    elm_object_text_set(lb,
101                        "This is page 1 in a pager stack.<br/>"
102                        "<br/>"
103                        "So what is a pager stack? It is a stack<br/>"
104                        "of pages that hold widgets in it. The<br/>"
105                        "pages can be pushed and popped on and<br/>"
106                        "off the stack, activated and otherwise<br/>"
107                        "activated if already in the stack<br/>"
108                        "(activated means promoted to the top of<br/>"
109                        "the stack).<br/>"
110                        "<br/>"
111                        "The theme may define the animation how<br/>"
112                        "show and hide of pages. Select one theme style:");
113    elm_box_pack_end(bx, lb);
114    evas_object_show(lb);
115
116    unsigned int i = 0;
117    Evas_Object *rdg = NULL, *rd;
118    for (i = 0; i < (sizeof(styles) / sizeof(struct style_tuple)); i++)
119      {
120         rd = elm_radio_add(win);
121         elm_object_text_set(rd, styles[i].label);
122         elm_radio_state_value_set(rd, i);
123         if (rdg)
124           elm_radio_group_add(rd, rdg);
125         else
126           rdg = rd;
127         evas_object_smart_callback_add(rd, "changed", _style, pg);
128         elm_box_pack_end(bx, rd);
129         evas_object_show(rd);
130      }
131    elm_radio_value_set(rd, 0);
132
133    bt = elm_button_add(win);
134    elm_object_text_set(bt, "Flip to 2");
135    evas_object_smart_callback_add(bt, "clicked", my_pager_1, &info);
136    elm_box_pack_end(bx, bt);
137    evas_object_show(bt);
138
139    bt = elm_button_add(win);
140    elm_object_text_set(bt, "Popme");
141    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info);
142    elm_box_pack_end(bx, bt);
143    evas_object_show(bt);
144    elm_pager_content_push(pg, bx);
145    info.pg1 = bx;
146
147    bx = elm_box_add(win);
148    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
149    evas_object_show(bx);
150
151    lb = elm_label_add(win);
152    elm_object_text_set(lb,
153                        "This is page 2 in a pager stack.<br/>"
154                        "<br/>"
155                        "This is just like the previous page in<br/>"
156                        "the pager stack."
157                       );
158    elm_box_pack_end(bx, lb);
159    evas_object_show(lb);
160
161    bt = elm_button_add(win);
162    elm_object_text_set(bt, "Flip to 3");
163    evas_object_smart_callback_add(bt, "clicked", my_pager_2, &info);
164    elm_box_pack_end(bx, bt);
165    evas_object_show(bt);
166
167    bt = elm_button_add(win);
168    elm_object_text_set(bt, "Popme");
169    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info);
170    elm_box_pack_end(bx, bt);
171    evas_object_show(bt);
172    elm_pager_content_push(pg, bx);
173    info.pg2 = bx;
174
175    bx = elm_box_add(win);
176    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
177    evas_object_show(bx);
178
179    lb = elm_label_add(win);
180    elm_object_text_set(lb,
181                        "This is page 3 in a pager stack.<br/>"
182                        "<br/>"
183                        "This is just like the previous page in<br/>"
184                        "the pager stack.");
185    elm_box_pack_end(bx, lb);
186    evas_object_show(lb);
187
188    bt = elm_button_add(win);
189    elm_object_text_set(bt, "Flip to 1");
190    evas_object_smart_callback_add(bt, "clicked", my_pager_3, &info);
191    elm_box_pack_end(bx, bt);
192    evas_object_show(bt);
193
194    bt = elm_button_add(win);
195    elm_object_text_set(bt, "Popme");
196    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info);
197    elm_box_pack_end(bx, bt);
198    evas_object_show(bt);
199    elm_pager_content_push(pg, bx);
200    info.pg3 = bx;
201
202    Evas_Object *ly, *ly2;
203    char buf[4096];
204
205    ly = elm_layout_add(win);
206    snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
207    elm_layout_file_set(ly, buf, "test/layout");
208    evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209    evas_object_show(ly);
210
211    ly2 = elm_layout_add(win);
212    snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
213    elm_layout_file_set(ly2, buf, "layout2");
214    evas_object_size_hint_weight_set(ly2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
215    //elm_win_resize_object_add(win, ly2);
216    evas_object_show(ly2);
217
218    bt = elm_button_add(win);
219    elm_object_text_set(bt, "Flip to 1");
220    evas_object_smart_callback_add(bt, "clicked", my_pager_4, &info);
221    elm_object_part_content_set(ly2, "element1", bt);
222    evas_object_show(bt);
223
224    bt = elm_button_add(win);
225    elm_object_text_set(bt, "Popme");
226    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info);
227    evas_object_show(bt);
228    elm_object_part_content_set(ly2, "element2", bt);
229
230    elm_object_part_content_set(ly, "swallow", ly2);
231    evas_object_show(ly);
232
233    elm_pager_content_push(pg, ly);
234    info.pg4 = ly2;
235
236
237    evas_object_show(win);
238 }
239
240 static void
241 my_pager_push(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
242 {
243    Pginfo *info = data;
244    Evas_Object *bx, *bt, *lb;
245    static int count = 2;
246    char buf[32];
247
248    bx = elm_box_add(info->win);
249    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
250    evas_object_show(bx);
251
252    lb = elm_label_add(info->win);
253    snprintf(buf, sizeof(buf), "This is page %d in the slide pager<br/><br/>", count++);
254    elm_object_text_set(lb, buf);
255    elm_box_pack_end(bx, lb);
256    evas_object_show(lb);
257
258    bt = elm_button_add(info->win);
259    elm_object_text_set(bt, "Push a new page");
260    evas_object_smart_callback_add(bt, "clicked", my_pager_push, info);
261    elm_box_pack_end(bx, bt);
262    evas_object_show(bt);
263
264    bt = elm_button_add(info->win);
265    elm_object_text_set(bt, "Go back (pop)");
266    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, info);
267    elm_box_pack_end(bx, bt);
268    evas_object_show(bt);
269    elm_pager_content_push(info->pager, bx);
270 }
271
272 void
273 _hide_finished(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
274 {
275    //To prevent the window size become zero.
276    Pginfo *info = data;
277    if (elm_pager_content_top_get(info->pager)) return;
278    elm_win_resize_object_del(info->win, info->pager);
279 }
280
281 void
282 test_pager_slide(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
283 {
284    Evas_Object *win, *bg, *pg, *bx, *lb, *bt;
285    static Pginfo info;
286
287    win = elm_win_add(NULL, "pager", ELM_WIN_BASIC);
288    elm_win_title_set(win, "Pager Slide");
289    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
290    elm_win_autodel_set(win, EINA_TRUE);
291    info.win = win;
292
293    bg = elm_bg_add(win);
294    elm_win_resize_object_add(win, bg);
295    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
296    evas_object_show(bg);
297
298    pg = elm_pager_add(win);
299    elm_win_resize_object_add(win, pg);
300    evas_object_smart_callback_add(pg, "hide,finished",
301                                   _hide_finished, &info);
302    elm_object_style_set(pg, "slide");
303    evas_object_show(pg);
304    info.pager = pg;
305    bx = elm_box_add(win);
306    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
307    evas_object_show(bx);
308
309    lb = elm_label_add(win);
310    elm_object_text_set(lb,
311                        "This is page 1 in a slide pager.<br/>"
312                        "<br/>"
313                        "The slide pager style is useful for browsing<br/>"
314                        "a hierarchy of objects, as it makes clear<br/>"
315                        "the direction of the browse.<br/>"
316                        "This is the 'slide' style, also available<br/>"
317                        "a fully transparent style named 'slide_invisble'.<br/>"
318                        "<br/>");
319    elm_box_pack_end(bx, lb);
320    evas_object_show(lb);
321
322    bt = elm_button_add(win);
323    elm_object_text_set(bt, "Push a new page");
324    evas_object_smart_callback_add(bt, "clicked", my_pager_push, &info);
325    elm_box_pack_end(bx, bt);
326    evas_object_show(bt);
327
328    bt = elm_button_add(win);
329    elm_object_text_set(bt, "Go back (pop)");
330    evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info);
331    elm_box_pack_end(bx, bt);
332    evas_object_show(bt);
333    elm_pager_content_push(pg, bx);
334
335    evas_object_show(win);
336 }
337 #endif