Ditched '_find_SET()', since it was a no-value-added wrapper around
[python/dscho.git] / Mac / Lib / macfsn.py
blobc78459d3767a794cb592bf72c958425edf24acce
1 """StandardFile compatability module: implement macfs StandardFile
2 API calls with Navigation Services"""
3 import macfs
4 import struct
5 import Res
6 try:
7 import Nav
8 except ImportError:
9 Nav = None
11 _curfolder = None
12 _movablemodal = 1
14 def _mktypelist(typelist):
15 if not typelist:
16 return None
17 data = 'Pyth' + struct.pack("hh", 0, len(typelist))
18 for type in typelist:
19 data = data+type
20 return Res.Resource(data)
22 def _StandardGetFile(*typelist):
23 return apply(_PromptGetFile, (None,)+typelist)
25 def _PromptGetFile(prompt, *typelist):
26 args = {}
27 flags = 0x56
28 typehandle = _mktypelist(typelist)
29 if typehandle:
30 args['typeList'] = typehandle
31 else:
32 flags = flags | 0x01
33 if prompt:
34 args['message'] = prompt
35 args['preferenceKey'] = 'PyMC'
36 if _movablemodal:
37 args['eventProc'] = None
38 args['dialogOptionFlags'] = flags
39 _handleSetFolder(args)
40 try:
41 rr = Nav.NavChooseFile(args)
42 good = 1
43 except Nav.error, arg:
44 if arg[0] != -128: # userCancelledErr
45 raise Nav.error, arg
46 good = 0
47 fss = macfs.FSSpec(':cancelled')
48 else:
49 fss = rr.selection[0]
50 ## if typehandle:
51 ## typehandle.DisposeHandle()
52 return fss, good
54 def _StandardPutFile(prompt, default=None):
55 args = {}
56 flags = 0x07
57 if prompt:
58 args['message'] = prompt
59 args['preferenceKey'] = 'PyMC'
60 if _movablemodal:
61 args['eventProc'] = None
62 if default:
63 args['savedFileName'] = default
64 args['dialogOptionFlags'] = flags
65 _handleSetFolder(args)
66 try:
67 rr = Nav.NavPutFile(args)
68 good = 1
69 except Nav.error, arg:
70 if arg[0] != -128: # userCancelledErr
71 raise Nav.error, arg
72 good = 0
73 fss = macfs.FSSpec(':cancelled')
74 else:
75 fss = rr.selection[0]
76 return fss, good
78 def _SetFolder(folder):
79 global _curfolder
80 if _curfolder:
81 rv = _curfolder
82 else:
83 rv = None
84 _curfolder = macfs.FSSpec(folder)
85 return rv
87 def _handleSetFolder(args):
88 global _curfolder
89 if not _curfolder:
90 return
91 import aepack
92 fss = macfs.FSSpec(_curfolder)
93 aedesc = aepack.pack(fss)
94 args['defaultLocation'] = aedesc
95 _curfolder = None
97 def _GetDirectory(prompt=None):
98 args = {}
99 flags = 0x17
100 if prompt:
101 args['message'] = prompt
102 args['preferenceKey'] = 'PyMC'
103 if _movablemodal:
104 args['eventProc'] = None
105 args['dialogOptionFlags'] = flags
106 _handleSetFolder(args)
107 try:
108 rr = Nav.NavChooseFolder(args)
109 good = 1
110 except Nav.error, arg:
111 if arg[0] != -128: # userCancelledErr
112 raise Nav.error, arg
113 good = 0
114 fss = macfs.FSSpec(':cancelled')
115 else:
116 fss = rr.selection[0]
117 return fss, good
119 def _install():
120 macfs.StandardGetFile = StandardGetFile
121 macfs.PromptGetFile = PromptGetFile
122 macfs.StandardPutFile = StandardPutFile
123 macfs.SetFolder = SetFolder
124 macfs.GetDirectory = GetDirectory
126 if Nav and Nav.NavServicesAvailable():
127 StandardGetFile = _StandardGetFile
128 PromptGetFile = _PromptGetFile
129 StandardPutFile = _StandardPutFile
130 SetFolder = _SetFolder
131 GetDirectory = _GetDirectory
132 else:
133 from macfs import StandardGetFile, PromptGetFile, StandardPutFile, SetFolder, GetDirectory
136 if __name__ == '__main__':
137 print 'Testing StandardGetFile'
138 fss, ok = StandardGetFile()
139 print '->', fss, ok
140 print 'Testing StandardGetFile("TEXT")'
141 fss, ok = StandardGetFile("TEXT")
142 print '->', fss, ok
143 print 'Testing PromptGetFile'
144 fss, ok = PromptGetFile("prompt")
145 print '->', fss, ok
146 print 'Testing StandardPutFile("the prompt", "default")'
147 fss, ok = StandardPutFile("the prompt", "default")
148 print '->', fss, ok
149 print 'Testing GetDirectory("another prompt")'
150 fss, ok = GetDirectory("Another prompt")
151 print '->', fss, ok
152 import sys
153 sys.exit(1)