2 * Simple Elementary's <b>file selector widget</b> example,
3 * illustrating its usage and API.
5 * See stdout/stderr for output. Compile with:
8 * gcc -g `pkg-config --cflags --libs elementary` file selector_example.c -o file selector_example
12 #include <Elementary.h>
14 # include "elementary_config.h"
20 _on_done(void *data __UNUSED__,
21 Evas_Object *obj __UNUSED__,
22 void *event_info __UNUSED__)
29 _fs_done(void *data __UNUSED__,
30 Evas_Object *obj __UNUSED__,
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) */
37 printf("We're done! Selected file is: %s\n",
38 selected ? selected : "*none!*");
40 _on_done(NULL, NULL, NULL);
45 _fs_selected(void *data __UNUSED__,
46 Evas_Object *obj __UNUSED__,
49 const char *selected = event_info;
50 /* event_info contains the full path of the selected file */
52 printf("There's been a selection: %s\n", selected);
56 _is_save_clicked(void *data,
57 Evas_Object *obj __UNUSED__,
58 void *event_info __UNUSED__)
60 Evas_Object *fs = data;
61 Eina_Bool old_val = elm_fileselector_is_save_get(fs);
63 printf("%s text entry with selected item's name\n",
64 old_val ? "Disabling" : "Enabling");
66 elm_fileselector_is_save_set(fs, !old_val);
70 _folder_only_clicked(void *data,
71 Evas_Object *obj __UNUSED__,
72 void *event_info __UNUSED__)
74 Evas_Object *fs = data;
75 Eina_Bool old_val = elm_fileselector_folder_only_get(fs);
77 printf("%s folder-only mode\n",
78 old_val ? "Disabling" : "Enabling");
80 elm_fileselector_folder_only_set(fs, !old_val);
84 _expandable_clicked(void *data,
85 Evas_Object *obj __UNUSED__,
86 void *event_info __UNUSED__)
88 Evas_Object *fs = data;
89 Eina_Bool old_val = elm_fileselector_expandable_get(fs);
91 printf("%s tree-view mode\n",
92 old_val ? "Disabling" : "Enabling");
94 elm_fileselector_expandable_set(fs, !old_val);
98 _sel_get_clicked(void *data,
99 Evas_Object *obj __UNUSED__,
100 void *event_info __UNUSED__)
102 Evas_Object *fs = data;
103 printf("Current selection is: %s\n", elm_fileselector_selected_get(fs));
107 _path_get_clicked(void *data,
108 Evas_Object *obj __UNUSED__,
109 void *event_info __UNUSED__)
111 Evas_Object *fs = data;
112 printf("Current selection's directory path is: %s\n",
113 elm_fileselector_path_get(fs));
117 elm_main(int argc __UNUSED__,
118 char **argv __UNUSED__)
120 Evas_Object *win, *fs, *bg, *vbox, *buttons_bx, *bt, *sep, *bx;
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
126 setlocale(LC_ALL, "");
128 elm_need_ethumb(); /* let's have thumbnails of images on grid view */
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);
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);
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);
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);
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");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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");
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);
237 evas_object_resize(win, 800, 600);
238 evas_object_show(win);