tizen 2.4 release
[framework/uifw/elementary.git] / src / examples / index_example_01.c
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, void *event_info)
22 {
23    fprintf(stdout, "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, void *event_info)
34 {
35    Elm_Object_Item *it = elm_index_selected_item_get(data, 0);
36
37    if (!it) return;
38
39    fprintf(stdout, "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, void *event_info)
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, void *event_info)
56 {
57    Eina_Bool disabled = elm_index_autohide_disabled_get(data);
58    elm_index_autohide_disabled_set(data, !disabled);
59
60    fprintf(stdout, "Toggling index programmatically to %s.\n",
61            !disabled ? "On" : "Off");
62 }
63
64 /* "delay,changed" hook */
65 static void
66 _index_changed(void *data, Evas_Object *obj, 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, Evas_Object *obj, void *event_info)
73 {
74    Elm_Object_Item *lit = event_info;
75
76    fprintf(stdout, "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, char **argv)
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()