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