blob: a9d3e1601375aac8eee3f392f9c1dbe45bc00734 [file] [log] [blame]
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +00001"""Easy to use dialogs.
2
3Message(msg) -- display a message and an OK button.
4AskString(prompt, default) -- ask for a string, display OK and Cancel buttons.
Just van Rossumcdcc0f01999-02-15 00:04:05 +00005AskPassword(prompt, default) -- like AskString(), but shows text as bullets.
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +00006AskYesNoCancel(question, default) -- display a question and Yes, No and Cancel buttons.
Jack Jansen3a87f5b1995-11-14 10:13:49 +00007bar = Progress(label, maxvalue) -- Display a progress bar
8bar.set(value) -- Set value
Jack Jansen1d63d8c1997-05-12 15:44:14 +00009bar.inc( *amount ) -- increment value by amount (default=1)
10bar.label( *newlabel ) -- get or set text label.
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000011
12More documentation in each function.
Jack Jansencc386881999-12-12 22:57:51 +000013This module uses DLOG resources 260 and on.
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000014Based upon STDWIN dialogs with the same names and functions.
15"""
16
Jack Jansene4b40381995-07-17 13:25:15 +000017from Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog
Jack Jansen3a87f5b1995-11-14 10:13:49 +000018import Qd
Jack Jansen3a87f5b1995-11-14 10:13:49 +000019import QuickDraw
Jack Jansenb92268a1999-02-10 22:38:44 +000020import Dialogs
21import Windows
Jack Jansen1d63d8c1997-05-12 15:44:14 +000022import Dlg,Win,Evt,Events # sdm7g
Jack Jansen60429e01999-12-13 16:07:01 +000023import Ctl
Jack Jansenf86eda52000-09-19 22:42:38 +000024import Controls
25import Menu
Jack Jansena5a49811998-07-01 15:47:44 +000026import MacOS
27import string
Jack Jansen60429e01999-12-13 16:07:01 +000028from ControlAccessor import * # Also import Controls constants
Jack Jansenf86eda52000-09-19 22:42:38 +000029import macfs
Jack Jansena5a49811998-07-01 15:47:44 +000030
31def cr2lf(text):
32 if '\r' in text:
33 text = string.join(string.split(text, '\r'), '\n')
34 return text
35
36def lf2cr(text):
37 if '\n' in text:
38 text = string.join(string.split(text, '\n'), '\r')
Jack Jansend5af7bd1998-09-28 10:37:08 +000039 if len(text) > 253:
40 text = text[:253] + '\311'
Jack Jansena5a49811998-07-01 15:47:44 +000041 return text
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000042
Jack Jansencc386881999-12-12 22:57:51 +000043def Message(msg, id=260, ok=None):
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000044 """Display a MESSAGE string.
45
46 Return when the user clicks the OK button or presses Return.
47
48 The MESSAGE string can be at most 255 characters long.
49 """
50
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000051 d = GetNewDialog(id, -1)
52 if not d:
53 print "Can't get DLOG resource with id =", id
54 return
Jack Jansencc386881999-12-12 22:57:51 +000055 h = d.GetDialogItemAsControl(2)
Jack Jansena5a49811998-07-01 15:47:44 +000056 SetDialogItemText(h, lf2cr(msg))
Jack Jansen208c15a1999-02-16 16:06:39 +000057 if ok != None:
Jack Jansencc386881999-12-12 22:57:51 +000058 h = d.GetDialogItemAsControl(1)
59 h.SetControlTitle(ok)
Jack Jansen3a87f5b1995-11-14 10:13:49 +000060 d.SetDialogDefaultItem(1)
Jack Jansenfca049d2000-01-18 13:36:02 +000061 d.AutoSizeDialog()
Jack Jansen0c1836f2000-08-25 22:06:19 +000062 d.GetDialogWindow().ShowWindow()
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000063 while 1:
64 n = ModalDialog(None)
65 if n == 1:
66 return
67
68
Jack Jansencc386881999-12-12 22:57:51 +000069def AskString(prompt, default = "", id=261, ok=None, cancel=None):
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000070 """Display a PROMPT string and a text entry field with a DEFAULT string.
71
72 Return the contents of the text entry field when the user clicks the
73 OK button or presses Return.
74 Return None when the user clicks the Cancel button.
75
76 If omitted, DEFAULT is empty.
77
78 The PROMPT and DEFAULT strings, as well as the return value,
79 can be at most 255 characters long.
80 """
81
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +000082 d = GetNewDialog(id, -1)
83 if not d:
84 print "Can't get DLOG resource with id =", id
85 return
Jack Jansencc386881999-12-12 22:57:51 +000086 h = d.GetDialogItemAsControl(3)
Jack Jansena5a49811998-07-01 15:47:44 +000087 SetDialogItemText(h, lf2cr(prompt))
Jack Jansencc386881999-12-12 22:57:51 +000088 h = d.GetDialogItemAsControl(4)
Jack Jansena5a49811998-07-01 15:47:44 +000089 SetDialogItemText(h, lf2cr(default))
Jack Jansend61f92b1999-01-22 13:14:06 +000090 d.SelectDialogItemText(4, 0, 999)
Jack Jansene4b40381995-07-17 13:25:15 +000091# d.SetDialogItem(4, 0, 255)
Jack Jansen208c15a1999-02-16 16:06:39 +000092 if ok != None:
Jack Jansencc386881999-12-12 22:57:51 +000093 h = d.GetDialogItemAsControl(1)
94 h.SetControlTitle(ok)
Jack Jansen208c15a1999-02-16 16:06:39 +000095 if cancel != None:
Jack Jansencc386881999-12-12 22:57:51 +000096 h = d.GetDialogItemAsControl(2)
97 h.SetControlTitle(cancel)
Jack Jansen3a87f5b1995-11-14 10:13:49 +000098 d.SetDialogDefaultItem(1)
99 d.SetDialogCancelItem(2)
Jack Jansenfca049d2000-01-18 13:36:02 +0000100 d.AutoSizeDialog()
Jack Jansen0c1836f2000-08-25 22:06:19 +0000101 d.GetDialogWindow().ShowWindow()
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000102 while 1:
103 n = ModalDialog(None)
104 if n == 1:
Jack Jansencc386881999-12-12 22:57:51 +0000105 h = d.GetDialogItemAsControl(4)
Jack Jansena5a49811998-07-01 15:47:44 +0000106 return cr2lf(GetDialogItemText(h))
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000107 if n == 2: return None
108
Jack Jansen60429e01999-12-13 16:07:01 +0000109def AskPassword(prompt, default='', id=264, ok=None, cancel=None):
Jack Jansenb92268a1999-02-10 22:38:44 +0000110 """Display a PROMPT string and a text entry field with a DEFAULT string.
111 The string is displayed as bullets only.
112
113 Return the contents of the text entry field when the user clicks the
114 OK button or presses Return.
115 Return None when the user clicks the Cancel button.
116
117 If omitted, DEFAULT is empty.
118
119 The PROMPT and DEFAULT strings, as well as the return value,
120 can be at most 255 characters long.
121 """
122 d = GetNewDialog(id, -1)
123 if not d:
124 print "Can't get DLOG resource with id =", id
125 return
Jack Jansen60429e01999-12-13 16:07:01 +0000126 h = d.GetDialogItemAsControl(3)
Jack Jansenb92268a1999-02-10 22:38:44 +0000127 SetDialogItemText(h, lf2cr(prompt))
Jack Jansen60429e01999-12-13 16:07:01 +0000128 pwd = d.GetDialogItemAsControl(4)
Jack Jansenb92268a1999-02-10 22:38:44 +0000129 bullets = '\245'*len(default)
Jack Jansen60429e01999-12-13 16:07:01 +0000130## SetControlData(pwd, kControlEditTextPart, kControlEditTextTextTag, bullets)
131 SetControlData(pwd, kControlEditTextPart, kControlEditTextPasswordTag, default)
132 d.SelectDialogItemText(4, 0, 999)
Jack Jansen0c1836f2000-08-25 22:06:19 +0000133 Ctl.SetKeyboardFocus(d.GetDialogWindow(), pwd, kControlEditTextPart)
Jack Jansen60429e01999-12-13 16:07:01 +0000134 if ok != None:
135 h = d.GetDialogItemAsControl(1)
136 h.SetControlTitle(ok)
137 if cancel != None:
138 h = d.GetDialogItemAsControl(2)
139 h.SetControlTitle(cancel)
Jack Jansenb92268a1999-02-10 22:38:44 +0000140 d.SetDialogDefaultItem(Dialogs.ok)
141 d.SetDialogCancelItem(Dialogs.cancel)
Jack Jansenfca049d2000-01-18 13:36:02 +0000142 d.AutoSizeDialog()
Jack Jansen0c1836f2000-08-25 22:06:19 +0000143 d.GetDialogWindow().ShowWindow()
Jack Jansenb92268a1999-02-10 22:38:44 +0000144 while 1:
Jack Jansen60429e01999-12-13 16:07:01 +0000145 n = ModalDialog(None)
146 if n == 1:
147 h = d.GetDialogItemAsControl(4)
148 return cr2lf(GetControlData(pwd, kControlEditTextPart, kControlEditTextPasswordTag))
149 if n == 2: return None
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000150
Jack Jansencc386881999-12-12 22:57:51 +0000151def AskYesNoCancel(question, default = 0, yes=None, no=None, cancel=None, id=262):
Jack Jansencf2efc61999-02-25 22:05:45 +0000152 """Display a QUESTION string which can be answered with Yes or No.
153
154 Return 1 when the user clicks the Yes button.
155 Return 0 when the user clicks the No button.
156 Return -1 when the user clicks the Cancel button.
157
158 When the user presses Return, the DEFAULT value is returned.
159 If omitted, this is 0 (No).
160
Just van Rossum639a7402001-06-26 06:57:12 +0000161 The QUESTION string can be at most 255 characters.
Jack Jansencf2efc61999-02-25 22:05:45 +0000162 """
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000163
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000164 d = GetNewDialog(id, -1)
165 if not d:
166 print "Can't get DLOG resource with id =", id
167 return
168 # Button assignments:
169 # 1 = default (invisible)
170 # 2 = Yes
171 # 3 = No
172 # 4 = Cancel
173 # The question string is item 5
Jack Jansencc386881999-12-12 22:57:51 +0000174 h = d.GetDialogItemAsControl(5)
Jack Jansena5a49811998-07-01 15:47:44 +0000175 SetDialogItemText(h, lf2cr(question))
Jack Jansen3f5aef71997-06-20 16:23:37 +0000176 if yes != None:
Jack Jansen85743782000-02-10 16:15:53 +0000177 if yes == '':
178 d.HideDialogItem(2)
179 else:
180 h = d.GetDialogItemAsControl(2)
181 h.SetControlTitle(yes)
Jack Jansen3f5aef71997-06-20 16:23:37 +0000182 if no != None:
Jack Jansen85743782000-02-10 16:15:53 +0000183 if no == '':
184 d.HideDialogItem(3)
185 else:
186 h = d.GetDialogItemAsControl(3)
187 h.SetControlTitle(no)
Jack Jansen3f5aef71997-06-20 16:23:37 +0000188 if cancel != None:
Jack Jansen208c15a1999-02-16 16:06:39 +0000189 if cancel == '':
190 d.HideDialogItem(4)
191 else:
Jack Jansencc386881999-12-12 22:57:51 +0000192 h = d.GetDialogItemAsControl(4)
193 h.SetControlTitle(cancel)
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000194 d.SetDialogCancelItem(4)
Jack Jansen0b690db1996-04-10 14:49:41 +0000195 if default == 1:
196 d.SetDialogDefaultItem(2)
197 elif default == 0:
198 d.SetDialogDefaultItem(3)
199 elif default == -1:
200 d.SetDialogDefaultItem(4)
Jack Jansenfca049d2000-01-18 13:36:02 +0000201 d.AutoSizeDialog()
Jack Jansen0c1836f2000-08-25 22:06:19 +0000202 d.GetDialogWindow().ShowWindow()
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000203 while 1:
204 n = ModalDialog(None)
205 if n == 1: return default
206 if n == 2: return 1
207 if n == 3: return 0
208 if n == 4: return -1
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000209
210
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000211
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000212
213screenbounds = Qd.qd.screenBits.bounds
214screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
215 screenbounds[2]-4, screenbounds[3]-4
216
217
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000218class ProgressBar:
Jack Jansencc386881999-12-12 22:57:51 +0000219 def __init__(self, title="Working...", maxval=100, label="", id=263):
Jack Jansen5dd73622001-02-23 22:18:27 +0000220 self.w = None
221 self.d = None
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000222 self.maxval = maxval
223 self.curval = -1
Jack Jansen3f5aef71997-06-20 16:23:37 +0000224 self.d = GetNewDialog(id, -1)
Jack Jansen784c6112001-02-09 15:57:01 +0000225 self.w = self.d.GetDialogWindow()
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000226 self.label(label)
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000227 self._update(0)
Jack Jansenfca049d2000-01-18 13:36:02 +0000228 self.d.AutoSizeDialog()
Jack Jansenab48e902000-07-24 14:07:15 +0000229 self.title(title)
Jack Jansen784c6112001-02-09 15:57:01 +0000230 self.w.ShowWindow()
Jack Jansencc386881999-12-12 22:57:51 +0000231 self.d.DrawDialog()
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000232
233 def __del__( self ):
Jack Jansen5dd73622001-02-23 22:18:27 +0000234 if self.w:
235 self.w.BringToFront()
236 self.w.HideWindow()
Jack Jansen784c6112001-02-09 15:57:01 +0000237 del self.w
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000238 del self.d
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000239
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000240 def title(self, newstr=""):
241 """title(text) - Set title of progress window"""
Jack Jansen784c6112001-02-09 15:57:01 +0000242 self.w.BringToFront()
243 self.w.SetWTitle(newstr)
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000244
245 def label( self, *newstr ):
246 """label(text) - Set text in progress box"""
Jack Jansen784c6112001-02-09 15:57:01 +0000247 self.w.BringToFront()
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000248 if newstr:
Jack Jansena5a49811998-07-01 15:47:44 +0000249 self._label = lf2cr(newstr[0])
Jack Jansencc386881999-12-12 22:57:51 +0000250 text_h = self.d.GetDialogItemAsControl(2)
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000251 SetDialogItemText(text_h, self._label)
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000252
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000253 def _update(self, value):
Jack Jansen58fa8181999-11-05 15:53:10 +0000254 maxval = self.maxval
255 if maxval == 0:
256 # XXXX Quick fix. Should probably display an unknown duration
257 value = 0
258 maxval = 1
Jack Jansencc386881999-12-12 22:57:51 +0000259 if maxval > 32767:
260 value = int(value/(maxval/32767.0))
261 maxval = 32767
262 progbar = self.d.GetDialogItemAsControl(3)
263 progbar.SetControlMaximum(maxval)
264 progbar.SetControlValue(value)
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000265 # Test for cancel button
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000266
267 ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 )
268 if ready :
269 what,msg,when,where,mod = ev
270 part = Win.FindWindow(where)[0]
271 if Dlg.IsDialogEvent(ev):
272 ds = Dlg.DialogSelect(ev)
273 if ds[0] and ds[1] == self.d and ds[-1] == 1:
Jack Jansen5dd73622001-02-23 22:18:27 +0000274 self.w.HideWindow()
275 self.w = None
276 self.d = None
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000277 raise KeyboardInterrupt, ev
278 else:
279 if part == 4: # inDrag
280 self.d.DragWindow(where, screenbounds)
281 else:
282 MacOS.HandleEvent(ev)
283
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000284
Jack Jansen58fa8181999-11-05 15:53:10 +0000285 def set(self, value, max=None):
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000286 """set(value) - Set progress bar position"""
Jack Jansen58fa8181999-11-05 15:53:10 +0000287 if max != None:
288 self.maxval = max
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000289 if value < 0: value = 0
290 if value > self.maxval: value = self.maxval
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000291 self.curval = value
Jack Jansen3a87f5b1995-11-14 10:13:49 +0000292 self._update(value)
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000293
294 def inc(self, n=1):
295 """inc(amt) - Increment progress bar position"""
296 self.set(self.curval + n)
297
Jack Jansenf86eda52000-09-19 22:42:38 +0000298ARGV_ID=265
299ARGV_ITEM_OK=1
300ARGV_ITEM_CANCEL=2
301ARGV_OPTION_GROUP=3
302ARGV_OPTION_EXPLAIN=4
303ARGV_OPTION_VALUE=5
304ARGV_OPTION_ADD=6
305ARGV_COMMAND_GROUP=7
306ARGV_COMMAND_EXPLAIN=8
307ARGV_COMMAND_ADD=9
308ARGV_ADD_OLDFILE=10
309ARGV_ADD_NEWFILE=11
310ARGV_ADD_FOLDER=12
311ARGV_CMDLINE_GROUP=13
312ARGV_CMDLINE_DATA=14
313
314##def _myModalDialog(d):
315## while 1:
316## ready, ev = Evt.WaitNextEvent(0xffff, -1)
317## print 'DBG: WNE', ready, ev
318## if ready :
319## what,msg,when,where,mod = ev
320## part, window = Win.FindWindow(where)
321## if Dlg.IsDialogEvent(ev):
322## didit, dlgdone, itemdone = Dlg.DialogSelect(ev)
323## print 'DBG: DialogSelect', didit, dlgdone, itemdone, d
324## if didit and dlgdone == d:
325## return itemdone
326## elif window == d.GetDialogWindow():
327## d.GetDialogWindow().SelectWindow()
328## if part == 4: # inDrag
329## d.DragWindow(where, screenbounds)
330## else:
331## MacOS.HandleEvent(ev)
332## else:
333## MacOS.HandleEvent(ev)
334##
335def _setmenu(control, items):
Jack Jansene7bfc912001-01-09 22:22:58 +0000336 mhandle = control.GetControlData_Handle(Controls.kControlMenuPart,
Jack Jansenf86eda52000-09-19 22:42:38 +0000337 Controls.kControlPopupButtonMenuHandleTag)
338 menu = Menu.as_Menu(mhandle)
339 for item in items:
340 if type(item) == type(()):
341 label = item[0]
342 else:
343 label = item
344 if label[-1] == '=' or label[-1] == ':':
345 label = label[:-1]
346 menu.AppendMenu(label)
347## mhandle, mid = menu.getpopupinfo()
Jack Jansene7bfc912001-01-09 22:22:58 +0000348## control.SetControlData_Handle(Controls.kControlMenuPart,
Jack Jansenf86eda52000-09-19 22:42:38 +0000349## Controls.kControlPopupButtonMenuHandleTag, mhandle)
350 control.SetControlMinimum(1)
351 control.SetControlMaximum(len(items)+1)
352
353def _selectoption(d, optionlist, idx):
354 if idx < 0 or idx >= len(optionlist):
355 MacOS.SysBeep()
356 return
357 option = optionlist[idx]
358 if type(option) == type(()) and \
359 len(option) > 1:
360 help = option[-1]
361 else:
362 help = ''
363 h = d.GetDialogItemAsControl(ARGV_OPTION_EXPLAIN)
364 Dlg.SetDialogItemText(h, help)
365 hasvalue = 0
366 if type(option) == type(()):
367 label = option[0]
368 else:
369 label = option
370 if label[-1] == '=' or label[-1] == ':':
371 hasvalue = 1
372 h = d.GetDialogItemAsControl(ARGV_OPTION_VALUE)
373 Dlg.SetDialogItemText(h, '')
374 if hasvalue:
375 d.ShowDialogItem(ARGV_OPTION_VALUE)
376 d.SelectDialogItemText(ARGV_OPTION_VALUE, 0, 0)
377 else:
378 d.HideDialogItem(ARGV_OPTION_VALUE)
379
380
381def GetArgv(optionlist=None, commandlist=None, addoldfile=1, addnewfile=1, addfolder=1, id=ARGV_ID):
382 d = GetNewDialog(id, -1)
383 if not d:
384 print "Can't get DLOG resource with id =", id
385 return
386# h = d.GetDialogItemAsControl(3)
387# SetDialogItemText(h, lf2cr(prompt))
388# h = d.GetDialogItemAsControl(4)
389# SetDialogItemText(h, lf2cr(default))
390# d.SelectDialogItemText(4, 0, 999)
391# d.SetDialogItem(4, 0, 255)
392 if optionlist:
393 _setmenu(d.GetDialogItemAsControl(ARGV_OPTION_GROUP), optionlist)
394 _selectoption(d, optionlist, 0)
395 else:
396 d.GetDialogItemAsControl(ARGV_OPTION_GROUP).DeactivateControl()
397 if commandlist:
398 _setmenu(d.GetDialogItemAsControl(ARGV_COMMAND_GROUP), commandlist)
Jack Jansen0bb0a902000-09-21 22:01:08 +0000399 if type(commandlist[0]) == type(()) and len(commandlist[0]) > 1:
Jack Jansenf86eda52000-09-19 22:42:38 +0000400 help = commandlist[0][-1]
401 h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN)
402 Dlg.SetDialogItemText(h, help)
403 else:
404 d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).DeactivateControl()
405 if not addoldfile:
406 d.GetDialogItemAsControl(ARGV_ADD_OLDFILE).DeactivateControl()
407 if not addnewfile:
408 d.GetDialogItemAsControl(ARGV_ADD_NEWFILE).DeactivateControl()
409 if not addfolder:
410 d.GetDialogItemAsControl(ARGV_ADD_FOLDER).DeactivateControl()
411 d.SetDialogDefaultItem(ARGV_ITEM_OK)
412 d.SetDialogCancelItem(ARGV_ITEM_CANCEL)
413 d.GetDialogWindow().ShowWindow()
414 d.DrawDialog()
415 appsw = MacOS.SchedParams(1, 0)
416 try:
417 while 1:
418 stringstoadd = []
419 n = ModalDialog(None)
420 if n == ARGV_ITEM_OK:
421 break
422 elif n == ARGV_ITEM_CANCEL:
423 raise SystemExit
424 elif n == ARGV_OPTION_GROUP:
425 idx = d.GetDialogItemAsControl(ARGV_OPTION_GROUP).GetControlValue()-1
426 _selectoption(d, optionlist, idx)
427 elif n == ARGV_OPTION_VALUE:
428 pass
429 elif n == ARGV_OPTION_ADD:
430 idx = d.GetDialogItemAsControl(ARGV_OPTION_GROUP).GetControlValue()-1
431 if 0 <= idx < len(optionlist):
Jack Jansen0bb0a902000-09-21 22:01:08 +0000432 option = optionlist[idx]
433 if type(option) == type(()):
434 option = option[0]
Jack Jansenf86eda52000-09-19 22:42:38 +0000435 if option[-1] == '=' or option[-1] == ':':
436 option = option[:-1]
437 h = d.GetDialogItemAsControl(ARGV_OPTION_VALUE)
438 value = Dlg.GetDialogItemText(h)
439 else:
440 value = ''
441 if len(option) == 1:
442 stringtoadd = '-' + option
443 else:
444 stringtoadd = '--' + option
445 stringstoadd = [stringtoadd]
446 if value:
447 stringstoadd.append(value)
448 else:
449 MacOS.SysBeep()
450 elif n == ARGV_COMMAND_GROUP:
451 idx = d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).GetControlValue()-1
Jack Jansen0bb0a902000-09-21 22:01:08 +0000452 if 0 <= idx < len(commandlist) and type(commandlist[idx]) == type(()) and \
Jack Jansenf86eda52000-09-19 22:42:38 +0000453 len(commandlist[idx]) > 1:
454 help = commandlist[idx][-1]
455 h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN)
456 Dlg.SetDialogItemText(h, help)
457 elif n == ARGV_COMMAND_ADD:
458 idx = d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).GetControlValue()-1
459 if 0 <= idx < len(commandlist):
Jack Jansen0bb0a902000-09-21 22:01:08 +0000460 command = commandlist[idx]
461 if type(command) == type(()):
462 command = command[0]
463 stringstoadd = [command]
Jack Jansenf86eda52000-09-19 22:42:38 +0000464 else:
465 MacOS.SysBeep()
466 elif n == ARGV_ADD_OLDFILE:
467 fss, ok = macfs.StandardGetFile()
468 if ok:
469 stringstoadd = [fss.as_pathname()]
470 elif n == ARGV_ADD_NEWFILE:
471 fss, ok = macfs.StandardPutFile('')
472 if ok:
473 stringstoadd = [fss.as_pathname()]
474 elif n == ARGV_ADD_FOLDER:
475 fss, ok = macfs.GetDirectory()
476 if ok:
477 stringstoadd = [fss.as_pathname()]
478 elif n == ARGV_CMDLINE_DATA:
479 pass # Nothing to do
480 else:
481 raise RuntimeError, "Unknown dialog item %d"%n
482
483 for stringtoadd in stringstoadd:
484 if '"' in stringtoadd or "'" in stringtoadd or " " in stringtoadd:
485 stringtoadd = `stringtoadd`
486 h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA)
487 oldstr = GetDialogItemText(h)
488 if oldstr and oldstr[-1] != ' ':
489 oldstr = oldstr + ' '
490 oldstr = oldstr + stringtoadd
491 if oldstr[-1] != ' ':
492 oldstr = oldstr + ' '
493 SetDialogItemText(h, oldstr)
494 d.SelectDialogItemText(ARGV_CMDLINE_DATA, 0x7fff, 0x7fff)
495 h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA)
496 oldstr = GetDialogItemText(h)
497 tmplist = string.split(oldstr)
498 newlist = []
499 while tmplist:
500 item = tmplist[0]
501 del tmplist[0]
502 if item[0] == '"':
503 while item[-1] != '"':
504 if not tmplist:
505 raise RuntimeError, "Unterminated quoted argument"
506 item = item + ' ' + tmplist[0]
507 del tmplist[0]
508 item = item[1:-1]
509 if item[0] == "'":
510 while item[-1] != "'":
511 if not tmplist:
512 raise RuntimeError, "Unterminated quoted argument"
513 item = item + ' ' + tmplist[0]
514 del tmplist[0]
515 item = item[1:-1]
516 newlist.append(item)
517 return newlist
518 finally:
519 apply(MacOS.SchedParams, appsw)
Jack Jansen0bb0a902000-09-21 22:01:08 +0000520 del d
Jack Jansenf86eda52000-09-19 22:42:38 +0000521
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000522def test():
Jack Jansenf86eda52000-09-19 22:42:38 +0000523 import time, sys
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000524
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000525 Message("Testing EasyDialogs.")
Jack Jansenf86eda52000-09-19 22:42:38 +0000526 optionlist = (('v', 'Verbose'), ('verbose', 'Verbose as long option'),
527 ('flags=', 'Valued option'), ('f:', 'Short valued option'))
528 commandlist = (('start', 'Start something'), ('stop', 'Stop something'))
529 argv = GetArgv(optionlist=optionlist, commandlist=commandlist, addoldfile=0)
530 for i in range(len(argv)):
531 print 'arg[%d] = %s'%(i, `argv[i]`)
532 print 'Type return to continue - ',
533 sys.stdin.readline()
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000534 ok = AskYesNoCancel("Do you want to proceed?")
Jack Jansen60429e01999-12-13 16:07:01 +0000535 ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000536 if ok > 0:
Jack Jansend61f92b1999-01-22 13:14:06 +0000537 s = AskString("Enter your first name", "Joe")
Jack Jansen60429e01999-12-13 16:07:01 +0000538 s2 = AskPassword("Okay %s, tell us your nickname"%s, s, cancel="None")
539 if not s2:
540 Message("%s has no secret nickname"%s)
541 else:
542 Message("Hello everybody!!\nThe secret nickname of %s is %s!!!"%(s, s2))
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000543 text = ( "Working Hard...", "Hardly Working..." ,
544 "So far, so good!", "Keep on truckin'" )
545 bar = ProgressBar("Progress, progress...", 100)
546 try:
Jack Jansen3368cb71997-06-12 10:51:18 +0000547 appsw = MacOS.SchedParams(1, 0)
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000548 for i in range(100):
549 bar.set(i)
550 time.sleep(0.1)
551 if i % 10 == 0:
552 bar.label(text[(i/10) % 4])
553 bar.label("Done.")
554 time.sleep(0.3) # give'em a chance to see the done.
555 finally:
556 del bar
Jack Jansen3368cb71997-06-12 10:51:18 +0000557 apply(MacOS.SchedParams, appsw)
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000558
Guido van Rossum8f4b6ad1995-04-05 09:18:35 +0000559if __name__ == '__main__':
Jack Jansen1d63d8c1997-05-12 15:44:14 +0000560 try:
561 test()
562 except KeyboardInterrupt:
563 Message("Operation Canceled.")
564