efl
140 строк · 4.5 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4
5// Stack API is still beta (and EO only)
6#define EFL_UI_WIN_BETA
7#include <Efl_Ui.h>
8#include <Elementary.h>
9
10static int level = 0;
11static Evas_Object *popto_win = NULL;
12
13static void _bt_popto(void *data, Evas_Object *obj, void *event_info);
14static void _bt_pressed(void *data, Evas_Object *obj, void *event_info);
15
16static Evas_Object *
17_win_new(Evas_Object* parent, const char *title)
18{
19Evas_Object *bg, *bx, *bt, *lb, *win;
20
21if (level >= 3)
22win = efl_add(EFL_UI_WIN_CLASS, parent,
23efl_ui_win_name_set(efl_added, "window-stack"),
24efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_NAVIFRAME_BASIC),
25efl_text_set(efl_added, title),
26efl_ui_win_autodel_set(efl_added, EINA_TRUE));
27else
28win = efl_add(EFL_UI_WIN_CLASS, parent,
29efl_ui_win_name_set(efl_added, "window-stack"),
30efl_ui_win_type_set(efl_added, EFL_UI_WIN_TYPE_DIALOG_BASIC),
31efl_text_set(efl_added, title),
32efl_ui_win_autodel_set(efl_added, EINA_TRUE));
33
34if (level == 3) popto_win = win;
35
36bg = elm_bg_add(win);
37evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
38elm_win_resize_object_add(win, bg);
39evas_object_show(bg);
40
41bx = elm_box_add(win);
42evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
43elm_win_resize_object_add(win, bx);
44evas_object_show(bx);
45
46lb = elm_label_add(win);
47elm_object_text_set(lb, "Press below to push another window on the stack");
48evas_object_size_hint_weight_set(lb, 1.0, 1.0);
49evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
50elm_box_pack_end(bx, lb);
51evas_object_show(lb);
52
53if (level > 7)
54{
55bt = elm_button_add(win);
56elm_object_text_set(bt, "Pop to level 3");
57evas_object_smart_callback_add(bt, "clicked", _bt_popto, NULL);
58evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
59evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
60elm_box_pack_end(bx, bt);
61evas_object_show(bt);
62}
63
64bt = elm_button_add(win);
65elm_object_text_set(bt, "Push");
66evas_object_smart_callback_add(bt, "clicked", _bt_pressed, parent);
67evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
68evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
69elm_box_pack_end(bx, bt);
70evas_object_show(bt);
71
72evas_object_resize(win, 280, 400);
73return win;
74}
75
76static void
77_bt_popto(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
78{
79efl_ui_win_stack_pop_to(popto_win);
80}
81
82static void
83_bt_pressed(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
84{
85Evas_Object *win = (Evas_Object*) data;
86char buf[100];
87
88level++;
89snprintf(buf, sizeof(buf), "Level %i", level);
90win = _win_new(win, buf);
91efl_ui_win_stack_master_id_set(win, efl_ui_win_stack_id_get(data));
92}
93
94static void
95_del()
96{
97level = 0;
98popto_win = NULL;
99}
100
101void
102test_win_stack(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
103{
104Evas_Object *bg, *bx, *bt, *lb, *win;
105
106win = elm_win_add(NULL, "window-stack", ELM_WIN_BASIC);
107evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _del, NULL);
108efl_ui_win_stack_base_set(win, EINA_TRUE);
109elm_win_title_set(win, "Window Stack");
110elm_win_autodel_set(win, EINA_TRUE);
111
112bg = elm_bg_add(win);
113evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
114elm_win_resize_object_add(win, bg);
115evas_object_show(bg);
116
117bx = elm_box_add(win);
118evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
119elm_win_resize_object_add(win, bx);
120evas_object_show(bx);
121
122lb = elm_label_add(win);
123elm_object_text_set(lb, "Press below to push another window on the stack");
124evas_object_size_hint_weight_set(lb, 1.0, 1.0);
125evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
126elm_box_pack_end(bx, lb);
127evas_object_show(lb);
128
129bt = elm_button_add(win);
130elm_object_text_set(bt, "Push");
131evas_object_smart_callback_add(bt, "clicked", _bt_pressed, win);
132evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
133evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
134elm_box_pack_end(bx, bt);
135evas_object_show(bt);
136
137evas_object_resize(win, 320 * elm_config_scale_get(),
138480 * elm_config_scale_get());
139evas_object_show(win);
140}
141