Jack Jansen | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 1 | """macfreezegui - The GUI for macfreeze""" |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 2 | from Carbon import Dlg |
Jack Jansen | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 3 | import macfs |
| 4 | import EasyDialogs |
| 5 | import sys |
| 6 | import os |
| 7 | import string |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 8 | from Carbon import Res |
Jack Jansen | 3c06b9a | 2001-08-27 21:41:23 +0000 | [diff] [blame] | 9 | import macresource |
Jack Jansen | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 10 | |
| 11 | ID_MAINDIALOG=512 |
| 12 | |
| 13 | ITEM_SCRIPTNAME=2 |
| 14 | ITEM_SCRIPTBROWSE=3 |
| 15 | ITEM_GENSOURCE=4 |
| 16 | ITEM_GENSOURCE_ITEMS=(7,) |
| 17 | ITEM_SOURCEDIRNAME=6 |
| 18 | ITEM_SOURCEDIRBROWSE=7 |
| 19 | ITEM_GENRESOURCE=8 |
| 20 | ITEM_GENRESOURCE_ITEMS=(11,) |
| 21 | ITEM_RESOURCENAME=10 |
| 22 | ITEM_RESOURCEBROWSE=11 |
| 23 | ITEM_GENAPPLET=12 |
| 24 | ITEM_GENAPPLET_ITEMS=(15,) |
| 25 | ITEM_APPLETNAME=14 |
| 26 | ITEM_APPLETBROWSE=15 |
| 27 | ITEM_OK=16 |
| 28 | ITEM_CANCEL=17 |
| 29 | ITEM_DEBUG=19 |
| 30 | ITEM_GENINFO=20 |
| 31 | |
| 32 | RADIO_GROUPING={ |
| 33 | ITEM_GENSOURCE: ITEM_GENSOURCE_ITEMS, |
| 34 | ITEM_GENRESOURCE: ITEM_GENRESOURCE_ITEMS, |
| 35 | ITEM_GENAPPLET: ITEM_GENAPPLET_ITEMS, |
| 36 | ITEM_GENINFO: () |
| 37 | } |
| 38 | |
| 39 | def 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 Jansen | 3c06b9a | 2001-08-27 21:41:23 +0000 | [diff] [blame] | 58 | macresource.need('DLOG', ID_MAINDIALOG, 'macfreeze.rsrc') |
| 59 | d = Dlg.GetNewDialog(ID_MAINDIALOG, -1) |
Jack Jansen | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 60 | 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 | |
| 128 | def _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 | |
| 141 | def _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 | |
| 147 | if __name__ == '__main__': |
| 148 | type, script, file, debug = dialog() |
| 149 | print type, script, file, 'debug=%d'%debug |
| 150 | sys.exit(1) |