2 //gcc -g genlist_example_04.c -o genlist_example_04 `pkg-config --cflags --libs elementary`
4 #include <Elementary.h>
8 static Elm_Genlist_Item_Class *_itc = NULL;
9 static Elm_Genlist_Item_Class *_itc_group = NULL;
10 static int nitems = 0;
13 _item_label_get(void *data, Evas_Object *obj, const char *part)
15 time_t t = (time_t)ecore_time_unix_get();
17 int i = (int)(long)data;
19 if (!strcmp(part, "elm.text"))
20 snprintf(buf, sizeof(buf), "Item # %i", i);
24 snprintf(buf, sizeof(buf), "realized at %s", ctime(&t));
33 _item_content_get(void *data, Evas_Object *obj, const char *part)
35 Evas_Object *ic = elm_icon_add(obj);
37 if (!strcmp(part, "elm.swallow.icon"))
38 elm_icon_standard_set(ic, "clock");
40 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
45 _item_sel_cb(void *data, Evas_Object *obj, void *event_info)
47 printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n",
48 data, obj, event_info);
52 _group_label_get(void *data, Evas_Object *obj, const char *part)
55 int i = (int)(long)data;
57 snprintf(buf, sizeof(buf), "Group %d (item #%d)", i / 7, i);
63 _group_content_get(void *data, Evas_Object *obj, const char *part)
65 Evas_Object *ic = elm_icon_add(obj);
67 if (!strcmp(part, "elm.swallow.icon"))
68 elm_icon_standard_set(ic, "home");
70 evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
75 _append_cb(void *data, Evas_Object *o, void *event_info)
77 Evas_Object *list = data;
79 elm_genlist_item_append(list, _itc,
80 (void *)(long)nitems++, NULL,
81 ELM_GENLIST_ITEM_NONE,
87 _prepend_cb(void *data, Evas_Object *o, void *event_info)
89 Evas_Object *list = data;
91 elm_genlist_item_prepend(list, _itc,
92 (void *)(long)nitems++, NULL,
93 ELM_GENLIST_ITEM_NONE,
99 _insert_before_cb(void *data, Evas_Object *o, void *event_info)
101 Evas_Object *list = data;
102 Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
106 elm_genlist_item_insert_before(list, _itc,
107 (void *)(long)nitems++, NULL,
108 glit, ELM_GENLIST_ITEM_NONE,
114 _insert_after_cb(void *data, Evas_Object *o, void *event_info)
116 Evas_Object *list = data;
117 Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
121 elm_genlist_item_insert_after(list, _itc,
122 (void *)(long)nitems++, NULL,
123 glit, ELM_GENLIST_ITEM_NONE,
129 _next_cb(void *data, Evas_Object *o, void *event_info)
131 Evas_Object *list = data;
132 Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
134 if (glit) glit = elm_genlist_item_next_get(glit);
135 if (!glit) glit = elm_genlist_first_item_get(list);
137 elm_genlist_item_selected_set(glit, EINA_TRUE);
138 elm_genlist_item_show(glit, ELM_GENLIST_ITEM_SCROLLTO_IN);
142 _prev_cb(void *data, Evas_Object *o, void *event_info)
144 Evas_Object *list = data;
145 Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
147 if (glit) glit = elm_genlist_item_prev_get(glit);
148 if (!glit) glit = elm_genlist_last_item_get(list);
150 elm_genlist_item_selected_set(glit, EINA_TRUE);
151 elm_genlist_item_show(glit, ELM_GENLIST_ITEM_SCROLLTO_IN);
155 _bring_in_cb(void *data, Evas_Object *o, void *event_info)
157 Elm_Object_Item *glit = data;
160 elm_genlist_item_bring_in(glit, ELM_GENLIST_ITEM_SCROLLTO_IN);
164 _show_cb(void *data, Evas_Object *o, void *event_info)
166 Elm_Object_Item *glit = data;
169 elm_genlist_item_show(glit, ELM_GENLIST_ITEM_SCROLLTO_IN);
173 _middle_in_cb(void *data, Evas_Object *o, void *event_info)
175 Elm_Object_Item *glit = data;
178 elm_genlist_item_bring_in(glit, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
182 _middle_show_cb(void *data, Evas_Object *o, void *event_info)
184 Elm_Object_Item *glit = data;
187 elm_genlist_item_show(glit, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
191 _top_in_cb(void *data, Evas_Object *o, void *event_info)
193 Elm_Object_Item *glit = data;
196 elm_genlist_item_bring_in(glit, ELM_GENLIST_ITEM_SCROLLTO_TOP);
200 _top_show_cb(void *data, Evas_Object *o, void *event_info)
202 Elm_Object_Item *glit = data;
205 elm_genlist_item_show(glit, ELM_GENLIST_ITEM_SCROLLTO_TOP);
209 _realize_cb(void *data, Evas_Object *o, void *event_info)
211 Evas_Object *list = data;
212 Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
215 elm_genlist_item_update(glit);
219 _button_add(Evas_Object *list, Evas_Object *box, const char *label, Evas_Smart_Cb cb)
223 bt = elm_button_add(elm_object_parent_widget_get(list));
224 elm_object_text_set(bt, label);
225 elm_box_pack_end(box, bt);
226 evas_object_show(bt);
229 evas_object_smart_callback_add(bt, "clicked", cb, list);
235 elm_main(int argc, char **argv)
237 Evas_Object *win, *bg, *box, *fbox;
239 Evas_Object *bt_bring_in, *bt_show;
240 Evas_Object *bt_middle_in, *bt_middle_show;
241 Evas_Object *bt_top_in, *bt_top_show;
244 win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
245 elm_win_title_set(win, "Icon");
246 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
247 elm_win_autodel_set(win, EINA_TRUE);
249 bg = elm_bg_add(win);
250 elm_bg_color_set(bg, 255,255 ,255);
251 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
252 elm_win_resize_object_add(win, bg);
253 evas_object_show(bg);
255 box = elm_box_add(win);
256 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
257 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
258 elm_win_resize_object_add(win, box);
259 evas_object_show(box);
263 _itc = elm_genlist_item_class_new();
264 _itc->item_style = "default";
265 _itc->func.text_get = _item_label_get;
266 _itc->func.content_get = _item_content_get;
267 _itc->func.state_get = NULL;
268 _itc->func.del = NULL;
273 _itc_group = elm_genlist_item_class_new();
274 _itc_group->item_style = "group_index";
275 _itc_group->func.text_get = _group_label_get;
276 _itc_group->func.content_get = _group_content_get;
277 _itc_group->func.state_get = NULL;
278 _itc_group->func.del = NULL;
280 list = elm_genlist_add(win);
282 evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
283 evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
284 elm_box_pack_end(box, list);
285 evas_object_show(list);
287 fbox = elm_box_add(win);
288 elm_box_layout_set(fbox, evas_object_box_layout_flow_horizontal,
290 evas_object_size_hint_weight_set(fbox, EVAS_HINT_EXPAND, 0);
291 evas_object_size_hint_align_set(fbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
292 elm_box_pack_end(box, fbox);
293 evas_object_show(fbox);
295 _button_add(list, fbox, "prepend", _prepend_cb);
296 _button_add(list, fbox, "append", _append_cb);
297 _button_add(list, fbox, "insert before", _insert_before_cb);
298 _button_add(list, fbox, "insert after", _insert_after_cb);
299 _button_add(list, fbox, "prev", _prev_cb);
300 _button_add(list, fbox, "next", _next_cb);
301 _button_add(list, fbox, "realize", _realize_cb);
302 bt_bring_in = _button_add(list, fbox, "bring #50", NULL);
303 bt_show = _button_add(list, fbox, "show #50", NULL);
304 bt_middle_in = _button_add(list, fbox, "bring to middle #200", NULL);
305 bt_middle_show = _button_add(list, fbox, "show in middle #200", NULL);
306 bt_top_in = _button_add(list, fbox, "bring to top #250", NULL);
307 bt_top_show = _button_add(list, fbox, "show in top #250", NULL);
309 for (i = 0; i < N_ITEMS; i++)
311 Elm_Object_Item *gli, *glg;
315 glg = gli = elm_genlist_item_append(list, _itc_group,
316 (void *)(long)nitems++, NULL,
317 ELM_GENLIST_ITEM_GROUP,
319 elm_genlist_item_select_mode_set(gli, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
323 gli = elm_genlist_item_append(list, _itc,
324 (void *)(long)nitems++, glg,
325 ELM_GENLIST_ITEM_NONE,
332 elm_object_item_disabled_set(gli, EINA_TRUE);
335 evas_object_smart_callback_add(
336 bt_bring_in, "clicked", _bring_in_cb, gli);
337 evas_object_smart_callback_add(
338 bt_show, "clicked", _show_cb, gli);
341 evas_object_smart_callback_add(
342 bt_middle_in, "clicked", _middle_in_cb, gli);
343 evas_object_smart_callback_add(
344 bt_middle_show, "clicked", _middle_show_cb, gli);
347 evas_object_smart_callback_add(
348 bt_top_in, "clicked", _top_in_cb, gli);
349 evas_object_smart_callback_add(
350 bt_top_show, "clicked", _top_show_cb, gli);
354 evas_object_resize(win, 420, 320);
355 evas_object_show(win);