# HG changeset patch # User Paul Boddie # Date 1389654664 -3600 # Node ID dd13359337f74559638bfaff40f1dacd2e597b72 # Parent 792f3cdf16a5ae2473c1741e630cc8d1c1017a42 Added tentative file, directory and date selector dialogues. diff -r 792f3cdf16a5 -r dd13359337f7 desktop/dialog.py --- a/desktop/dialog.py Mon Jan 13 19:51:13 2014 +0100 +++ b/desktop/dialog.py Tue Jan 14 00:11:04 2014 +0100 @@ -46,6 +46,7 @@ """ from desktop import use_desktop, _run, _readfrom, _status +from time import strptime class _wrapper: def __init__(self, handler): @@ -83,6 +84,22 @@ else: return [] +class _readdate_kdialog(_wrapper): + def __call__(self, cmd, shell): + result = self.handler(cmd, shell).strip() + if result: + return strptime(result, "%a %b %d %Y") + else: + return None + +class _readdate_zenity(_wrapper): + def __call__(self, cmd, shell): + result = self.handler(cmd, shell).strip() + if result: + return strptime(result, "%Y %m %d") + else: + return None + # Dialogue parameter classes. class String: @@ -539,9 +556,62 @@ Simple.__init__(self, text, width, height) self.filename = filename +class FileSelector(Simple): + + """ + A file selector dialogue. + Options: directory to start in + Response: a filename + """ + + name = "fileselector" + info = { + "kdialog" : (_readvalue(_readfrom), ["--getopenfilename", String("directory")]), + "zenity" : (_readvalue(_readfrom), ["--file-selection", StringKeyword("--filename", "directory")]), + "Xdialog" : (_readvalue(_readfrom), ["--fselect", String("directory")]), + } + + def __init__(self, directory, text="", width=None, height=None): + Simple.__init__(self, text, width, height) + self.directory = directory + +class DirectorySelector(Simple): + + """ + A directory selector dialogue. + Options: directory to start in + Response: a filename + """ + + name = "directoryselector" + info = { + "kdialog" : (_readvalue(_readfrom), ["--getexistingdirectory", String("directory")]), + "zenity" : (_readvalue(_readfrom), ["--file-selection", "--directory", StringKeyword("--filename", "directory")]), + "Xdialog" : (_readvalue(_readfrom), ["--dselect", String("directory")]), + } + + def __init__(self, directory, text="", width=None, height=None): + Simple.__init__(self, text, width, height) + self.directory = directory + +class Calendar(Simple): + + """ + A calendar dialogue. + Response: a tuple of the form (year, month, day number) + """ + + name = "calendar" + info = { + "kdialog" : (_readdate_kdialog(_readfrom), ["--calendar", String("text")]), + "zenity" : (_readdate_zenity(_readfrom), ["--calendar", "--date-format", "%Y %m %d"]), + "Xdialog" : (_readdate_kdialog(_readfrom), ["--calendar", String("text")]), + } + # Available dialogues. -available = [Question, Warning, Message, Error, Menu, CheckList, RadioList, Input, Password, Pulldown, TextFile] +available = [Question, Warning, Message, Error, Menu, CheckList, RadioList, Input, Password, Pulldown, TextFile, Calendar, + FileSelector, DirectorySelector] # Supported desktop environments.