mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	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
					
				
					 2 changed files with 236 additions and 4 deletions
				
			
		|  | @ -21,9 +21,12 @@ | |||
| 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 @@ 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.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() | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen