efl

Форк
0
/
index_example_01.c 
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

15
static const char *dict[] = \
16
{
17
#include "dict.txt"
18
};
19

20
static void
21
_index_item_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
22
{
23
   printf("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",
26
           elm_index_item_letter_get(event_info),
27
           data == elm_object_item_data_get(event_info) ? "OK" :
28
           "FAIL, something went wrong");
29
}
30

31
/* delete an index item */
32
static void
33
_item_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
34
{
35
   Elm_Object_Item *it = elm_index_selected_item_get(data, 0);
36

37
   if (!it) return;
38

39
   printf("Deleting last selected index item, which had letter"
40
           " %s (pointing to %p)\n", elm_index_item_letter_get(it),
41
           elm_object_item_data_get(it));
42

43
   elm_object_item_del(it);
44
   elm_index_level_go(data, 0);
45
}
46

47
static void
48
_item_del_all(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
49
{
50
   elm_index_item_clear(data);
51
   elm_index_level_go(data, 0);
52
}
53

54
static void
55
_active_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
56
{
57
   Eina_Bool disabled = elm_index_autohide_disabled_get(data);
58
   elm_index_autohide_disabled_set(data, !disabled);
59

60
   printf("Toggling index programmatically to %s.\n",
61
           !disabled ? "On" : "Off");
62
}
63

64
/* "delay,changed" hook */
65
static void
66
_index_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
67
{
68
   elm_list_item_bring_in(elm_object_item_data_get(event_info));
69
}
70

71
static void
72
_index_selected(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
73
{
74
   Elm_Object_Item *lit = event_info;
75

76
   printf("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

82
EAPI_MAIN int
83
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
84
{
85
   Evas_Object *win, *hbox, *vbox, *bt, *sep, *list, *id;
86
   Elm_Object_Item *lit;
87
   unsigned int i;
88
   char curr = 0;
89

90
   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
91

92
   win = elm_win_util_standard_add("index", "Index Example");
93
   elm_win_autodel_set(win, EINA_TRUE);
94

95
   vbox = elm_box_add(win);
96
   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
97
   elm_win_resize_object_add(win, vbox);
98
   evas_object_show(vbox);
99

100
   list = elm_list_add(win);
101
   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
102
   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
103
   evas_object_show(list);
104
   elm_box_pack_end(vbox, list);
105

106
   id = elm_index_add(win);
107
   evas_object_size_hint_weight_set(id, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
108
   elm_win_resize_object_add(win, id);
109
   evas_object_show(id);
110

111
   for (i = 0; i < (sizeof(dict) / sizeof(dict[0])); i++)
112
     {
113
        lit = elm_list_item_append(list, dict[i], NULL, NULL, NULL, NULL);
114

115
        if (curr != dict[i][0])
116
          {
117
             Elm_Object_Item *index_it;
118
             char buf[32];
119

120
             curr = dict[i][0];
121
             /* indexing by first letters */
122

123
             snprintf(buf, sizeof(buf), "%c", curr);
124
             index_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);
128
             assert(elm_index_item_find(id, lit) == index_it);
129

130
             elm_object_item_del_cb_set(index_it, _index_item_del);
131
          }
132
     }
133

134
   evas_object_smart_callback_add(id, "delay,changed", _index_changed,
135
                                  NULL);
136
   evas_object_smart_callback_add(id, "selected", _index_selected, NULL);
137
   elm_index_level_go(id, 0);
138

139
   /* attribute setting knobs */
140
   sep = elm_separator_add(win);
141
   elm_separator_horizontal_set(sep, EINA_TRUE);
142
   elm_box_pack_end(vbox, sep);
143
   evas_object_show(sep);
144

145
   hbox = elm_box_add(win);
146
   elm_box_horizontal_set(hbox, EINA_TRUE);
147
   evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
148
   evas_object_size_hint_fill_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
149
   elm_box_pack_end(vbox, hbox);
150
   evas_object_show(hbox);
151

152
   bt = elm_button_add(win);
153
   elm_object_text_set(bt, "bring in index");
154
   evas_object_smart_callback_add(bt, "clicked", _active_set, id);
155
   elm_box_pack_end(hbox, bt);
156
   evas_object_show(bt);
157

158
   bt = elm_button_add(win);
159
   elm_object_text_set(bt, "delete last selected item");
160
   evas_object_smart_callback_add(bt, "clicked", _item_del, id);
161
   elm_box_pack_end(hbox, bt);
162
   evas_object_show(bt);
163

164
   bt = elm_button_add(win);
165
   elm_object_text_set(bt, "delete all items");
166
   evas_object_smart_callback_add(bt, "clicked", _item_del_all, id);
167
   elm_box_pack_end(hbox, bt);
168
   evas_object_show(bt);
169

170
   evas_object_resize(win, 320, 600);
171
   evas_object_show(win);
172

173
   elm_run();
174

175
   return 0;
176
}
177
ELM_MAIN()
178

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

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

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

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