efl
368 строк · 12.3 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4#include <Elementary.h>5
6#define BUTTON_TEXT_SET(BT, TEXT) \7elm_object_text_set((BT), (TEXT)); \8elm_object_tooltip_text_set((BT), (TEXT)); \9elm_object_tooltip_window_mode_set((BT), EINA_TRUE)10
11static char *12gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)13{
14char buf[256];15snprintf(buf, sizeof(buf), "Item # %i", (int)(uintptr_t)data);16return strdup(buf);17}
18
19static Evas_Object *20gl_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part)21{
22char buf[PATH_MAX];23Evas_Object *ic = elm_icon_add(obj);24if (!strcmp(part, "elm.swallow.end"))25snprintf(buf, sizeof(buf), "%s/images/bubble.png", elm_app_data_dir_get());26else27snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());28elm_image_file_set(ic, buf, NULL);29evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);30return ic;31}
32
33static 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 = NULL43}44};45
46static Evas_Object *47_content_image_new(Evas_Object *parent, const char *img)48{
49Evas_Object *ic;50
51ic = elm_icon_add(parent);52elm_image_file_set(ic, img, NULL);53elm_image_fill_outside_set(ic, EINA_FALSE);54return ic;55}
56
57static void58_gl_selected(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)59{
60printf("selected: %p\n", event_info);61}
62
63static void64_gl_double_clicked(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)65{
66printf("double clicked: %p\n", event_info);67}
68
69static void70_gl_longpress(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)71{
72printf("longpress %p\n", event_info);73}
74
75static void76_content_list_populate_cb(Evas_Object *gl)77{
78int i;79for (i = 0; i < 10; i++)80elm_genlist_item_append(gl, &itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);81if (elm_genlist_items_count(gl) < 500)82ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);83}
84
85static Evas_Object *86_content_list_new(Evas_Object *parent)87{
88Evas_Object *gl;89
90gl = elm_genlist_add(parent);91evas_object_smart_callback_add(gl, "selected", _gl_selected, NULL);92evas_object_smart_callback_add(gl, "clicked,double", _gl_double_clicked, NULL);93evas_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 back96//elm_genlist_mode_set(gl, ELM_LIST_LIMIT);97
98ecore_job_add((Ecore_Cb)_content_list_populate_cb, gl);99return gl;100}
101
102static void103_navi_pop(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)104{
105elm_naviframe_item_pop(data);106}
107
108static void109_navi_it_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)110{
111elm_object_item_del(data);112}
113
114static void115_title_visible(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)116{
117elm_naviframe_item_title_enabled_set(data,118!elm_naviframe_item_title_enabled_get(data),119EINA_TRUE);120}
121
122static void123_promote(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)124{
125elm_naviframe_item_promote(data);126}
127
128static void129_page7(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)130{
131Evas_Object *bt, *bt2, *content, *nf = data;132Elm_Object_Item *it;133char img6[PATH_MAX];134
135snprintf(img6, sizeof(img6), "%s/images/sky_02.jpg", elm_app_data_dir_get());136bt = elm_button_add(nf);137evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);138BUTTON_TEXT_SET(bt, "Page 6");139
140bt2 = elm_button_add(nf);141evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);142BUTTON_TEXT_SET(bt2, "Page 1");143evas_object_smart_callback_add(bt2, "clicked", _promote,144evas_object_data_get(nf, "page1"));145content = _content_image_new(nf, img6);146it = elm_naviframe_item_push(nf, "Page 7", bt, bt2, content, "overlap");147elm_object_item_part_text_set(it, "subtitle", "Overlap style!");148
149evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);150}
151
152static void153_page6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)154{
155Evas_Object *bt, *bt2, *content, *nf = data;156Elm_Object_Item *it;157char img7[PATH_MAX];158
159snprintf(img7, sizeof(img7), "%s/images/sky_03.jpg", elm_app_data_dir_get());160bt = elm_button_add(nf);161evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);162BUTTON_TEXT_SET(bt, "Page 5");163
164bt2 = elm_button_add(nf);165evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);166BUTTON_TEXT_SET(bt2, "Page 7");167evas_object_smart_callback_add(bt2, "clicked", _page7, nf);168
169content = _content_image_new(nf, img7);170it = elm_naviframe_item_push(nf, "Page 6", bt, bt2, content, "overlap");171elm_object_item_part_text_set(it, "subtitle", "Overlap style!");172
173evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);174}
175
176static void177_page5(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)178{
179Evas_Object *bt, *bt2, *content, *nf = data;180Elm_Object_Item *it;181char img5[PATH_MAX];182
183snprintf(img5, sizeof(img5), "%s/images/sky_01.jpg", elm_app_data_dir_get());184bt = elm_button_add(nf);185evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);186BUTTON_TEXT_SET(bt, "Page 4");187
188bt2 = elm_button_add(nf);189evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);190BUTTON_TEXT_SET(bt2, "Page 6");191evas_object_smart_callback_add(bt2, "clicked", _page6, nf);192
193content = _content_image_new(nf, img5);194it = elm_naviframe_item_insert_after(nf,195elm_naviframe_top_item_get(nf),196"Page 5",197bt,198bt2,199content,200NULL);201elm_object_item_part_text_set(it, "subtitle", "This page is inserted without transition");202evas_object_smart_callback_add(bt, "clicked", _navi_it_del, it);203}
204
205static void206_page4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)207{
208Evas_Object *bt, *ic, *content, *nf = data;209char buf[PATH_MAX];210char img4[PATH_MAX];211Elm_Object_Item *it;212
213snprintf(img4, sizeof(img4), "%s/images/rock_02.jpg", elm_app_data_dir_get());214ic = elm_icon_add(nf);215snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",216elm_app_data_dir_get());217elm_image_file_set(ic, buf, NULL);218evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);219
220bt = elm_button_add(nf);221evas_object_smart_callback_add(bt, "clicked", _page5, nf);222evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);223elm_object_part_content_set(bt, "icon", ic);224
225content = _content_image_new(nf, img4);226
227it = elm_naviframe_item_push(nf,228"Page 4",229NULL,230bt,231content,232NULL);233elm_object_item_part_text_set(it, "subtitle", "Title area visibility test");234
235ic = elm_icon_add(nf);236snprintf(buf, sizeof(buf), "%s/images/logo_small.png",237elm_app_data_dir_get());238elm_image_file_set(ic, buf, NULL);239evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);240elm_object_item_part_content_set(it, "icon", ic);241elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);242evas_object_smart_callback_add(content, "clicked", _title_visible, it);243}
244
245static void246_page3(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)247{
248Evas_Object *bt, *bt2, *ic, *content, *nf = data;249char buf[PATH_MAX];250char img3[PATH_MAX];251Elm_Object_Item *it;252
253snprintf(img3, sizeof(img3), "%s/images/rock_01.jpg", elm_app_data_dir_get());254bt = elm_button_add(nf);255evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);256BUTTON_TEXT_SET(bt, "Prev");257evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);258
259bt2 = elm_button_add(nf);260evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);261BUTTON_TEXT_SET(bt2, "Next");262evas_object_smart_callback_add(bt2, "clicked", _page4, nf);263
264content = _content_image_new(nf, img3);265
266it = elm_naviframe_item_push(nf,267"Page 3",268bt,269bt2,270content,271NULL);272ic = elm_icon_add(nf);273snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());274elm_image_file_set(ic, buf, NULL);275evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);276
277elm_object_item_part_content_set(it, "icon", ic);278}
279
280static void281_page2(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)282{
283Evas_Object *bt, *content, *ic, *nf = data;284char buf[PATH_MAX];285char img2[PATH_MAX];286Elm_Object_Item *it;287
288snprintf(img2, sizeof(img2), "%s/images/plant_01.jpg", elm_app_data_dir_get());289bt = elm_button_add(nf);290evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);291evas_object_smart_callback_add(bt, "clicked", _page3, nf);292
293ic = elm_icon_add(nf);294snprintf(buf, sizeof(buf), "%s/images/icon_right_arrow.png",295elm_app_data_dir_get());296elm_image_file_set(ic, buf, NULL);297evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);298elm_object_part_content_set(bt, "icon", ic);299
300content = _content_image_new(nf, img2);301
302it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content, NULL);303elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");304}
305
306void
307test_naviframe_complex(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)308{
309Evas_Object *win, *nf, *btn, *box, *content, *tb, *o;310Elm_Object_Item *it;311int x;312
313char img1[PATH_MAX];314snprintf(img1, sizeof(img1), "%s/images/logo.png", elm_app_data_dir_get());315
316win = elm_win_util_standard_add("naviframe", "Naviframe");317elm_win_focus_highlight_enabled_set(win, EINA_TRUE);318elm_win_autodel_set(win, EINA_TRUE);319
320box = elm_box_add(win);321evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);322elm_box_horizontal_set(box, EINA_TRUE);323elm_win_resize_object_add(win, box);324evas_object_show(box);325
326tb = elm_toolbar_add(win);327evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND);328evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);329elm_toolbar_horizontal_set(tb, EINA_FALSE);330elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_ALWAYS);331elm_box_pack_end(box, tb);332evas_object_show(tb);333
334nf = elm_naviframe_add(win);335evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);336evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL);337elm_naviframe_prev_btn_auto_pushed_set(nf, EINA_FALSE);338elm_box_pack_end(box, nf);339evas_object_show(nf);340
341for (x = 0; x < 4; x++)342{343const char *label[] = { "View 1", "View 2", "View 3", "View 4" };344o = elm_naviframe_add(win);345evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);346
347btn = elm_button_add(o);348evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);349evas_object_smart_callback_add(btn, "clicked", _page2, o);350BUTTON_TEXT_SET(btn, "Next");351evas_object_show(btn);352
353if (x % 2)354content = _content_image_new(o, img1);355else356content = _content_list_new(o);357evas_object_data_set(o, "page1", elm_naviframe_item_push(o, "Page 1", NULL, btn, content, NULL));358
359it = elm_naviframe_item_simple_push(nf, o);360elm_toolbar_item_append(tb, NULL, label[x], _promote, it);361evas_object_show(o);362}363
364elm_toolbar_item_selected_set(elm_toolbar_last_item_get(tb), EINA_TRUE);365evas_object_resize(win, 400 * elm_config_scale_get(),366400 * elm_config_scale_get());367evas_object_show(win);368}
369