Fix three PyChecker-detected gotchas.
[python/dscho.git] / Mac / Tools / macfreeze / macfreezegui.py
blobc3311b7c30f9ecfac3783e1c6ee5754f75b9a80d
1 """macfreezegui - The GUI for macfreeze"""
2 import Dlg
3 import macfs
4 import EasyDialogs
5 import sys
6 import os
7 import string
8 import Res
10 ID_MAINDIALOG=512
12 ITEM_SCRIPTNAME=2
13 ITEM_SCRIPTBROWSE=3
14 ITEM_GENSOURCE=4
15 ITEM_GENSOURCE_ITEMS=(7,)
16 ITEM_SOURCEDIRNAME=6
17 ITEM_SOURCEDIRBROWSE=7
18 ITEM_GENRESOURCE=8
19 ITEM_GENRESOURCE_ITEMS=(11,)
20 ITEM_RESOURCENAME=10
21 ITEM_RESOURCEBROWSE=11
22 ITEM_GENAPPLET=12
23 ITEM_GENAPPLET_ITEMS=(15,)
24 ITEM_APPLETNAME=14
25 ITEM_APPLETBROWSE=15
26 ITEM_OK=16
27 ITEM_CANCEL=17
28 ITEM_DEBUG=19
29 ITEM_GENINFO=20
31 RADIO_GROUPING={
32 ITEM_GENSOURCE: ITEM_GENSOURCE_ITEMS,
33 ITEM_GENRESOURCE: ITEM_GENRESOURCE_ITEMS,
34 ITEM_GENAPPLET: ITEM_GENAPPLET_ITEMS,
35 ITEM_GENINFO: ()
38 def dialog(script=None):
40 # Invent the various names
41 if not script:
42 fss, ok = macfs.PromptGetFile("Script?", "TEXT")
43 if not ok:
44 sys.exit(0)
45 script = fss.as_pathname()
46 basename, ext = os.path.splitext(script)
47 if ext:
48 appletname = basename
49 rsrcname = basename + 'modules.rsrc'
50 else:
51 appletname = script + '.applet'
52 rsrcname = script + 'modules.rsrc'
53 dirname, basebase = os.path.split(basename)
54 dirname = os.path.join(dirname, 'build.'+basebase)
56 # Get the dialog, possibly opening the resource file (if needed)
57 try:
58 d = Dlg.GetNewDialog(ID_MAINDIALOG, -1)
59 except Dlg.Error:
60 d = None
61 if d == None:
62 try:
63 Res.FSpOpenResFile('macfreeze.rsrc', 1)
64 except Res.Error:
65 d = None
66 else:
67 d = Dlg.GetNewDialog(ID_MAINDIALOG, -1)
68 if d == None:
69 EasyDialogs.Message("Dialog resource not found or faulty")
70 sys.exit(1)
72 # Fill the dialog
73 d.SetDialogDefaultItem(ITEM_OK)
74 d.SetDialogCancelItem(ITEM_CANCEL)
76 _dialogsetfile(d, ITEM_SCRIPTNAME, script)
77 _dialogsetfile(d, ITEM_SOURCEDIRNAME, dirname)
78 _dialogsetfile(d, ITEM_RESOURCENAME, rsrcname)
79 _dialogsetfile(d, ITEM_APPLETNAME, appletname)
81 gentype = ITEM_GENSOURCE
82 _dialogradiogroup(d, ITEM_GENSOURCE)
84 # Interact
85 d.GetDialogWindow().SetWTitle("Standalone application creation options")
86 d.GetDialogWindow().ShowWindow()
87 d.DrawDialog()
88 while 1:
89 item = Dlg.ModalDialog(None)
90 if item == ITEM_OK:
91 break
92 elif item == ITEM_CANCEL:
93 sys.exit(0)
94 elif item in RADIO_GROUPING.keys():
95 gentype = item
96 _dialogradiogroup(d, item)
97 elif item == ITEM_SCRIPTBROWSE:
98 fss, ok = macfs.PromptGetFile("Script?")
99 if ok:
100 script = fss.as_pathname()
101 _dialogsetfile(d, ITEM_SCRIPTNAME, script)
102 elif item == ITEM_SOURCEDIRBROWSE:
103 fss, ok = macfs.StandardPutFile("Output folder name", os.path.split(dirname)[1])
104 if ok:
105 dirname = fss.as_pathname()
106 _dialogsetfile(d, ITEM_SOURCEDIRNAME, dirname)
107 elif item == ITEM_RESOURCEBROWSE:
108 fss, ok = macfs.StandardPutFile("Resource output file", os.path.split(rsrcname)[1])
109 if ok:
110 rsrcname = fss.as_pathname()
111 _dialogsetfile(d, ITEM_RESOURCENAME, rsrcname)
112 elif item == ITEM_APPLETBROWSE:
113 fss, ok = macfs.StandardPutFile("Applet output file", os.path.split(appletname)[1])
114 if ok:
115 appletname = fss.as_pathname()
116 _dialogsetfile(d, ITEM_APPLETNAME, appletname)
117 else:
118 pass
119 tp, h, rect = d.GetDialogItem(ITEM_DEBUG)
120 debug = Dlg.GetDialogItemText(h)
121 try:
122 debug = string.atoi(string.strip(debug))
123 except ValueError:
124 EasyDialogs.Message("Illegal debug value %s, set to zero."%`debug`)
125 debug = 0
126 if gentype == ITEM_GENSOURCE:
127 return 'source', script, dirname, debug
128 elif gentype == ITEM_GENRESOURCE:
129 return 'resource', script, rsrcname, debug
130 elif gentype == ITEM_GENAPPLET:
131 return 'applet', script, appletname, debug
132 elif gentype == ITEM_GENINFO:
133 return 'info', script, '', debug
134 raise 'Error in gentype', gentype
136 def _dialogradiogroup(d, item):
137 for k in RADIO_GROUPING.keys():
138 subitems = RADIO_GROUPING[k]
139 tp, h, rect = d.GetDialogItem(k)
140 if k == item:
141 h.as_Control().SetControlValue(1)
142 for i2 in subitems:
143 d.ShowDialogItem(i2)
144 else:
145 h.as_Control().SetControlValue(0)
146 for i2 in subitems:
147 d.HideDialogItem(i2)
149 def _dialogsetfile(d, item, file):
150 if len(file) > 32:
151 file = '\311:' + os.path.split(file)[1]
152 tp, h, rect = d.GetDialogItem(item)
153 Dlg.SetDialogItemText(h, file)
155 if __name__ == '__main__':
156 type, script, file, debug = dialog()
157 print type, script, file, 'debug=%d'%debug
158 sys.exit(1)