1.1 --- a/desktop/dialog.py Mon Jan 13 19:51:13 2014 +0100
1.2 +++ b/desktop/dialog.py Tue Jan 14 00:11:04 2014 +0100
1.3 @@ -46,6 +46,7 @@
1.4 """
1.5
1.6 from desktop import use_desktop, _run, _readfrom, _status
1.7 +from time import strptime
1.8
1.9 class _wrapper:
1.10 def __init__(self, handler):
1.11 @@ -83,6 +84,22 @@
1.12 else:
1.13 return []
1.14
1.15 +class _readdate_kdialog(_wrapper):
1.16 + def __call__(self, cmd, shell):
1.17 + result = self.handler(cmd, shell).strip()
1.18 + if result:
1.19 + return strptime(result, "%a %b %d %Y")
1.20 + else:
1.21 + return None
1.22 +
1.23 +class _readdate_zenity(_wrapper):
1.24 + def __call__(self, cmd, shell):
1.25 + result = self.handler(cmd, shell).strip()
1.26 + if result:
1.27 + return strptime(result, "%Y %m %d")
1.28 + else:
1.29 + return None
1.30 +
1.31 # Dialogue parameter classes.
1.32
1.33 class String:
1.34 @@ -539,9 +556,62 @@
1.35 Simple.__init__(self, text, width, height)
1.36 self.filename = filename
1.37
1.38 +class FileSelector(Simple):
1.39 +
1.40 + """
1.41 + A file selector dialogue.
1.42 + Options: directory to start in
1.43 + Response: a filename
1.44 + """
1.45 +
1.46 + name = "fileselector"
1.47 + info = {
1.48 + "kdialog" : (_readvalue(_readfrom), ["--getopenfilename", String("directory")]),
1.49 + "zenity" : (_readvalue(_readfrom), ["--file-selection", StringKeyword("--filename", "directory")]),
1.50 + "Xdialog" : (_readvalue(_readfrom), ["--fselect", String("directory")]),
1.51 + }
1.52 +
1.53 + def __init__(self, directory, text="", width=None, height=None):
1.54 + Simple.__init__(self, text, width, height)
1.55 + self.directory = directory
1.56 +
1.57 +class DirectorySelector(Simple):
1.58 +
1.59 + """
1.60 + A directory selector dialogue.
1.61 + Options: directory to start in
1.62 + Response: a filename
1.63 + """
1.64 +
1.65 + name = "directoryselector"
1.66 + info = {
1.67 + "kdialog" : (_readvalue(_readfrom), ["--getexistingdirectory", String("directory")]),
1.68 + "zenity" : (_readvalue(_readfrom), ["--file-selection", "--directory", StringKeyword("--filename", "directory")]),
1.69 + "Xdialog" : (_readvalue(_readfrom), ["--dselect", String("directory")]),
1.70 + }
1.71 +
1.72 + def __init__(self, directory, text="", width=None, height=None):
1.73 + Simple.__init__(self, text, width, height)
1.74 + self.directory = directory
1.75 +
1.76 +class Calendar(Simple):
1.77 +
1.78 + """
1.79 + A calendar dialogue.
1.80 + Response: a tuple of the form (year, month, day number)
1.81 + """
1.82 +
1.83 + name = "calendar"
1.84 + info = {
1.85 + "kdialog" : (_readdate_kdialog(_readfrom), ["--calendar", String("text")]),
1.86 + "zenity" : (_readdate_zenity(_readfrom), ["--calendar", "--date-format", "%Y %m %d"]),
1.87 + "Xdialog" : (_readdate_kdialog(_readfrom), ["--calendar", String("text")]),
1.88 + }
1.89 +
1.90 # Available dialogues.
1.91
1.92 -available = [Question, Warning, Message, Error, Menu, CheckList, RadioList, Input, Password, Pulldown, TextFile]
1.93 +available = [Question, Warning, Message, Error, Menu, CheckList, RadioList, Input, Password, Pulldown, TextFile, Calendar,
1.94 + FileSelector, DirectorySelector]
1.95
1.96 # Supported desktop environments.
1.97