1.1 --- a/desktop/dialog.py Tue Dec 04 00:07:43 2007 +0000
1.2 +++ b/desktop/dialog.py Thu Dec 13 21:41:15 2007 +0000
1.3 @@ -42,6 +42,42 @@
1.4
1.5 from desktop import use_desktop, _run, _readfrom, _status
1.6
1.7 +class _wrapper:
1.8 + def __init__(self, handler):
1.9 + self.handler = handler
1.10 +
1.11 +class _readvalue(_wrapper):
1.12 + def __call__(self, cmd, shell):
1.13 + return self.handler(cmd, shell).strip()
1.14 +
1.15 +class _readinput(_wrapper):
1.16 + def __call__(self, cmd, shell):
1.17 + return self.handler(cmd, shell)[:-1]
1.18 +
1.19 +class _readvalues_kdialog(_wrapper):
1.20 + def __call__(self, cmd, shell):
1.21 + result = self.handler(cmd, shell).strip().strip('"')
1.22 + if result:
1.23 + return result.split('" "')
1.24 + else:
1.25 + return []
1.26 +
1.27 +class _readvalues_zenity(_wrapper):
1.28 + def __call__(self, cmd, shell):
1.29 + result = self.handler(cmd, shell).strip()
1.30 + if result:
1.31 + return result.split("|")
1.32 + else:
1.33 + return []
1.34 +
1.35 +class _readvalues_Xdialog(_wrapper):
1.36 + def __call__(self, cmd, shell):
1.37 + result = self.handler(cmd, shell).strip()
1.38 + if result:
1.39 + return result.split("/")
1.40 + else:
1.41 + return []
1.42 +
1.43 # Dialogue parameter classes.
1.44
1.45 class String:
1.46 @@ -61,6 +97,17 @@
1.47 def convert(self, value, program):
1.48 return value or []
1.49
1.50 +class StringPairs(String):
1.51 +
1.52 + "Multiple string parameters duplicated to make identifiers."
1.53 +
1.54 + def convert(self, value, program):
1.55 + l = []
1.56 + for v in value:
1.57 + l.append(v)
1.58 + l.append(v)
1.59 + return l
1.60 +
1.61 class StringKeyword:
1.62
1.63 "A keyword parameter."
1.64 @@ -95,24 +142,32 @@
1.65 "height" : 15,
1.66 "list_height" : 10
1.67 }
1.68 + scale = 8
1.69 +
1.70 + def __init__(self, name, pixels=0):
1.71 + String.__init__(self, name)
1.72 + if pixels:
1.73 + self.factor = self.scale
1.74 + else:
1.75 + self.factor = 1
1.76
1.77 def convert(self, value, program):
1.78 if value is None:
1.79 value = self.defaults[self.name]
1.80 - return [str(int(value))]
1.81 + return [str(int(value) * self.factor)]
1.82
1.83 class IntegerKeyword(Integer):
1.84
1.85 "An integer keyword parameter."
1.86
1.87 - def __init__(self, keyword, name):
1.88 + def __init__(self, keyword, name, pixels=0):
1.89 + Integer.__init__(self, name, pixels)
1.90 self.keyword = keyword
1.91 - self.name = name
1.92
1.93 def convert(self, value, program):
1.94 if value is None:
1.95 value = self.defaults[self.name]
1.96 - return [self.keyword + "=" + str(int(value))]
1.97 + return [self.keyword + "=" + str(int(value) * self.factor)]
1.98
1.99 class Boolean(String):
1.100
1.101 @@ -224,7 +279,6 @@
1.102 value = getattr(self, option.name, None)
1.103 cmd += option.convert(value, program)
1.104
1.105 - print cmd
1.106 return handler(cmd, 0)
1.107
1.108 class Simple(Dialogue):
1.109 @@ -299,15 +353,16 @@
1.110
1.111 name = "menu"
1.112 info = {
1.113 - "kdialog" : (_readfrom, ["--menu", String("text"), MenuItemList("items")]),
1.114 - "zenity" : (_readfrom, ["--list", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.115 + "kdialog" : (_readvalue(_readfrom), ["--menu", String("text"), MenuItemList("items")]),
1.116 + "zenity" : (_readvalue(_readfrom), ["--list", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.117 MenuItemList("items")]
1.118 ),
1.119 - "Xdialog" : (_readfrom, ["--stdout", "--menubox",
1.120 + "Xdialog" : (_readvalue(_readfrom), ["--stdout", "--menubox",
1.121 String("text"), Integer("height"), Integer("width"), Integer("list_height"), MenuItemList("items")]
1.122 ),
1.123 }
1.124 item = MenuItem
1.125 + number_of_titles = 2
1.126
1.127 def __init__(self, text, titles, items=None, width=None, height=None, list_height=None):
1.128
1.129 @@ -318,7 +373,7 @@
1.130 """
1.131
1.132 Simple.__init__(self, text, width, height)
1.133 - self.titles = titles
1.134 + self.titles = ([""] * self.number_of_titles + titles)[-self.number_of_titles:]
1.135 self.items = items or []
1.136 self.list_height = list_height
1.137
1.138 @@ -340,15 +395,16 @@
1.139
1.140 name = "radiolist"
1.141 info = {
1.142 - "kdialog" : (_readfrom, ["--radiolist", String("text"), ListItemList("items")]),
1.143 - "zenity" : (_readfrom,
1.144 + "kdialog" : (_readvalues_kdialog(_readfrom), ["--radiolist", String("text"), ListItemList("items")]),
1.145 + "zenity" : (_readvalues_zenity(_readfrom),
1.146 ["--list", "--radiolist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.147 ListItemList("items", 1)]
1.148 ),
1.149 - "Xdialog" : (_readfrom, ["--stdout", "--radiolist",
1.150 + "Xdialog" : (_readvalues_Xdialog(_readfrom), ["--stdout", "--radiolist",
1.151 String("text"), Integer("height"), Integer("width"), Integer("list_height"), ListItemList("items")]
1.152 ),
1.153 }
1.154 + number_of_titles = 3
1.155
1.156 class CheckList(Menu):
1.157
1.158 @@ -360,15 +416,16 @@
1.159
1.160 name = "checklist"
1.161 info = {
1.162 - "kdialog" : (_readfrom, ["--checklist", String("text"), ListItemList("items")]),
1.163 - "zenity" : (_readfrom,
1.164 + "kdialog" : (_readvalues_kdialog(_readfrom), ["--checklist", String("text"), ListItemList("items")]),
1.165 + "zenity" : (_readvalues_zenity(_readfrom),
1.166 ["--list", "--checklist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.167 ListItemList("items", 1)]
1.168 ),
1.169 - "Xdialog" : (_readfrom, ["--stdout", "--checklist",
1.170 + "Xdialog" : (_readvalues_Xdialog(_readfrom), ["--stdout", "--checklist",
1.171 String("text"), Integer("height"), Integer("width"), Integer("list_height"), ListItemList("items")]
1.172 ),
1.173 }
1.174 + number_of_titles = 3
1.175
1.176 class Pulldown(Menu):
1.177
1.178 @@ -380,29 +437,35 @@
1.179
1.180 name = "pulldown"
1.181 info = {
1.182 - "kdialog" : (_readfrom, ["--combobox", String("text"), Strings("items")]),
1.183 - "zenity" : (_readfrom, ["--list", "--radiolist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.184 - Strings("items")]
1.185 + "kdialog" : (_readvalue(_readfrom), ["--combobox", String("text"), Strings("items")]),
1.186 + "zenity" : (_readvalue(_readfrom),
1.187 + ["--list", "--radiolist", StringKeyword("--text", "text"), StringKeywords("--column", "titles"),
1.188 + StringPairs("items")]
1.189 ),
1.190 - "Xdialog" : (_readfrom, ["--stdout", "--combobox", String("text"), Integer("height"), Integer("width"), Strings("items")]),
1.191 + "Xdialog" : (_readvalue(_readfrom),
1.192 + ["--stdout", "--combobox", String("text"), Integer("height"), Integer("width"), Strings("items")]),
1.193 }
1.194 + item = unicode
1.195 + number_of_titles = 2
1.196
1.197 class Input(Simple):
1.198
1.199 """
1.200 An input dialogue, consisting of an input field.
1.201 - Options: text, width (in characters), height (in characters),
1.202 - input
1.203 + Options: text, input, width (in characters), height (in characters)
1.204 """
1.205
1.206 name = "input"
1.207 info = {
1.208 - "kdialog" : (_readfrom, ["--inputbox", String("text"), String("data")]),
1.209 - "zenity" : (_readfrom, ["--entry", StringKeyword("--text", "text"), StringKeyword("--entry-text", "data")]),
1.210 - "Xdialog" : (_readfrom, ["--stdout", "--inputbox", String("text"), Integer("height"), Integer("width"), String("data")]),
1.211 + "kdialog" : (_readinput(_readfrom),
1.212 + ["--inputbox", String("text"), String("data")]),
1.213 + "zenity" : (_readinput(_readfrom),
1.214 + ["--entry", StringKeyword("--text", "text"), StringKeyword("--entry-text", "data")]),
1.215 + "Xdialog" : (_readinput(_readfrom),
1.216 + ["--stdout", "--inputbox", String("text"), Integer("height"), Integer("width"), String("data")]),
1.217 }
1.218
1.219 - def __init__(self, text, data, width=None, height=None):
1.220 + def __init__(self, text, data="", width=None, height=None):
1.221 Simple.__init__(self, text, width, height)
1.222 self.data = data
1.223
1.224 @@ -410,35 +473,36 @@
1.225
1.226 """
1.227 A password dialogue, consisting of a password entry field.
1.228 - Options: text, width (in characters), height (in characters),
1.229 - input
1.230 + Options: text, width (in characters), height (in characters)
1.231 """
1.232
1.233 name = "password"
1.234 info = {
1.235 - "kdialog" : (_readfrom, ["--password", String("text")]),
1.236 - "zenity" : (_readfrom, ["--password", StringKeyword("--text", "text"), "--hide-text"]),
1.237 - "Xdialog" : (_readfrom, ["--stdout", "--password", "--inputbox", String("text"), Integer("height"), Integer("width")]),
1.238 + "kdialog" : (_readinput(_readfrom),
1.239 + ["--password", String("text")]),
1.240 + "zenity" : (_readinput(_readfrom),
1.241 + ["--entry", StringKeyword("--text", "text"), "--hide-text"]),
1.242 + "Xdialog" : (_readinput(_readfrom),
1.243 + ["--stdout", "--password", "--inputbox", String("text"), Integer("height"), Integer("width")]),
1.244 }
1.245
1.246 class TextFile(Simple):
1.247
1.248 """
1.249 A text file input box.
1.250 - Options: text, width (in characters), height (in characters),
1.251 - filename
1.252 + Options: filename, text, width (in characters), height (in characters)
1.253 """
1.254
1.255 name = "textfile"
1.256 info = {
1.257 - "kdialog" : (_readfrom, ["--textbox", String("filename"), String("width"), String("height")]),
1.258 - "zenity" : (_readfrom, ["--textbox", StringKeyword("--filename", "filename"), IntegerKeyword("--width", "width"),
1.259 - IntegerKeyword("--height", "height")]
1.260 + "kdialog" : (_readfrom, ["--textbox", String("filename"), Integer("width", pixels=1), Integer("height", pixels=1)]),
1.261 + "zenity" : (_readfrom, ["--text-info", StringKeyword("--filename", "filename"), IntegerKeyword("--width", "width", pixels=1),
1.262 + IntegerKeyword("--height", "height", pixels=1)]
1.263 ),
1.264 - "Xdialog" : (_readfrom, ["--stdout", "--textbox", String("text"), Integer("height"), Integer("width")]),
1.265 + "Xdialog" : (_readfrom, ["--stdout", "--textbox", String("filename"), Integer("height"), Integer("width")]),
1.266 }
1.267
1.268 - def __init__(self, text, filename, width=None, height=None):
1.269 + def __init__(self, filename, text="", width=None, height=None):
1.270 Simple.__init__(self, text, width, height)
1.271 self.filename = filename
1.272