mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 12:44:56 +00:00 
			
		
		
		
	 32f782c03c
			
		
	
	
		32f782c03c
		
	
	
	
	
		
			
			return None. For now, if the user asks for TEXT files files without type are also accepted. But it is time to phase out StandardGetFile and friends, really.
		
			
				
	
	
		
			162 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
	
		
			3.6 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):
 | |
| 	# Workaround for OSX typeless files:
 | |
| 	if 'TEXT' in typelist and not '\0\0\0\0' in typelist:
 | |
| 		typelist = typelist + ('\0\0\0\0',)
 | |
| 	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 = None
 | |
| 	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 = None
 | |
| 	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 = None
 | |
| 	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)
 | |
| 	
 |