move elementary to trunk base. out of TMP/st.
[framework/uifw/elementary.git] / src / bin / test_focus.c
1 /* Test for Focus Chain Linear*/
2 #include <Elementary.h>
3 #ifdef HAVE_CONFIG_H
4 # include "elementary_config.h"
5 #endif
6 #ifndef ELM_LIB_QUICKLAUNCH
7
8 static Eina_Bool
9 _event(void *data __UNUSED__, Evas_Object *obj __UNUSED__, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
10 {
11    if (type == EVAS_CALLBACK_KEY_DOWN)
12      printf ("Key Down:");
13    else if (type == EVAS_CALLBACK_KEY_UP)
14      printf ("Key Up:");
15    else
16      return EINA_FALSE;
17    Evas_Event_Key_Down *ev = event_info;
18    printf("%s\n", ev->key);
19
20    ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
21    return EINA_TRUE;
22 }
23
24 static void
25 _on_key_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *einfo __UNUSED__)
26 {
27    //Evas_Event_Key_Down *event = einfo;
28    //printf("%s %p Key %s Parent %p\n", evas_object_type_get(obj),
29    //       obj, event->keyname, evas_object_smart_parent_get(obj));
30 }
31
32 static void
33 _disable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
34 {
35    Evas_Object *bt = data;
36    elm_object_disabled_set(bt, EINA_TRUE);
37 }
38
39 static void
40 _enable(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
41 {
42    Evas_Object *bt = data;
43    elm_object_disabled_set(bt, EINA_FALSE);
44 }
45
46 static inline void
47 my_show(Evas_Object *obj)
48 {
49    evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
50                                   _on_key_down, NULL);
51    evas_object_show(obj);
52 }
53
54 void
55 test_focus(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
56 {
57    Evas_Object *win;
58    unsigned int i, j;
59
60    win = elm_win_add(NULL, "focus", ELM_WIN_BASIC);
61    elm_win_title_set(win, "Focus");
62    elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
63    evas_object_resize(win, 800, 600);
64    elm_object_event_callback_add(win, _event, NULL);
65    elm_win_autodel_set(win, EINA_TRUE);
66    my_show(win);
67
68      {
69         Evas_Object *bg;
70         bg = elm_bg_add(win);
71         evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
72                                          EVAS_HINT_EXPAND);
73         elm_win_resize_object_add(win, bg);
74         my_show(bg);
75      }
76
77    Evas_Object *mainbx = elm_box_add(win);
78    elm_box_horizontal_set(mainbx, EINA_TRUE);
79    elm_win_resize_object_add(win, mainbx);
80    evas_object_size_hint_weight_set(mainbx, EVAS_HINT_EXPAND,
81                                     EVAS_HINT_EXPAND);
82    my_show(mainbx);
83
84      { //First Col
85         Evas_Object *bx = elm_box_add(win);
86         evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND,
87                                          EVAS_HINT_EXPAND);
88         elm_box_pack_end(mainbx, bx);
89         my_show(bx);
90
91           {
92              Evas_Object *lb = elm_label_add(win);
93              elm_label_label_set(lb,
94                                  "<b>Use Tab and Shift+Tab</b>"
95                                 );
96              evas_object_size_hint_weight_set(lb, 0.0, 0.0);
97              evas_object_size_hint_align_set(lb, EVAS_HINT_FILL,
98                                              EVAS_HINT_FILL);
99              elm_box_pack_end(bx, lb);
100              my_show(lb);
101           }
102
103           {
104              Evas_Object *tg = elm_toggle_add(win);
105              elm_toggle_states_labels_set(tg, "Yes", "No");
106              elm_box_pack_end(bx, tg);
107              my_show(tg);
108           }
109
110           {
111              Evas_Object *en = elm_scrolled_entry_add(win);
112              evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0);
113              evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5);
114              elm_scrolled_entry_entry_set(en, "This is a single line");
115              elm_scrolled_entry_single_line_set(en, 1);
116              elm_box_pack_end(bx, en);
117              my_show(en);
118           }
119
120           {
121              Evas_Object *bx2 = elm_box_add(win);
122              elm_box_horizontal_set(bx2, EINA_TRUE);
123              evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL,
124                                              EVAS_HINT_FILL);
125              evas_object_size_hint_weight_set(bx2, 0.0, 0.0);
126              elm_box_pack_end(bx, bx2);
127
128              for (i = 2; i; i--)
129                {
130                   Evas_Object *bt;
131                   bt = elm_button_add(win);
132                   elm_button_label_set(bt, "Box");
133                   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
134                                                   EVAS_HINT_FILL);
135                   evas_object_size_hint_weight_set(bt, 0.0, 0.0);
136                   if (i%2)
137                     elm_object_disabled_set(bt, EINA_TRUE);
138                   elm_box_pack_end(bx2, bt);
139                   my_show(bt);
140                }
141
142                {
143                   Evas_Object *sc = elm_scroller_add(win);
144                   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND,
145                                                    EVAS_HINT_EXPAND);
146                   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL,
147                                                   EVAS_HINT_FILL);
148                   elm_scroller_bounce_set(sc, 1, 1);
149                   elm_scroller_content_min_limit(sc, 1, 1);
150                   elm_box_pack_end(bx2, sc);
151                   my_show(sc);
152
153                     {
154                        Evas_Object *bt;
155                        bt = elm_button_add(win);
156                        elm_button_label_set(bt, "Scroller");
157                        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
158                                                        EVAS_HINT_FILL);
159                        evas_object_size_hint_weight_set(bt, 0.0, 0.0);
160                        elm_object_event_callback_add(bt, _event, NULL);
161                        elm_scroller_content_set(sc, bt);
162                        my_show(bt);
163                        elm_object_event_callback_del(bt, _event, NULL);
164                     }
165                }
166
167              my_show(bx2);
168           }
169
170           {
171              Evas_Object *bt;
172              bt = elm_button_add(win);
173              elm_button_label_set(bt, "Box");
174              evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
175                                              EVAS_HINT_FILL);
176              evas_object_size_hint_weight_set(bt, 0.0, 0.0);
177              elm_box_pack_end(bx, bt);
178              my_show(bt);
179           }
180
181           {
182              Evas_Object *bx2 = elm_box_add(win);
183              elm_box_horizontal_set(bx2, EINA_TRUE);
184              evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL,
185                                              EVAS_HINT_FILL);
186              evas_object_size_hint_weight_set(bx2, 0.0, 0.0);
187              elm_box_pack_end(bx, bx2);
188              my_show(bx2);
189
190              for (i = 2; i; i--)
191                {
192                   Evas_Object *bx3 = elm_box_add(win);
193                   evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL,
194                                                   EVAS_HINT_FILL);
195                   evas_object_size_hint_weight_set(bx3, 0.0, 0.0);
196                   elm_box_pack_end(bx2, bx3);
197                   my_show(bx3);
198
199                   for (j = 3; j; j--)
200                     {
201                        Evas_Object *bt;
202                        bt = elm_button_add(win);
203                        elm_button_label_set(bt, "Box");
204                        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
205                                                        EVAS_HINT_FILL);
206                        evas_object_size_hint_weight_set(bt, 0.0, 0.0);
207                        elm_box_pack_end(bx3, bt);
208                        my_show(bt);
209                     }
210                }
211
212                {
213                   Evas_Object *sc = elm_scroller_add(win);
214                   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND,
215                                                    EVAS_HINT_EXPAND);
216                   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL,
217                                                   EVAS_HINT_FILL);
218                   elm_scroller_bounce_set(sc, 0, 1);
219                   elm_scroller_content_min_limit(sc, 1, 0);
220                   elm_box_pack_end(bx2, sc);
221                   my_show(sc);
222
223                   Evas_Object *bx3 = elm_box_add(win);
224                   evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL,
225                                                   EVAS_HINT_FILL);
226                   evas_object_size_hint_weight_set(bx3, 0.0, 0.0);
227                   elm_scroller_content_set(sc, bx3);
228                   my_show(bx3);
229
230                   for (i = 5; i; i--)
231                     {
232                        Evas_Object *bt;
233                        bt = elm_button_add(win);
234                        elm_button_label_set(bt, "BX Scroller");
235                        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
236                                                        EVAS_HINT_FILL);
237                        evas_object_size_hint_weight_set(bt, 0.0, 0.0);
238                        elm_box_pack_end(bx3, bt);
239                        my_show(bt);
240                     }
241                }
242           }
243      }
244
245      {//Second Col
246         char buf[PATH_MAX];
247         Evas_Object *ly = elm_layout_add(win);
248         snprintf(buf, sizeof(buf), "%s/objects/test.edj", PACKAGE_DATA_DIR);
249         elm_layout_file_set(ly, buf, "twolines");
250         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
251                                          EVAS_HINT_EXPAND);
252         elm_box_pack_end(mainbx, ly);
253         my_show(ly);
254
255           {
256              Evas_Object *bx2 = elm_box_add(win);
257              elm_box_horizontal_set(bx2, EINA_TRUE);
258              evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL,
259                                              EVAS_HINT_FILL);
260              evas_object_size_hint_weight_set(bx2, 0.0, 0.0);
261              elm_layout_content_set(ly, "element1", bx2);
262              my_show(bx2);
263
264              for (i = 3; i; i--)
265                {
266                   Evas_Object *bt;
267                   bt = elm_button_add(win);
268                   elm_button_label_set(bt, "Layout");
269                   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
270                                                   EVAS_HINT_FILL);
271                   evas_object_size_hint_weight_set(bt, 0.0, 0.0);
272                   elm_box_pack_end(bx2, bt);
273                   my_show(bt);
274                   elm_object_focus_custom_chain_prepend(bx2, bt, NULL);
275                }
276           }
277
278           {
279              Evas_Object *bx2 = elm_box_add(win);
280              evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL,
281                                              EVAS_HINT_FILL);
282              evas_object_size_hint_weight_set(bx2, 0.0, 0.0);
283              elm_layout_content_set(ly, "element2", bx2);
284              my_show(bx2);
285
286                {
287                   Evas_Object *bt;
288                   bt = elm_button_add(win);
289                   elm_button_label_set(bt, "Disable");
290                   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
291                                                   EVAS_HINT_FILL);
292                   evas_object_size_hint_weight_set(bt, 0.0, 0.0);
293                   elm_box_pack_end(bx2, bt);
294                   evas_object_smart_callback_add(bt, "clicked", _disable, bt);
295                   my_show(bt);
296                   elm_object_focus_custom_chain_prepend(bx2, bt, NULL);
297
298                   Evas_Object *bt2;
299                   bt2 = elm_button_add(win);
300                   elm_button_label_set(bt2, "Enable");
301                   evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL,
302                                                   EVAS_HINT_FILL);
303                   evas_object_size_hint_weight_set(bt2, 0.0, 0.0);
304                   elm_box_pack_end(bx2, bt2);
305                   evas_object_smart_callback_add(bt2, "clicked", _enable, bt);
306                   my_show(bt2);
307                   elm_object_focus_custom_chain_append(bx2, bt2, NULL);
308                }
309
310           }
311      }
312
313      {//Third Col
314         Evas_Object *bx = elm_box_add(win);
315         evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND,
316                                          EVAS_HINT_EXPAND);
317         elm_box_pack_end(mainbx, bx);
318         my_show(bx);
319
320           {
321              Evas_Object *fr = elm_frame_add(win);
322              elm_frame_label_set(fr, "Frame");
323              elm_box_pack_end(bx, fr);
324              evas_object_show(fr);
325
326                {
327                   Evas_Object *tb = elm_table_add(win);
328                   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
329                   elm_frame_content_set(fr, tb);
330                   my_show(tb);
331                   for (j = 0; j < 1; j++)
332                     for (i = 0; i < 2; i++)
333                       {
334                          Evas_Object *bt;
335                          bt = elm_button_add(win);
336                          elm_button_label_set(bt, "Table");
337                          evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
338                                                          EVAS_HINT_FILL);
339                          evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
340                          elm_table_pack(tb, bt, i, j, 1, 1);
341                          my_show(bt);
342                       }
343                }
344           }
345
346           {
347              Evas_Object *fr = elm_bubble_add(win);
348              elm_bubble_label_set(fr, "Bubble");
349              evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
350              evas_object_size_hint_align_set(fr, EVAS_HINT_FILL,
351                                              EVAS_HINT_FILL);
352              elm_box_pack_end(bx, fr);
353              evas_object_show(fr);
354
355                {
356                   Evas_Object *tb = elm_table_add(win);
357                   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
358                   elm_bubble_content_set(fr, tb);
359                   my_show(tb);
360                   for (j = 0; j < 2; j++)
361                     for (i = 0; i < 1; i++)
362                       {
363                          Evas_Object *bt;
364                          bt = elm_button_add(win);
365                          elm_button_label_set(bt, "Table");
366                          evas_object_size_hint_align_set(bt, EVAS_HINT_FILL,
367                                                          EVAS_HINT_FILL);
368                          evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
369                          elm_table_pack(tb, bt, i, j, 1, 1);
370                          my_show(bt);
371                       }
372                }
373           }
374      }
375 }
376 #endif