efl
194 строки · 6.2 Кб
1//Compile with:
2//gcc -g genlist_example_02.c -o genlist_example_02 `pkg-config --cflags --libs elementary`
3
4#include <Elementary.h>5#include <time.h>6
7#define N_ITEMS 3008
9static Elm_Genlist_Item_Class *_itc = NULL;10
11static char *12_item_label_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED)13{
14time_t t = (time_t)ecore_time_unix_get();15char buf[256];16int i = (int)(uintptr_t)data;17if (i % 2)18{19int n;20snprintf(buf, sizeof(buf), "Very Long Item # %i - realized at %s", i, ctime(&t));21n = strlen(buf);22buf[n - 1] = '\0';23}24else25snprintf(buf, sizeof(buf), "short item # %i", i);26return strdup(buf);27}
28
29static Evas_Object *30_item_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part)31{
32Evas_Object *ic = elm_icon_add(obj);33
34if (!strcmp(part, "elm.swallow.icon"))35elm_icon_standard_set(ic, "clock");36
37evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);38return ic;39}
40
41static void42_item_sel_cb(void *data, Evas_Object *obj, void *event_info)43{
44printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n",45data, obj, event_info);46}
47
48static void49_show_status_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED)50{
51Evas_Object *list = data;52Evas_Coord x, y, w, h, mx, my;53Elm_Object_Item *glit = elm_genlist_selected_item_get(list);54
55const Eina_List *selected, *l;56Eina_List *realized;57printf("\nfirst selected item: %p\n", glit);58
59selected = elm_genlist_selected_items_get(list);60printf("all selected items (%d): ", eina_list_count(selected));61EINA_LIST_FOREACH(selected, l, glit)62printf("%p ", glit);63printf("\n");64
65realized = elm_genlist_realized_items_get(list);66printf("realized items (%d): ", eina_list_count(realized));67// The realized items list should be freed by either eina_list_free() or EINA_LIST_FREE when it is no longer needed68EINA_LIST_FREE(realized, glit)69printf("%p ", glit);70printf("\n");71printf("genlist mode: %d\n", elm_genlist_decorate_mode_get(list));72printf("mode item: %p\n", elm_genlist_decorated_item_get(list));73
74evas_object_geometry_get(list, &x, &y, &w, &h);75mx = w / 2 + x;76my = h / 2 + y;77glit = elm_genlist_at_xy_item_get(list, mx, my, NULL);78printf("item in the middle of the screen: %p\n", glit);79}
80
81static void82_realize_cb(void *data, Evas_Object *o EINA_UNUSED, void *event_info EINA_UNUSED)83{
84Evas_Object *list = data;85elm_genlist_realized_items_update(list);86}
87
88EAPI_MAIN int89elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)90{
91Evas_Object *win, *box, *hbox;92Evas_Object *list, *btn;93unsigned int i;94
95win = elm_win_util_standard_add("genlist", "Genlist - simple");96elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);97elm_win_autodel_set(win, EINA_TRUE);98
99box = elm_box_add(win);100evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);101elm_win_resize_object_add(win, box);102evas_object_show(box);103
104list = elm_genlist_add(win);105
106if (!_itc)107{108_itc = elm_genlist_item_class_new();109_itc->item_style = "default";110_itc->func.text_get = _item_label_get;111_itc->func.content_get = _item_content_get;112_itc->func.state_get = NULL;113_itc->func.del = NULL;114}115
116Eina_Bool hbounce, vbounce, always, no_sel;117Elm_Scroller_Policy hp, vp;118Elm_Object_Select_Mode sel_mode;119
120always = no_sel = EINA_FALSE;121sel_mode = elm_genlist_select_mode_get(list);122if (sel_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)123always = EINA_TRUE;124else if (sel_mode == ELM_OBJECT_SELECT_MODE_NONE)125no_sel = EINA_TRUE;126
127printf("default values:\n");128printf("always select: %d\n", always);129elm_scroller_bounce_get(list, &hbounce, &vbounce);130printf("bounce - horizontal: %d, vertical: %d\n", hbounce, vbounce);131printf("homogeneous: %d\n", elm_genlist_homogeneous_get(list));132printf("horizontal mode: %d\n", elm_genlist_mode_get(list));133printf("longpress timeout: %0.3f\n",134elm_genlist_longpress_timeout_get(list));135printf("multi selection: %d\n", elm_genlist_multi_select_get(list));136printf("no selection mode: %d\n", no_sel);137elm_scroller_policy_get(list, &hp, &vp);138printf("scroller policy - horizontal: %d, vertical: %d\n", hp, vp);139printf("block count: %d\n", elm_genlist_block_count_get(list));140printf("\n");141
142elm_scroller_bounce_set(list, EINA_FALSE, EINA_FALSE);143elm_genlist_homogeneous_set(list, EINA_FALSE);144elm_genlist_mode_set(list, ELM_LIST_LIMIT);145elm_genlist_multi_select_set(list, EINA_TRUE);146elm_genlist_select_mode_set(list, ELM_OBJECT_SELECT_MODE_DEFAULT);147elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);148elm_genlist_longpress_timeout_set(list, 0.5);149elm_genlist_block_count_set(list, 16);150
151for (i = 0; i < N_ITEMS; i++)152{153elm_genlist_item_append(list, _itc,154(void *)(uintptr_t)i, NULL,155ELM_GENLIST_ITEM_NONE,156_item_sel_cb, NULL);157}158
159evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);160evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);161elm_box_pack_end(box, list);162evas_object_show(list);163
164hbox = elm_box_add(win);165elm_box_horizontal_set(hbox, EINA_TRUE);166evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);167evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);168elm_box_pack_end(box, hbox);169evas_object_show(hbox);170
171btn = elm_button_add(win);172elm_object_text_set(btn, "Show status");173evas_object_size_hint_weight_set(btn, 0, 0);174evas_object_size_hint_align_set(btn, 0.5, 0.5);175evas_object_smart_callback_add(btn, "clicked", _show_status_cb, list);176elm_box_pack_end(hbox, btn);177evas_object_show(btn);178
179btn = elm_button_add(win);180elm_object_text_set(btn, "Realize");181evas_object_size_hint_weight_set(btn, 0, 0);182evas_object_size_hint_align_set(btn, 0.5, 0.5);183evas_object_smart_callback_add(btn, "clicked", _realize_cb, list);184elm_box_pack_end(hbox, btn);185evas_object_show(btn);186
187evas_object_resize(win, 200, 320);188evas_object_show(win);189
190elm_run();191
192return 0;193}
194ELM_MAIN()195