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