mirror of
https://github.com/python/cpython.git
synced 2024-12-01 11:15:56 +01:00
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.
163 lines
3.6 KiB
Python
163 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)
|
|
|