elementary: fix build of elementary genlist examples.
[framework/uifw/elementary.git] / src / examples / genlist_example_04.c
1 //Compile with:
2 //gcc -g `pkg-config --cflags --libs elementary` genlist_example_04.c -o genlist_example_04
3
4 #include <Elementary.h>
5 #ifdef HAVE_CONFIG_H
6 # include "elementary_config.h"
7 #else
8 # define __UNUSED__
9 #endif
10
11 #define N_ITEMS 300
12
13 static Elm_Genlist_Item_Class _itc;
14 static Elm_Genlist_Item_Class _itc_group;
15 static int nitems = 0;
16
17 static char *
18 _item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
19 {
20    time_t t = (time_t)ecore_time_unix_get();
21    char buf[256];
22    int i = (int)(long)data;
23
24    if (!strcmp(part, "elm.text"))
25      snprintf(buf, sizeof(buf), "Item # %i", i);
26    else
27      {
28         int n;
29         snprintf(buf, sizeof(buf), "realized at %s", ctime(&t));
30         n = strlen(buf);
31         buf[n - 1] = '\0';
32      }
33
34    return strdup(buf);
35 }
36
37 static Evas_Object *
38 _item_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
39 {
40    Evas_Object *ic = elm_icon_add(obj);
41
42    if (!strcmp(part, "elm.swallow.icon"))
43      elm_icon_standard_set(ic, "clock");
44
45    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
46    return ic;
47 }
48
49 static void
50 _item_sel_cb(void *data, Evas_Object *obj, void *event_info)
51 {
52    printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n",
53           data, obj, event_info);
54 }
55
56 static char *
57 _group_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
58 {
59    char buf[256];
60    int i = (int)(long)data;
61
62    snprintf(buf, sizeof(buf), "Group %d (item #%d)", i / 7, i);
63
64    return strdup(buf);
65 }
66
67 static Evas_Object *
68 _group_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part __UNUSED__)
69 {
70    Evas_Object *ic = elm_icon_add(obj);
71
72    if (!strcmp(part, "elm.swallow.icon"))
73      elm_icon_standard_set(ic, "home");
74
75    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
76    return ic;
77 }
78
79 static void
80 _append_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
81 {
82    Evas_Object *list = data;
83
84    elm_genlist_item_append(list, &_itc,
85                            (void *)(long)nitems++, NULL,
86                            ELM_GENLIST_ITEM_NONE,
87                            _item_sel_cb, NULL);
88
89 }
90
91 static void
92 _prepend_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
93 {
94    Evas_Object *list = data;
95
96    elm_genlist_item_prepend(list, &_itc,
97                             (void *)(long)nitems++, NULL,
98                             ELM_GENLIST_ITEM_NONE,
99                             _item_sel_cb, NULL);
100
101 }
102
103 static void
104 _insert_before_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
105 {
106    Evas_Object *list = data;
107    Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
108
109    if (!glit) return;
110
111    elm_genlist_item_insert_before(list, &_itc,
112                                   (void *)(long)nitems++, NULL,
113                                   glit, ELM_GENLIST_ITEM_NONE,
114                                   _item_sel_cb, NULL);
115
116 }
117
118 static void
119 _insert_after_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
120 {
121    Evas_Object *list = data;
122    Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
123
124    if (!glit) return;
125
126    elm_genlist_item_insert_after(list, &_itc,
127                                  (void *)(long)nitems++, NULL,
128                                  glit, ELM_GENLIST_ITEM_NONE,
129                                  _item_sel_cb, NULL);
130
131 }
132
133 static void
134 _next_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
135 {
136    Evas_Object *list = data;
137    Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
138
139    if (glit) glit = elm_genlist_item_next_get(glit);
140    if (!glit) glit = elm_genlist_first_item_get(list);
141
142    elm_genlist_item_selected_set(glit, EINA_TRUE);
143    elm_genlist_item_show(glit);
144 }
145
146 static void
147 _prev_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
148 {
149    Evas_Object *list = data;
150    Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
151
152    if (glit) glit = elm_genlist_item_prev_get(glit);
153    if (!glit) glit = elm_genlist_last_item_get(list);
154
155    elm_genlist_item_selected_set(glit, EINA_TRUE);
156    elm_genlist_item_show(glit);
157 }
158
159 static void
160 _bring_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
161 {
162    Elm_Object_Item *glit = data;
163    if (!glit) return;
164
165    elm_genlist_item_bring_in(glit);
166 }
167
168 static void
169 _show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
170 {
171    Elm_Object_Item *glit = data;
172    if (!glit) return;
173
174    elm_genlist_item_show(glit);
175 }
176
177 static void
178 _middle_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
179 {
180    Elm_Object_Item *glit = data;
181    if (!glit) return;
182
183    elm_genlist_item_middle_bring_in(glit);
184 }
185
186 static void
187 _middle_show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
188 {
189    Elm_Object_Item *glit = data;
190    if (!glit) return;
191
192    elm_genlist_item_middle_show(glit);
193 }
194
195 static void
196 _top_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
197 {
198    Elm_Object_Item *glit = data;
199    if (!glit) return;
200
201    elm_genlist_item_top_bring_in(glit);
202 }
203
204 static void
205 _top_show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
206 {
207    Elm_Object_Item *glit = data;
208    if (!glit) return;
209
210    elm_genlist_item_top_show(glit);
211 }
212
213 static void
214 _realize_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
215 {
216    Evas_Object *list = data;
217    Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
218    if (!glit) return;
219
220    elm_genlist_item_update(glit);
221 }
222
223 static Evas_Object *
224 _button_add(Evas_Object *list, Evas_Object *box, const char *label, Evas_Smart_Cb cb)
225 {
226    Evas_Object *bt;
227
228    bt = elm_button_add(elm_object_parent_widget_get(list));
229    elm_object_text_set(bt, label);
230    elm_box_pack_end(box, bt);
231    evas_object_show(bt);
232
233    if (cb)
234      evas_object_smart_callback_add(bt, "clicked", cb, list);
235
236    return bt;
237 }
238
239 int
240 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
241 {
242    Evas_Object *win, *bg, *box, *fbox;
243    Evas_Object *list;
244    Evas_Object *bt_bring_in, *bt_show;
245    Evas_Object *bt_middle_in, *bt_middle_show;
246    Evas_Object *bt_top_in, *bt_top_show;
247    int i;
248
249    win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
250    elm_win_title_set(win, "Icon");
251    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
252    elm_win_autodel_set(win, EINA_TRUE);
253
254    bg = elm_bg_add(win);
255    elm_bg_color_set(bg, 255,255 ,255);
256    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
257    elm_win_resize_object_add(win, bg);
258    evas_object_show(bg);
259
260    box = elm_box_add(win);
261    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
262    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
263    elm_win_resize_object_add(win, box);
264    evas_object_show(box);
265
266    _itc.item_style = "double_label";
267    _itc.func.text_get = _item_label_get;
268    _itc.func.content_get = _item_content_get;
269    _itc.func.state_get = NULL;
270    _itc.func.del = NULL;
271
272    _itc_group.item_style = "group_index";
273    _itc_group.func.text_get = _group_label_get;
274    _itc_group.func.content_get = _group_content_get;
275    _itc_group.func.state_get = NULL;
276    _itc_group.func.del = NULL;
277
278    list = elm_genlist_add(win);
279
280    evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
281    evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
282    elm_box_pack_end(box, list);
283    evas_object_show(list);
284
285    fbox = elm_box_add(win);
286    elm_box_layout_set(fbox, evas_object_box_layout_flow_horizontal,
287                       NULL, NULL);
288    evas_object_size_hint_weight_set(fbox, EVAS_HINT_EXPAND, 0);
289    evas_object_size_hint_align_set(fbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
290    elm_box_pack_end(box, fbox);
291    evas_object_show(fbox);
292
293    _button_add(list, fbox, "prepend", _prepend_cb);
294    _button_add(list, fbox, "append", _append_cb);
295    _button_add(list, fbox, "insert before", _insert_before_cb);
296    _button_add(list, fbox, "insert after", _insert_after_cb);
297    _button_add(list, fbox, "prev", _prev_cb);
298    _button_add(list, fbox, "next", _next_cb);
299    _button_add(list, fbox, "realize", _realize_cb);
300    bt_bring_in = _button_add(list, fbox, "bring #50", NULL);
301    bt_show = _button_add(list, fbox, "show #50", NULL);
302    bt_middle_in = _button_add(list, fbox, "bring to middle #200", NULL);
303    bt_middle_show = _button_add(list, fbox, "show in middle #200", NULL);
304    bt_top_in = _button_add(list, fbox, "bring to top #250", NULL);
305    bt_top_show = _button_add(list, fbox, "show in top #250", NULL);
306
307    for (i = 0; i < N_ITEMS; i++)
308      {
309         Elm_Object_Item *gli, *glg;
310
311         if (i % 7 == 0)
312           {
313              glg = gli = elm_genlist_item_append(list, &_itc_group,
314                                                  (void *)(long)nitems++, NULL,
315                                                  ELM_GENLIST_ITEM_GROUP,
316                                                  _item_sel_cb, NULL);
317              elm_genlist_item_display_only_set(glg, EINA_TRUE);
318           }
319         else
320           {
321              gli = elm_genlist_item_append(list, &_itc,
322                                            (void *)(long)nitems++, glg,
323                                            ELM_GENLIST_ITEM_NONE,
324                                            _item_sel_cb, NULL);
325           }
326
327         switch (i)
328           {
329            case 3:
330               elm_genlist_item_disabled_set(gli, EINA_TRUE);
331               break;
332            case 50:
333               evas_object_smart_callback_add(
334                  bt_bring_in, "clicked", _bring_in_cb, gli);
335               evas_object_smart_callback_add(
336                  bt_show, "clicked", _show_cb, gli);
337               break;
338            case 200:
339               evas_object_smart_callback_add(
340                  bt_middle_in, "clicked", _middle_in_cb, gli);
341               evas_object_smart_callback_add(
342                  bt_middle_show, "clicked", _middle_show_cb, gli);
343               break;
344            case 250:
345               evas_object_smart_callback_add(
346                  bt_top_in, "clicked", _top_in_cb, gli);
347               evas_object_smart_callback_add(
348                  bt_top_show, "clicked", _top_show_cb, gli);
349           }
350      }
351
352    evas_object_size_hint_min_set(bg, 160, 160);
353    evas_object_size_hint_max_set(bg, 640, 640);
354    evas_object_resize(win, 420, 320);
355    evas_object_show(win);
356
357    elm_run();
358
359    return 0;
360 }
361
362 ELM_MAIN()