blob: bd70c00d06852962f24c24b277c5f9139cd30b33 [file] [log] [blame]
Jack Jansen144fa671998-06-26 14:56:00 +00001"""macfreezegui - The GUI for macfreeze"""
2import Dlg
3import macfs
4import EasyDialogs
5import sys
6import os
7import string
8import Res
9
10ID_MAINDIALOG=512
11
12ITEM_SCRIPTNAME=2
13ITEM_SCRIPTBROWSE=3
14ITEM_GENSOURCE=4
15ITEM_GENSOURCE_ITEMS=(7,)
16ITEM_SOURCEDIRNAME=6
17ITEM_SOURCEDIRBROWSE=7
18ITEM_GENRESOURCE=8
19ITEM_GENRESOURCE_ITEMS=(11,)
20ITEM_RESOURCENAME=10
21ITEM_RESOURCEBROWSE=11
22ITEM_GENAPPLET=12
23ITEM_GENAPPLET_ITEMS=(15,)
24ITEM_APPLETNAME=14
25ITEM_APPLETBROWSE=15
26ITEM_OK=16
27ITEM_CANCEL=17
28ITEM_DEBUG=19
29ITEM_GENINFO=20
30
31RADIO_GROUPING={
32 ITEM_GENSOURCE: ITEM_GENSOURCE_ITEMS,
33 ITEM_GENRESOURCE: ITEM_GENRESOURCE_ITEMS,
34 ITEM_GENAPPLET: ITEM_GENAPPLET_ITEMS,
35 ITEM_GENINFO: ()
36}
37
38def dialog(script=None):
39
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)
55
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.OpenResFile('macfreeze.rsrc')
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)
71
72 # Fill the dialog
73 d.SetDialogDefaultItem(ITEM_OK)
74 d.SetDialogCancelItem(ITEM_CANCEL)
75
76 _dialogsetfile(d, ITEM_SCRIPTNAME, script)
77 _dialogsetfile(d, ITEM_SOURCEDIRNAME, dirname)
78 _dialogsetfile(d, ITEM_RESOURCENAME, rsrcname)
79 _dialogsetfile(d, ITEM_APPLETNAME, appletname)
80
81 gentype = ITEM_GENSOURCE
82 _dialogradiogroup(d, ITEM_GENSOURCE)
83
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
135
136def _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)
148
149def _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)
154
155if __name__ == '__main__':
156 type, script, file, debug = dialog()
157 print type, script, file, 'debug=%d'%debug
158 sys.exit(1)