efl
177 строк · 5.2 Кб
1/**
2* Simple Elementary's <b>index widget</b> example, illustrating its
3* usage and API.
4*
5* See stdout/stderr for output. Compile with:
6*
7* @verbatim
8* gcc -g index_example_01.c -o index_example_01 `pkg-config --cflags --libs elementary`
9* @endverbatim
10*/
11
12#include <Elementary.h>13#include <assert.h>14
15static const char *dict[] = \16{
17#include "dict.txt"18};19
20static void21_index_item_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)22{
23printf("Deleting index node (%s). Comparing index "24"item data reported via callback with the one returned by "25"index's API on items: %s.\n",26elm_index_item_letter_get(event_info),27data == elm_object_item_data_get(event_info) ? "OK" :28"FAIL, something went wrong");29}
30
31/* delete an index item */
32static void33_item_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)34{
35Elm_Object_Item *it = elm_index_selected_item_get(data, 0);36
37if (!it) return;38
39printf("Deleting last selected index item, which had letter"40" %s (pointing to %p)\n", elm_index_item_letter_get(it),41elm_object_item_data_get(it));42
43elm_object_item_del(it);44elm_index_level_go(data, 0);45}
46
47static void48_item_del_all(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)49{
50elm_index_item_clear(data);51elm_index_level_go(data, 0);52}
53
54static void55_active_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)56{
57Eina_Bool disabled = elm_index_autohide_disabled_get(data);58elm_index_autohide_disabled_set(data, !disabled);59
60printf("Toggling index programmatically to %s.\n",61!disabled ? "On" : "Off");62}
63
64/* "delay,changed" hook */
65static void66_index_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)67{
68elm_list_item_bring_in(elm_object_item_data_get(event_info));69}
70
71static void72_index_selected(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)73{
74Elm_Object_Item *lit = event_info;75
76printf("New index item selected. Comparing item reported"77" via callback with the selection returned by the API: "78"%s.\n", lit == elm_index_selected_item_get(obj, 0) ? "OK" :79"FAIL, something went wrong");80}
81
82EAPI_MAIN int83elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)84{
85Evas_Object *win, *hbox, *vbox, *bt, *sep, *list, *id;86Elm_Object_Item *lit;87unsigned int i;88char curr = 0;89
90elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);91
92win = elm_win_util_standard_add("index", "Index Example");93elm_win_autodel_set(win, EINA_TRUE);94
95vbox = elm_box_add(win);96evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);97elm_win_resize_object_add(win, vbox);98evas_object_show(vbox);99
100list = elm_list_add(win);101evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);102evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);103evas_object_show(list);104elm_box_pack_end(vbox, list);105
106id = elm_index_add(win);107evas_object_size_hint_weight_set(id, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);108elm_win_resize_object_add(win, id);109evas_object_show(id);110
111for (i = 0; i < (sizeof(dict) / sizeof(dict[0])); i++)112{113lit = elm_list_item_append(list, dict[i], NULL, NULL, NULL, NULL);114
115if (curr != dict[i][0])116{117Elm_Object_Item *index_it;118char buf[32];119
120curr = dict[i][0];121/* indexing by first letters */122
123snprintf(buf, sizeof(buf), "%c", curr);124index_it = elm_index_item_append(id, buf, NULL, lit);125
126/* this is here just to demostrate the API call */127(void)elm_index_item_find(id, lit);128assert(elm_index_item_find(id, lit) == index_it);129
130elm_object_item_del_cb_set(index_it, _index_item_del);131}132}133
134evas_object_smart_callback_add(id, "delay,changed", _index_changed,135NULL);136evas_object_smart_callback_add(id, "selected", _index_selected, NULL);137elm_index_level_go(id, 0);138
139/* attribute setting knobs */140sep = elm_separator_add(win);141elm_separator_horizontal_set(sep, EINA_TRUE);142elm_box_pack_end(vbox, sep);143evas_object_show(sep);144
145hbox = elm_box_add(win);146elm_box_horizontal_set(hbox, EINA_TRUE);147evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);148evas_object_size_hint_fill_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);149elm_box_pack_end(vbox, hbox);150evas_object_show(hbox);151
152bt = elm_button_add(win);153elm_object_text_set(bt, "bring in index");154evas_object_smart_callback_add(bt, "clicked", _active_set, id);155elm_box_pack_end(hbox, bt);156evas_object_show(bt);157
158bt = elm_button_add(win);159elm_object_text_set(bt, "delete last selected item");160evas_object_smart_callback_add(bt, "clicked", _item_del, id);161elm_box_pack_end(hbox, bt);162evas_object_show(bt);163
164bt = elm_button_add(win);165elm_object_text_set(bt, "delete all items");166evas_object_smart_callback_add(bt, "clicked", _item_del_all, id);167elm_box_pack_end(hbox, bt);168evas_object_show(bt);169
170evas_object_resize(win, 320, 600);171evas_object_show(win);172
173elm_run();174
175return 0;176}
177ELM_MAIN()178