2 * Elementary's <b>list widget</b> example, illustrating its API,
3 * covering most of item functions.
5 * See stdout/stderr for output. Compile with:
8 * gcc -g list_example_03.c -o list_example_03 `pkg-config --cflags --libs elementary`
12 #include <Elementary.h>
14 static int counter = 3;
25 _prepend_cb(void *data, Evas_Object *obj, void *event_info)
27 Elm_Object_Item *list_it;
28 Evas_Object *li = data;
31 snprintf(label, sizeof(label), "Item %i", counter++);
32 list_it = elm_list_item_prepend(li, label, NULL, NULL, NULL, NULL);
34 printf("Error adding item\n");
38 _add_cb(void *data, Evas_Object *obj, void *event_info)
40 Elm_Object_Item *list_it;
41 Evas_Object *li = data;
44 snprintf(label, sizeof(label), "Item %i", counter++);
45 list_it = elm_list_item_append(li, label, NULL, NULL, NULL, NULL);
47 printf("Error adding item\n");
51 _add_ic_cb(void *data, Evas_Object *obj, void *event_info)
53 Elm_Object_Item *list_it;
54 Evas_Object *ic, *li = data;
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);
62 list_it = elm_list_item_append(li, label, ic, NULL, NULL, NULL);
64 printf("Error adding item with icon\n");
68 _sel_cb(void *data, Evas_Object *obj, void *event_info)
70 Elm_Object_Item *list_it = event_info;
71 printf("Selected label: %s\n", elm_object_item_text_get(list_it));
75 _add_func_cb(void *data, Evas_Object *obj, void *event_info)
77 Elm_Object_Item *list_it;
78 Evas_Object *li = data;
81 snprintf(label, sizeof(label), "Item %i", counter++);
82 list_it = elm_list_item_append(li, label, NULL, NULL, _sel_cb, NULL);
84 printf("Error adding item\n");
88 _sel_data_cb(void *data, Evas_Object *obj, void *event_info)
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);
97 _free_data(void *data, Evas_Object *obj, void *event_info)
103 _add_data_cb(void *data, Evas_Object *obj, void *event_info)
105 Elm_Object_Item *list_it;
106 Evas_Object *li = data;
108 char *content = malloc(sizeof(char) * 32);
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);
114 printf("Error adding item\n");
117 elm_object_item_del_cb_set(list_it, _free_data);
121 _del_cb(void *data, Evas_Object *obj, void *event_info)
123 Elm_Object_Item *selected_item;
124 Evas_Object *li = data;
126 selected_item = elm_list_selected_item_get(li);
127 elm_object_item_del(selected_item);
131 _unselect_cb(void *data, Evas_Object *obj, void *event_info)
133 Elm_Object_Item *selected_item;
134 Evas_Object *li = data;
136 selected_item = elm_list_selected_item_get(li);
137 elm_list_item_selected_set(selected_item, EINA_FALSE);
141 _print_cb(void *data, Evas_Object *obj, void *event_info)
143 const Eina_List *l, *items;
144 Elm_Object_Item *list_it;
145 Evas_Object *li = data;
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));
153 _clear_cb(void *data, Evas_Object *obj, void *event_info)
155 Evas_Object *li = data;
160 _select_next_cb(void *data, Evas_Object *obj, void *event_info)
162 Elm_Object_Item *selected_item, *next_item;
163 Evas_Object *li = data;
165 selected_item = elm_list_selected_item_get(li);
166 if (!selected_item) return;
168 next_item = elm_list_item_next(selected_item);
170 elm_list_item_selected_set(next_item, EINA_TRUE);
174 _insert_after_cb(void *data, Evas_Object *obj, void *event_info)
176 Elm_Object_Item *selected_item, *list_it;
177 Evas_Object *li = data;
180 selected_item = elm_list_selected_item_get(li);
181 if (!selected_item) return;
183 snprintf(label, sizeof(label), "Item %i", counter++);
184 list_it = elm_list_item_insert_after(li, selected_item, label, NULL, NULL,
187 printf("Error adding item\n");
191 _select_prev_cb(void *data, Evas_Object *obj, void *event_info)
193 Elm_Object_Item *selected_item, *prev_item;
194 Evas_Object *li = data;
196 selected_item = elm_list_selected_item_get(li);
197 if (!selected_item) return;
199 prev_item = elm_list_item_prev(selected_item);
201 elm_list_item_selected_set(prev_item, EINA_TRUE);
205 _insert_before_cb(void *data, Evas_Object *obj, void *event_info)
207 Elm_Object_Item *selected_item, *list_it;
208 Evas_Object *li = data;
211 selected_item = elm_list_selected_item_get(li);
212 if (!selected_item) return;
214 snprintf(label, sizeof(label), "Item %i", counter++);
215 list_it = elm_list_item_insert_before(li, selected_item, label, NULL, NULL,
218 printf("Error adding item\n");
222 _set_separator_cb(void *data, Evas_Object *obj, void *event_info)
224 Elm_Object_Item *selected_item;
225 Evas_Object *li = data;
227 selected_item = elm_list_selected_item_get(li);
228 if (!selected_item) return;
229 elm_list_item_separator_set(selected_item, EINA_TRUE);
233 _disable_cb(void *data, Evas_Object *obj, void *event_info)
235 Elm_Object_Item *selected_item;
236 Evas_Object *li = data;
238 selected_item = elm_list_selected_item_get(li);
239 if (!selected_item) return;
240 elm_object_item_disabled_set(selected_item, EINA_TRUE);
244 elm_main(int argc, char **argv)
246 Evas_Object *win, *bg, *bx, *hbx, *li, *bt;
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
431 evas_object_show(li);
433 evas_object_resize(win, 320, 600);
434 evas_object_show(win);