From f86eda5d1921258a1b8bcc9c1779d579cfbe7b1c Mon Sep 17 00:00:00 2001 From: Jack Jansen <jack.jansen@cwi.nl> Date: Tue, 19 Sep 2000 22:42:38 +0000 Subject: [PATCH] Added GetArgs dialog to EasyDialogs, a very nifty (if I may say so:-) way to create a unix-style sys.argv. --- Mac/Lib/EasyDialogs.py | 240 ++++++++++++++++++++++++++++++++++++- Mac/Resources/dialogs.rsrc | Bin 16202 -> 17829 bytes 2 files changed, 236 insertions(+), 4 deletions(-) diff --git a/Mac/Lib/EasyDialogs.py b/Mac/Lib/EasyDialogs.py index f4cdbbf55d..c830c558d5 100644 --- a/Mac/Lib/EasyDialogs.py +++ b/Mac/Lib/EasyDialogs.py @@ -21,9 +21,12 @@ import Dialogs import Windows import Dlg,Win,Evt,Events # sdm7g import Ctl +import Controls +import Menu import MacOS import string from ControlAccessor import * # Also import Controls constants +import macfs def cr2lf(text): if '\r' in text: @@ -285,10 +288,242 @@ class ProgressBar: """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.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(): - import time + 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: @@ -314,9 +549,6 @@ def test(): del bar apply(MacOS.SchedParams, appsw) - - - if __name__ == '__main__': try: test() diff --git a/Mac/Resources/dialogs.rsrc b/Mac/Resources/dialogs.rsrc index ea1b10258b8efe2e688302ac1469653235f3c73b..907b9d012bb9564af372fdfbccc7999a29b00c07 100644 GIT binary patch delta 1668 zcmb7^UuauZ9LK-EliTDbwrlrCjI-)R=9Fsx;Ods7StX=%j>WZ|8J4+?X3cF4q&FeE zopZPaL_`r}^CAodk-_k7;I^mX(-?xK41IJDb1&+Ii3)qrp~T<$otv%`eCQ2_`}zGp zIp=qOizm;0K&P^5NB;C^Ut;?OAj>Ou`pZUddNVdr5;hfS8X%wy;B#K+%Gc)SOJ3Qj zRy;Qod^WVL8P$3`!0TxtAQHYgv?UKz+Y-vaMof{7DowTXQ(gN+a%Ej>BbL~D^M9<* z;12K2#(O%psW)eWH*m1y9;+PjE8d(lTdBGO0|T6GHT&8e=JxO3SGP{>xo@n<y2*Gp z@%sI)UD|cFRxP`Y)t685VTX@CDtn*jSNy80&jd+YHm<NWjd3;q@iEx^^V@gJS<mYH zvGKZJsd*X3$N%F&#={P8U%T8umky%lG$qNWLzWufEsAMeWjSF*^CfS_t!iC6TTGGZ z1P4hxM@7Cs{iIkbP_f5IVPCLshbZ3S=vy?+vgxZc=;aDiVeHZY(<p2<jTp8D%P|SR zgAdu`F3Yx&31myUxR%>(&UQ=WVLs=V!p+?MXlOFB1_%zN9ttYMoxvl6ox#B^ox*MT zH`Z%jx!xaG^Jo$aSfszyR%^X9h%Uw@hY}2_U^1O)>g&As-9`U6xMcmrs$T0X5@WlH z1+2sVTw!k!7LAS-#&@ENj!*2$7eVTY{2sQ)Rc5TPa|#J{p<JCihK|VA@{E5NvB=4a zdEc1P?}#<}@{T?GK$eFe<zwbD2>wZbBWF%=bq&ZI7v*ARtf>LFP;j6g7QT)BK=fJ7 ze0+RR{a1yFI+<?@D|(RmZ{Y~_1A`lcE&3GLaz?m=&NE*Uj?xw8Z-ry@J@aj0oBDqT zhRtpLtT@TGuf-5oKk$s=jR3z~X|)_!pJ)!wk39LBrFtEt`m{_PYLNLW;i!6n`MPjS zO)&o{Y^%c#(ys`|mCt-aSg9`@WS$p}sLRZ+2G>ST#Nw?MFmfPxF`F}-dN+7GYg(4X znA)p@g6rAhgi&OVN|vaOOq~+8HK(5vjtHL<R+=-WAEDl1pYKFZ>SN|#FZOMBRC8Ua zF?ZCN3Fq%zqqb1*7FCJoO-(-Co@F_7Tbt7{;!x$G#1rwJrajHNmwn98GD%EAXWsP| z)=Ji5yRuf9y;Qs-Zo?02uNSXS75et%YxOss+N?9V;POzedEL2s-7PirU~shmzb3O@ A#Q*>R delta 334 zcmYMuKS)AR6bA6`-1od$nEk<qz`=r+M-o&}f|!3Ei1EmXH$;O&2@*tuG&t4LR7-J} zsHO{TQAE+$AmPyD;7|}D6lCDw&=4Wmsiom?e&;*OceYOt+Xqn*YaGU`o`?m^@_6p9 zior;p0Q^T%_Xk9UqoASTwKJ}R0n8_yB^M@*+D<kNALSM^DHlZFsRjO%7_^=AGP;G8 z-zbz|3Y}luT7?uZ>wnvrRC}?SDRu9u+MKg@r0xS6a6%BnQv2IzVg-=n>@NbDK=_{h zNkl$&o!ufqL+m!YNd|?1i2%DnCY=CNN9;H9&;|R3T_;Ipc9s21UG&6mvLDGyBQ0Rs w%SR3GA^^-(*wv46rxSvC%q@3SE<UDS<0Vx{MAc;?`&<27`IGMTZ89i+0F4V*^8f$< -- 2.49.0