efl

Форк
0
/
test_ui_progressbar.c 
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

7
typedef struct _pbdata
8
{
9
   Eo *win;
10
   Eo *pb1;
11
   Eo *pb2;
12
   Eo *pb3;
13
   Eo *pb4;
14
   Eo *pb5;
15
   Eo *check;
16
   Eo *btn_start;
17
   Eo *btn_stop;
18
   Eo *btn_reset;
19
   Ecore_Timer *timer;
20
} pbdata;
21

22
static Eina_Bool
23
_set_progress_val(Eo *pb, double inc_value)
24
{
25
   double progress;
26

27
   progress = efl_ui_range_value_get(pb);
28

29
   if (progress < 100.0)
30
     progress += inc_value;
31
   else
32
     return EINA_TRUE;
33

34
   efl_ui_range_value_set(pb, progress);
35

36
   return EINA_FALSE;
37
}
38

39
static Eina_Bool
40
_pb_timer_cb(void *d)
41
{
42
   pbdata *pd = d;
43
   double progress_val;
44

45
   if (!pd) return ECORE_CALLBACK_CANCEL;
46

47
   progress_val = efl_ui_range_value_get(pd->pb1);
48
   if (progress_val < 100.0)
49
     {
50
        progress_val += 1;
51
        efl_ui_range_value_set(pd->pb2, progress_val);
52
        efl_ui_range_value_set(pd->pb3, progress_val);
53
        efl_ui_range_value_set(pd->pb4, progress_val);
54
        efl_ui_range_value_set(pd->pb5, progress_val);
55
     }
56

57
   if (!_set_progress_val(pd->pb1, 0.5))
58
     return ECORE_CALLBACK_RENEW;
59

60
   pd->timer = NULL;
61
   return ECORE_CALLBACK_CANCEL;
62
}
63

64
static void
65
_start_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
66
{
67
   pbdata *pd = d;
68

69
   if (!pd) return;
70

71
   printf("start button is clicked\n");
72

73
   efl_ui_widget_disabled_set(pd->btn_start, EINA_TRUE);
74
   efl_ui_widget_disabled_set(pd->btn_stop, EINA_FALSE);
75

76
   if (!pd->timer) pd->timer = ecore_timer_add(0.1, _pb_timer_cb, pd);
77
}
78

79
static void
80
_stop_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
81
{
82
   pbdata *pd = d;
83

84
   if (!pd) return;
85
   printf("stop button is clicked\n");
86

87
   efl_ui_widget_disabled_set(pd->btn_start, EINA_FALSE);
88
   efl_ui_widget_disabled_set(pd->btn_stop, EINA_TRUE);
89

90
   if (pd->timer)
91
     {
92
        ecore_timer_del(pd->timer);
93
        pd->timer = NULL;
94
     }
95
}
96

97
static void
98
_reset_btn_clicked_cb(void *d, const Efl_Event *ev EINA_UNUSED)
99
{
100
   pbdata *pd = d;
101

102
   if (!pd) return;
103
   printf("reset button is clicked\n");
104

105
   efl_ui_range_value_set(pd->pb1, 0.0);
106
   efl_ui_range_value_set(pd->pb2, 0.0);
107
   efl_ui_range_value_set(pd->pb3, 0.0);
108
   efl_ui_range_value_set(pd->pb4, 0.0);
109
   efl_ui_range_value_set(pd->pb5, 0.0);
110
}
111

112
static void
113
_win_delete_req_cb(void *d, const Efl_Event *ev EINA_UNUSED)
114
{
115
   pbdata *pd = d;
116

117
   if (pd->timer) ecore_timer_del(pd->timer);
118
   efl_unref(pd->win);
119
   free(pd);
120
}
121

122
static Eina_Bool
123
_custom_format_cb(void *data EINA_UNUSED, Eina_Strbuf *str, const Eina_Value value)
124
{
125
   double v;
126
   eina_value_get(&value, &v);
127
   if (v < 25.f) eina_strbuf_append_printf(str, "Starting up...");
128
   else if (v < 50.f) eina_strbuf_append_printf(str, "Working...");
129
   else if (v < 75.f) eina_strbuf_append_printf(str, "Getting there...");
130
   else if (v < 100.f) eina_strbuf_append_printf(str, "Almost done...");
131
   else eina_strbuf_append_printf(str, "Done!");
132
   return EINA_TRUE;
133
}
134

135
static void
136
_toggle_progress_label(void *data, const Efl_Event *ev)
137
{
138
   Efl_Ui_Check *check = ev->object;
139
   Efl_Ui_Progressbar *pb3 = data;
140
   Eina_Bool state = efl_ui_selectable_selected_get(check);
141

142
   efl_ui_progressbar_show_progress_label_set(pb3, state);
143
}
144

