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;
17 _prepend_cb(void *data, Evas_Object *obj, void *event_info)
19 Elm_Object_Item *list_it;
20 Evas_Object *li = data;
23 snprintf(label, sizeof(label), "Item %i", counter++);
24 list_it = elm_list_item_prepend(li, label, NULL, NULL, NULL, NULL);
27 printf("Error adding item\n");
31 _add_cb(void *data, Evas_Object *obj, void *event_info)
33 Elm_Object_Item *list_it;
34 Evas_Object *li = data;
37 snprintf(label, sizeof(label), "Item %i", counter++);
38 list_it = elm_list_item_append(li, label, NULL, NULL, NULL, NULL);
41 printf("Error adding item\n");
45 _add_ic_cb(void *data, Evas_Object *obj, void *event_info)
47 Elm_Object_Item *list_it;
48 Evas_Object *ic, *li = data;
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);
56 list_it = elm_list_item_append(li, label, ic, NULL, NULL, NULL);
59 printf("Error adding item with icon\n");
63 _sel_cb(void *data, Evas_Object *obj, void *event_info)
65 Elm_Object_Item *list_it = event_info;
66 printf("Selected label: %s\n", elm_object_item_text_get(list_it));
70 _add_func_cb(void *data, Evas_Object *obj, void *event_info)
72 Elm_Object_Item *list_it;
73 Evas_Object *li = data;
76 snprintf(label, sizeof(label), "Item %i", counter++);
77 list_it = elm_list_item_append(li, label, NULL, NULL, _sel_cb, NULL);
80 printf("Error adding item\n");
84 _sel_data_cb(void *data, Evas_Object *obj, void *event_info)
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);
93 _free_data(void *data, Evas_Object *obj, void *event_info)
99 _add_data_cb(void *data, Evas_Object *obj, void *event_info)
101 Elm_Object_Item *list_it;
102 Evas_Object *li = data;
104 char *content = malloc(sizeof(char) * 32);
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);
112 printf("Error adding item\n");
115 elm_object_item_del_cb_set(list_it, _free_data);
119 _del_cb(void *data, Evas_Object *obj, void *event_info)
121 Elm_Object_Item *selected_item;
122 Evas_Object *li = data;
124 selected_item = elm_list_selected_item_get(li);
125 elm_object_item_del(selected_item);
130 _unselect_cb(void *data, Evas_Object *obj, void *event_info)
132 Elm_Object_Item *selected_item;
133 Evas_Object *li = data;
135 selected_item = elm_list_selected_item_get(li);
136 elm_list_item_selected_set(selected_item, EINA_FALSE);
140 _print_cb(void *data, Evas_Object *obj, void *event_info)
142 const Eina_List *l, *items;
143 Elm_Object_Item *list_it;
144 Evas_Object *li = data;
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));
152 _clear_cb(void *data, Evas_Object *obj, void *event_info)
154 Evas_Object *li = data;
159 _select_next_cb(void *data, Evas_Object *obj, void *event_info)
161 Elm_Object_Item *selected_item, *next_item;
162 Evas_Object *li = data;
164 selected_item = elm_list_selected_item_get(li);
165 if (!selected_item) return;
167 next_item = elm_list_item_next(selected_item);
169 elm_list_item_selected_set(next_item, EINA_TRUE);
173 _insert_after_cb(void *data, Evas_Object *obj, void *event_info)
175 Elm_Object_Item *selected_item, *list_it;
176 Evas_Object *li = data;
179 selected_item = elm_list_selected_item_get(li);
180 if (!selected_item) return;
182 snprintf(label, sizeof(label), "Item %i", counter++);
183 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,
219 printf("Error adding item\n");
223 _set_separator_cb(void *data, Evas_Object *obj, void *event_info)
225 Elm_Object_Item *selected_item;
226 Evas_Object *li = data;
228 selected_item = elm_list_selected_item_get(li);
229 if (!selected_item) return;
230 elm_list_item_separator_set(selected_item, EINA_TRUE);
235 _disable_cb(void *data, Evas_Object *obj, void *event_info)
237 Elm_Object_Item *selected_item;
238 Evas_Object *li = data;
240 selected_item = elm_list_selected_item_get(li);
241 if (!selected_item) return;
242 elm_object_item_disabled_set(selected_item, EINA_TRUE);
246 elm_main(int argc, char **argv)
248 Evas_Object *win, *bx, *hbx, *li, *bt;
250 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
252 win = elm_win_util_standard_add("list", "List Items Example");
253 elm_win_autodel_set(win, EINA_TRUE);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
429 evas_object_show(li);
431 evas_object_resize(win, 320, 600);
432 evas_object_show(win);