mirror of
https://github.com/python/cpython.git
synced 2025-09-02 06:57:58 +00:00

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)
|
|
|