efl

Форк
0
/
test_focus_custom_chain.c 
245 строк · 8.8 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "elementary_config.h"
3
#endif
4
#include <Elementary.h>
5

6
static void
7
highlight_enabled_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
8
{
9
   elm_config_focus_highlight_enabled_set(elm_check_state_get(obj));
10
}
11

12
static void
13
highlight_animate_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
14
{
15
   elm_config_focus_highlight_animate_set(elm_check_state_get(obj));
16
}
17

18
static void
19
win_highlight_enabled_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
20
{
21
   elm_win_focus_highlight_enabled_set((Evas_Object *)data,
22
                                       elm_check_state_get(obj));
23
}
24

25
static void
26
win_highlight_animate_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
27
{
28
   elm_win_focus_highlight_animate_set((Evas_Object *)data,
29
                                       elm_check_state_get(obj));
30
}
31

32
static void
33
custom_chain_unset_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
34
{
35
   Evas_Object *c, *child = NULL;
36
   Evas_Object *bx = (Evas_Object *)data;
37
   Eina_List *l, *children = NULL, *custom_chain = NULL;
38
   int i = 0;
39

40
   if (elm_check_state_get(obj))
41
     {
42
        children = elm_box_children_get(bx);
43
        EINA_LIST_FOREACH(children, l, c)
44
          {
45
             if (i == 0)
46
               {
47
                  child = c;
48
                  custom_chain = eina_list_append(custom_chain, c);
49
                  elm_object_focus_custom_chain_set(bx, custom_chain);
50
               }
51
             else if (i == 1) elm_object_focus_custom_chain_prepend(bx, c, child);
52
             else if (i == 2)
53
               {
54
                  elm_object_focus_custom_chain_append(bx, c, child);
55
                  child = c;
56
               }
57
              else if (i == 3) elm_object_focus_custom_chain_prepend(bx, c, child);
58
              i++;
59
          }
60
     }
61
   else
62
     {
63
        if (!elm_object_focus_custom_chain_get(bx)) return;
64
        elm_object_focus_custom_chain_unset(bx);
65
     }
66
}
67

68
static void
69
create_win_bt_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
70
{
71
   Evas_Object *win, *gd, *bt;
72

73
   win = elm_win_util_standard_add("test focus", "Test Focus");
74
   elm_win_autodel_set(win, EINA_TRUE);
75

76
   gd = elm_grid_add(win);
77
   elm_grid_size_set(gd, 100, 100);
78
   evas_object_size_hint_weight_set(gd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
79
   elm_win_resize_object_add(win, gd);
80
   evas_object_show(gd);
81

82
   bt = elm_button_add(win);
83
   elm_object_text_set(bt, "Button 1");
84
   elm_grid_pack(gd, bt, 10, 10, 80, 20);
85
   evas_object_show(bt);
86

87
   bt = elm_button_add(win);
88
   elm_object_text_set(bt, "Button 2");
89
   elm_grid_pack(gd, bt, 10, 30, 80, 20);
90
   evas_object_show(bt);
91

92
   bt = elm_button_add(win);
93
   elm_object_text_set(bt, "Button 3");
94
   elm_grid_pack(gd, bt, 10, 50, 80, 20);
95
   evas_object_show(bt);
96

97
   bt = elm_button_add(win);
98
   elm_object_text_set(bt, "Button 4");
99
   elm_grid_pack(gd, bt, 10, 70, 80, 20);
100
   evas_object_show(bt);
101

102
   evas_object_resize(win, 160 * elm_config_scale_get(),
103
                           160 * elm_config_scale_get());
104
   evas_object_show(win);
105
}
106

107
void
108
test_focus_custom_chain(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
109
{
110
   Evas_Object *win, *fr, *bx, *bx2, *tg, *bt, *sp;
111
   Evas_Object *lb, *bt1, *bt2, *bt3, *bt4;
112
   Eina_List *custom_chain = NULL;
113

114
   elm_config_focus_highlight_enabled_set(EINA_TRUE);
115
   elm_config_focus_highlight_animate_set(EINA_TRUE);
116

117
   win = elm_win_util_standard_add("focus-custom-chain", "Focus Custom Chain");
118
   elm_win_autodel_set(win, EINA_TRUE);
119
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
120
   elm_win_focus_highlight_animate_set(win, EINA_TRUE);
121

122
   fr = elm_frame_add(win);
123
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
124
   elm_win_resize_object_add(win, fr);
125
   elm_object_style_set(fr, "pad_large");
126
   evas_object_show(fr);
127

128
   /* First Example - Using Focus Highlight */
129
   bx = elm_box_add(fr);
130
   elm_object_content_set(fr, bx);
131
   evas_object_show(bx);
132

133
   tg = elm_check_add(bx);
134
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
135
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
136
   elm_object_text_set(tg, "Focus Highlight Enabled (Config)");
137
   elm_check_state_set(tg, elm_config_focus_highlight_enabled_get());
138
   evas_object_smart_callback_add(tg, "changed", highlight_enabled_cb, NULL);
139
   elm_box_pack_end(bx, tg);
140
   evas_object_show(tg);
141

142
   tg = elm_check_add(bx);
143
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
144
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
145
   elm_object_text_set(tg, "Focus Highlight Animate (Config)");
146
   elm_check_state_set(tg, elm_config_focus_highlight_animate_get());
147
   evas_object_smart_callback_add(tg, "changed", highlight_animate_cb, NULL);
148
   elm_box_pack_end(bx, tg);
149
   evas_object_show(tg);
150

151
   tg = elm_check_add(bx);
152
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
153
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
154
   elm_object_text_set(tg, "Focus Highlight Enabled (Win)");
155
   elm_check_state_set(tg, elm_win_focus_highlight_enabled_get(win));
156
   evas_object_smart_callback_add(tg, "changed", win_highlight_enabled_cb, win);
157
   elm_box_pack_end(bx, tg);
158
   evas_object_show(tg);
159

160
   tg = elm_check_add(bx);
161
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
162
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
163
   elm_object_text_set(tg, "Focus Highlight Animate (Win)");
164
   elm_check_state_set(tg, elm_win_focus_highlight_enabled_get(win));
165
   evas_object_smart_callback_add(tg, "changed", win_highlight_animate_cb, win);
166
   elm_box_pack_end(bx, tg);
167
   evas_object_show(tg);
168

169
   bt = elm_button_add(bx);
170
   elm_object_text_set(bt, "Create Window");
171
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
172
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
173
   elm_box_pack_end(bx, bt);
174
   evas_object_smart_callback_add(bt, "clicked", create_win_bt_clicked, NULL);
175
   evas_object_show(bt);
176

177
   sp = elm_separator_add(bx);
178
   elm_separator_horizontal_set(sp, EINA_TRUE);
179
   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, 0.0);
180
   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, EVAS_HINT_FILL);
181
   elm_box_pack_end(bx, sp);
182
   evas_object_show(sp);
183

184
   /* Second Example - Using Custom Chain */
185
   lb = elm_label_add(bx);
186
   elm_object_text_set(lb, "Custom Chain: Please use tab key to check");
187
   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
188
   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
189
   elm_box_pack_end(bx, lb);
190
   evas_object_show(lb);
191

192
   bx2 = elm_box_add(bx);
193
   elm_box_horizontal_set(bx2, EINA_TRUE);
194
   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
195
   evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
196
   elm_box_pack_end(bx, bx2);
197
   evas_object_show(bx2);
198

199
   bt1 = elm_button_add(bx2);
200
   elm_object_text_set(bt1, "Button 1");
201
   evas_object_size_hint_weight_set(bt1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
202
   evas_object_size_hint_align_set(bt1, EVAS_HINT_FILL, EVAS_HINT_FILL);
203
   elm_box_pack_end(bx2, bt1);
204
   evas_object_show(bt1);
205

206
   bt2 = elm_button_add(bx2);
207
   elm_object_text_set(bt2, "Button 2");
208
   evas_object_size_hint_weight_set(bt2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209
   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
210
   elm_box_pack_end(bx2, bt2);
211
   evas_object_show(bt2);
212

213
   bt3 = elm_button_add(bx2);
214
   elm_object_text_set(bt3, "Button 3");
215
   evas_object_size_hint_weight_set(bt3, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
216
   evas_object_size_hint_align_set(bt3, EVAS_HINT_FILL, EVAS_HINT_FILL);
217
   elm_box_pack_end(bx2, bt3);
218
   evas_object_show(bt3);
219

220
   bt4 = elm_button_add(bx2);
221
   elm_object_text_set(bt4, "Button 4");
222
   evas_object_size_hint_weight_set(bt4, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
223
   evas_object_size_hint_align_set(bt4, EVAS_HINT_FILL, EVAS_HINT_FILL);
224
   elm_box_pack_end(bx2, bt4);
225
   evas_object_show(bt4);
226

227
   custom_chain = eina_list_append(custom_chain, bt2);
228
   custom_chain = eina_list_append(custom_chain, bt1);
229
   custom_chain = eina_list_append(custom_chain, bt4);
230
   custom_chain = eina_list_append(custom_chain, bt3);
231
   elm_object_focus_custom_chain_set(bx2, custom_chain);
232

233
   tg = elm_check_add(bx);
234
   elm_object_text_set(tg, "Custom Chain");
235
   evas_object_size_hint_weight_set(tg, EVAS_HINT_EXPAND, 0.0);
236
   evas_object_size_hint_align_set(tg, EVAS_HINT_FILL, EVAS_HINT_FILL);
237
   elm_check_state_set(tg, EINA_TRUE);
238
   evas_object_smart_callback_add(tg, "changed", custom_chain_unset_cb, bx2);
239
   elm_box_pack_end(bx, tg);
240
   evas_object_show(tg);
241

242
   evas_object_resize(win, 320 * elm_config_scale_get(),
243
                           320 * elm_config_scale_get());
244
   evas_object_show(win);
245
}
246

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

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

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

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