mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			159 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """StandardFile compatability module: implement macfs StandardFile
 | |
| API calls with Navigation Services"""
 | |
| import macfs
 | |
| import struct
 | |
| from Carbon import Res
 | |
| try:
 | |
| 	import Nav
 | |
| except ImportError:
 | |
| 	Nav = None
 | |
| 
 | |
| _curfolder = None
 | |
| _movablemodal = 1
 | |
| 
 | |
| def _mktypelist(typelist):
 | |
| 	if not typelist:
 | |
| 		return None
 | |
| 	data = 'Pyth' + struct.pack("hh", 0, len(typelist))
 | |
| 	for type in typelist:
 | |
| 		data = data+type
 | |
| 	return Res.Handle(data)
 | |
| 	
 | |
| def _StandardGetFile(*typelist):
 | |
| 	return apply(_PromptGetFile, (None,)+typelist)
 | |
| 	
 | |
| def _PromptGetFile(prompt, *typelist):
 | |
| 	args = {}
 | |
| 	flags = 0x56
 | |
| 	typehandle = _mktypelist(typelist)
 | |
| 	if typehandle:
 | |
| 		args['typeList'] = typehandle
 | |
| 	else:
 | |
| 		flags = flags | 0x01
 | |
| 	if prompt:
 | |
| 		args['message'] = prompt
 | |
| 	args['preferenceKey'] = 'PyMC'
 | |
| 	if _movablemodal:
 | |
| 		args['eventProc'] = None
 | |
| 	args['dialogOptionFlags'] = flags
 | |
| 	_handleSetFolder(args)
 | |
| 	try:
 | |
| 		rr = Nav.NavChooseFile(args)
 | |
| 		good = 1
 | |
| 	except Nav.error, arg:
 | |
| 		if arg[0] != -128: # userCancelledErr
 | |
| 			raise Nav.error, arg
 | |
| 		good = 0
 | |
| 		fss = macfs.FSSpec(':cancelled')
 | |
| 	else:
 | |
| 		if rr.selection:
 | |
| 			fss = rr.selection[0]
 | |
| 		else:
 | |
| 			fss = None
 | |
| 			good = 0
 | |
| ##	if typehandle:
 | |
| ##		typehandle.DisposeHandle()
 | |
| 	return fss, good
 | |
| 
 | |
| def _StandardPutFile(prompt, default=None):
 | |
| 	args = {}
 | |
| 	flags = 0x07
 | |
| 	if prompt:
 | |
| 		args['message'] = prompt
 | |
| 	args['preferenceKey'] = 'PyMC'
 | |
| 	if _movablemodal:
 | |
| 		args['eventProc'] = None
 | |
| 	if default:
 | |
| 		args['savedFileName'] = default
 | |
| 	args['dialogOptionFlags'] = flags
 | |
| 	_handleSetFolder(args)
 | |
| 	try:
 | |
| 		rr = Nav.NavPutFile(args)
 | |
| 		good = 1
 | |
| 	except Nav.error, arg:
 | |
| 		if arg[0] != -128: # userCancelledErr
 | |
| 			raise Nav.error, arg
 | |
| 		good = 0
 | |
| 		fss = macfs.FSSpec(':cancelled')
 | |
| 	else:
 | |
| 		fss = rr.selection[0]
 | |
| 	return fss, good
 | |
| 	
 | |
| def _SetFolder(folder):
 | |
| 	global _curfolder
 | |
| 	if _curfolder:
 | |
| 		rv = _curfolder
 | |
| 	else:
 | |
| 		rv = None
 | |
| 	_curfolder = macfs.FSSpec(folder)
 | |
| 	return rv
 | |
| 	
 | |
| def _handleSetFolder(args):
 | |
| 	global _curfolder
 | |
| 	if not _curfolder:
 | |
| 		return
 | |
| 	import aepack
 | |
| 	fss = macfs.FSSpec(_curfolder)
 | |
| 	aedesc = aepack.pack(fss)
 | |
| 	args['defaultLocation'] = aedesc
 | |
| 	_curfolder = None
 | |
| 	
 | |
| def _GetDirectory(prompt=None):
 | |
| 	args = {}
 | |
| 	flags = 0x17
 | |
| 	if prompt:
 | |
| 		args['message'] = prompt
 | |
| 	args['preferenceKey'] = 'PyMC'
 | |
| 	if _movablemodal:
 | |
| 		args['eventProc'] = None
 | |
| 	args['dialogOptionFlags'] = flags
 | |
| 	_handleSetFolder(args)
 | |
| 	try:
 | |
| 		rr = Nav.NavChooseFolder(args)
 | |
| 		good = 1
 | |
| 	except Nav.error, arg:
 | |
| 		if arg[0] != -128: # userCancelledErr
 | |
| 			raise Nav.error, arg
 | |
| 		good = 0
 | |
| 		fss = macfs.FSSpec(':cancelled')
 | |
| 	else:
 | |
| 		fss = rr.selection[0]
 | |
| 	return fss, good
 | |
| 	
 | |
| def _install():
 | |
| 	macfs.StandardGetFile = StandardGetFile
 | |
| 	macfs.PromptGetFile = PromptGetFile
 | |
| 	macfs.StandardPutFile = StandardPutFile
 | |
| 	macfs.SetFolder = SetFolder
 | |
| 	macfs.GetDirectory = GetDirectory
 | |
| 	
 | |
| if Nav and Nav.NavServicesAvailable():
 | |
| 	StandardGetFile = _StandardGetFile
 | |
| 	PromptGetFile = _PromptGetFile
 | |
| 	StandardPutFile = _StandardPutFile
 | |
| 	SetFolder = _SetFolder
 | |
| 	GetDirectory = _GetDirectory
 | |
| 	_install()
 | |
| else:
 | |
| 	from macfs import StandardGetFile, PromptGetFile, StandardPutFile, SetFolder, GetDirectory
 | |
| 	
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	print 'Testing StandardGetFile'
 | |
| 	fss, ok = StandardGetFile()
 | |
| 	print '->', fss, ok
 | |
| 	print 'Testing StandardGetFile("TEXT")'
 | |
| 	fss, ok = StandardGetFile("TEXT")
 | |
| 	print '->', fss, ok
 | |
| 	print 'Testing PromptGetFile'
 | |
| 	fss, ok = PromptGetFile("prompt")
 | |
| 	print '->', fss, ok
 | |
| 	print 'Testing StandardPutFile("the prompt", "default")'
 | |
| 	fss, ok = StandardPutFile("the prompt", "default")
 | |
| 	print '->', fss, ok
 | |
| 	print 'Testing GetDirectory("another prompt")'
 | |
| 	fss, ok = GetDirectory("Another prompt")
 | |
| 	print '->', fss, ok
 | |
| 	import sys
 | |
| 	sys.exit(1)
 | |
| 	
 | 
