summaryrefslogtreecommitdiffstats
path: root/Mac/Lib/EasyDialogs.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/Lib/EasyDialogs.py')
-rw-r--r--Mac/Lib/EasyDialogs.py598
1 files changed, 0 insertions, 598 deletions
diff --git a/Mac/Lib/EasyDialogs.py b/Mac/Lib/EasyDialogs.py
deleted file mode 100644
index 8e1e056..0000000
--- a/Mac/Lib/EasyDialogs.py
+++ /dev/null
@@ -1,598 +0,0 @@
-"""Easy to use dialogs.
-
-Message(msg) -- display a message and an OK button.
-AskString(prompt, default) -- ask for a string, display OK and Cancel buttons.
-AskPassword(prompt, default) -- like AskString(), but shows text as bullets.
-AskYesNoCancel(question, default) -- display a question and Yes, No and Cancel buttons.
-bar = Progress(label, maxvalue) -- Display a progress bar
-bar.set(value) -- Set value
-bar.inc( *amount ) -- increment value by amount (default=1)
-bar.label( *newlabel ) -- get or set text label.
-
-More documentation in each function.
-This module uses DLOG resources 260 and on.
-Based upon STDWIN dialogs with the same names and functions.
-"""
-
-from Carbon.Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog
-from Carbon import Qd
-from Carbon import QuickDraw
-from Carbon import Dialogs
-from Carbon import Windows
-from Carbon import Dlg,Win,Evt,Events # sdm7g
-from Carbon import Ctl
-from Carbon import Controls
-from Carbon import Menu
-import MacOS
-import string
-from Carbon.ControlAccessor import * # Also import Controls constants
-import macfs
-import macresource
-
-_initialized = 0
-
-def _initialize():
- global _initialized
- if _initialized: return
- macresource.need("DLOG", 260, "dialogs.rsrc", __name__)
-
-
-def cr2lf(text):
- if '\r' in text:
- text = string.join(string.split(text, '\r'), '\n')
- return text
-
-def lf2cr(text):
- if '\n' in text:
- text = string.join(string.split(text, '\n'), '\r')
- if len(text) > 253:
- text = text[:253] + '\311'
- return text
-
-def Message(msg, id=260, ok=None):
- """Display a MESSAGE string.
-
- Return when the user clicks the OK button or presses Return.
-
- The MESSAGE string can be at most 255 characters long.
- """
- _initialize()
- d = GetNewDialog(id, -1)
- if not d:
- print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
- return
- h = d.GetDialogItemAsControl(2)
- SetDialogItemText(h, lf2cr(msg))
- if ok != None:
- h = d.GetDialogItemAsControl(1)
- h.SetControlTitle(ok)
- d.SetDialogDefaultItem(1)
- d.AutoSizeDialog()
- d.GetDialogWindow().ShowWindow()
- while 1:
- n = ModalDialog(None)
- if n == 1:
- return
-
-
-def AskString(prompt, default = "", id=261, ok=None, cancel=None):
- """Display a PROMPT string and a text entry field with a DEFAULT string.
-
- Return the contents of the text entry field when the user clicks the
- OK button or presses Return.
- Return None when the user clicks the Cancel button.
-
- If omitted, DEFAULT is empty.
-
- The PROMPT and DEFAULT strings, as well as the return value,
- can be at most 255 characters long.
- """
-
- _initialize()
- d = GetNewDialog(id, -1)
- if not d:
- print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
- return
- h = d.GetDialogItemAsControl(3)
- SetDialogItemText(h, lf2cr(prompt))
- h = d.GetDialogItemAsControl(4)
- SetDialogItemText(h, lf2cr(default))
- d.SelectDialogItemText(4, 0, 999)
-# d.SetDialogItem(4, 0, 255)
- if ok != None:
- h = d.GetDialogItemAsControl(1)
- h.SetControlTitle(ok)
- if cancel != None:
- h = d.GetDialogItemAsControl(2)
- h.SetControlTitle(cancel)
- d.SetDialogDefaultItem(1)
- d.SetDialogCancelItem(2)
- d.AutoSizeDialog()
- d.GetDialogWindow().ShowWindow()
- while 1:
- n = ModalDialog(None)
- if n == 1:
- h = d.GetDialogItemAsControl(4)
- return cr2lf(GetDialogItemText(h))
- if n == 2: return None
-
-def AskPassword(prompt, default='', id=264, ok=None, cancel=None):
- """Display a PROMPT string and a text entry field with a DEFAULT string.
- The string is displayed as bullets only.
-
- Return the contents of the text entry field when the user clicks the
- OK button or presses Return.
- Return None when the user clicks the Cancel button.
-
- If omitted, DEFAULT is empty.
-
- The PROMPT and DEFAULT strings, as well as the return value,
- can be at most 255 characters long.
- """
- _initialize()
- d = GetNewDialog(id, -1)
- if not d:
- print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
- return
- h = d.GetDialogItemAsControl(3)
- SetDialogItemText(h, lf2cr(prompt))
- pwd = d.GetDialogItemAsControl(4)
- bullets = '\245'*len(default)
-## SetControlData(pwd, kControlEditTextPart, kControlEditTextTextTag, bullets)
- SetControlData(pwd, kControlEditTextPart, kControlEditTextPasswordTag, default)
- d.SelectDialogItemText(4, 0, 999)
- Ctl.SetKeyboardFocus(d.GetDialogWindow(), pwd, kControlEditTextPart)
- if ok != None:
- h = d.GetDialogItemAsControl(1)
- h.SetControlTitle(ok)
- if cancel != None:
- h = d.GetDialogItemAsControl(2)
- h.SetControlTitle(cancel)
- d.SetDialogDefaultItem(Dialogs.ok)
- d.SetDialogCancelItem(Dialogs.cancel)
- d.AutoSizeDialog()
- d.GetDialogWindow().ShowWindow()
- while 1:
- n = ModalDialog(None)
- if n == 1:
- h = d.GetDialogItemAsControl(4)
- return cr2lf(GetControlData(pwd, kControlEditTextPart, kControlEditTextPasswordTag))
- if n == 2: return None
-
-def AskYesNoCancel(question, default = 0, yes=None, no=None, cancel=None, id=262):
- """Display a QUESTION string which can be answered with Yes or No.
-
- Return 1 when the user clicks the Yes button.
- Return 0 when the user clicks the No button.
- Return -1 when the user clicks the Cancel button.
-
- When the user presses Return, the DEFAULT value is returned.
- If omitted, this is 0 (No).
-
- The QUESTION string can be at most 255 characters.
- """
-
- _initialize()
- d = GetNewDialog(id, -1)
- if not d:
- print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
- return
- # Button assignments:
- # 1 = default (invisible)
- # 2 = Yes
- # 3 = No
- # 4 = Cancel
- # The question string is item 5
- h = d.GetDialogItemAsControl(5)
- SetDialogItemText(h, lf2cr(question))
- if yes != None:
- if yes == '':
- d.HideDialogItem(2)
- else:
- h = d.GetDialogItemAsControl(2)
- h.SetControlTitle(yes)
- if no != None:
- if no == '':
- d.HideDialogItem(3)
- else:
- h = d.GetDialogItemAsControl(3)
- h.SetControlTitle(no)
- if cancel != None:
- if cancel == '':
- d.HideDialogItem(4)
- else:
- h = d.GetDialogItemAsControl(4)
- h.SetControlTitle(cancel)
- d.SetDialogCancelItem(4)
- if default == 1:
- d.SetDialogDefaultItem(2)
- elif default == 0:
- d.SetDialogDefaultItem(3)
- elif default == -1:
- d.SetDialogDefaultItem(4)
- d.AutoSizeDialog()
- d.GetDialogWindow().ShowWindow()
- while 1:
- n = ModalDialog(None)
- if n == 1: return default
- if n == 2: return 1
- if n == 3: return 0
- if n == 4: return -1
-
-
-
-
-screenbounds = Qd.GetQDGlobalsScreenBits().bounds
-screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
- screenbounds[2]-4, screenbounds[3]-4
-
-kControlProgressBarIndeterminateTag = 'inde' # from Controls.py
-
-
-class ProgressBar:
- def __init__(self, title="Working...", maxval=0, label="", id=263):
- self.w = None
- self.d = None
- _initialize()
- self.d = GetNewDialog(id, -1)
- self.w = self.d.GetDialogWindow()
- self.label(label)
- self.title(title)
- self.set(0, maxval)
- self.d.AutoSizeDialog()
- self.w.ShowWindow()
- self.d.DrawDialog()
-
- def __del__( self ):
- if self.w:
- self.w.BringToFront()
- self.w.HideWindow()
- del self.w
- del self.d
-
- def title(self, newstr=""):
- """title(text) - Set title of progress window"""
- self.w.BringToFront()
- self.w.SetWTitle(newstr)
-
- def label( self, *newstr ):
- """label(text) - Set text in progress box"""
- self.w.BringToFront()
- if newstr:
- self._label = lf2cr(newstr[0])
- text_h = self.d.GetDialogItemAsControl(2)
- SetDialogItemText(text_h, self._label)
-
- def _update(self, value):
- maxval = self.maxval
- if maxval == 0: # an indeterminate bar
- Ctl.IdleControls(self.w) # spin the barber pole
- else: # a determinate bar
- if maxval > 32767:
- value = int(value/(maxval/32767.0))
- maxval = 32767
- progbar = self.d.GetDialogItemAsControl(3)
- progbar.SetControlMaximum(maxval)
- progbar.SetControlValue(value) # set the bar length
-
- # Test for cancel button
- ready, ev = Evt.WaitNextEvent( Events.mDownMask, 1 )
- if ready :
- what,msg,when,where,mod = ev
- part = Win.FindWindow(where)[0]
- if Dlg.IsDialogEvent(ev):
- ds = Dlg.DialogSelect(ev)
- if ds[0] and ds[1] == self.d and ds[-1] == 1:
- self.w.HideWindow()
- self.w = None
- self.d = None
- raise KeyboardInterrupt, ev
- else:
- if part == 4: # inDrag
- self.w.DragWindow(where, screenbounds)
- else:
- MacOS.HandleEvent(ev)
-
-
- def set(self, value, max=None):
- """set(value) - Set progress bar position"""
- if max != None:
- self.maxval = max
- bar = self.d.GetDialogItemAsControl(3)
- if max <= 0: # indeterminate bar
- bar.SetControlData(0,kControlProgressBarIndeterminateTag,'\x01')
- else: # determinate bar
- bar.SetControlData(0,kControlProgressBarIndeterminateTag,'\x00')
- if value < 0:
- value = 0
- elif value > self.maxval:
- value = self.maxval
- self.curval = value
- self._update(value)
-
- def inc(self, n=1):
- """inc(amt) - Increment progress bar position"""
- self.set(self.curval + n)
-
-ARGV_ID=265
-ARGV_ITEM_OK=1
-ARGV_ITEM_CANCEL=2
-ARGV_OPTION_GROUP=3
-ARGV_OPTION_EXPLAIN=4
-ARGV_OPTION_VALUE=5
-ARGV_OPTION_ADD=6
-ARGV_COMMAND_GROUP=7
-ARGV_COMMAND_EXPLAIN=8
-ARGV_COMMAND_ADD=9
-ARGV_ADD_OLDFILE=10
-ARGV_ADD_NEWFILE=11
-ARGV_ADD_FOLDER=12
-ARGV_CMDLINE_GROUP=13
-ARGV_CMDLINE_DATA=14
-
-##def _myModalDialog(d):
-## while 1:
-## ready, ev = Evt.WaitNextEvent(0xffff, -1)
-## print 'DBG: WNE', ready, ev
-## if ready :
-## what,msg,when,where,mod = ev
-## part, window = Win.FindWindow(where)
-## if Dlg.IsDialogEvent(ev):
-## didit, dlgdone, itemdone = Dlg.DialogSelect(ev)
-## print 'DBG: DialogSelect', didit, dlgdone, itemdone, d
-## if didit and dlgdone == d:
-## return itemdone
-## elif window == d.GetDialogWindow():
-## d.GetDialogWindow().SelectWindow()
-## if part == 4: # inDrag
-## d.DragWindow(where, screenbounds)
-## else:
-## MacOS.HandleEvent(ev)
-## else:
-## MacOS.HandleEvent(ev)
-##
-def _setmenu(control, items):
- mhandle = control.GetControlData_Handle(Controls.kControlMenuPart,
- Controls.kControlPopupButtonMenuHandleTag)
- menu = Menu.as_Menu(mhandle)
- for item in items:
- if type(item) == type(()):
- label = item[0]
- else:
- label = item
- if label[-1] == '=' or label[-1] == ':':
- label = label[:-1]
- menu.AppendMenu(label)
-## mhandle, mid = menu.getpopupinfo()
-## control.SetControlData_Handle(Controls.kControlMenuPart,
-## Controls.kControlPopupButtonMenuHandleTag, mhandle)
- control.SetControlMinimum(1)
- control.SetControlMaximum(len(items)+1)
-
-def _selectoption(d, optionlist, idx):
- if idx < 0 or idx >= len(optionlist):
- MacOS.SysBeep()
- return
- option = optionlist[idx]
- if type(option) == type(()):
- if len(option) == 4:
- help = option[2]
- elif len(option) > 1:
- help = option[-1]
- else:
- help = ''
- else:
- help = ''
- h = d.GetDialogItemAsControl(ARGV_OPTION_EXPLAIN)
- if help and len(help) > 250:
- help = help[:250] + '...'
- Dlg.SetDialogItemText(h, help)
- hasvalue = 0
- if type(option) == type(()):
- label = option[0]
- else:
- label = option
- if label[-1] == '=' or label[-1] == ':':
- hasvalue = 1
- h = d.GetDialogItemAsControl(ARGV_OPTION_VALUE)
- Dlg.SetDialogItemText(h, '')
- if hasvalue:
- d.ShowDialogItem(ARGV_OPTION_VALUE)
- d.SelectDialogItemText(ARGV_OPTION_VALUE, 0, 0)
- else:
- d.HideDialogItem(ARGV_OPTION_VALUE)
-
-
-def GetArgv(optionlist=None, commandlist=None, addoldfile=1, addnewfile=1, addfolder=1, id=ARGV_ID):
- _initialize()
- d = GetNewDialog(id, -1)
- if not d:
- print "EasyDialogs: Can't get DLOG resource with id =", id, " (missing resource file?)"
- return
-# h = d.GetDialogItemAsControl(3)
-# SetDialogItemText(h, lf2cr(prompt))
-# h = d.GetDialogItemAsControl(4)
-# SetDialogItemText(h, lf2cr(default))
-# d.SelectDialogItemText(4, 0, 999)
-# d.SetDialogItem(4, 0, 255)
- if optionlist:
- _setmenu(d.GetDialogItemAsControl(ARGV_OPTION_GROUP), optionlist)
- _selectoption(d, optionlist, 0)
- else:
- d.GetDialogItemAsControl(ARGV_OPTION_GROUP).DeactivateControl()
- if commandlist:
- _setmenu(d.GetDialogItemAsControl(ARGV_COMMAND_GROUP), commandlist)
- if type(commandlist[0]) == type(()) and len(commandlist[0]) > 1:
- help = commandlist[0][-1]
- h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN)
- Dlg.SetDialogItemText(h, help)
- else:
- d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).DeactivateControl()
- if not addoldfile:
- d.GetDialogItemAsControl(ARGV_ADD_OLDFILE).DeactivateControl()
- if not addnewfile:
- d.GetDialogItemAsControl(ARGV_ADD_NEWFILE).DeactivateControl()
- if not addfolder:
- d.GetDialogItemAsControl(ARGV_ADD_FOLDER).DeactivateControl()
- d.SetDialogDefaultItem(ARGV_ITEM_OK)
- d.SetDialogCancelItem(ARGV_ITEM_CANCEL)
- d.GetDialogWindow().ShowWindow()
- d.DrawDialog()
- if hasattr(MacOS, 'SchedParams'):
- appsw = MacOS.SchedParams(1, 0)
- try:
- while 1:
- stringstoadd = []
- n = ModalDialog(None)
- if n == ARGV_ITEM_OK:
- break
- elif n == ARGV_ITEM_CANCEL:
- raise SystemExit
- elif n == ARGV_OPTION_GROUP:
- idx = d.GetDialogItemAsControl(ARGV_OPTION_GROUP).GetControlValue()-1
- _selectoption(d, optionlist, idx)
- elif n == ARGV_OPTION_VALUE:
- pass
- elif n == ARGV_OPTION_ADD:
- idx = d.GetDialogItemAsControl(ARGV_OPTION_GROUP).GetControlValue()-1
- if 0 <= idx < len(optionlist):
- option = optionlist[idx]
- if type(option) == type(()):
- option = option[0]
- if option[-1] == '=' or option[-1] == ':':
- option = option[:-1]
- h = d.GetDialogItemAsControl(ARGV_OPTION_VALUE)
- value = Dlg.GetDialogItemText(h)
- else:
- value = ''
- if len(option) == 1:
- stringtoadd = '-' + option
- else:
- stringtoadd = '--' + option
- stringstoadd = [stringtoadd]
- if value:
- stringstoadd.append(value)
- else:
- MacOS.SysBeep()
- elif n == ARGV_COMMAND_GROUP:
- idx = d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).GetControlValue()-1
- if 0 <= idx < len(commandlist) and type(commandlist[idx]) == type(()) and \
- len(commandlist[idx]) > 1:
- help = commandlist[idx][-1]
- h = d.GetDialogItemAsControl(ARGV_COMMAND_EXPLAIN)
- Dlg.SetDialogItemText(h, help)
- elif n == ARGV_COMMAND_ADD:
- idx = d.GetDialogItemAsControl(ARGV_COMMAND_GROUP).GetControlValue()-1
- if 0 <= idx < len(commandlist):
- command = commandlist[idx]
- if type(command) == type(()):
- command = command[0]
- stringstoadd = [command]
- else:
- MacOS.SysBeep()
- elif n == ARGV_ADD_OLDFILE:
- fss, ok = macfs.StandardGetFile()
- if ok:
- stringstoadd = [fss.as_pathname()]
- elif n == ARGV_ADD_NEWFILE:
- fss, ok = macfs.StandardPutFile('')
- if ok:
- stringstoadd = [fss.as_pathname()]
- elif n == ARGV_ADD_FOLDER:
- fss, ok = macfs.GetDirectory()
- if ok:
- stringstoadd = [fss.as_pathname()]
- elif n == ARGV_CMDLINE_DATA:
- pass # Nothing to do
- else:
- raise RuntimeError, "Unknown dialog item %d"%n
-
- for stringtoadd in stringstoadd:
- if '"' in stringtoadd or "'" in stringtoadd or " " in stringtoadd:
- stringtoadd = `stringtoadd`
- h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA)
- oldstr = GetDialogItemText(h)
- if oldstr and oldstr[-1] != ' ':
- oldstr = oldstr + ' '
- oldstr = oldstr + stringtoadd
- if oldstr[-1] != ' ':
- oldstr = oldstr + ' '
- SetDialogItemText(h, oldstr)
- d.SelectDialogItemText(ARGV_CMDLINE_DATA, 0x7fff, 0x7fff)
- h = d.GetDialogItemAsControl(ARGV_CMDLINE_DATA)
- oldstr = GetDialogItemText(h)
- tmplist = string.split(oldstr)
- newlist = []
- while tmplist:
- item = tmplist[0]
- del tmplist[0]
- if item[0] == '"':
- while item[-1] != '"':
- if not tmplist:
- raise RuntimeError, "Unterminated quoted argument"
- item = item + ' ' + tmplist[0]
- del tmplist[0]
- item = item[1:-1]
- if item[0] == "'":
- while item[-1] != "'":
- if not tmplist:
- raise RuntimeError, "Unterminated quoted argument"
- item = item + ' ' + tmplist[0]
- del tmplist[0]
- item = item[1:-1]
- newlist.append(item)
- return newlist
- finally:
- if hasattr(MacOS, 'SchedParams'):
- apply(MacOS.SchedParams, appsw)
- del d
-
-def test():
- import time, sys
-
- Message("Testing EasyDialogs.")
- optionlist = (('v', 'Verbose'), ('verbose', 'Verbose as long option'),
- ('flags=', 'Valued option'), ('f:', 'Short valued option'))
- commandlist = (('start', 'Start something'), ('stop', 'Stop something'))
- argv = GetArgv(optionlist=optionlist, commandlist=commandlist, addoldfile=0)
- for i in range(len(argv)):
- print 'arg[%d] = %s'%(i, `argv[i]`)
- print 'Type return to continue - ',
- sys.stdin.readline()
- ok = AskYesNoCancel("Do you want to proceed?")
- ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
- if ok > 0:
- s = AskString("Enter your first name", "Joe")
- s2 = AskPassword("Okay %s, tell us your nickname"%s, s, cancel="None")
- if not s2:
- Message("%s has no secret nickname"%s)
- else:
- Message("Hello everybody!!\nThe secret nickname of %s is %s!!!"%(s, s2))
- text = ( "Working Hard...", "Hardly Working..." ,
- "So far, so good!", "Keep on truckin'" )
- bar = ProgressBar("Progress, progress...", 0, label="Ramping up...")
- try:
- if hasattr(MacOS, 'SchedParams'):
- appsw = MacOS.SchedParams(1, 0)
- for i in xrange(20):
- bar.inc()
- time.sleep(0.05)
- bar.set(0,100)
- for i in xrange(100):
- bar.set(i)
- time.sleep(0.05)
- if i % 10 == 0:
- bar.label(text[(i/10) % 4])
- bar.label("Done.")
- time.sleep(1.0) # give'em a chance to see "Done."
- finally:
- del bar
- if hasattr(MacOS, 'SchedParams'):
- apply(MacOS.SchedParams, appsw)
-
-if __name__ == '__main__':
- try:
- test()
- except KeyboardInterrupt:
- Message("Operation Canceled.")
-