efl
243 строки · 7.8 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4#include <Efl_Ui.h>
5#include <Elementary.h>
6
7typedef struct _pbdata
8{
9Eo *win;
10Eo *pb1;
11Eo *pb2;
12Eo *pb3;
13Eo *pb4;
14Eo *pb5;
15Eo *check;
16Eo *btn_start;
17Eo *btn_stop;
18Eo *btn_reset;
19Ecore_Timer *timer;
20} pbdata;
21
22static Eina_Bool
23_set_progress_val(Eo *pb, double inc_value)
24{
25double progress;
26
27progress = efl_ui_range_value_get(pb);
28
29if (progress < 100.0)
30progress += inc_value;
31else
32return EINA_TRUE;
33
34efl_ui_range_value_set(pb, progress);
35
36return EINA_FALSE;
37}
38
39static Eina_Bool
40_pb_timer_cb(void *d)
41{
42pbdata *pd = d;
43double progress_val;
44
45if (!pd) return ECORE_CALLBACK_CANCEL;
46
47progress_val = efl_ui_range_value_get(pd->pb1);
48if (progress_val < 100.0)
49{
50progress_val += 1;
51efl_ui_range_value_set(pd->pb2, progress_val);
52efl_ui_range_value_set(pd->pb3, progress_val);
53efl_ui_range_value_set(pd->pb4, progress_val);
54efl_ui_range_value_set(pd->pb5, progress_val);
55}
56
57if (!_set_progress_val(pd->pb1, 0.5))
58return ECORE_CALLBACK_RENEW;
59
60pd->timer = NULL;
61return ECORE_CALLBACK_CANCEL;
62}
63
64static void
65_start_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
66{
67pbdata *pd = d;
68
69if (!pd) return;
70
71printf("start button is clicked\n");
72
73efl_ui_widget_disabled_set(pd->btn_start, EINA_TRUE);
74efl_ui_widget_disabled_set(pd->btn_stop, EINA_FALSE);
75
76if (!pd->timer) pd->timer = ecore_timer_add(0.1, _pb_timer_cb, pd);
77}
78
79static void
80_stop_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
81{
82pbdata *pd = d;
83
84if (!pd) return;
85printf("stop button is clicked\n");
86
87efl_ui_widget_disabled_set(pd->btn_start, EINA_FALSE);
88efl_ui_widget_disabled_set(pd->btn_stop, EINA_TRUE);
89
90if (pd->timer)
91{
92ecore_timer_del(pd->timer);
93pd->timer = NULL;
94}
95}
96
97static void
98_reset_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
99{
100pbdata *pd = d;
101
102if (!pd) return;
103printf("reset button is clicked\n");
104
105efl_ui_range_value_set(pd->pb1, 0.0);
106efl_ui_range_value_set(pd->pb2, 0.0);
107efl_ui_range_value_set(pd->pb3, 0.0);
108efl_ui_range_value_set(pd->pb4, 0.0);
109efl_ui_range_value_set(pd->pb5, 0.0);
110}
111
112static void
113_win_delete_req_cb(void *d, const Efl_Event *ev EINA_UNUSED)
114{
115pbdata *pd = d;
116
117if (pd->timer) ecore_timer_del(pd->timer);
118efl_unref(pd->win);
119free(pd);
120}
121
122static Eina_Bool
123_custom_format_cb(void *data EINA_UNUSED, Eina_Strbuf *str, const Eina_Value value)
124{
125double v;
126eina_value_get(&value, &v);
127if (v < 25.f) eina_strbuf_append_printf(str, "Starting up...");
128else if (v < 50.f) eina_strbuf_append_printf(str, "Working...");
129else if (v < 75.f) eina_strbuf_append_printf(str, "Getting there...");
130else if (v < 100.f) eina_strbuf_append_printf(str, "Almost done...");
131else eina_strbuf_append_printf(str, "Done!");
132return EINA_TRUE;
133}
134
135static void
136_toggle_progress_label(void *data, const Efl_Event *ev)
137{
138Efl_Ui_Check *check = ev->object;
139Efl_Ui_Progressbar *pb3 = data;
140Eina_Bool state = efl_ui_selectable_selected_get(check);
141
142efl_ui_progressbar_show_progress_label_set(pb3, state);
143}
144
145void
146test_ui_progressbar(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
147{
148Eo *win, *bx, *btbx;
149pbdata *pd;
150char buf[PATH_MAX];
151
152pd = (pbdata *)calloc(1, sizeof(pbdata));
153
154pd->win = win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
155efl_text_set(efl_added, "Efl.Ui.Progressbar"),
156efl_ui_win_autodel_set(efl_added, EINA_TRUE),
157efl_event_callback_add(efl_added, EFL_UI_WIN_EVENT_DELETE_REQUEST,
158_win_delete_req_cb, pd)
159);
160
161bx = efl_add(EFL_UI_BOX_CLASS, win,
162efl_content_set(win, efl_added)
163);
164
165pd->pb1 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
166efl_pack(bx, efl_added),
167efl_text_set(efl_added, "percent"),
168efl_ui_range_limits_set(efl_added, 0, 100),
169efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
170);
171
172snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
173efl_add(EFL_UI_IMAGE_CLASS, pd->pb1,
174efl_file_set(efl_added, buf),
175efl_file_load(efl_added),
176efl_content_set(pd->pb1, efl_added)
177);
178
179pd->pb2 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
180efl_pack(bx, efl_added),
181efl_text_set(efl_added, "10-100"),
182efl_ui_progressbar_infinite_mode_set(efl_added, EINA_TRUE),
183efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20)),
184efl_ui_range_limits_set(efl_added, 10, 100),
185efl_ui_range_value_set(efl_added, 10)
186);
187
188pd->pb3 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
189efl_pack(bx, efl_added),
190efl_text_set(efl_added, "Toggle progress label"),
191efl_ui_range_limits_set(efl_added, 0, 100),
192efl_ui_progressbar_show_progress_label_set(efl_added, EINA_FALSE),
193efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
194);
195pd->check = efl_add(EFL_UI_CHECK_CLASS, bx,
196efl_pack(bx, efl_added),
197efl_event_callback_add(efl_added, EFL_UI_EVENT_SELECTED_CHANGED,
198_toggle_progress_label, pd->pb3),
199efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
200);
201efl_text_set(pd->check, "Show progress label of above progressbar"),
202
203pd->pb4 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
204efl_pack(bx, efl_added),
205efl_text_set(efl_added, "Custom string"),
206efl_ui_range_limits_set(efl_added, 0, 100),
207efl_ui_format_string_set(efl_added, "%d rabbits", EFL_UI_FORMAT_STRING_TYPE_SIMPLE),
208efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
209);
210
211pd->pb5 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
212efl_pack(bx, efl_added),
213efl_text_set(efl_added, "Custom func"),
214efl_ui_range_limits_set(efl_added, 0, 100),
215efl_ui_format_func_set(efl_added, NULL, _custom_format_cb, NULL),
216efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
217);
218
219btbx = efl_add(EFL_UI_BOX_CLASS, bx,
220efl_pack(bx, efl_added),
221efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
222);
223
224pd->btn_start = efl_add(EFL_UI_BUTTON_CLASS, btbx,
225efl_text_set(efl_added, "start"),
226efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
227_start_btn_clicked_cb, pd),
228efl_pack(btbx, efl_added)
229);
230
231pd->btn_stop = efl_add(EFL_UI_BUTTON_CLASS, btbx,
232efl_text_set(efl_added, "stop"),
233efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
234_stop_btn_clicked_cb, pd),
235efl_pack(btbx, efl_added)
236);
237pd->btn_reset = efl_add(EFL_UI_BUTTON_CLASS, btbx,
238efl_text_set(efl_added, "reset"),
239efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
240_reset_btn_clicked_cb, pd),
241efl_pack(btbx, efl_added)
242);
243}
244