SVN Merging for button, radio, check and toggle
[framework/uifw/elementary.git] / src / examples / fileselector_example.c
1 /**
2  * Simple Elementary's <b>file selector widget</b> example,
3  * illustrating its usage and API.
4  *
5  * See stdout/stderr for output. Compile with:
6  *
7  * @verbatim
8  * gcc -g `pkg-config --cflags --libs elementary` file selector_example.c -o file selector_example
9  * @endverbatim
10  */
11
12 #include <Elementary.h>
13 #ifdef HAVE_CONFIG_H
14 # include "elementary_config.h"
15 #else
16 # define __UNUSED__
17 #endif
18
19 static void
20 _on_done(void        *data __UNUSED__,
21          Evas_Object *obj __UNUSED__,
22          void        *event_info __UNUSED__)
23 {
24    elm_exit();
25 }
26
27 /* 'done' cb */
28 static void
29 _fs_done(void        *data __UNUSED__,
30          Evas_Object *obj __UNUSED__,
31          void        *event_info)
32 {
33    const char *selected = event_info;
34    /* event_info contains the full path of the selected file or NULL
35     * if none is selected (or cancel is pressed) */
36
37    printf("We're done! Selected file is: %s\n",
38           selected ? selected : "*none!*");
39
40    _on_done(NULL, NULL, NULL);
41 }
42
43 /* 'selected' cb */
44 static void
45 _fs_selected(void        *data __UNUSED__,
46              Evas_Object *obj __UNUSED__,
47              void        *event_info)
48 {
49    const char *selected = event_info;
50    /* event_info contains the full path of the selected file */
51
52    printf("There's been a selection: %s\n", selected);
53 }
54
55 static void
56 _is_save_clicked(void        *data,
57                  Evas_Object *obj __UNUSED__,
58                  void        *event_info __UNUSED__)
59 {
60    Evas_Object *fs = data;
61    Eina_Bool old_val = elm_fileselector_is_save_get(fs);
62
63    printf("%s text entry with selected item's name\n",
64           old_val ? "Disabling" : "Enabling");
65
66    elm_fileselector_is_save_set(fs, !old_val);
67 }
68
69 static void
70 _folder_only_clicked(void        *data,
71                      Evas_Object *obj __UNUSED__,
72                      void        *event_info __UNUSED__)
73 {
74    Evas_Object *fs = data;
75    Eina_Bool old_val = elm_fileselector_folder_only_get(fs);
76
77    printf("%s folder-only mode\n",
78           old_val ? "Disabling" : "Enabling");
79
80    elm_fileselector_folder_only_set(fs, !old_val);
81 }
82
83 static void
84 _expandable_clicked(void        *data,
85                     Evas_Object *obj __UNUSED__,
86                     void        *event_info __UNUSED__)
87 {
88    Evas_Object *fs = data;
89    Eina_Bool old_val = elm_fileselector_expandable_get(fs);
90
91    printf("%s tree-view mode\n",
92           old_val ? "Disabling" : "Enabling");
93
94    elm_fileselector_expandable_set(fs, !old_val);
95 }
96
97 static void
98 _sel_get_clicked(void        *data,
99                  Evas_Object *obj __UNUSED__,
100                  void        *event_info __UNUSED__)
101 {
102    Evas_Object *fs = data;
103    printf("Current selection is: %s\n", elm_fileselector_selected_get(fs));
104 }
105
106 static void
107 _path_get_clicked(void        *data,
108                   Evas_Object *obj __UNUSED__,
109                   void        *event_info __UNUSED__)
110 {
111    Evas_Object *fs = data;
112    printf("Current selection's directory path is: %s\n",
113           elm_fileselector_path_get(fs));
114 }
115
116 EAPI_MAIN int
117 elm_main(int    argc __UNUSED__,
118          char **argv __UNUSED__)
119 {
120     Evas_Object *win, *fs, *bg, *vbox, *buttons_bx, *bt, *sep, *bx;
121
122    /* Set the locale according to the system pref. If you dont do so
123     * the file selector will order the files list in a case sensitive
124     * manner
125     */
126    setlocale(LC_ALL, "");
127
128    elm_need_ethumb(); /* let's have thumbnails of images on grid view */
129
130    win = elm_win_add(NULL, "fileselector", ELM_WIN_BASIC);
131    elm_win_title_set(win, "File Selector Example");
132    evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
133
134    bg = elm_bg_add(win);
135    elm_win_resize_object_add(win, bg);
136    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
137    evas_object_show(bg);
138
139    bx = elm_box_add(win);
140    elm_win_resize_object_add(win, bx);
141    elm_box_horizontal_set(bx, EINA_TRUE);
142    evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
143    /* evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); */
144    evas_object_show(bx);
145
146    vbox = elm_box_add(win);
147    evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
148    evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
149    evas_object_show(vbox);
150    elm_box_pack_end(bx, vbox);
151
152    /* first file selector, in list mode */
153    fs = elm_fileselector_add(win);
154    /* enable the fs file name entry */
155    elm_fileselector_is_save_set(fs, EINA_TRUE);
156    /* custom list view */
157    elm_fileselector_expandable_set(fs, EINA_FALSE);
158    /* start the fileselector in the /tmp/ dir */
159    elm_fileselector_path_set(fs, "/tmp");
160
161    evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
162    evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
163    elm_box_pack_end(vbox, fs);
164    evas_object_show(fs);
165
166    /* the 'done' cb is called when the user presses ok/cancel */
167    evas_object_smart_callback_add(fs, "done", _fs_done, win);
168    /* the 'selected' cb is called when the user clicks on a file/dir */
169    evas_object_smart_callback_add(fs, "selected", _fs_selected, win);
170
171    /* test buttons */
172    sep = elm_separator_add(win);
173    elm_separator_horizontal_set(sep, EINA_TRUE);
174    elm_box_pack_end(vbox, sep);
175    evas_object_show(sep);
176
177    buttons_bx = elm_box_add(win);
178    elm_box_horizontal_set(buttons_bx, EINA_TRUE);
179    elm_box_pack_end(vbox, buttons_bx);
180    evas_object_show(buttons_bx);
181
182    bt = elm_check_add(win);
183    elm_object_text_set(bt, "editable selection");
184    elm_check_state_set(bt, elm_fileselector_is_save_get(fs));
185    evas_object_smart_callback_add(bt, "changed", _is_save_clicked, fs);
186    elm_box_pack_end(buttons_bx, bt);
187    evas_object_show(bt);
188
189    bt = elm_check_add(win);
190    elm_object_text_set(bt, "folders only");
191    elm_check_state_set(bt, elm_fileselector_folder_only_get(fs));
192    evas_object_smart_callback_add(bt, "changed", _folder_only_clicked, fs);
193    elm_box_pack_end(buttons_bx, bt);
194    evas_object_show(bt);
195
196    bt = elm_check_add(win);
197    elm_object_text_set(bt, "expandable");
198    elm_check_state_set(bt, elm_fileselector_expandable_get(fs));
199    evas_object_smart_callback_add(bt, "changed", _expandable_clicked, fs);
200    elm_box_pack_end(buttons_bx, bt);
201    evas_object_show(bt);
202
203    buttons_bx = elm_box_add(win);
204    elm_box_horizontal_set(buttons_bx, EINA_TRUE);
205    elm_box_pack_end(vbox, buttons_bx);
206    evas_object_show(buttons_bx);
207
208    bt = elm_button_add(win);
209    elm_object_text_set(bt, "Print selection");
210    evas_object_smart_callback_add(bt, "clicked", _sel_get_clicked, fs);
211    elm_box_pack_end(buttons_bx, bt);
212    evas_object_show(bt);
213
214    bt = elm_button_add(win);
215    elm_object_text_set(bt, "Print path");
216    evas_object_smart_callback_add(bt, "clicked", _path_get_clicked, fs);
217    elm_box_pack_end(buttons_bx, bt);
218    evas_object_show(bt);
219
220    sep = elm_separator_add(win);
221    elm_separator_horizontal_set(sep, EINA_FALSE);
222    elm_box_pack_end(bx, sep);
223    evas_object_show(sep);
224
225    /* second file selector, now with grid view */
226    fs = elm_fileselector_add(win);
227    elm_fileselector_is_save_set(fs, EINA_TRUE);
228    elm_fileselector_mode_set(fs, ELM_FILESELECTOR_GRID);
229    elm_fileselector_buttons_ok_cancel_set(fs, EINA_FALSE);
230    elm_fileselector_path_set(fs, "/tmp");
231
232    evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
233    evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
234    elm_box_pack_end(bx, fs);
235    evas_object_show(fs);
236
237    evas_object_resize(win, 800, 600);
238    evas_object_show(win);
239
240    elm_run();
241    return 0;
242 }
243
244 ELM_MAIN()