145
void
146
test_ui_progressbar(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, void *event_info EINA_UNUSED)
147
{
148
   Eo *win, *bx, *btbx;
149
   pbdata *pd;
150
   char buf[PATH_MAX];
151

152
   pd = (pbdata *)calloc(1, sizeof(pbdata));
153

154
   pd->win = win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
155
                                                      efl_text_set(efl_added, "Efl.Ui.Progressbar"),
156
                           efl_ui_win_autodel_set(efl_added, EINA_TRUE),
157
                           efl_event_callback_add(efl_added, EFL_UI_WIN_EVENT_DELETE_REQUEST,
158
                                                  _win_delete_req_cb, pd)
159
                          );
160

161
   bx = efl_add(EFL_UI_BOX_CLASS, win,
162
                efl_content_set(win, efl_added)
163
               );
164

165
   pd->pb1 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
166
                     efl_pack(bx, efl_added),
167
                     efl_text_set(efl_added, "percent"),
168
                     efl_ui_range_limits_set(efl_added, 0, 100),
169
                     efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
170
                    );
171

172
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
173
   efl_add(EFL_UI_IMAGE_CLASS, pd->pb1,
174
           efl_file_set(efl_added, buf),
175
           efl_file_load(efl_added),
176
           efl_content_set(pd->pb1, efl_added)
177
          );
178

179
   pd->pb2 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
180
                     efl_pack(bx, efl_added),
181
                     efl_text_set(efl_added, "10-100"),
182
                     efl_ui_progressbar_infinite_mode_set(efl_added, EINA_TRUE),
183
                     efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20)),
184
                     efl_ui_range_limits_set(efl_added, 10, 100),
185
                     efl_ui_range_value_set(efl_added, 10)
186
                    );
187

188
   pd->pb3 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
189
                     efl_pack(bx, efl_added),
190
                     efl_text_set(efl_added, "Toggle progress label"),
191
                     efl_ui_range_limits_set(efl_added, 0, 100),
192
                     efl_ui_progressbar_show_progress_label_set(efl_added, EINA_FALSE),
193
                     efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
194
                    );
195
   pd->check = efl_add(EFL_UI_CHECK_CLASS, bx,
196
                       efl_pack(bx, efl_added),
197
                       efl_event_callback_add(efl_added, EFL_UI_EVENT_SELECTED_CHANGED,
198
                                              _toggle_progress_label, pd->pb3),
199
                       efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
200
                      );
201
   efl_text_set(pd->check, "Show progress label of above progressbar"),
202

203
   pd->pb4 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
204
                     efl_pack(bx, efl_added),
205
                     efl_text_set(efl_added, "Custom string"),
206
                     efl_ui_range_limits_set(efl_added, 0, 100),
207
                     efl_ui_format_string_set(efl_added, "%d rabbits", EFL_UI_FORMAT_STRING_TYPE_SIMPLE),
208
                     efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
209
                    );
210

211
   pd->pb5 = efl_add(EFL_UI_PROGRESSBAR_CLASS, bx,
212
                     efl_pack(bx, efl_added),
213
                     efl_text_set(efl_added, "Custom func"),
214
                     efl_ui_range_limits_set(efl_added, 0, 100),
215
                     efl_ui_format_func_set(efl_added, NULL, _custom_format_cb, NULL),
216
                     efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(250, 20))
217
                    );
218

219
   btbx = efl_add(EFL_UI_BOX_CLASS, bx,
220
                  efl_pack(bx, efl_added),
221
                  efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL)
222
                 );
223

224
   pd->btn_start = efl_add(EFL_UI_BUTTON_CLASS, btbx,
225
                           efl_text_set(efl_added, "start"),
226
                           efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
227
                                                  _start_btn_clicked_cb, pd),
228
                           efl_pack(btbx, efl_added)
229
                          );
230

231
   pd->btn_stop = efl_add(EFL_UI_BUTTON_CLASS, btbx,
232
                          efl_text_set(efl_added, "stop"),
233
                          efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
234
                                                 _stop_btn_clicked_cb, pd),
235
                          efl_pack(btbx, efl_added)
236
                         );
237
   pd->btn_reset = efl_add(EFL_UI_BUTTON_CLASS, btbx,
238
                           efl_text_set(efl_added, "reset"),
239
                           efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED,
240
                                                  _reset_btn_clicked_cb, pd),
241
                           efl_pack(btbx, efl_added)
242
                          );
243
}
244

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.