efl

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

6
#define BUTTON_TEXT_SET(BT, TEXT) \
7
   elm_object_text_set((BT), (TEXT)); \
8
   elm_object_tooltip_text_set((BT), (TEXT)); \
9
   elm_object_tooltip_window_mode_set((BT), EINA_TRUE)
10

11
static char *
12
gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)
13
{
14
   char buf[256];
15
   snprintf(buf, sizeof(buf), "Item # %i", (int)(uintptr_t)data);
16
   return strdup(buf);
17
}
18

19
static Evas_Object *
20
gl_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part)
21
{
22
   char buf[PATH_MAX];
23
   Evas_Object *ic = elm_icon_add(obj);
24
   if (!strcmp(part, "elm.swallow.end"))
25
     snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());
26
   else
27
     snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
28
   elm_image_file_set(ic, buf, NULL);
29
   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
30
   return ic;
31
}
32

33
static Elm_Genlist_Item_Class itc =
34
{
35
   .version = ELM_GENLIST_ITEM_CLASS_VERSION,
36
   .item_style = "default",
37
   .func =
38
     {
39
        .text_get = gl_text_get,
40
        .content_get  = gl_content_get,
41
        .state_get = NULL,
42
        .del       = NULL
43
     }
44
};
45

46
static Evas_Object *
47
_content_image_new(Evas_Object *parent, const char *img)
48
{
49
   Evas_Object *ic;
50

51
   ic = elm_icon_add(parent);
52
   elm_image_file_set(ic, img, NULL);
53
   elm_image_fill_outside_set(ic, EINA_FALSE);
54
   return ic;
55
}
56

57
static void
58
_gl_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
59
{
60
   printf("selected: %p\n", event_info);
61
}
62

63
static void
64
_gl_double_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
65
{
66
   printf("double clicked: %p\n", event_info);
67
}
68

69
static void
70
_gl_longpress(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
71
{
72
   printf("longpress %p\n", event_info);
73
}
74

75
static void
76
_content_list_populate_cb(Evas_Object *gl)
77
{
78
   int i;
79
   for (i = 0; i < 10; i++)
80
     elm_genlist_item_append(gl, &itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
81
   if (elm_genlist_items_count(gl) < 500)
82
     ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);
83
}
84

85
static Evas_Object *
86
_content_list_new(Evas_Object *parent)
87
{
88
   Evas_Object *gl;
89

90
   gl = elm_genlist_add(parent);
91
   evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);
92
   evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);
93
   evas_object_smart_callback_add(gl, "longpressed", _gl_longpress, NULL);
94
   // FIXME: This causes genlist to resize the horiz axis very slowly :(
95
   // Reenable this and resize the window horizontally, then try to resize it back
96
   //elm_genlist_mode_set(gl, ELM_LIST_LIMIT);
97

98
   ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);
99
   return gl;
100
}
101

102
static void
103
_navi_pop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
104
{
105
   elm_naviframe_item_pop(data);
106
}
107

108
static void
109
_navi_it_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
110
{
111
   elm_object_item_del(data);
112
}
113

