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 | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 9 | |
| 10 | ID_MAINDIALOG=512 |
| 11 | |
| 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 |
| 30 | |
| 31 | RADIO_GROUPING={ |
| 32 | ITEM_GENSOURCE: ITEM_GENSOURCE_ITEMS, |
| 33 | ITEM_GENRESOURCE: ITEM_GENRESOURCE_ITEMS, |
| 34 | ITEM_GENAPPLET: ITEM_GENAPPLET_ITEMS, |
| 35 | ITEM_GENINFO: () |
| 36 | } |
| 37 | |
| 38 | def 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: |
Jack Jansen | d13c385 | 2000-06-20 21:59:25 +0000 | [diff] [blame] | 63 | Res.FSpOpenResFile('macfreeze.rsrc', 1) |
Jack Jansen | 144fa67 | 1998-06-26 14:56:00 +0000 | [diff] [blame] | 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 | |
| 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) |
| 148 | |
| 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) |
| 154 | |
| 155 | if __name__ == '__main__': |
| 156 | type, script, file, debug = dialog() |
| 157 | print type, script, file, 'debug=%d'%debug |
| 158 | sys.exit(1) |