elm: Applied icon/image API changes.
[framework/uifw/elementary.git] / src / examples / win_example.c
1 /*
2  * gcc -o win_example win_example.c `pkg-config --cflags --libs elementary ecore-x`
3  */
4 #include <Elementary.h>
5 #include <Ecore_X.h>
6 #ifdef HAVE_CONFIG_H
7 # include "elementary_config.h"
8 #else
9 # define __UNUSED__ __attribute__((unused))
10 # define PACKAGE_DATA_DIR "../../data"
11 #endif
12
13 static void
14 _btn_activate_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
15 {
16    elm_win_activate(data);
17 }
18
19 static void
20 _btn_lower_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
21 {
22    elm_win_lower(data);
23 }
24
25 static void
26 _btn_raise_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
27 {
28    elm_win_raise(data);
29 }
30
31 static void
32 _btn_borderless_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
33 {
34    Eina_Bool flag = elm_win_borderless_get(data);
35    elm_win_borderless_set(data, !flag);
36 }
37
38 static void
39 _btn_shaped_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
40 {
41    Eina_Bool flag = elm_win_shaped_get(data);
42    elm_win_shaped_set(data, !flag);
43 }
44
45 static void
46 _btn_alpha_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
47 {
48    Eina_Bool flag = elm_win_alpha_get(data);
49    elm_win_alpha_set(data, !flag);
50 }
51
52 static void
53 _btn_fullscreen_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
54 {
55    Eina_Bool flag = elm_win_fullscreen_get(data);
56    elm_win_fullscreen_set(data, !flag);
57 }
58
59 static void
60 _btn_maximized_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
61 {
62    Eina_Bool flag = elm_win_maximized_get(data);
63    elm_win_maximized_set(data, !flag);
64 }
65
66 static void
67 _btn_iconified_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
68 {
69    Eina_Bool flag = elm_win_iconified_get(data);
70    elm_win_iconified_set(data, !flag);
71 }
72
73 static void
74 _btn_rotation_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
75 {
76    int angle = elm_win_rotation_get(data);
77    angle = (angle + 90) % 360;
78    elm_win_rotation_set(data, angle);
79 }
80
81 static void
82 _btn_rotation_resize_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
83 {
84    int angle = elm_win_rotation_get(data);
85    angle = (angle + 90) % 360;
86    elm_win_rotation_with_resize_set(data, angle);
87 }
88
89 static void
90 _btn_sticky_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
91 {
92    Eina_Bool flag = elm_win_sticky_get(data);
93    elm_win_sticky_set(data, !flag);
94 }
95
96 static void
97 _yes_quit_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
98 {
99    elm_exit();
100 }
101
102 static void
103 _no_quit_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
104 {
105    evas_object_del(data);
106 }
107
108 static void
109 _main_win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
110 {
111    Evas_Object *msg, *box, *box2, *btn, *lbl, *sep;
112
113    msg = elm_notify_add(obj);
114    elm_notify_orient_set(msg, ELM_NOTIFY_ORIENT_CENTER);
115    elm_notify_repeat_events_set(msg, EINA_FALSE);
116    evas_object_show(msg);
117
118    box = elm_box_add(obj);
119    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
120    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
121    elm_object_content_set(msg, box);
122    evas_object_show(box);
123
124    lbl = elm_label_add(obj);
125    elm_object_text_set(lbl, "Really want quit?");
126    evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
127    evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
128    elm_box_pack_end(box, lbl);
129    evas_object_show(lbl);
130
131    sep = elm_separator_add(obj);
132    elm_separator_horizontal_set(sep, EINA_TRUE);
133    elm_box_pack_end(box, sep);
134    evas_object_show(sep);
135
136    box2 = elm_box_add(obj);
137    elm_box_horizontal_set(box2, EINA_TRUE);
138    evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
139    evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
140    elm_box_pack_end(box, box2);
141    evas_object_show(box2);
142
143    btn = elm_button_add(obj);
144    elm_object_text_set(btn, "Yes");
145    elm_box_pack_end(box2, btn);
146    evas_object_show(btn);
147
148    evas_object_smart_callback_add(btn, "clicked", _yes_quit_cb, NULL);
149
150    btn = elm_button_add(obj);
151    elm_object_text_set(btn, "No");
152    elm_box_pack_end(box2, btn);
153    evas_object_show(btn);
154
155    evas_object_smart_callback_add(btn, "clicked", _no_quit_cb, msg);
156 }
157
158 static void
159 _force_focus_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
160 {
161    Ecore_X_Window xwin = elm_win_xwindow_get(data);
162    ecore_x_window_focus(xwin);
163 }
164
165 static void
166 _win_focused_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
167 {
168    const char *name = data;
169    printf("Window focused: %s\n", name);
170 }
171
172 int
173 elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
174 {
175    Evas_Object *win, *win2, *bg, *bigbox, *box, *btn, *o;
176
177    win = elm_win_add(NULL, "win-example", ELM_WIN_BASIC);
178    elm_win_title_set(win, "Elm_Win Example");
179    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
180    evas_object_resize(win, 400, 400);
181    evas_object_show(win);
182
183    evas_object_smart_callback_add(win, "focus,in", _win_focused_cb, "mainwin");
184
185    evas_object_smart_callback_add(win, "delete,request", _main_win_del_cb,
186                                   NULL);
187
188    bg = elm_bg_add(win);
189    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
190    elm_win_resize_object_add(win, bg);
191    evas_object_show(bg);
192
193    bigbox = elm_box_add(win);
194    elm_box_horizontal_set(bigbox, EINA_TRUE);
195    evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
196    elm_win_resize_object_add(win, bigbox);
197    evas_object_show(bigbox);
198
199    box = elm_box_add(win);
200    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
201    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
202    elm_box_pack_end(bigbox, box);
203    evas_object_show(box);
204
205    win2 = elm_win_add(NULL, "sub-win-example", ELM_WIN_DIALOG_BASIC);
206    elm_win_autodel_set(win2, EINA_TRUE);
207    elm_win_title_set(win2, "Managed window");
208    evas_object_show(win2);
209
210    evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb, "managed");
211
212    o = elm_icon_add(win2);
213    elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/logo.png", NULL);
214    elm_icon_resizable_set(o, 0, 0);
215    elm_icon_no_scale_set(o, EINA_TRUE);
216    elm_win_resize_object_add(win2, o);
217    evas_object_show(o);
218
219    o = elm_label_add(win);
220    elm_object_text_set(o, "<b>Managed Window</b>");
221    elm_box_pack_end(box, o);
222    evas_object_show(o);
223
224 #define WIN_ACTION(name) \
225    do { \
226       btn = elm_button_add(win); \
227       elm_object_text_set(btn, #name); \
228       elm_box_pack_end(box, btn); \
229       evas_object_show(btn); \
230       evas_object_smart_callback_add(btn, "clicked", _btn_##name##_cb, win2); \
231    } while (0)
232
233    WIN_ACTION(activate);
234    WIN_ACTION(lower);
235    WIN_ACTION(raise);
236    WIN_ACTION(borderless);
237    WIN_ACTION(shaped);
238    WIN_ACTION(alpha);
239    WIN_ACTION(fullscreen);
240    WIN_ACTION(maximized);
241    WIN_ACTION(iconified);
242    WIN_ACTION(rotation);
243    WIN_ACTION(rotation_resize);
244    WIN_ACTION(sticky);
245
246    box = elm_box_add(win);
247    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
248    evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
249    elm_box_pack_end(bigbox, box);
250    evas_object_show(box);
251
252    win2 = elm_win_add(NULL, "sub-win-example2", ELM_WIN_BASIC);
253    elm_win_autodel_set(win2, EINA_TRUE);
254    elm_win_title_set(win2, "Non-managed window");
255    elm_win_override_set(win2, EINA_TRUE);
256    evas_object_show(win2);
257
258    evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb,
259                                   "override");
260
261    o = elm_bg_add(win2);
262    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
263    elm_win_resize_object_add(win2, o);
264    evas_object_show(o);
265
266    bigbox = elm_box_add(win2);
267    evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
268    elm_win_resize_object_add(win2, bigbox);
269    evas_object_show(bigbox);
270
271    o = elm_label_add(win2);
272    elm_object_text_set(o, "This window should have no borders or titlebar.<ps>"
273                        "It was set in override mode, so the Window Manager<ps>"
274                        "should ignore everything about it.<ps>"
275                        "It's up to the program to handle it properly, and some"
276                        "of the actions performed on it may not have any effect."
277                       );
278    elm_box_pack_end(bigbox, o);
279    evas_object_show(o);
280
281    o = elm_entry_add(win2);
282    elm_object_text_set(o, "See if you can focus me");
283    elm_entry_single_line_set(o, EINA_TRUE);
284    elm_entry_scrollable_set(o, EINA_TRUE);
285    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
286    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
287    elm_box_pack_end(bigbox, o);
288    evas_object_show(o);
289
290    o = elm_separator_add(win2);
291    elm_separator_horizontal_set(o, EINA_TRUE);
292    elm_box_pack_end(bigbox, o);
293    evas_object_show(o);
294
295    o = elm_button_add(win2);
296    elm_object_text_set(o, "Focus me");
297    elm_box_pack_end(bigbox, o);
298    evas_object_show(o);
299
300    evas_object_smart_callback_add(o, "clicked", _force_focus_cb, win2);
301
302    o = elm_label_add(win);
303    elm_object_text_set(o, "<b>Override Window</b>");
304    elm_box_pack_end(box, o);
305    evas_object_show(o);
306
307    WIN_ACTION(activate);
308    WIN_ACTION(lower);
309    WIN_ACTION(raise);
310    WIN_ACTION(borderless);
311    WIN_ACTION(shaped);
312    WIN_ACTION(alpha);
313    WIN_ACTION(fullscreen);
314    WIN_ACTION(maximized);
315    WIN_ACTION(iconified);
316    WIN_ACTION(rotation);
317    WIN_ACTION(rotation_resize);
318    WIN_ACTION(sticky);
319
320    elm_run();
321
322    return 0;
323 }
324 ELM_MAIN();