File selector entry widget example

This code places an Elementary file selector entry widget on a window, along with some other checkboxes. Those are there just as knobs on the file selector entry's state.

Here's how we instantiate it:

ic = elm_icon_add(win);
elm_icon_standard_set(ic, "file");
/* file selector entry */
fs_entry = elm_fileselector_entry_add(win);
elm_fileselector_path_set(fs_entry, "/tmp");
elm_object_text_set(fs_entry, "Select a file");
elm_object_part_content_set(fs_entry, "button icon", ic);
elm_box_pack_end(vbox, fs_entry);
evas_object_show(fs_entry);

Note that we set on it's button both icon and label decorations. It's set to exhibit the path of (and list the contents of, when internal file selector is launched) the "/tmp" directory, also, with elm_fileselector_entry_path_set(). What follows are checkboxes to exercise some of its API functions:

ck = elm_check_add(win);
elm_object_text_set(ck, "editable selection");
evas_object_smart_callback_add(ck, "changed", _current_sel_toggle, fs_entry);
elm_box_pack_end(hbox, ck);
ck = elm_check_add(win);
elm_object_text_set(ck, "\"inwin\" mode");
elm_check_state_set(ck, elm_fileselector_entry_inwin_mode_get(fs_entry));
evas_object_smart_callback_add(ck, "changed", _inwin_mode_toggle, fs_entry);
elm_box_pack_end(hbox, ck);
ck = elm_check_add(win);
elm_object_text_set(ck, "folders only");
evas_object_smart_callback_add(ck, "changed", _folder_only_toggle, fs_entry);
elm_box_pack_end(hbox, ck);
ck = elm_check_add(win);
elm_object_text_set(ck, "expandable");
evas_object_smart_callback_add(ck, "changed", _expandable_toggle, fs_entry);
elm_box_pack_end(hbox, ck);
evas_object_smart_callback_add(fs_entry, "file,chosen", _file_chosen, NULL);

The checkboxes will toggle whether the file selector entry's internal file selector:

  • must have an editable text entry for file names (thus, be in "save dialog mode")
  • is to be raised as an "inner window" (note it's the default behavior) or as a dedicated window
  • is to populate its view with folders only
  • is to expand its folders, in its view, in place, and not repainting it entirely just with the contents of a sole directory.

Observe how the entry's text will match the string coming from the "file,chosen" smart event:

/* hook on the file,chosen smart callback */
static void
_file_chosen(void *data EINA_UNUSED,
void *event_info)
{
const char *file = event_info;
if (file)
printf("File chosen: %s\n", file);
else
printf("File selection canceled.\n");
}

Whenever you dismiss or acknowledges the file selector, after it's raised, the event_info string will contain the last selection on it (if any was made).

Try, also, to type in a valid system path and, then, open the file selector's window: it will start the file browsing there, for you.

This is how the example, just after called, should look like:

Click on the file selector entry to raise its internal file selector, which will be contained on an "inner window":

Toggle the "inwin mode" switch off and, if you click on the file selector entry again, you'll get two windows, the original one (note the last selection there!)

and the file selector's new one

Play with the checkboxes to get the behavior changes on the file selector entry. The respective API calls on the widget coming from those knobs where shown in the code already.

See the full source code for this example.

elm_fileselector_entry_add
EAPI Evas_Object * elm_fileselector_entry_add(Evas_Object *parent)
Add a new file selector entry widget to the given parent Elementary (container) object.
Definition: elc_fileselector_entry.c:285
EVAS_ASPECT_CONTROL_VERTICAL
@ EVAS_ASPECT_CONTROL_VERTICAL
Use all vertical container space to place an object, using the given aspect.
Definition: Evas_Common.h:377
EINA_UNUSED
#define EINA_UNUSED
Definition: eina_types.h:339
elm_check_state_set
EAPI void elm_check_state_set(Evas_Object *obj, Eina_Bool state)
Set the on/off state of the check object.
Definition: efl_ui_check.c:372
evas_object_smart_callback_add
void evas_object_smart_callback_add(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
Add (register) a callback function to the smart event specified by event on the smart object obj.
Definition: evas_object_smart.c:1040
Evas_Object
Efl_Canvas_Object Evas_Object
Definition: Evas_Common.h:185
elm_box_pack_end
void elm_box_pack_end(Elm_Box *obj, Efl_Canvas_Object *subobj)
Add an object at the end of the pack list.
Definition: elm_box_eo.legacy.c:57
elm_icon_add
Evas_Object * elm_icon_add(Evas_Object *parent)
Add a new icon object to the parent.
Definition: elm_icon.c:613
elm_object_part_content_set
void elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
Set the content on part of a given container widget.
Definition: elm_main.c:1567
evas_object_size_hint_align_set
void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y)
Sets the hints for an object's alignment.
Definition: evas_object_main.c:2650
evas_object_show
void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1814
EVAS_HINT_FILL
#define EVAS_HINT_FILL
Use with evas_object_size_hint_align_set(), evas_object_size_hint_align_get(), evas_object_size_hint_...
Definition: Evas_Common.h:298
elm_fileselector_is_save_get
EAPI Eina_Bool elm_fileselector_is_save_get(const Evas_Object *obj)
Get whether the given file selector is in "saving dialog" mode.
Definition: elc_fileselector.c:2032
elm_check_add
EAPI Evas_Object * elm_check_add(Evas_Object *parent)
Add a new Check object.
Definition: efl_ui_check.c:516
elm_fileselector_folder_only_get
EAPI Eina_Bool elm_fileselector_folder_only_get(const Evas_Object *obj)
Get whether folder-only view is set for a given file selector widget.
Definition: elc_fileselector.c:2065
elm_fileselector_path_set
EAPI void elm_fileselector_path_set(Evas_Object *obj, const char *_path)
Set, programmatically, the directory that a given file selector widget will display contents from.
Definition: elc_fileselector.c:2153
evas_object_size_hint_aspect_set
void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h)
Sets the hints for an object's aspect ratio.
Definition: evas_object_main.c:2581
elm_icon_standard_set
Eina_Bool elm_icon_standard_set(Evas_Object *obj, const char *name)
Set the icon by icon standards names.
Definition: elm_icon.c:885
elm_fileselector_expandable_get
EAPI Eina_Bool elm_fileselector_expandable_get(const Evas_Object *obj)
Get whether tree view is enabled for the given file selector widget.
Definition: elc_fileselector.c:2140