1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
"""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:
fss = rr.selection[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)
|