aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordavemds <dave@gurumeditation.it>2014-02-26 21:37:04 +0100
committerdavemds <dave@gurumeditation.it>2014-02-26 21:37:04 +0100
commit684aee077e98ab332d683d901f3f7f3cfeb9d405 (patch)
tree1339f2b1fbe8a35584853b78e6cf1fa711f0b036
parentPython-EFL: 2 small fix for the unit tests (diff)
downloadpython-efl-684aee077e98ab332d683d901f3f7f3cfeb9d405.tar.gz
Python-EFL: Fileselector 1,9 API additions.
* added property thumbnail_size * added function custom_filter_append * splitted the 3 tests in 3 different files * test rewritten to better match the C one. NOTE: custom_filter_append is leaking...need to find a proper way to unref Added a note in the TODO for this issue.
-rw-r--r--TODO2
-rw-r--r--efl/elementary/fileselector.pxd7
-rw-r--r--efl/elementary/fileselector.pyx67
-rwxr-xr-xexamples/elementary/test.py4
-rw-r--r--examples/elementary/test_fileselector.py317
-rw-r--r--examples/elementary/test_fileselector_button.py82
-rw-r--r--examples/elementary/test_fileselector_entry.py84
7 files changed, 385 insertions, 178 deletions
diff --git a/TODO b/TODO
index 73ccafb..39af69c 100644
--- a/TODO
+++ b/TODO
@@ -3,6 +3,8 @@ BUGS
====
* EdjeEdit: PartState API does not work
* Elm.Map: overlays_show segfaults, scrollers in examples are jumpy
+* Entry.markup_filter_append() and Fileselector.custom_filter_append() are
+ leaking badly, fix and check all other place that have the same issue.
Failing unit tests
------------------
diff --git a/efl/elementary/fileselector.pxd b/efl/elementary/fileselector.pxd
index 93eecde..30bc290 100644
--- a/efl/elementary/fileselector.pxd
+++ b/efl/elementary/fileselector.pxd
@@ -1,9 +1,11 @@
from efl.eina cimport Eina_Bool, const_Eina_List
-from efl.evas cimport Evas_Object, const_Evas_Object
+from efl.evas cimport Evas_Object, const_Evas_Object, Evas_Coord
from enums cimport Elm_Fileselector_Mode, Elm_Fileselector_Sort
from libc.string cimport const_char
cdef extern from "Elementary.h":
+ ctypedef Eina_Bool (*Elm_Fileselector_Filter_Func)(const_char *path, Eina_Bool dir, void *data)
+
Evas_Object * elm_fileselector_add(Evas_Object *parent)
void elm_fileselector_is_save_set(Evas_Object *obj, Eina_Bool is_save)
Eina_Bool elm_fileselector_is_save_get(const_Evas_Object *obj)
@@ -23,8 +25,11 @@ cdef extern from "Elementary.h":
const_char * elm_fileselector_selected_get(const_Evas_Object *obj)
const_Eina_List * elm_fileselector_selected_paths_get(const_Evas_Object *obj)
Eina_Bool elm_fileselector_mime_types_filter_append(Evas_Object *obj, const_char *mime_types, const_char *filter_name)
+ Eina_Bool elm_fileselector_custom_filter_append(Evas_Object *obj, Elm_Fileselector_Filter_Func func, void *data, const_char *filter_name)
void elm_fileselector_filters_clear(Evas_Object *obj)
void elm_fileselector_hidden_visible_set(Evas_Object *obj, Eina_Bool visible)
Eina_Bool elm_fileselector_hidden_visible_get(const_Evas_Object *obj)
Elm_Fileselector_Sort elm_fileselector_sort_method_get(const_Evas_Object *obj)
void elm_fileselector_sort_method_set(Evas_Object *obj, Elm_Fileselector_Sort method)
+ void elm_fileselector_thumbnail_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
+ void elm_fileselector_thumbnail_size_get(const_Evas_Object *obj, Evas_Coord *w, Evas_Coord *h)
diff --git a/efl/elementary/fileselector.pyx b/efl/elementary/fileselector.pyx
index 62b3dbc..7c50ad3 100644
--- a/efl/elementary/fileselector.pyx
+++ b/efl/elementary/fileselector.pyx
@@ -138,7 +138,7 @@ Fileselector sort method
"""
-from cpython cimport PyUnicode_AsUTF8String
+from cpython cimport PyUnicode_AsUTF8String, Py_INCREF
from libc.stdint cimport uintptr_t
from efl.eo cimport _object_mapping_register
@@ -148,6 +148,8 @@ from layout_class cimport LayoutClass
cimport enums
+import traceback
+
ELM_FILESELECTOR_LIST = enums.ELM_FILESELECTOR_LIST
ELM_FILESELECTOR_GRID = enums.ELM_FILESELECTOR_GRID
@@ -165,6 +167,15 @@ def _cb_string_conv(uintptr_t addr):
cdef const_char *s = <const_char *>addr
return _ctouni(s) if s is not NULL else None
+cdef Eina_Bool py_elm_fileselector_custom_filter_cb(const_char *path, Eina_Bool is_dir, void *data) with gil:
+ cb_func, cb_data = <object>data
+ try:
+ return cb_func(_ctouni(path), is_dir, cb_data)
+ except:
+ traceback.print_exc()
+ return 0
+
+
cdef class Fileselector(LayoutClass):
"""This is the class that actually implements the widget."""
@@ -425,6 +436,7 @@ cdef class Fileselector(LayoutClass):
.. note:: first added filter will be the default filter at the moment.
:seealso: :py:func:`~efl.elementary.need.need_efreet`
+ :seealso: :py:meth:`custom_filter_append`
:seealso: :py:meth:`filters_clear`
.. versionadded:: 1.8
@@ -437,6 +449,36 @@ cdef class Fileselector(LayoutClass):
<const_char *>filter_name if filter_name is not None else NULL):
raise RuntimeWarning
+ def custom_filter_append(self, func, data=None, filter_name=None):
+ """custom_filter_append(func, data=None, filter_name=None)
+
+ Append custom filter into filter list.
+
+ :param func: The function to call when manipulating files and directories.
+ :type func: callable
+ :param data: The data to be passed to the function.
+ :param filter_name: The name to be displayed, "custom" will be displayed if None
+ :type filter_name: string
+
+ .. note:: filter function signature is: func(path, is_dir, data)
+ .. note:: first added filter will be the default filter at the moment.
+
+ :seealso: :py:meth:`mime_types_filter_append`
+ :seealso: :py:meth:`filters_clear`
+
+ .. versionadded:: 1.9
+
+ """
+ cb_data = (func, data)
+ # TODO: This is now a ref leak. It should be stored somewhere and
+ # deleted in the remove method.
+ Py_INCREF(cb_data)
+
+ if isinstance(filter_name, unicode): filter_name = PyUnicode_AsUTF8String(filter_name)
+ elm_fileselector_custom_filter_append(self.obj,
+ py_elm_fileselector_custom_filter_cb, <void *>cb_data,
+ <const_char *>filter_name if filter_name is not None else NULL)
+
def filters_clear(self):
"""
@@ -478,6 +520,29 @@ cdef class Fileselector(LayoutClass):
def hidden_visible_get(self):
return bool(elm_fileselector_hidden_visible_get(self.obj))
+ property thumbnail_size:
+ """ The size (in pixels) for the thumbnail images.
+
+ :type: tuple (w, h)
+
+ .. versionadded:: 1.9
+
+ """
+ def __set__(self, size):
+ elm_fileselector_thumbnail_size_set(self.obj, size[0], size[1])
+
+ def __get__(self):
+ cdef Evas_Coord w, h
+ elm_fileselector_thumbnail_size_get(self.obj, &w, &h)
+ return (w, h)
+
+ def thumbnail_size_set(self, w, h):
+ elm_fileselector_thumbnail_size_set(self.obj, w, h)
+ def thumbnail_size_get(self):
+ cdef Evas_Coord w, h
+ elm_fileselector_thumbnail_size_get(self.obj, &w, &h)
+ return (w, h)
+
def callback_activated_add(self, func, *args, **kwargs):
"""the user activated a file. This can happen by
double-clicking or pressing Enter key. (**event_info** is a
diff --git a/examples/elementary/test.py b/examples/elementary/test.py
index ea5c7db..30e3df6 100755
--- a/examples/elementary/test.py
+++ b/examples/elementary/test.py
@@ -186,8 +186,8 @@ items = [
("Day Selector", "test_dayselector", "dayselector_clicked"),
("Disk Selector", "test_diskselector", "diskselector_clicked"),
("File Selector", "test_fileselector", "fileselector_clicked"),
- ("Fileselector button", "test_fileselector", "fileselector_button_clicked"),
- ("Fileselector entry", "test_fileselector", "fileselector_entry_clicked"),
+ ("Fileselector button", "test_fileselector_button", "fileselector_button_clicked"),
+ ("Fileselector entry", "test_fileselector_entry", "fileselector_entry_clicked"),
("Flip Selector", "test_flipselector", "flipselector_clicked"),
("Hoversel", "test_hoversel", "hoversel_clicked"),
("Index", "test_index", "index_clicked"),
diff --git a/examples/elementary/test_fileselector.py b/examples/elementary/test_fileselector.py
index de4dc5c..acb6ebc 100644
--- a/examples/elementary/test_fileselector.py
+++ b/examples/elementary/test_fileselector.py
@@ -6,20 +6,27 @@ import os
from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
from efl import elementary
from efl.elementary.window import StandardWindow
-from efl.elementary.box import Box
+from efl.elementary.box import Box, ELM_BOX_LAYOUT_FLOW_HORIZONTAL
from efl.elementary.frame import Frame
from efl.elementary.label import Label
from efl.elementary.button import Button
from efl.elementary.check import Check
-from efl.elementary.list import List
-from efl.elementary.fileselector import Fileselector, ELM_FILESELECTOR_SORT_LAST
-from efl.elementary.fileselector_button import FileselectorButton
-from efl.elementary.fileselector_entry import FileselectorEntry
+from efl.elementary.hoversel import Hoversel
+from efl.elementary.radio import Radio
+from efl.elementary.slider import Slider
from efl.elementary.separator import Separator
+from efl.elementary.fileselector import Fileselector, \
+ ELM_FILESELECTOR_SORT_LAST, ELM_FILESELECTOR_LIST, ELM_FILESELECTOR_GRID, \
+ ELM_FILESELECTOR_SORT_BY_FILENAME_ASC, ELM_FILESELECTOR_SORT_BY_FILENAME_DESC, \
+ ELM_FILESELECTOR_SORT_BY_TYPE_ASC, ELM_FILESELECTOR_SORT_BY_TYPE_DESC, \
+ ELM_FILESELECTOR_SORT_BY_SIZE_ASC, ELM_FILESELECTOR_SORT_BY_SIZE_DESC, \
+ ELM_FILESELECTOR_SORT_BY_MODIFIED_ASC, ELM_FILESELECTOR_SORT_BY_MODIFIED_DESC
+
EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
+
def fs_cb_done(fs, selected, win):
win.delete()
@@ -46,241 +53,203 @@ def ck_cb_buttons(bt, fs):
print("Toggle buttons_ok_cancel")
fs.buttons_ok_cancel = not fs.buttons_ok_cancel
+def ck_cb_multi_select(bt, fs):
+ print("Toggle multi_select")
+ fs.multi_select = not fs.multi_select
+
def ck_cb_hidden(bt, fs):
print("Toggle hidden_visible")
fs.hidden_visible = not fs.hidden_visible
def bt_cb_sel_get(bt, fs):
- print("Get Selected:" + fs.selected_get())
+ print("Get Selected:" + fs.selected)
def bt_cb_path_get(bt, fs):
- print("Get Path:" + fs.path_get())
+ print("Get Path:" + fs.path)
+
+def bt_cb_paths_get(bt, fs):
+ print("Get Path:" + str(fs.selected_paths))
+
+def rd_cb_mode(rd, fs):
+ mode = rd.value
+ fs.mode_set(mode)
-def bt_cb_mode_cycle(bt, fs):
- mode = fs.mode + 1
- fs.mode_set(mode if mode < 2 else 0)
+def sl_cb_thumb_size(sl, fs):
+ val = int(sl.value)
+ fs.thumbnail_size = (val, val)
-def bt_cb_sort_cycle(bt, fs):
- sort_method = fs.sort_method + 1
- fs.sort_method = sort_method if sort_method < ELM_FILESELECTOR_SORT_LAST else 0
+def hs_cb_sort_method(hs, item, fs, method):
+ fs.sort_method = method
+
+def custom_filter_all(path, is_dir, data):
+ return True
+
+def custom_filter_edje(path, is_dir, data):
+ if is_dir or path.endswith(".edc") or path.endswith(".edj"):
+ return True
+ return False
def fileselector_clicked(obj, item=None):
- win = StandardWindow("fileselector", "File selector test", autodel=True,
- size=(240,350))
+ win = StandardWindow("fileselector", "File selector test",
+ autodel=True, size=(500,500))
- vbox = Box(win, size_hint_weight=EXPAND_BOTH)
- win.resize_object_add(vbox)
- vbox.show()
+ box1 = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
+ win.resize_object_add(box1)
+ box1.show()
- fs = Fileselector(win, is_save=True, expandable=True, folder_only=True,
- path=os.getenv("HOME"), size_hint_weight=EXPAND_BOTH,
- size_hint_align=FILL_BOTH)
+ fs = Fileselector(win, is_save=True, expandable=False, folder_only=False,
+ path=os.getenv("HOME"), size_hint_weight=EXPAND_BOTH,
+ size_hint_align=FILL_BOTH)
fs.callback_done_add(fs_cb_done, win)
fs.callback_selected_add(fs_cb_selected, win)
fs.callback_directory_open_add(fs_cb_directory_open, win)
- vbox.pack_end(fs)
+ box1.pack_end(fs)
fs.show()
- sep = Separator(win, horizontal=True)
- vbox.pack_end(sep)
+ fs.custom_filter_append(custom_filter_all, filter_name="All Files")
+ fs.custom_filter_append(custom_filter_edje, filter_name="Edje Files")
+ fs.mime_types_filter_append(["text/*"], "Text Files")
+ fs.mime_types_filter_append(["image/*"], "Image Files")
+
+
+ sep = Separator(win)
+ box1.pack_end(sep)
sep.show()
- hbox = Box(win, horizontal=True)
- vbox.pack_end(hbox)
- hbox.show()
+ vbox = Box(win)
+ box1.pack_end(vbox)
+ vbox.show()
+
+ # Options frame
+ fr = Frame(win, text="Options")
+ vbox.pack_end(fr)
+ fr.show()
+
+ fbox1 = Box(win)
+ fr.content = fbox1
+ fbox1.show()
+
+ fbox2 = Box(win, horizontal=True)
+ fbox1.pack_end(fbox2)
+ fbox2.show()
ck = Check(win, text="is_save", state=fs.is_save)
ck.callback_changed_add(ck_cb_is_save, fs)
- hbox.pack_end(ck)
+ fbox2.pack_end(ck)
ck.show()
ck = Check(win, text="folder_only", state=fs.folder_only)
ck.callback_changed_add(ck_cb_folder_only, fs)
- hbox.pack_end(ck)
+ fbox2.pack_end(ck)
ck.show()
ck = Check(win, text="expandable", state=fs.expandable)
ck.callback_changed_add(ck_cb_expandable, fs)
- hbox.pack_end(ck)
+ fbox2.pack_end(ck)
+ ck.show()
+
+ fbox2 = Box(win, horizontal=True)
+ fbox1.pack_end(fbox2)
+ fbox2.show()
+
+ ck = Check(win, text="multiple selection", state=fs. multi_select)
+ ck.callback_changed_add(ck_cb_multi_select, fs)
+ fbox2.pack_end(ck)
ck.show()
ck = Check(win, text="buttons", state=fs.buttons_ok_cancel)
ck.callback_changed_add(ck_cb_buttons, fs)
- hbox.pack_end(ck)
+ fbox2.pack_end(ck)
ck.show()
ck = Check(win, text="hidden", state=fs.hidden_visible)
ck.callback_changed_add(ck_cb_hidden, fs)
- hbox.pack_end(ck)
+ fbox2.pack_end(ck)
ck.show()
- hbox = Box(win, horizontal=True)
- vbox.pack_end(hbox)
- hbox.show()
+ # Getters frame
+ fr = Frame(win, text="Getters", size_hint_align=FILL_BOTH)
+ vbox.pack_end(fr)
+ fr.show()
+
+ fbox = Box(win, horizontal=True)
+ fr.content = fbox
+ fbox.show()
bt = Button(win, text="selected_get")
bt.callback_clicked_add(bt_cb_sel_get, fs)
- hbox.pack_end(bt)
+ fbox.pack_end(bt)
bt.show()
bt = Button(win, text="path_get")
bt.callback_clicked_add(bt_cb_path_get, fs)
- hbox.pack_end(bt)
- bt.show()
-
- bt = Button(win, text="mode cycle")
- bt.callback_clicked_add(bt_cb_mode_cycle, fs)
- hbox.pack_end(bt)
+ fbox.pack_end(bt)
bt.show()
- bt = Button(win, text="sort_method cycle")
- bt.callback_clicked_add(bt_cb_sort_cycle, fs)
- hbox.pack_end(bt)
+ bt = Button(win, text="selected_paths")
+ bt.callback_clicked_add(bt_cb_paths_get, fs)
+ fbox.pack_end(bt)
bt.show()
- win.resize(240, 350)
- win.show()
-
-
-def fileselector_button_clicked(obj, item=None):
- win = StandardWindow("fileselector", "File selector test", autodel=True,
- size=(240, 350))
-
- vbox = Box(win, size_hint_weight=EXPAND_BOTH)
- win.resize_object_add(vbox)
- vbox.show()
-
- fse = FileselectorButton(win, text="Select a file", inwin_mode=False,
- size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
- vbox.pack_end(fse)
- fse.show()
-
- sep = Separator(win, horizontal=True)
- vbox.pack_end(sep)
- sep.show()
-
- hbox = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
- vbox.pack_end(hbox)
- hbox.show()
-
- ck = Check(win, text="inwin", state=fse.inwin_mode)
- ck.callback_changed_add(ck_entry_cb_inwin, fse)
- hbox.pack_end(ck)
- ck.show()
-
- ck = Check(win, text="folder_only", state=fse.folder_only)
- ck.callback_changed_add(ck_entry_cb_folder_only, fse)
- hbox.pack_end(ck)
- ck.show()
-
- ck = Check(win, text="is_save", state=fse.is_save)
- ck.callback_changed_add(ck_entry_cb_is_save, fse)
- hbox.pack_end(ck)
- ck.show()
-
- ck = Check(win, text="expandable", state=fse.expandable)
- ck.callback_changed_add(ck_entry_cb_expandable, fse)
- hbox.pack_end(ck)
- ck.show()
-
- win.show()
-
-
-def ck_entry_cb_is_save(bt, fse):
- print("Toggle is save")
- fse.is_save = not fse.is_save
-
-def ck_entry_cb_inwin(bt, fse):
- print("Toggle inwin mode")
- fse.inwin_mode = not fse.inwin_mode
-
-def ck_entry_cb_folder_only(bt, fse):
- print("Toggle folder_only")
- fse.folder_only = not fse.folder_only
-
-def ck_entry_cb_expandable(bt, fse):
- print("Toggle expandable")
- fse.expandable = not fse.expandable
-
-
-def fileselector_entry_clicked(obj, item=None):
- win = StandardWindow("fileselector", "File selector test", autodel=True,
- size=(240, 150))
-
- vbox = Box(win, size_hint_weight=EXPAND_BOTH)
- win.resize_object_add(vbox)
- vbox.show()
+ # Mode frame
+ fr = Frame(win, text="Mode", size_hint_align=FILL_BOTH)
+ vbox.pack_end(fr)
+ fr.show()
- fse = FileselectorEntry(win, text="Select a file", inwin_mode=False,
- size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
- vbox.pack_end(fse)
- fse.show()
+ fbox = Box(win, horizontal=True)
+ fr.content = fbox
+ fbox.show()
- sep = Separator(win, horizontal=True)
- vbox.pack_end(sep)
- sep.show()
+ rdg = rd = Radio(win, text="List", state_value=ELM_FILESELECTOR_LIST)
+ rd.callback_changed_add(rd_cb_mode, fs)
+ fbox.pack_end(rd)
+ rd.show()
- hbox = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
- vbox.pack_end(hbox)
- hbox.show()
+ rd = Radio(win, text="Grid", state_value=ELM_FILESELECTOR_GRID)
+ rd.callback_changed_add(rd_cb_mode, fs)
+ rd.group_add(rdg)
+ fbox.pack_end(rd)
+ rd.show()
- ck = Check(win, text="inwin", state=fse.inwin_mode)
- ck.callback_changed_add(ck_entry_cb_inwin, fse)
- hbox.pack_end(ck)
- ck.show()
+ # Thumbsize frame
+ fr = Frame(win, text="Thumbnail size", size_hint_align=FILL_BOTH)
+ vbox.pack_end(fr)
+ fr.show()
- ck = Check(win, text="folder_only", state=fse.folder_only)
- ck.callback_changed_add(ck_entry_cb_folder_only, fse)
- hbox.pack_end(ck)
- ck.show()
+ sl = Slider(win, min_max=(4, 130), unit_format="%.0f px",
+ value=fs.thumbnail_size[0])
+ sl.callback_delay_changed_add(sl_cb_thumb_size, fs)
+ fr.content = sl
+ sl.show()
- ck = Check(win, text="is_save", state=fse.is_save)
- ck.callback_changed_add(ck_entry_cb_is_save, fse)
- hbox.pack_end(ck)
- ck.show()
+ # Sort method frame
+ fr = Frame(win, text="Sort method", size_hint_align=FILL_BOTH)
+ vbox.pack_end(fr)
+ fr.show()
- ck = Check(win, text="expandable", state=fse.expandable)
- ck.callback_changed_add(ck_entry_cb_expandable, fse)
- hbox.pack_end(ck)
- ck.show()
+ hs = Hoversel(win, text="File name (asc)")
+ sorts = (
+ ("File name (asc)", ELM_FILESELECTOR_SORT_BY_FILENAME_ASC),
+ ("File name (desc)", ELM_FILESELECTOR_SORT_BY_FILENAME_DESC),
+ ("Type (asc)", ELM_FILESELECTOR_SORT_BY_TYPE_ASC),
+ ("Type (desc)", ELM_FILESELECTOR_SORT_BY_TYPE_DESC),
+ ("Size (asc)", ELM_FILESELECTOR_SORT_BY_SIZE_ASC),
+ ("Size (desc)", ELM_FILESELECTOR_SORT_BY_SIZE_DESC),
+ ("Modified time (asc)", ELM_FILESELECTOR_SORT_BY_MODIFIED_ASC),
+ ("Modified time (desc)", ELM_FILESELECTOR_SORT_BY_MODIFIED_DESC),
+ )
+ for sort in sorts:
+ hs.item_add(label=sort[0], callback=hs_cb_sort_method, fs=fs, method=sort[1])
+ fr.content = hs
+ hs.show()
win.show()
if __name__ == "__main__":
elementary.init()
- win = StandardWindow("test", "python-elementary test application",
- size=(320,520))
- win.callback_delete_request_add(lambda o: elementary.exit())
-
- box0 = Box(win, size_hint_weight=EXPAND_BOTH)
- win.resize_object_add(box0)
- box0.show()
-
- lb = Label(win)
- lb.text_set("Please select a test from the list below<br>"
- "by clicking the test button to show the<br>"
- "test window.")
- lb.show()
-
- fr = Frame(win, text="Information", content=lb)
- box0.pack_end(fr)
- fr.show()
- items = [("Fileselector", fileselector_clicked),
- ("Fileselector Button", fileselector_button_clicked),
- ("Fileselector Entry", fileselector_entry_clicked),
- ]
+ fileselector_clicked(None)
- li = List(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
- box0.pack_end(li)
- li.show()
-
- for item in items:
- li.item_append(item[0], callback=item[1])
-
- li.go()
-
- win.show()
elementary.run()
elementary.shutdown()
diff --git a/examples/elementary/test_fileselector_button.py b/examples/elementary/test_fileselector_button.py
new file mode 100644
index 0000000..ed26a8f
--- /dev/null
+++ b/examples/elementary/test_fileselector_button.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
+from efl import elementary
+from efl.elementary.window import StandardWindow
+from efl.elementary.box import Box
+from efl.elementary.check import Check
+from efl.elementary.fileselector_button import FileselectorButton
+from efl.elementary.separator import Separator
+
+EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
+FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
+
+def toggle_is_save(bt, fsb):
+ print("Toggle is save")
+ fsb.is_save = not fsb.is_save
+
+def toggle_inwin(bt, fsb):
+ print("Toggle inwin mode")
+ fsb.inwin_mode = not fsb.inwin_mode
+
+def toggle_folder_only(bt, fsb):
+ print("Toggle folder_only")
+ fsb.folder_only = not fsb.folder_only
+
+def toggle_expandable(bt, fsb):
+ print("Toggle expandable")
+ fsb.expandable = not fsb.expandable
+
+def fileselector_button_clicked(obj, item=None):
+ win = StandardWindow("fileselector", "File selector test",
+ autodel=True, size=(240, 350))
+
+ vbox = Box(win, size_hint_weight=EXPAND_BOTH)
+ win.resize_object_add(vbox)
+ vbox.show()
+
+ fse = FileselectorButton(win, text="Select a file", inwin_mode=False,
+ size_hint_align=FILL_BOTH,
+ size_hint_weight=EXPAND_BOTH)
+ vbox.pack_end(fse)
+ fse.show()
+
+ sep = Separator(win, horizontal=True)
+ vbox.pack_end(sep)
+ sep.show()
+
+ hbox = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
+ vbox.pack_end(hbox)
+ hbox.show()
+
+ ck = Check(win, text="inwin", state=fse.inwin_mode)
+ ck.callback_changed_add(toggle_inwin, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="folder_only", state=fse.folder_only)
+ ck.callback_changed_add(toggle_folder_only, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="is_save", state=fse.is_save)
+ ck.callback_changed_add(toggle_is_save, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="expandable", state=fse.expandable)
+ ck.callback_changed_add(toggle_expandable, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ win.show()
+
+
+if __name__ == "__main__":
+ elementary.init()
+
+ fileselector_button_clicked(None)
+
+ elementary.run()
+ elementary.shutdown()
diff --git a/examples/elementary/test_fileselector_entry.py b/examples/elementary/test_fileselector_entry.py
new file mode 100644
index 0000000..6098139
--- /dev/null
+++ b/examples/elementary/test_fileselector_entry.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL
+from efl import elementary
+from efl.elementary.window import StandardWindow
+from efl.elementary.box import Box
+from efl.elementary.check import Check
+from efl.elementary.fileselector_entry import FileselectorEntry
+from efl.elementary.separator import Separator
+
+EXPAND_BOTH = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
+FILL_BOTH = EVAS_HINT_FILL, EVAS_HINT_FILL
+
+
+def toggle_is_save(bt, fse):
+ print("Toggle is save")
+ fse.is_save = not fse.is_save
+
+def toggle_inwin(bt, fse):
+ print("Toggle inwin mode")
+ fse.inwin_mode = not fse.inwin_mode
+
+def toggle_folder_only(bt, fse):
+ print("Toggle folder_only")
+ fse.folder_only = not fse.folder_only
+
+def toggle_expandable(bt, fse):
+ print("Toggle expandable")
+ fse.expandable = not fse.expandable
+
+
+def fileselector_entry_clicked(obj, item=None):
+ win = StandardWindow("fileselector", "File selector test",
+ autodel=True, size=(240, 150))
+
+ vbox = Box(win, size_hint_weight=EXPAND_BOTH)
+ win.resize_object_add(vbox)
+ vbox.show()
+
+ fse = FileselectorEntry(win, text="Select a file", inwin_mode=False,
+ size_hint_align=FILL_BOTH,
+ size_hint_weight=EXPAND_BOTH)
+ vbox.pack_end(fse)
+ fse.show()
+
+ sep = Separator(win, horizontal=True)
+ vbox.pack_end(sep)
+ sep.show()
+
+ hbox = Box(win, horizontal=True, size_hint_weight=EXPAND_BOTH)
+ vbox.pack_end(hbox)
+ hbox.show()
+
+ ck = Check(win, text="inwin", state=fse.inwin_mode)
+ ck.callback_changed_add(toggle_inwin, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="folder_only", state=fse.folder_only)
+ ck.callback_changed_add(toggle_folder_only, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="is_save", state=fse.is_save)
+ ck.callback_changed_add(toggle_is_save, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ ck = Check(win, text="expandable", state=fse.expandable)
+ ck.callback_changed_add(toggle_expandable, fse)
+ hbox.pack_end(ck)
+ ck.show()
+
+ win.show()
+
+
+if __name__ == "__main__":
+ elementary.init()
+
+ fileselector_entry_clicked(None)
+
+ elementary.run()
+ elementary.shutdown()