mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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 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 @@ def inc(self, n=1): | ||||||
| 		"""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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jack Jansen
						Jack Jansen