114
static void
115
_title_visible(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
116
{
117
   elm_naviframe_item_title_enabled_set(data,
118
                                        !elm_naviframe_item_title_enabled_get(data),
119
                                        EINA_TRUE);
120
}
121

122
static void
123
_promote(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
124
{
125
   elm_naviframe_item_promote(data);
126
}
127

128
static void
129
_page7(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
130
{
131
   Evas_Object *bt, *bt2, *content, *nf = data;
132
   Elm_Object_Item *it;
133
   char img6[PATH_MAX];
134

135
   snprintf(img6, sizeof(img6), "%s/images/sky_02.jpg", elm_app_data_dir_get());
136
   bt = elm_button_add(nf);
137
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
138
   BUTTON_TEXT_SET(bt, "Page 6");
139

140
   bt2 = elm_button_add(nf);
141
   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
142
   BUTTON_TEXT_SET(bt2, "Page 1");
143
   evas_object_smart_callback_add(bt2, "clicked", _promote,
144
                                  evas_object_data_get(nf, "page1"));
145
   content = _content_image_new(nf, img6);
146
   it = elm_naviframe_item_push(nf, "Page 7", bt, bt2, content, "overlap");
147
   elm_object_item_part_text_set(it, "subtitle", "Overlap style!");
148

149
   evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
150
}
151

152
static void
153
_page6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
154
{
155
   Evas_Object *bt, *bt2, *content, *nf = data;
156
   Elm_Object_Item *it;
157
   char img7[PATH_MAX];
158

159
   snprintf(img7, sizeof(img7), "%s/images/sky_03.jpg", elm_app_data_dir_get());
160
   bt = elm_button_add(nf);
161
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
162
   BUTTON_TEXT_SET(bt, "Page 5");
163

164
   bt2 = elm_button_add(nf);
165
   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
166
   BUTTON_TEXT_SET(bt2, "Page 7");
167
   evas_object_smart_callback_add(bt2, "clicked", _page7, nf);
168

169
   content = _content_image_new(nf, img7);
170
   it = elm_naviframe_item_push(nf, "Page 6", bt, bt2, content, "overlap");
171
   elm_object_item_part_text_set(it, "subtitle", "Overlap style!");
172

173
   evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
174
}
175

176
static void
177
_page5(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
178
{
179
   Evas_Object *bt, *bt2, *content, *nf = data;
180
   Elm_Object_Item *it;
181
   char img5[PATH_MAX];
182

183
   snprintf(img5, sizeof(img5), "%s/images/sky_01.jpg", elm_app_data_dir_get());
184
   bt = elm_button_add(nf);
185
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
186
   BUTTON_TEXT_SET(bt, "Page 4");
187

188
   bt2 = elm_button_add(nf);
189
   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
190
   BUTTON_TEXT_SET(bt2, "Page 6");
191
   evas_object_smart_callback_add(bt2, "clicked", _page6, nf);
192

193
   content = _content_image_new(nf, img5);
194
   it = elm_naviframe_item_insert_after(nf,
195
                                        elm_naviframe_top_item_get(nf),
196
                                        "Page 5",
197
                                        bt,
198
                                        bt2,
199
                                        content,
200
                                        NULL);
201
   elm_object_item_part_text_set(it, "subtitle", "This page is inserted without transition");
202
   evas_object_smart_callback_add(bt, "clicked", _navi_it_del, it);
203
}
204

205
static void
206
_page4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
207
{
208
   Evas_Object *bt, *ic, *content, *nf = data;
209
   char buf[PATH_MAX];
210
   char img4[PATH_MAX];
211
   Elm_Object_Item *it;
212

213
   snprintf(img4, sizeof(img4), "%s/images/rock_02.jpg", elm_app_data_dir_get());
214
   ic = elm_icon_add(nf);
215
   snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",
216
            elm_app_data_dir_get());
217
   elm_image_file_set(ic, buf, NULL);
218
   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
219

220
   bt = elm_button_add(nf);
221
   evas_object_smart_callback_add(bt, "clicked", _page5, nf);
222
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
223
   elm_object_part_content_set(bt, "icon", ic);
224

225
   content = _content_image_new(nf, img4);
226

227
   it = elm_naviframe_item_push(nf,
228
                                "Page 4",
229
                                NULL,
230
                                bt,
231
                                content,
232
                                NULL);
233
   elm_object_item_part_text_set(it, "subtitle", "Title area visibility test");
234

235
   ic = elm_icon_add(nf);
236
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
237
            elm_app_data_dir_get());
238
   elm_image_file_set(ic, buf, NULL);
239
   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
240
   elm_object_item_part_content_set(it, "icon", ic);
241
   elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
242
   evas_object_smart_callback_add(content, "clicked", _title_visible, it);
243
}
244

245
static void
246
_page3(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
247
{
248
   Evas_Object *bt, *bt2, *ic, *content, *nf = data;
249
   char buf[PATH_MAX];
250
   char img3[PATH_MAX];
251
   Elm_Object_Item *it;
252

253
   snprintf(img3, sizeof(img3), "%s/images/rock_01.jpg", elm_app_data_dir_get());
254
   bt = elm_button_add(nf);
255
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
256
   BUTTON_TEXT_SET(bt, "Prev");
257
   evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
258

259
   bt2 = elm_button_add(nf);
260
   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
261
   BUTTON_TEXT_SET(bt2, "Next");
262
   evas_object_smart_callback_add(bt2, "clicked", _page4, nf);
263

264
   content = _content_image_new(nf, img3);
265

266
   it = elm_naviframe_item_push(nf,
267
                                "Page 3",
268
                                bt,
269
                                bt2,
270
                                content,
271
                                NULL);
272
   ic = elm_icon_add(nf);
273
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
274
   elm_image_file_set(ic, buf, NULL);
275
   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
276

277
   elm_object_item_part_content_set(it, "icon", ic);
278
}
279

280
static void
281
_page2(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
282
{
283
   Evas_Object *bt, *content, *ic, *nf = data;
284
   char buf[PATH_MAX];
285
   char img2[PATH_MAX];
286
   Elm_Object_Item *it;
287

288
   snprintf(img2, sizeof(img2), "%s/images/plant_01.jpg", elm_app_data_dir_get());
289
   bt = elm_button_add(nf);
290
   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
291
   evas_object_smart_callback_add(bt, "clicked", _page3, nf);
292

293
   ic = elm_icon_add(nf);
294
   snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",
295
            elm_app_data_dir_get());
296
   elm_image_file_set(ic, buf, NULL);
297
   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
298
   elm_object_part_content_set(bt, "icon", ic);
299

300
   content = _content_image_new(nf, img2);
301

302
   it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content,  NULL);
303
   elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");
304
}
305

306
void
307
test_naviframe_complex(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
308
{
309
   Evas_Object *win, *nf, *btn, *box, *content, *tb, *o;
310
   Elm_Object_Item *it;
311
   int x;
312

313
   char img1[PATH_MAX];
314
   snprintf(img1, sizeof(img1), "%s/images/logo.png", elm_app_data_dir_get());
315

316
   win = elm_win_util_standard_add("naviframe", "Naviframe");
317
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
318
   elm_win_autodel_set(win, EINA_TRUE);
319

320
   box = elm_box_add(win);
321
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
322
   elm_box_horizontal_set(box, EINA_TRUE);
323
   elm_win_resize_object_add(win, box);
324
   evas_object_show(box);
325

326
   tb = elm_toolbar_add(win);
327
   evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND);
328
   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
329
   elm_toolbar_horizontal_set(tb, EINA_FALSE);
330
   elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS);
331
   elm_box_pack_end(box, tb);
332
   evas_object_show(tb);
333

334
   nf = elm_naviframe_add(win);
335
   evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
336
   evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL);
337
   elm_naviframe_prev_btn_auto_pushed_set(nf, EINA_FALSE);
338
   elm_box_pack_end(box, nf);
339
   evas_object_show(nf);
340

341
   for (x = 0; x < 4; x++)
342
     {
343
        const char *label[] = { "View 1", "View 2", "View 3", "View 4" };
344
        o = elm_naviframe_add(win);
345
        evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
346

347
        btn = elm_button_add(o);
348
        evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
349
        evas_object_smart_callback_add(btn, "clicked", _page2, o);
350
        BUTTON_TEXT_SET(btn, "Next");
351
        evas_object_show(btn);
352

353
        if (x % 2)
354
          content = _content_image_new(o, img1);
355
        else
356
          content = _content_list_new(o);
357
        evas_object_data_set(o, "page1", elm_naviframe_item_push(o, "Page 1", NULL, btn, content, NULL));
358

359
        it = elm_naviframe_item_simple_push(nf, o);
360
        elm_toolbar_item_append(tb, NULL, label[x], _promote, it);
361
        evas_object_show(o);
362
     }
363

364
   elm_toolbar_item_selected_set(elm_toolbar_last_item_get(tb), EINA_TRUE);
365
   evas_object_resize(win, 400 * elm_config_scale_get(),
366
                           400 * elm_config_scale_get());
367
   evas_object_show(win);
368
}
369

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

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

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

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