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