tizen 2.3 release
[framework/uifw/elementary.git] / src / examples / slideshow_example.c
1 /**
2  * Simple Elementary's <b>slide show widget</b> example, illustrating its
3  * usage and API.
4  *
5  * See stdout/stderr for output. Compile with:
6  *
7  * @verbatim
8  * gcc -o slideshow_example slideshow_example.c -g `pkg-config --cflags --libs elementary`
9  * @endverbatim
10  */
11
12 #include <Elementary.h>
13
14 static void
15 _on_done(void        *data,
16          Evas_Object *obj,
17          void        *event_info)
18 {
19    elm_exit();
20 }
21
22 static Evas_Object *slideshow, *bt_start, *bt_stop;
23 static Elm_Slideshow_Item_Class itc;
24
25 static char img1[256], img2[256], img3[256], img4[256], img5[256], img6[256], img7[256], img8[256], img9[256];
26
27 static void
28 _notify_show(void        *data,
29              Evas        *e,
30              Evas_Object *obj,
31              void        *event_info)
32 {
33    evas_object_show(data);
34 }
35
36 /* jump to next item, cyclically */
37 static void
38 _next(void        *data,
39       Evas_Object *obj,
40       void        *event_info)
41 {
42    elm_slideshow_next(data);
43 }
44
45 static void
46 _previous(void        *data,
47           Evas_Object *obj,
48           void        *event_info)
49 {
50    elm_slideshow_previous(data);
51 }
52
53 static void
54 _first(void        *data,
55        Evas_Object *obj,
56        void        *event_info)
57 {
58    elm_slideshow_item_show(data);
59 }
60
61 static void
62 _last(void        *data,
63       Evas_Object *obj,
64       void        *event_info)
65 {
66    elm_slideshow_item_show(data);
67 }
68
69 static void
70 _mouse_in(void        *data,
71           Evas        *e,
72           Evas_Object *obj,
73           void        *event_info)
74 {
75    elm_notify_timeout_set(data, 0.0);
76    evas_object_show(data);
77 }
78
79 static void
80 _mouse_out(void        *data,
81            Evas        *e,
82            Evas_Object *obj,
83            void        *event_info)
84 {
85    elm_notify_timeout_set(data, 3.0);
86 }
87
88 /* transition changed */
89 static void
90 _transition_select(void        *data,
91            Evas_Object *obj,
92            void        *event_info)
93 {
94    elm_slideshow_transition_set(slideshow, data);
95    elm_object_text_set(obj, data);
96 }
97
98 static void
99 _layout_select(void        *data,
100                Evas_Object *obj,
101                void        *event_info)
102 {
103    elm_slideshow_layout_set(slideshow, data);
104    elm_object_text_set(obj, data);
105 }
106
107 /* start the show! */
108 static void
109 _start(void        *data,
110        Evas_Object *obj,
111        void        *event_info)
112 {
113    elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data));
114
115    elm_object_disabled_set(bt_start, EINA_TRUE);
116    elm_object_disabled_set(bt_stop, EINA_FALSE);
117 }
118
119 static void
120 _stop(void        *data,
121       Evas_Object *obj,
122       void        *event_info)
123 {
124    elm_slideshow_timeout_set(slideshow, 0.0);
125    elm_object_disabled_set(bt_start, EINA_FALSE);
126    elm_object_disabled_set(bt_stop, EINA_TRUE);
127 }
128
129 /* slideshow transition time has changed */
130 static void
131 _spin(void        *data,
132       Evas_Object *obj,
133       void        *event_info)
134 {
135    if (elm_slideshow_timeout_get(slideshow) > 0)
136      elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data));
137 }
138
139 /* get our images to make slideshow items */
140 static Evas_Object *
141 _get(void        *data,
142      Evas_Object *obj)
143 {
144    Evas_Object *photo = elm_photo_add(obj);
145    elm_photo_file_set(photo, data);
146    elm_photo_fill_inside_set(photo, EINA_TRUE);
147    elm_object_style_set(photo, "shadow");
148
149    return photo;
150 }
151
152 /* ordering alphabetically */
153 static int
154 _cmp_func(const void *data1,
155           const void *data2)
156 {
157    const char *img_path1, *img_path2;
158
159    const Elm_Object_Item *slide_it1 = data1;
160    const Elm_Object_Item *slide_it2 = data2;
161
162    img_path1 = elm_object_item_data_get(slide_it1);
163    img_path2 = elm_object_item_data_get(slide_it2);
164
165    return strcasecmp(img_path1, img_path2);
166 }
167
168 EAPI_MAIN int
169 elm_main(int    argc,
170          char **argv)
171 {
172    Evas_Object *win, *bg, *notify, *bx, *bt, *hv, *spin;
173    Elm_Object_Item *slide_first, *slide_last, *slide_it;
174    const char *transition, *layout;
175    const Eina_List *l, *list;
176    const char *data_dir;
177
178    elm_app_info_set(elm_main, "elementary", "images");
179    data_dir = elm_app_data_dir_get();
180    snprintf(img1, sizeof(img1), "%s/images/logo.png", data_dir);
181    snprintf(img2, sizeof(img2), "%s/images/plant_01.jpg", data_dir);
182    snprintf(img3, sizeof(img3), "%s/images/rock_01.jpg", data_dir);
183    snprintf(img4, sizeof(img4), "%s/images/rock_02.jpg", data_dir);
184    snprintf(img5, sizeof(img5), "%s/images/sky_01.jpg", data_dir);
185    snprintf(img6, sizeof(img6), "%s/images/sky_04.jpg", data_dir);
186    snprintf(img7, sizeof(img7), "%s/images/wood_01.jpg", data_dir);
187    snprintf(img8, sizeof(img8), "%s/images/mystrale.jpg", data_dir);
188    snprintf(img9, sizeof(img9), "%s/images/mystrale_2.jpg", data_dir);
189
190    win = elm_win_add(NULL, "slideshow", ELM_WIN_BASIC);
191    elm_win_title_set(win, "Slideshow example");
192    evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
193    elm_win_autodel_set(win, EINA_TRUE);
194    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
195    evas_object_resize(win, 600, 400);
196    evas_object_show(win);
197
198    bg = elm_bg_add(win);
199    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
200    elm_win_resize_object_add(win, bg);
201    evas_object_show(bg);
202
203    slideshow = elm_slideshow_add(win);
204    elm_slideshow_loop_set(slideshow, EINA_TRUE);
205    evas_object_size_hint_weight_set(slideshow,
206                                     EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
207    elm_win_resize_object_add(win, slideshow);
208    evas_object_show(slideshow);
209
210    itc.func.get = _get;
211    itc.func.del = NULL;
212
213    slide_first = elm_slideshow_item_sorted_insert(slideshow, &itc, img1, _cmp_func);
214    elm_slideshow_item_sorted_insert(slideshow, &itc, img2, _cmp_func);
215    elm_slideshow_item_sorted_insert(slideshow, &itc, img3, _cmp_func);
216    elm_slideshow_item_sorted_insert(slideshow, &itc, img4, _cmp_func);
217    elm_slideshow_item_sorted_insert(slideshow, &itc, img5, _cmp_func);
218    elm_slideshow_item_sorted_insert(slideshow, &itc, img6, _cmp_func);
219    elm_slideshow_item_sorted_insert(slideshow, &itc, img7, _cmp_func);
220    elm_slideshow_item_sorted_insert(slideshow, &itc, img8, _cmp_func);
221    slide_last = elm_slideshow_item_add(slideshow, &itc, img9);
222
223    list = elm_slideshow_items_get(slideshow);
224    fprintf(stdout, "List of items in the slideshow:\n");
225    EINA_LIST_FOREACH(list, l, slide_it)
226      fprintf(stdout, "\t%s\n",
227              (const char *)elm_object_item_data_get(slide_it));
228
229    notify = elm_notify_add(win);
230    elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
231    evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
232    elm_win_resize_object_add(win, notify);
233    elm_notify_timeout_set(notify, 3.0);
234
235    bx = elm_box_add(win);
236    elm_box_horizontal_set(bx, EINA_TRUE);
237    elm_object_content_set(notify, bx);
238    evas_object_show(bx);
239
240    evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_IN, _mouse_in,
241                                   notify);
242    evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_OUT, _mouse_out,
243                                   notify);
244
245    bt = elm_button_add(win);
246    elm_object_text_set(bt, "Previous");
247    evas_object_smart_callback_add(bt, "clicked", _previous, slideshow);
248    elm_box_pack_end(bx, bt);
249    evas_object_show(bt);
250
251    bt = elm_button_add(win);
252    elm_object_text_set(bt, "Next");
253    evas_object_smart_callback_add(bt, "clicked", _next, slideshow);
254    elm_box_pack_end(bx, bt);
255    evas_object_show(bt);
256
257    bt = elm_button_add(win);
258    elm_object_text_set(bt, "First");
259    evas_object_smart_callback_add(bt, "clicked", _first, slide_first);
260    elm_box_pack_end(bx, bt);
261    evas_object_show(bt);
262
263    bt = elm_button_add(win);
264    elm_object_text_set(bt, "Last");
265    evas_object_smart_callback_add(bt, "clicked", _last, slide_last);
266    elm_box_pack_end(bx, bt);
267    evas_object_show(bt);
268
269    hv = elm_hoversel_add(win);
270    elm_box_pack_end(bx, hv);
271    elm_hoversel_hover_parent_set(hv, win);
272    EINA_LIST_FOREACH(elm_slideshow_transitions_get(slideshow), l, transition)
273      elm_hoversel_item_add(hv, transition, NULL, 0, _transition_select,
274                            transition);
275    elm_object_text_set(hv, eina_list_data_get(
276                          elm_slideshow_transitions_get(slideshow)));
277    evas_object_show(hv);
278
279    hv = elm_hoversel_add(win);
280    elm_box_pack_end(bx, hv);
281    elm_hoversel_hover_parent_set(hv, win);
282    EINA_LIST_FOREACH(elm_slideshow_layouts_get(slideshow), l, layout)
283      elm_hoversel_item_add(hv, layout, NULL, 0, _layout_select, layout);
284    elm_object_text_set(hv, elm_slideshow_layout_get(slideshow));
285    evas_object_show(hv);
286
287    spin = elm_spinner_add(win);
288    elm_spinner_label_format_set(spin, "%2.0f s");
289    evas_object_smart_callback_add(spin, "changed", _spin, spin);
290    elm_spinner_step_set(spin, 1);
291    elm_spinner_min_max_set(spin, 1, 30);
292    elm_spinner_value_set(spin, 3);
293    elm_box_pack_end(bx, spin);
294    evas_object_show(spin);
295
296    bt = elm_button_add(win);
297    bt_start = bt;
298    elm_object_text_set(bt, "Start");
299    evas_object_smart_callback_add(bt, "clicked", _start, spin);
300    elm_box_pack_end(bx, bt);
301    evas_object_show(bt);
302
303    bt = elm_button_add(win);
304    bt_stop = bt;
305    elm_object_text_set(bt, "Stop");
306    evas_object_smart_callback_add(bt, "clicked", _stop, spin);
307    elm_box_pack_end(bx, bt);
308    elm_object_disabled_set(bt, EINA_TRUE);
309    evas_object_show(bt);
310
311    evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_UP,
312                                   _notify_show, notify);
313    evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_MOVE,
314                                   _notify_show, notify);
315
316    _notify_show(notify, NULL, NULL, NULL);
317
318    elm_run();
319    elm_shutdown();
320
321    return 0;
322 }
323 ELM_MAIN()