Added GetArgs dialog to EasyDialogs, a very nifty (if I may say so:-) way to create a unix-style sys.argv.
This commit is contained in:
parent
d1ba443206
commit
f86eda5d19
|
@ -21,9 +21,12 @@ import Dialogs
|
||||||
import Windows
|
import Windows
|
||||||
import Dlg,Win,Evt,Events # sdm7g
|
import Dlg,Win,Evt,Events # sdm7g
|
||||||
import Ctl
|
import Ctl
|
||||||
|
import Controls
|
||||||
|
import Menu
|
||||||
import MacOS
|
import MacOS
|
||||||
import string
|
import string
|
||||||
from ControlAccessor import * # Also import Controls constants
|
from ControlAccessor import * # Also import Controls constants
|
||||||
|
import macfs
|
||||||
|
|
||||||
def cr2lf(text):
|
def cr2lf(text):
|
||||||
if '\r' in text:
|
if '\r' in text:
|
||||||
|
@ -285,10 +288,242 @@ class ProgressBar:
|
||||||
"""inc(amt) - Increment progress bar position"""
|
"""inc(amt) - Increment progress bar position"""
|
||||||
self.set(self.curval + n)
|
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.GetControlDataHandle(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.SetControlDataHandle(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(()) and \
|
||||||
|
len(option) > 1:
|
||||||
|
help = option[-1]
|
||||||
|
else:
|
||||||
|
help = ''
|
||||||
|
h = d.GetDialogItemAsControl(ARGV_OPTION_EXPLAIN)
|
||||||
|
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):
|
||||||
|
d = GetNewDialog(id, -1)
|
||||||
|
if not d:
|
||||||
|
print "Can't get DLOG resource with id =", id
|
||||||
|
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) == 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()
|
||||||
|
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):
|
||||||
|
if type(optionlist) == type(()):
|
||||||
|
option = optionlist[idx][0]
|
||||||
|
else:
|
||||||
|
option = optionlist[idx]
|
||||||
|
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) == 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):
|
||||||
|
if type(commandlist) == type(()):
|
||||||
|
stringstoadd = [commandlist[idx][0]]
|
||||||
|
else:
|
||||||
|
stringstoadd = [commandlist[idx]]
|
||||||
|
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:
|
||||||
|
apply(MacOS.SchedParams, appsw)
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
import time
|
import time, sys
|
||||||
|
|
||||||
Message("Testing EasyDialogs.")
|
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 proceed?")
|
||||||
ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
|
ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
|
||||||
if ok > 0:
|
if ok > 0:
|
||||||
|
@ -314,9 +549,6 @@ def test():
|
||||||
del bar
|
del bar
|
||||||
apply(MacOS.SchedParams, appsw)
|
apply(MacOS.SchedParams, appsw)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
test()
|
test()
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue