Elementary: replace eo_data_get for objects data referencing.
[platform/upstream/elementary.git] / src / lib / elc_fileselector_button.c
1 #include <Elementary.h>
2 #include "elm_priv.h"
3 #include "elm_widget_fileselector_button.h"
4
5 EAPI Eo_Op ELM_OBJ_FILESELECTOR_BUTTON_BASE_ID = EO_NOOP;
6
7 #define MY_CLASS ELM_OBJ_FILESELECTOR_BUTTON_CLASS
8
9 #define MY_CLASS_NAME "elm_fileselector_button"
10
11 #define DEFAULT_WINDOW_TITLE "Select a file"
12
13 static const char SIG_FILE_CHOSEN[] = "file,chosen";
14 static const char SIG_LANG_CHANGED[] = "language,changed";
15
16 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
17    {SIG_FILE_CHOSEN, "s"},
18    {SIG_LANG_CHANGED, ""},
19    {NULL, NULL}
20 };
21
22 static void
23 _elm_fileselector_button_smart_translate(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
24 {
25    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
26    evas_object_smart_callback_call(obj, SIG_LANG_CHANGED, NULL);
27    if (ret) *ret = EINA_TRUE;
28 }
29
30 static void
31 _elm_fileselector_button_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
32 {
33    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
34    if (ret) *ret = EINA_FALSE;
35    Eina_Bool int_ret;
36
37    char buf[4096];
38    const char *style;
39
40    Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS);
41
42    style = eina_stringshare_add(elm_widget_style_get(obj));
43
44    snprintf(buf, sizeof(buf), "fileselector_button/%s", style);
45
46    /* file selector button's style has an extra bit */
47    eina_stringshare_replace(&(wd->style), buf);
48
49    eo_do_super(obj, MY_CLASS, elm_wdg_theme(&int_ret));
50    if (!int_ret) return;
51
52    eina_stringshare_replace(&(wd->style), style);
53
54    eina_stringshare_del(style);
55
56    if (ret) *ret = EINA_TRUE;
57 }
58
59 static void
60 _selection_done(void *data,
61                 Evas_Object *obj __UNUSED__,
62                 void *event_info)
63 {
64    Elm_Fileselector_Button_Smart_Data *sd = data;
65    const char *file = event_info;
66    Evas_Object *del;
67
68    if (file) eina_stringshare_replace(&sd->fsd.path, file);
69
70    del = sd->fsw;
71    sd->fs = NULL;
72    sd->fsw = NULL;
73    evas_object_del(del);
74
75    evas_object_smart_callback_call
76      (sd->obj, SIG_FILE_CHOSEN, (void *)file);
77 }
78
79 static Evas_Object *
80 _new_window_add(Elm_Fileselector_Button_Smart_Data *sd)
81 {
82    Evas_Object *win, *bg;
83
84    win = elm_win_add(NULL, "fileselector_button", ELM_WIN_DIALOG_BASIC);
85    elm_win_title_set(win, sd->window_title);
86    elm_win_autodel_set(win, EINA_TRUE);
87    evas_object_smart_callback_add(win, "delete,request", _selection_done, sd);
88
89    bg = elm_bg_add(win);
90    elm_win_resize_object_add(win, bg);
91    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
92    evas_object_show(bg);
93
94    evas_object_resize(win, sd->w, sd->h);
95    return win;
96 }
97
98 static Evas_Object *
99 _parent_win_get(Evas_Object *obj)
100 {
101    while ((obj) && (strcmp(elm_widget_type_get(obj), "elm_win")))
102      obj = elm_object_parent_widget_get(obj);
103
104    return obj;
105 }
106
107 static void
108 _activate(Elm_Fileselector_Button_Smart_Data *sd)
109 {
110    Eina_Bool is_inwin = EINA_FALSE;
111
112    if (sd->fs) return;
113
114    if (sd->inwin_mode)
115      {
116         sd->fsw = _parent_win_get(sd->obj);
117
118         if (!sd->fsw)
119           sd->fsw = _new_window_add(sd);
120         else
121           {
122              sd->fsw = elm_win_inwin_add(sd->fsw);
123              is_inwin = EINA_TRUE;
124           }
125      }
126    else
127      sd->fsw = _new_window_add(sd);
128
129    sd->fs = elm_fileselector_add(sd->fsw);
130    elm_widget_mirrored_set
131      (sd->fs, elm_widget_mirrored_get(sd->obj));
132    elm_widget_mirrored_automatic_set(sd->fs, EINA_FALSE);
133    elm_fileselector_expandable_set(sd->fs, sd->fsd.expandable);
134    elm_fileselector_folder_only_set(sd->fs, sd->fsd.folder_only);
135    elm_fileselector_is_save_set(sd->fs, sd->fsd.is_save);
136    elm_fileselector_selected_set(sd->fs, sd->fsd.path);
137    evas_object_size_hint_weight_set
138      (sd->fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
139    evas_object_size_hint_align_set(sd->fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
140    evas_object_smart_callback_add(sd->fs, "done", _selection_done, sd);
141    evas_object_show(sd->fs);
142
143    if (is_inwin)
144      {
145         elm_win_inwin_content_set(sd->fsw, sd->fs);
146         elm_win_inwin_activate(sd->fsw);
147      }
148    else
149      {
150         elm_win_resize_object_add(sd->fsw, sd->fs);
151         evas_object_show(sd->fsw);
152      }
153 }
154
155 static void
156 _button_clicked(void *data,
157                 Evas_Object *obj __UNUSED__,
158                 void *event_info __UNUSED__)
159 {
160    _activate(data);
161 }
162
163 static void
164 _elm_fileselector_button_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
165 {
166    Elm_Fileselector_Button_Smart_Data *priv = _pd;
167
168    eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
169
170    priv->window_title = eina_stringshare_add(DEFAULT_WINDOW_TITLE);
171    if (getenv("HOME")) priv->fsd.path = eina_stringshare_add(getenv("HOME"));
172    else priv->fsd.path = eina_stringshare_add("/");
173
174    priv->fsd.expandable = _elm_config->fileselector_expand_enable;
175    priv->inwin_mode = _elm_config->inwin_dialogs_enable;
176    priv->w = 400;
177    priv->h = 400;
178
179    elm_widget_mirrored_automatic_set(obj, EINA_FALSE);
180
181    evas_object_smart_callback_add(obj, "clicked", _button_clicked, priv);
182
183    eo_do(obj, elm_wdg_theme(NULL));
184    elm_widget_can_focus_set(obj, EINA_TRUE);
185 }
186
187 static void
188 _elm_fileselector_button_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
189 {
190    Evas_Object *win;
191
192    Elm_Fileselector_Button_Smart_Data *sd = _pd;
193
194    if (sd->window_title) eina_stringshare_del(sd->window_title);
195    if (sd->fsd.path) eina_stringshare_del(sd->fsd.path);
196    if (sd->fs)
197      {
198         win = evas_object_data_del(obj, "win");
199         evas_object_del(win);
200      }
201
202    eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
203 }
204
205 static void
206 _elm_fileselector_button_smart_admits_autorepeat_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
207 {
208    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
209    *ret = EINA_FALSE;
210 }
211
212 EAPI Evas_Object *
213 elm_fileselector_button_add(Evas_Object *parent)
214 {
215    EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
216    Evas_Object *obj = eo_add(MY_CLASS, parent);
217    eo_unref(obj);
218    return obj;
219 }
220
221 static void
222 _constructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
223 {
224    Elm_Fileselector_Button_Smart_Data *sd = _pd;
225    sd->obj = obj;
226
227    eo_do_super(obj, MY_CLASS, eo_constructor());
228    eo_do(obj,
229          evas_obj_type_set(MY_CLASS_NAME),
230          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
231
232    elm_widget_sub_object_add(eo_parent_get(obj), obj);
233 }
234
235 EAPI void
236 elm_fileselector_button_window_title_set(Evas_Object *obj,
237                                          const char *title)
238 {
239    ELM_FILESELECTOR_BUTTON_CHECK(obj);
240    eo_do(obj, elm_obj_fileselector_button_window_title_set(title));
241 }
242
243 static void
244 _window_title_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
245 {
246    const char *title = va_arg(*list, const char *);
247    Elm_Fileselector_Button_Smart_Data *sd = _pd;
248
249    eina_stringshare_replace(&sd->window_title, title);
250
251    if (sd->fsw) elm_win_title_set(sd->fsw, sd->window_title);
252 }
253
254 EAPI const char *
255 elm_fileselector_button_window_title_get(const Evas_Object *obj)
256 {
257    ELM_FILESELECTOR_BUTTON_CHECK(obj) NULL;
258    const char *ret = NULL;
259    eo_do((Eo *) obj, elm_obj_fileselector_button_window_title_get(&ret));
260    return ret;
261 }
262
263 static void
264 _window_title_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
265 {
266    const char **ret = va_arg(*list, const char **);
267    Elm_Fileselector_Button_Smart_Data *sd = _pd;
268
269    *ret = sd->window_title;
270 }
271
272 EAPI void
273 elm_fileselector_button_window_size_set(Evas_Object *obj,
274                                         Evas_Coord width,
275                                         Evas_Coord height)
276 {
277    ELM_FILESELECTOR_BUTTON_CHECK(obj);
278    eo_do(obj, elm_obj_fileselector_button_window_size_set(width, height));
279 }
280
281 static void
282 _window_size_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
283 {
284    Evas_Coord width = va_arg(*list, Evas_Coord);
285    Evas_Coord height = va_arg(*list, Evas_Coord);
286    Elm_Fileselector_Button_Smart_Data *sd = _pd;
287
288    sd->w = width;
289    sd->h = height;
290
291    if (sd->fsw) evas_object_resize(sd->fsw, sd->w, sd->h);
292 }
293
294 EAPI void
295 elm_fileselector_button_window_size_get(const Evas_Object *obj,
296                                         Evas_Coord *width,
297                                         Evas_Coord *height)
298 {
299    ELM_FILESELECTOR_BUTTON_CHECK(obj);
300    eo_do((Eo *) obj, elm_obj_fileselector_button_window_size_get(width, height));
301 }
302
303 static void
304 _window_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
305 {
306    Evas_Coord *width = va_arg(*list, Evas_Coord *);
307    Evas_Coord *height = va_arg(*list, Evas_Coord *);
308    Elm_Fileselector_Button_Smart_Data *sd = _pd;
309
310    if (width) *width = sd->w;
311    if (height) *height = sd->h;
312 }
313
314 EAPI void
315 elm_fileselector_button_path_set(Evas_Object *obj,
316                                  const char *path)
317 {
318    ELM_FILESELECTOR_BUTTON_CHECK(obj);
319    eo_do(obj, elm_obj_fileselector_button_path_set(path));
320 }
321
322 static void
323 _path_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
324 {
325    const char *path = va_arg(*list, const char *);
326    Elm_Fileselector_Button_Smart_Data *sd = _pd;
327
328    eina_stringshare_replace(&sd->fsd.path, path);
329
330    if (sd->fs) elm_fileselector_selected_set(sd->fs, sd->fsd.path);
331 }
332
333 EAPI const char *
334 elm_fileselector_button_path_get(const Evas_Object *obj)
335 {
336    ELM_FILESELECTOR_BUTTON_CHECK(obj) NULL;
337    const char *ret = NULL;
338    eo_do((Eo *) obj, elm_obj_fileselector_button_path_get(&ret));
339    return ret;
340 }
341
342 static void
343 _path_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
344 {
345    const char **ret = va_arg(*list, const char **);
346    Elm_Fileselector_Button_Smart_Data *sd = _pd;
347
348    *ret = sd->fsd.path;
349 }
350
351 EAPI void
352 elm_fileselector_button_expandable_set(Evas_Object *obj,
353                                        Eina_Bool value)
354 {
355    ELM_FILESELECTOR_BUTTON_CHECK(obj);
356    eo_do(obj, elm_obj_fileselector_button_expandable_set(value));
357 }
358
359 static void
360 _expandable_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
361 {
362    Eina_Bool value = va_arg(*list, int);
363    Elm_Fileselector_Button_Smart_Data *sd = _pd;
364
365    sd->fsd.expandable = value;
366
367    if (sd->fs) elm_fileselector_expandable_set(sd->fs, sd->fsd.expandable);
368 }
369
370 EAPI Eina_Bool
371 elm_fileselector_button_expandable_get(const Evas_Object *obj)
372 {
373    ELM_FILESELECTOR_BUTTON_CHECK(obj) EINA_FALSE;
374    Eina_Bool ret = EINA_FALSE;
375    eo_do((Eo *) obj, elm_obj_fileselector_button_expandable_get(&ret));
376    return ret;
377 }
378
379 static void
380 _expandable_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
381 {
382    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
383    Elm_Fileselector_Button_Smart_Data *sd = _pd;
384
385    *ret = sd->fsd.expandable;
386 }
387
388 EAPI void
389 elm_fileselector_button_folder_only_set(Evas_Object *obj,
390                                         Eina_Bool value)
391 {
392    ELM_FILESELECTOR_BUTTON_CHECK(obj);
393    eo_do(obj, elm_obj_fileselector_button_folder_only_set(value));
394 }
395
396 static void
397 _folder_only_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
398 {
399    Eina_Bool value = va_arg(*list, int);
400    Elm_Fileselector_Button_Smart_Data *sd = _pd;
401
402    sd->fsd.folder_only = value;
403
404    if (sd->fs) elm_fileselector_folder_only_set(sd->fs, sd->fsd.folder_only);
405 }
406
407 EAPI Eina_Bool
408 elm_fileselector_button_folder_only_get(const Evas_Object *obj)
409 {
410    ELM_FILESELECTOR_BUTTON_CHECK(obj) EINA_FALSE;
411    Eina_Bool ret = EINA_FALSE;
412    eo_do((Eo *) obj, elm_obj_fileselector_button_folder_only_get(&ret));
413    return ret;
414 }
415
416 static void
417 _folder_only_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
418 {
419    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
420    Elm_Fileselector_Button_Smart_Data *sd = _pd;
421
422    *ret = sd->fsd.folder_only;
423 }
424
425 EAPI void
426 elm_fileselector_button_is_save_set(Evas_Object *obj,
427                                     Eina_Bool value)
428 {
429    ELM_FILESELECTOR_BUTTON_CHECK(obj);
430    eo_do(obj, elm_obj_fileselector_button_is_save_set(value));
431 }
432
433 static void
434 _is_save_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
435 {
436    Eina_Bool value = va_arg(*list, int);
437    Elm_Fileselector_Button_Smart_Data *sd = _pd;
438
439    sd->fsd.is_save = value;
440
441    if (sd->fs) elm_fileselector_is_save_set(sd->fs, sd->fsd.is_save);
442 }
443
444 EAPI Eina_Bool
445 elm_fileselector_button_is_save_get(const Evas_Object *obj)
446 {
447    ELM_FILESELECTOR_BUTTON_CHECK(obj) EINA_FALSE;
448    Eina_Bool ret = EINA_FALSE;
449    eo_do((Eo *) obj, elm_obj_fileselector_button_is_save_get(&ret));
450    return ret;
451 }
452
453 static void
454 _is_save_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
455 {
456    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
457    Elm_Fileselector_Button_Smart_Data *sd = _pd;
458
459    *ret = sd->fsd.is_save;
460 }
461
462 EAPI void
463 elm_fileselector_button_inwin_mode_set(Evas_Object *obj,
464                                        Eina_Bool value)
465 {
466    ELM_FILESELECTOR_BUTTON_CHECK(obj);
467    eo_do(obj, elm_obj_fileselector_button_inwin_mode_set(value));
468 }
469
470 static void
471 _inwin_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
472 {
473    Eina_Bool value = va_arg(*list, int);
474    Elm_Fileselector_Button_Smart_Data *sd = _pd;
475
476    sd->inwin_mode = value;
477 }
478
479 EAPI Eina_Bool
480 elm_fileselector_button_inwin_mode_get(const Evas_Object *obj)
481 {
482    ELM_FILESELECTOR_BUTTON_CHECK(obj) EINA_FALSE;
483    Eina_Bool ret = EINA_FALSE;
484    eo_do((Eo *) obj, elm_obj_fileselector_button_inwin_mode_get(&ret));
485    return ret;
486 }
487
488 static void
489 _inwin_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
490 {
491    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
492    Elm_Fileselector_Button_Smart_Data *sd = _pd;
493
494    *ret = sd->inwin_mode;
495 }
496
497 static void
498 _class_constructor(Eo_Class *klass)
499 {
500    const Eo_Op_Func_Description func_desc[] = {
501         EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
502         EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_fileselector_button_smart_add),
503         EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_fileselector_button_smart_del),
504
505         EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_THEME), _elm_fileselector_button_smart_theme),
506         EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_TRANSLATE), _elm_fileselector_button_smart_translate),
507
508         EO_OP_FUNC(ELM_OBJ_BUTTON_ID(ELM_OBJ_BUTTON_SUB_ID_ADMITS_AUTOREPEAT_GET), _elm_fileselector_button_smart_admits_autorepeat_get),
509
510         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_TITLE_SET), _window_title_set),
511         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_TITLE_GET), _window_title_get),
512         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_SIZE_SET), _window_size_set),
513         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_SIZE_GET), _window_size_get),
514         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_PATH_SET), _path_set),
515         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_PATH_GET), _path_get),
516         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_EXPANDABLE_SET), _expandable_set),
517         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_EXPANDABLE_GET), _expandable_get),
518         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_FOLDER_ONLY_SET), _folder_only_set),
519         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_FOLDER_ONLY_GET), _folder_only_get),
520         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_IS_SAVE_SET), _is_save_set),
521         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_IS_SAVE_GET), _is_save_get),
522         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_INWIN_MODE_SET), _inwin_mode_set),
523         EO_OP_FUNC(ELM_OBJ_FILESELECTOR_BUTTON_ID(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_INWIN_MODE_GET), _inwin_mode_get),
524         EO_OP_FUNC_SENTINEL
525    };
526    eo_class_funcs_set(klass, func_desc);
527
528    evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
529 }
530
531 static const Eo_Op_Description op_desc[] = {
532      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_TITLE_SET, "Set the title for a given file selector button widget's window."),
533      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_TITLE_GET, "Get the title for a given file selector button widget's window."),
534      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_SIZE_SET, "Set the size of a given file selector button widget's window, holding the file selector itself."),
535      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_WINDOW_SIZE_GET, "Get the size of a given file selector button widget's window, holding the file selector itself."),
536      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_PATH_SET, "Set the initial file system path for a given file selector button widget."),
537      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_PATH_GET, "Get the initial file system path set for a given file selector button widget."),
538      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_EXPANDABLE_SET, "Enable/disable a tree view in the given file selector button widget's internal file selector."),
539      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_EXPANDABLE_GET, "Get whether tree view is enabled for the given file selector button widget's internal file selector."),
540      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_FOLDER_ONLY_SET, "Set whether a given file selector button widget's internal file selector is to display folders only or the directory contents, as well."),
541      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_FOLDER_ONLY_GET, "Get whether a given file selector button widget's internal file selector is displaying folders only or the directory contents, as well."),
542      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_IS_SAVE_SET, "Enable/disable the file name entry box where the user can type in a name for a file, in a given file selector button widget's internal file selector."),
543      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_IS_SAVE_GET, "Get whether the given file selector button widget's internal file selector is in 'saving dialog' mode."),
544      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_INWIN_MODE_SET, "Set whether a given file selector button widget's internal file selector will raise an Elementary 'inner window', instead of a dedicated Elementary window."),
545      EO_OP_DESCRIPTION(ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_INWIN_MODE_GET, "Get whether a given file selector button widget's internal file selector will raise an Elementary 'inner window', instead of a dedicated Elementary window."),
546      EO_OP_DESCRIPTION_SENTINEL
547 };
548
549 static const Eo_Class_Description class_desc = {
550      EO_VERSION,
551      MY_CLASS_NAME,
552      EO_CLASS_TYPE_REGULAR,
553      EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_FILESELECTOR_BUTTON_BASE_ID, op_desc, ELM_OBJ_FILESELECTOR_BUTTON_SUB_ID_LAST),
554      NULL,
555      sizeof(Elm_Fileselector_Button_Smart_Data),
556      _class_constructor,
557      NULL
558 };
559
560 EO_DEFINE_CLASS(elm_obj_fileselector_button_class_get, &class_desc, ELM_OBJ_BUTTON_CLASS, NULL);
561