Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 1 | """Edit the Python Preferences file.""" |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 2 | # |
| 3 | # This program is getting more and more clunky. It should really |
| 4 | # be rewritten in a modeless way some time soon. |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 5 | |
| 6 | from Dlg import * |
| 7 | from Events import * |
| 8 | from Res import * |
| 9 | import string |
| 10 | import struct |
| 11 | import macfs |
| 12 | import MacOS |
| 13 | import os |
| 14 | import sys |
| 15 | import Res # For Res.Error |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 16 | import pythonprefs |
| 17 | import EasyDialogs |
Jack Jansen | 8487229 | 1996-10-22 15:33:02 +0000 | [diff] [blame] | 18 | |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 19 | # resource IDs in our own resources (dialogs, etc) |
| 20 | MESSAGE_ID = 256 |
| 21 | |
Jack Jansen | 145c92d | 1996-10-11 11:30:26 +0000 | [diff] [blame] | 22 | DIALOG_ID = 511 |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 23 | TEXT_ITEM = 1 |
| 24 | OK_ITEM = 2 |
| 25 | CANCEL_ITEM = 3 |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 26 | DIR_ITEM = 4 |
| 27 | TITLE_ITEM = 5 |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 28 | OPTIONS_ITEM = 7 |
| 29 | |
| 30 | # The options dialog. There is a correspondence between |
| 31 | # the dialog item numbers and the option. |
Jack Jansen | 145c92d | 1996-10-11 11:30:26 +0000 | [diff] [blame] | 32 | OPT_DIALOG_ID = 510 |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 33 | |
| 34 | # Map dialog item numbers to option names (and the reverse) |
| 35 | opt_dialog_map = [ |
| 36 | None, |
| 37 | "inspect", |
| 38 | "verbose", |
| 39 | "optimize", |
| 40 | "unbuffered", |
| 41 | "debugging", |
| 42 | "keepopen", |
| 43 | "keeperror", |
| 44 | "nointopt", |
| 45 | "noargs", |
| 46 | "delayconsole"] |
| 47 | opt_dialog_dict = {} |
| 48 | for i in range(len(opt_dialog_map)): |
| 49 | if opt_dialog_map[i]: |
| 50 | opt_dialog_dict[opt_dialog_map[i]] = i |
| 51 | # 1 thru 10 are the options |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 52 | # The GUSI creator/type and delay-console |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 53 | OD_CREATOR_ITEM = 11 |
| 54 | OD_TYPE_ITEM = 12 |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 55 | OD_OK_ITEM = 13 |
| 56 | OD_CANCEL_ITEM = 14 |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 57 | |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 58 | def optinteract(options): |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 59 | """Let the user interact with the options dialog""" |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 60 | d = GetNewDialog(OPT_DIALOG_ID, -1) |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 61 | tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM) |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 62 | SetDialogItemText(h, options['creator']) |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 63 | tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM) |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 64 | SetDialogItemText(h, options['type']) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 65 | d.SetDialogDefaultItem(OD_OK_ITEM) |
| 66 | d.SetDialogCancelItem(OD_CANCEL_ITEM) |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 67 | |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 68 | while 1: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 69 | for name in opt_dialog_dict.keys(): |
| 70 | num = opt_dialog_dict[name] |
| 71 | tp, h, rect = d.GetDialogItem(num) |
| 72 | h.as_Control().SetControlValue(options[name]) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 73 | n = ModalDialog(None) |
| 74 | if n == OD_OK_ITEM: |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 75 | tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM) |
| 76 | ncreator = GetDialogItemText(h) |
| 77 | tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM) |
| 78 | ntype = GetDialogItemText(h) |
| 79 | if len(ncreator) == 4 and len(ntype) == 4: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 80 | options['creator'] = ncreator |
| 81 | options['type'] = ntype |
| 82 | return options |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 83 | else: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 84 | MacOS.SysBeep() |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 85 | elif n == OD_CANCEL_ITEM: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 86 | return |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 87 | elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM): |
| 88 | pass |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 89 | elif 1 <= n <= len(opt_dialog_map): |
| 90 | options[opt_dialog_map[n]] = (not options[opt_dialog_map[n]]) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 91 | |
| 92 | |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 93 | def interact(options, title): |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 94 | """Let the user interact with the dialog""" |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 95 | try: |
| 96 | # Try to go to the "correct" dir for GetDirectory |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 97 | os.chdir(options['dir'].as_pathname()) |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 98 | except os.error: |
| 99 | pass |
| 100 | d = GetNewDialog(DIALOG_ID, -1) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 101 | tp, h, rect = d.GetDialogItem(TITLE_ITEM) |
| 102 | SetDialogItemText(h, title) |
| 103 | tp, h, rect = d.GetDialogItem(TEXT_ITEM) |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 104 | ## SetDialogItemText(h, string.joinfields(list, '\r')) |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 105 | h.data = string.joinfields(options['path'], '\r') |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 106 | d.SelectDialogItemText(TEXT_ITEM, 0, 32767) |
| 107 | d.SelectDialogItemText(TEXT_ITEM, 0, 0) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 108 | ## d.SetDialogDefaultItem(OK_ITEM) |
| 109 | d.SetDialogCancelItem(CANCEL_ITEM) |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 110 | d.GetDialogWindow().ShowWindow() |
| 111 | d.DrawDialog() |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 112 | while 1: |
| 113 | n = ModalDialog(None) |
| 114 | if n == OK_ITEM: |
| 115 | break |
| 116 | if n == CANCEL_ITEM: |
| 117 | return None |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 118 | ## if n == REVERT_ITEM: |
| 119 | ## return [], pythondir |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 120 | if n == DIR_ITEM: |
Jack Jansen | 9062fa2 | 1995-08-14 12:21:12 +0000 | [diff] [blame] | 121 | fss, ok = macfs.GetDirectory('Select python home folder:') |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 122 | if ok: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 123 | options['dir'] = fss |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 124 | if n == OPTIONS_ITEM: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 125 | noptions = options |
| 126 | for k in options.keys(): |
| 127 | noptions[k] = options[k] |
| 128 | noptions = optinteract(noptions) |
| 129 | if noptions: |
| 130 | options = noptions |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 131 | tmp = string.splitfields(h.data, '\r') |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 132 | newpath = [] |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 133 | for i in tmp: |
| 134 | if i: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 135 | newpath.append(i) |
| 136 | options['path'] = newpath |
| 137 | return options |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 138 | |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 139 | |
| 140 | def edit_preferences(): |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 141 | handler = pythonprefs.PythonOptions() |
| 142 | result = interact(handler.load(), 'System-wide preferences') |
| 143 | if result: |
| 144 | handler.save(result) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 145 | |
| 146 | def edit_applet(name): |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame^] | 147 | handler = pythonprefs.AppletOptions(name) |
| 148 | result = interact(handler.load(), os.path.split(name)[1]) |
| 149 | if result: |
| 150 | handler.save(result) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 151 | |
| 152 | def main(): |
| 153 | try: |
| 154 | h = OpenResFile('EditPythonPrefs.rsrc') |
| 155 | except Res.Error: |
| 156 | pass # Assume we already have acces to our own resource |
| 157 | |
| 158 | if len(sys.argv) <= 1: |
| 159 | edit_preferences() |
| 160 | else: |
| 161 | for appl in sys.argv[1:]: |
| 162 | edit_applet(appl) |
| 163 | |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 164 | |
| 165 | if __name__ == '__main__': |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 166 | main() |