Initialize Tizen 2.3
[framework/uifw/elementary.git] / src / examples / list_example_03.c
1 /**
2  * Elementary's <b>list widget</b> example, illustrating its API,
3  * covering most of item functions.
4  *
5  * See stdout/stderr for output. Compile with:
6  *
7  * @verbatim
8  * gcc -g list_example_03.c -o list_example_03 `pkg-config --cflags --libs elementary`
9  * @endverbatim
10  */
11
12 #include <Elementary.h>
13
14 static int counter = 3;
15
16 static void
17 _on_done(void        *data,
18          Evas_Object *obj,
19          void        *event_info)
20 {
21    elm_exit();
22 }
23
24 static void
25 _prepend_cb(void *data, Evas_Object *obj, void *event_info)
26 {
27    Elm_Object_Item *list_it;
28    Evas_Object *li = data;
29    char label[32];
30
31    snprintf(label, sizeof(label), "Item %i", counter++);
32    list_it = elm_list_item_prepend(li, label, NULL, NULL, NULL, NULL);
33    if (!list_it)
34      printf("Error adding item\n");
35 }
36
37 static void
38 _add_cb(void *data, Evas_Object *obj, void *event_info)
39 {
40    Elm_Object_Item *list_it;
41    Evas_Object *li = data;
42    char label[32];
43
44    snprintf(label, sizeof(label), "Item %i", counter++);
45    list_it = elm_list_item_append(li, label, NULL, NULL, NULL, NULL);
46    if (!list_it)
47      printf("Error adding item\n");
48 }
49
50 static void
51 _add_ic_cb(void *data, Evas_Object *obj, void *event_info)
52 {
53    Elm_Object_Item *list_it;
54    Evas_Object *ic, *li = data;
55    char label[32];
56
57    snprintf(label, sizeof(label), "Item %i", counter++);
58    ic = elm_icon_add(li);
59    elm_icon_standard_set(ic, "home");
60    elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
61
62    list_it = elm_list_item_append(li, label, ic,  NULL, NULL, NULL);
63    if (!list_it)
64      printf("Error adding item with icon\n");
65 }
66
67 static void
68 _sel_cb(void *data, Evas_Object *obj, void *event_info)
69 {
70    Elm_Object_Item *list_it = event_info;
71    printf("Selected label: %s\n", elm_object_item_text_get(list_it));
72 }
73
74 static void
75 _add_func_cb(void *data, Evas_Object *obj, void *event_info)
76 {
77    Elm_Object_Item *list_it;
78    Evas_Object *li = data;
79    char label[32];
80
81    snprintf(label, sizeof(label), "Item %i", counter++);
82    list_it = elm_list_item_append(li, label, NULL, NULL, _sel_cb, NULL);
83    if (!list_it)
84      printf("Error adding item\n");
85 }
86
87 static void
88 _sel_data_cb(void *data, Evas_Object *obj, void *event_info)
89 {
90    char *content = data;
91    Elm_Object_Item *list_it = event_info;
92    printf("Selected label: %s with data: %s\n",
93           elm_object_item_text_get(list_it), content);
94 }
95
96 static void
97 _free_data(void *data, Evas_Object *obj, void *event_info)
98 {
99    free(data);
100 }
101
102 static void
103 _add_data_cb(void *data, Evas_Object *obj, void *event_info)
104 {
105    Elm_Object_Item *list_it;
106    Evas_Object *li = data;
107    char label[32];
108    char *content = malloc(sizeof(char) * 32);
109
110    snprintf(content, 32, "Item content %i", counter);
111    snprintf(label, sizeof(label), "Item %i", counter++);
112    list_it = elm_list_item_append(li, label, NULL, NULL, _sel_data_cb, content);
113    if (!list_it) {
114      printf("Error adding item\n");
115      return;
116    }
117    elm_object_item_del_cb_set(list_it, _free_data);
118 }
119
120 static void
121 _del_cb(void *data, Evas_Object *obj, void *event_info)
122 {
123    Elm_Object_Item *selected_item;
124    Evas_Object *li = data;
125
126    selected_item = elm_list_selected_item_get(li);
127    elm_object_item_del(selected_item);
128 }
129
130 static void
131 _unselect_cb(void *data, Evas_Object *obj, void *event_info)
132 {
133    Elm_Object_Item *selected_item;
134    Evas_Object *li = data;
135
136    selected_item = elm_list_selected_item_get(li);
137    elm_list_item_selected_set(selected_item, EINA_FALSE);
138 }
139
140 static void
141 _print_cb(void *data, Evas_Object *obj, void *event_info)
142 {
143    const Eina_List *l, *items;
144    Elm_Object_Item *list_it;
145    Evas_Object *li = data;
146
147    items = elm_list_items_get(li);
148    EINA_LIST_FOREACH(items, l, list_it)
149      printf("%s\n", elm_object_item_text_get(list_it));
150 }
151
152 static void
153 _clear_cb(void *data, Evas_Object *obj, void *event_info)
154 {
155    Evas_Object *li = data;
156    elm_list_clear(li);
157 }
158
159 static void
160 _select_next_cb(void *data, Evas_Object *obj, void *event_info)
161 {
162    Elm_Object_Item *selected_item, *next_item;
163    Evas_Object *li = data;
164
165    selected_item = elm_list_selected_item_get(li);
166    if (!selected_item) return;
167
168    next_item = elm_list_item_next(selected_item);
169    if (next_item)
170      elm_list_item_selected_set(next_item, EINA_TRUE);
171 }
172
173 static void
174 _insert_after_cb(void *data, Evas_Object *obj, void *event_info)
175 {
176    Elm_Object_Item *selected_item, *list_it;
177    Evas_Object *li = data;
178    char label[32];
179
180    selected_item = elm_list_selected_item_get(li);
181    if (!selected_item) return;
182
183    snprintf(label, sizeof(label), "Item %i", counter++);
184    list_it = elm_list_item_insert_after(li, selected_item, label, NULL, NULL,
185                                         NULL, NULL);
186    if (!list_it)
187      printf("Error adding item\n");
188 }
189
190 static void
191 _select_prev_cb(void *data, Evas_Object *obj, void *event_info)
192 {
193    Elm_Object_Item *selected_item, *prev_item;
194    Evas_Object *li = data;
195
196    selected_item = elm_list_selected_item_get(li);
197    if (!selected_item) return;
198
199    prev_item = elm_list_item_prev(selected_item);
200    if (prev_item)
201      elm_list_item_selected_set(prev_item, EINA_TRUE);
202 }
203
204 static void
205 _insert_before_cb(void *data, Evas_Object *obj, void *event_info)
206 {
207    Elm_Object_Item *selected_item, *list_it;
208    Evas_Object *li = data;
209    char label[32];
210
211    selected_item = elm_list_selected_item_get(li);
212    if (!selected_item) return;
213
214    snprintf(label, sizeof(label), "Item %i", counter++);
215    list_it = elm_list_item_insert_before(li, selected_item, label, NULL, NULL,
216                                     NULL, NULL);
217    if (!list_it)
218      printf("Error adding item\n");
219 }
220
221 static void
222 _set_separator_cb(void *data, Evas_Object *obj, void *event_info)
223 {
224    Elm_Object_Item *selected_item;
225    Evas_Object *li = data;
226
227    selected_item = elm_list_selected_item_get(li);
228    if (!selected_item) return;
229    elm_list_item_separator_set(selected_item, EINA_TRUE);
230 }
231
232 static void
233 _disable_cb(void *data, Evas_Object *obj, void *event_info)
234 {
235    Elm_Object_Item *selected_item;
236    Evas_Object *li = data;
237
238    selected_item = elm_list_selected_item_get(li);
239    if (!selected_item) return;
240    elm_object_item_disabled_set(selected_item, EINA_TRUE);
241 }
242
243 EAPI_MAIN int
244 elm_main(int argc, char **argv)
245 {
246    Evas_Object *win, *bg, *bx, *hbx, *li, *bt;
247
248    win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
249    elm_win_title_set(win, "List Items Example");
250    evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
251
252    bg = elm_bg_add(win);
253    elm_win_resize_object_add(win, bg);
254    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
255    evas_object_show(bg);
256
257    bx = elm_box_add(win);
258    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
259    elm_win_resize_object_add(win, bx);
260    evas_object_show(bx);
261
262    li = elm_list_add(win);
263    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
264    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
265    elm_box_pack_end(bx, li);
266
267    elm_list_item_append(li, "Item 0", NULL, NULL, NULL, NULL);
268    elm_list_item_append(li, "Item 1", NULL, NULL, NULL, NULL);
269    elm_list_item_append(li, "Item 2", NULL, NULL, NULL, NULL);
270
271    hbx = elm_box_add(win);
272    elm_box_horizontal_set(hbx, EINA_TRUE);
273    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
274    evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
275    elm_box_pack_end(bx, hbx);
276    evas_object_show(hbx);
277
278    bt = elm_button_add(win);
279    elm_object_text_set(bt, "Prepend item");
280    evas_object_smart_callback_add(bt, "clicked", _prepend_cb, li);
281    elm_box_pack_end(hbx, bt);
282    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
283    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
284    evas_object_show(bt);
285
286    bt = elm_button_add(win);
287    elm_object_text_set(bt, "Append item");
288    evas_object_smart_callback_add(bt, "clicked", _add_cb, li);
289    elm_box_pack_end(hbx, bt);
290    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
291    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
292    evas_object_show(bt);
293
294    hbx = elm_box_add(win);
295    elm_box_horizontal_set(hbx, EINA_TRUE);
296    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
297    evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
298    elm_box_pack_end(bx, hbx);
299    evas_object_show(hbx);
300
301    bt = elm_button_add(win);
302    elm_object_text_set(bt, "Append with icon");
303    evas_object_smart_callback_add(bt, "clicked", _add_ic_cb, li);
304    elm_box_pack_end(hbx, bt);
305    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
306    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
307    evas_object_show(bt);
308
309    bt = elm_button_add(win);
310    elm_object_text_set(bt, "Append with selected function");
311    evas_object_smart_callback_add(bt, "clicked", _add_func_cb, li);
312    elm_box_pack_end(hbx, bt);
313    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
314    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
315    evas_object_show(bt);
316
317    bt = elm_button_add(win);
318    elm_object_text_set(bt, "Append with data");
319    evas_object_smart_callback_add(bt, "clicked", _add_data_cb, li);
320    elm_box_pack_end(hbx, bt);
321    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
322    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
323    evas_object_show(bt);
324
325    hbx = elm_box_add(win);
326    elm_box_horizontal_set(hbx, EINA_TRUE);
327    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
328    evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
329    elm_box_pack_end(bx, hbx);
330    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
331    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
332    evas_object_show(hbx);
333
334    bt = elm_button_add(win);
335    elm_object_text_set(bt, "Delete item");
336    evas_object_smart_callback_add(bt, "clicked", _del_cb, li);
337    elm_box_pack_end(hbx, bt);
338    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
339    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
340    evas_object_show(bt);
341
342    bt = elm_button_add(win);
343    elm_object_text_set(bt, "Unselect item");
344    evas_object_smart_callback_add(bt, "clicked", _unselect_cb, li);
345    elm_box_pack_end(hbx, bt);
346    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
347    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
348    evas_object_show(bt);
349
350    bt = elm_button_add(win);
351    elm_object_text_set(bt, "Print items");
352    evas_object_smart_callback_add(bt, "clicked", _print_cb, li);
353    elm_box_pack_end(hbx, bt);
354    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
355    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
356    evas_object_show(bt);
357
358    bt = elm_button_add(win);
359    elm_object_text_set(bt, "Clear");
360    evas_object_smart_callback_add(bt, "clicked", _clear_cb, li);
361    elm_box_pack_end(hbx, bt);
362    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
363    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
364    evas_object_show(bt);
365
366    hbx = elm_box_add(win);
367    elm_box_horizontal_set(hbx, EINA_TRUE);
368    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
369    evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
370    elm_box_pack_end(bx, hbx);
371    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
372    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
373    evas_object_show(hbx);
374
375    bt = elm_button_add(win);
376    elm_object_text_set(bt, "Select next item");
377    evas_object_smart_callback_add(bt, "clicked", _select_next_cb, li);
378    elm_box_pack_end(hbx, bt);
379    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
380    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
381    evas_object_show(bt);
382
383    bt = elm_button_add(win);
384    elm_object_text_set(bt, "Insert after item");
385    evas_object_smart_callback_add(bt, "clicked", _insert_after_cb, li);
386    elm_box_pack_end(hbx, bt);
387    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
388    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
389    evas_object_show(bt);
390
391    bt = elm_button_add(win);
392    elm_object_text_set(bt, "Select previous item");
393    evas_object_smart_callback_add(bt, "clicked", _select_prev_cb, li);
394    elm_box_pack_end(hbx, bt);
395    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
396    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
397    evas_object_show(bt);
398
399    bt = elm_button_add(win);
400    elm_object_text_set(bt, "Insert before item");
401    evas_object_smart_callback_add(bt, "clicked", _insert_before_cb, li);
402    elm_box_pack_end(hbx, bt);
403    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
404    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
405    evas_object_show(bt);
406
407    hbx = elm_box_add(win);
408    elm_box_horizontal_set(hbx, EINA_TRUE);
409    evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
410    evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
411    elm_box_pack_end(bx, hbx);
412    evas_object_show(hbx);
413
414    bt = elm_button_add(win);
415    elm_object_text_set(bt, "Set as separator");
416    evas_object_smart_callback_add(bt, "clicked", _set_separator_cb, li);
417    elm_box_pack_end(hbx, bt);
418    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
419    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
420    evas_object_show(bt);
421
422    bt = elm_button_add(win);
423    elm_object_text_set(bt, "Disable item");
424    evas_object_smart_callback_add(bt, "clicked", _disable_cb, li);
425    elm_box_pack_end(hbx, bt);
426    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
427    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
428    evas_object_show(bt);
429
430    elm_list_go(li);
431    evas_object_show(li);
432
433    evas_object_resize(win, 320, 600);
434    evas_object_show(win);
435
436    elm_run();
437    elm_shutdown();
438
439    return 0;
440 }
441 ELM_MAIN()