Merge branch 'master' of juyung.seo@165.213.180.234:/git/slp2.0/slp2.0-pkgs/EFL-pkgs...
[framework/uifw/elementary.git] / src / bin / test_index.c
1 #include <Elementary.h>
2 #ifndef ELM_LIB_QUICKLAUNCH
3 static Elm_Genlist_Item_Class itci;
4 char *gli_label_get(const void *data, Evas_Object *obj, const char *part)
5 {
6    char buf[256];
7    int j = (int)data;
8    snprintf(buf, sizeof(buf), "%c%c", 
9             'A' + ((j >> 4) & 0xf),
10             'a' + ((j     ) & 0xf)
11             );
12    return strdup(buf);
13 }
14
15 void
16 index_changed2(void *data, Evas_Object *obj, void *event_info)
17 {
18    // called on a change but delayed in case multiple changes happen in a
19    // short timespan
20    elm_genlist_item_top_bring_in(event_info);
21 }
22
23 void
24 index_changed(void *data, Evas_Object *obj, void *event_info)
25 {
26    // this is calld on every change, no matter how often
27    // elm_genlist_item_bring_in(event_info);
28 }
29
30 void
31 index_selected(void *data, Evas_Object *obj, void *event_info)
32 {
33    // called on final select
34    elm_genlist_item_top_bring_in(event_info);
35 }
36
37 void
38 test_index(void *data, Evas_Object *obj, void *event_info)
39 {
40    Evas_Object *win, *bg, *gl, *id;
41    Elm_Genlist_Item *it;
42    int i, j;
43
44    win = elm_win_add(NULL, "index", ELM_WIN_BASIC);
45    elm_win_title_set(win, "Index");
46    elm_win_autodel_set(win, 1);
47
48    bg = elm_bg_add(win);
49    elm_win_resize_object_add(win, bg);
50    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
51    evas_object_show(bg);
52
53    gl = elm_genlist_add(win);
54    evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
55    elm_win_resize_object_add(win, gl);
56    evas_object_show(gl);
57    
58    id = elm_index_add(win);
59    evas_object_size_hint_weight_set(id, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
60    elm_win_resize_object_add(win, id);
61    
62    evas_object_show(id);
63
64    itci.item_style     = "default";
65    itci.func.label_get = gli_label_get;
66    itci.func.icon_get  = NULL;
67    itci.func.state_get = NULL;
68    itci.func.del       = NULL;
69
70    j = 0;
71    for (i = 0; i < 100; i++)
72      {
73         it = elm_genlist_item_append(gl, &itci,
74                                      (void *)j/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, NULL/* func */,
75                                      NULL/* func data */);
76         if ((j & 0xf) == 0)
77           {
78              char buf[32];
79              
80              snprintf(buf, sizeof(buf), "%c", 'A' + ((j >> 4) & 0xf));
81              elm_index_item_append(id, buf, it);
82           }
83         j += 2;
84      }
85    evas_object_smart_callback_add(id, "delay,changed", index_changed2, NULL);
86    evas_object_smart_callback_add(id, "changed", index_changed, NULL);
87    evas_object_smart_callback_add(id, "selected", index_selected, NULL);
88    elm_index_item_go(id, 0);
89
90    evas_object_resize(win, 320, 480);
91    evas_object_show(win);
92 }
93
94 /***********/
95
96 typedef struct _Test_Index2_Elements
97 {
98    Evas_Object *entry, *lst, *id;
99 } Test_Index2_Elements;
100
101 void
102 test_index2_del(void *data, Evas_Object *obj, void *event_info)
103 {
104    /* FIXME it won't be called if elm_test main window is closed */
105    free(data);
106 }
107
108 int
109 test_index2_cmp(const void *data1, const void *data2)
110 {
111    const char *label1, *label2;
112    const Elm_List_Item *it1 = data1;
113    const Elm_List_Item *it2 = data2;
114
115    label1 = elm_list_item_label_get(it1);
116    label2 = elm_list_item_label_get(it2);
117
118    return strcasecmp(label1, label2);
119 }
120
121 int
122 test_index2_icmp(const void *data1, const void *data2)
123 {
124    const char *label1, *label2;
125    const Elm_Index_Item *it1 = data1;
126    const Elm_Index_Item *it2 = data2;
127
128    label1 = elm_index_item_letter_get(it1);
129    label2 = elm_index_item_letter_get(it2);
130
131    return strcasecmp(label1, label2);
132 }
133
134 void
135 test_index2_it_add(void *data, Evas_Object *obj, void *event_info)
136 {
137    Test_Index2_Elements *gui = data;
138    Elm_List_Item *it;
139    const char *label;
140    char letter[2];
141
142    label = elm_scrolled_entry_entry_get(gui->entry);
143    snprintf(letter, sizeof(letter), "%c", label[0]);
144    it = elm_list_item_sorted_insert(gui->lst, label, NULL, NULL, NULL, NULL,
145          test_index2_cmp);
146    elm_index_item_sorted_insert(gui->id, letter, it, test_index2_icmp,
147          test_index2_cmp);
148    elm_list_go(gui->lst);
149    /* FIXME it's not showing the recently added item */
150    elm_list_item_show(it);
151 }
152
153 void
154 test_index2_it_del(void *data, Evas_Object *obj, void *event_info)
155 {
156    Test_Index2_Elements *gui = data;
157    const char *label, *label_next;
158    Elm_List_Item *it, *it_next;
159
160    it = elm_list_selected_item_get(obj);
161    it_next = elm_list_item_next(it);
162
163    if (!it_next)
164      {
165         elm_index_item_del(gui->id, it);
166         elm_list_item_del(it);
167         return;
168      }
169
170    label = elm_list_item_label_get(it);
171    label_next = elm_list_item_label_get(it_next);
172
173    if (label[0] == label_next[0])
174      {
175         Elm_Index_Item *iit;
176         iit = elm_index_item_find(gui->id, it);
177         elm_index_item_data_set(iit, it_next);
178      }
179    else
180      elm_index_item_del(gui->id, it);
181
182    elm_list_item_del(it);
183 }
184
185 void
186 test_index2_id_changed(void *data, Evas_Object *obj, void *event_info)
187 {
188    elm_list_item_show(event_info);
189 }
190
191 void
192 test_index2(void *data, Evas_Object *obj, void *event_info)
193 {
194    Evas_Object *win, *bg, *box, *bt;
195    Test_Index2_Elements *gui;
196
197    gui = malloc(sizeof(*gui));
198
199    win = elm_win_add(NULL, "sorted-index-list", ELM_WIN_BASIC);
200    elm_win_title_set(win, "Sorted Index and List");
201    evas_object_smart_callback_add(win, "delete-request", test_index2_del, gui);
202    elm_win_autodel_set(win, 1);
203
204    bg = elm_bg_add(win);
205    elm_win_resize_object_add(win, bg);
206    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
207    evas_object_show(bg);
208
209    box = elm_box_add(win);
210    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
211    elm_win_resize_object_add(win, box);
212    evas_object_show(box);
213
214    gui->id = elm_index_add(win);
215    evas_object_size_hint_weight_set(gui->id, EVAS_HINT_EXPAND,
216          EVAS_HINT_EXPAND);
217    elm_win_resize_object_add(win, gui->id);
218    evas_object_smart_callback_add(gui->id, "delay,changed",
219          test_index2_id_changed, NULL);
220    evas_object_show(gui->id);
221
222    gui->entry = elm_scrolled_entry_add(win);
223    elm_scrolled_entry_entry_set(gui->entry, "Label");
224    elm_scrolled_entry_single_line_set(gui->entry, EINA_TRUE);
225    evas_object_size_hint_weight_set(gui->entry, EVAS_HINT_EXPAND, 0);
226    evas_object_size_hint_fill_set(gui->entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
227    elm_box_pack_end(box, gui->entry);
228    evas_object_show(gui->entry);
229
230    bt = elm_button_add(win);
231    elm_button_label_set(bt, "Add");
232    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
233    evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
234    elm_box_pack_end(box, bt);
235    evas_object_smart_callback_add(bt, "clicked", test_index2_it_add, gui);
236    evas_object_show(bt);
237
238    gui->lst = elm_list_add(win);
239    elm_box_pack_end(box, gui->lst);
240    evas_object_size_hint_weight_set(gui->lst, EVAS_HINT_EXPAND,
241          EVAS_HINT_EXPAND);
242    evas_object_size_hint_fill_set(gui->lst, EVAS_HINT_FILL, EVAS_HINT_FILL);
243    evas_object_smart_callback_add(gui->lst, "selected", test_index2_it_del,
244          gui);
245    elm_list_go(gui->lst);
246    evas_object_show(gui->lst);
247
248    evas_object_resize(win, 320, 480);
249    evas_object_show(win);
250 }
251 #endif