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 | |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 6 | from Carbon.Dlg import * |
| 7 | from Carbon.Events import * |
| 8 | from Carbon.Res import * |
| 9 | from Carbon import Controls |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 10 | import string |
| 11 | import struct |
| 12 | import macfs |
| 13 | import MacOS |
| 14 | import os |
| 15 | import sys |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 16 | from Carbon import Res # For Res.Error |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 17 | import pythonprefs |
Jack Jansen | 3c06b9a | 2001-08-27 21:41:23 +0000 | [diff] [blame] | 18 | import macresource |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 19 | import EasyDialogs |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 20 | try: |
Jack Jansen | 5a6fdcd | 2001-08-25 12:15:04 +0000 | [diff] [blame] | 21 | from Carbon import Help |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 22 | except ImportError: |
| 23 | Help = None |
Jack Jansen | 8487229 | 1996-10-22 15:33:02 +0000 | [diff] [blame] | 24 | |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 25 | # resource IDs in our own resources (dialogs, etc) |
| 26 | MESSAGE_ID = 256 |
| 27 | |
Jack Jansen | 145c92d | 1996-10-11 11:30:26 +0000 | [diff] [blame] | 28 | DIALOG_ID = 511 |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 29 | TEXT_ITEM = 1 |
| 30 | OK_ITEM = 2 |
| 31 | CANCEL_ITEM = 3 |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 32 | DIR_ITEM = 4 |
| 33 | TITLE_ITEM = 5 |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 34 | OPTIONS_ITEM = 7 |
Jack Jansen | b95901e | 1997-09-09 13:58:19 +0000 | [diff] [blame] | 35 | HELP_ITEM = 9 |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 36 | |
| 37 | # The options dialog. There is a correspondence between |
| 38 | # the dialog item numbers and the option. |
Jack Jansen | 145c92d | 1996-10-11 11:30:26 +0000 | [diff] [blame] | 39 | OPT_DIALOG_ID = 510 |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 40 | |
| 41 | # Map dialog item numbers to option names (and the reverse) |
| 42 | opt_dialog_map = [ |
| 43 | None, |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 44 | None, |
Jack Jansen | 3e3eb3e | 2000-10-19 21:50:54 +0000 | [diff] [blame] | 45 | None, |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 46 | "inspect", |
| 47 | "verbose", |
| 48 | "optimize", |
| 49 | "unbuffered", |
| 50 | "debugging", |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 51 | "tabwarn", |
| 52 | "nosite", |
| 53 | "nonavservice", |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 54 | "nointopt", |
| 55 | "noargs", |
Jack Jansen | b95901e | 1997-09-09 13:58:19 +0000 | [diff] [blame] | 56 | "delayconsole", |
Jack Jansen | a5ffeb6 | 2001-09-01 22:36:29 +0000 | [diff] [blame] | 57 | "divisionwarn", |
| 58 | "unixnewlines", |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 59 | ] |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 60 | opt_dialog_dict = {} |
| 61 | for i in range(len(opt_dialog_map)): |
| 62 | if opt_dialog_map[i]: |
| 63 | opt_dialog_dict[opt_dialog_map[i]] = i |
| 64 | # 1 thru 10 are the options |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 65 | # The GUSI creator/type and delay-console |
Jack Jansen | a5ffeb6 | 2001-09-01 22:36:29 +0000 | [diff] [blame] | 66 | OD_CREATOR_ITEM = 20 |
| 67 | OD_TYPE_ITEM = 21 |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 68 | OD_OK_ITEM = 1 |
| 69 | OD_CANCEL_ITEM = 2 |
Jack Jansen | a5ffeb6 | 2001-09-01 22:36:29 +0000 | [diff] [blame] | 70 | OD_HELP_ITEM = 22 |
| 71 | OD_KEEPALWAYS_ITEM = 16 |
| 72 | OD_KEEPOUTPUT_ITEM = 17 |
| 73 | OD_KEEPERROR_ITEM = 18 |
| 74 | OD_KEEPNEVER_ITEM = 19 |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 75 | |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 76 | def optinteract(options): |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 77 | """Let the user interact with the options dialog""" |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 78 | d = GetNewDialog(OPT_DIALOG_ID, -1) |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 79 | htext = d.GetDialogItemAsControl(OD_CREATOR_ITEM) |
| 80 | SetDialogItemText(htext, options['creator']) |
| 81 | htext = d.GetDialogItemAsControl(OD_TYPE_ITEM) |
| 82 | SetDialogItemText(htext, options['type']) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 83 | d.SetDialogDefaultItem(OD_OK_ITEM) |
| 84 | d.SetDialogCancelItem(OD_CANCEL_ITEM) |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 85 | if not Help: |
| 86 | d.HideDialogItem(OD_HELP_ITEM) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 87 | while 1: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 88 | for name in opt_dialog_dict.keys(): |
| 89 | num = opt_dialog_dict[name] |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 90 | ctl = d.GetDialogItemAsControl(num) |
| 91 | ctl.SetControlValue(options[name]) |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 92 | ctl = d.GetDialogItemAsControl(OD_KEEPALWAYS_ITEM) |
| 93 | ctl.SetControlValue(options['keep_console'] == 3) |
| 94 | ctl = d.GetDialogItemAsControl(OD_KEEPOUTPUT_ITEM) |
| 95 | ctl.SetControlValue(options['keep_console'] == 1) |
| 96 | ctl = d.GetDialogItemAsControl(OD_KEEPERROR_ITEM) |
| 97 | ctl.SetControlValue(options['keep_console'] == 2) |
| 98 | ctl = d.GetDialogItemAsControl(OD_KEEPNEVER_ITEM) |
| 99 | ctl.SetControlValue(options['keep_console'] == 0) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 100 | n = ModalDialog(None) |
| 101 | if n == OD_OK_ITEM: |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 102 | htext = d.GetDialogItemAsControl(OD_CREATOR_ITEM) |
| 103 | ncreator = GetDialogItemText(htext) |
| 104 | htext = d.GetDialogItemAsControl(OD_TYPE_ITEM) |
| 105 | ntype = GetDialogItemText(htext) |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 106 | if len(ncreator) == 4 and len(ntype) == 4: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 107 | options['creator'] = ncreator |
| 108 | options['type'] = ntype |
| 109 | return options |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 110 | else: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 111 | MacOS.SysBeep() |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 112 | elif n == OD_CANCEL_ITEM: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 113 | return |
Jack Jansen | 6c4e987 | 1996-09-06 22:25:34 +0000 | [diff] [blame] | 114 | elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM): |
| 115 | pass |
Jack Jansen | 4a5eb96 | 2000-09-22 21:50:11 +0000 | [diff] [blame] | 116 | elif n == OD_KEEPALWAYS_ITEM: |
| 117 | options['keep_console'] = 3; |
| 118 | elif n == OD_KEEPOUTPUT_ITEM: |
| 119 | options['keep_console'] = 1; |
| 120 | elif n == OD_KEEPERROR_ITEM: |
| 121 | options['keep_console'] = 2; |
| 122 | elif n == OD_KEEPNEVER_ITEM: |
| 123 | options['keep_console'] = 0; |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 124 | elif n == OD_HELP_ITEM and Help: |
Jack Jansen | b95901e | 1997-09-09 13:58:19 +0000 | [diff] [blame] | 125 | onoff = Help.HMGetBalloons() |
| 126 | Help.HMSetBalloons(not onoff) |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 127 | elif 1 <= n <= len(opt_dialog_map): |
| 128 | options[opt_dialog_map[n]] = (not options[opt_dialog_map[n]]) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 129 | |
| 130 | |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 131 | def interact(options, title): |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 132 | """Let the user interact with the dialog""" |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 133 | try: |
| 134 | # Try to go to the "correct" dir for GetDirectory |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 135 | os.chdir(options['dir'].as_pathname()) |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 136 | except os.error: |
| 137 | pass |
| 138 | d = GetNewDialog(DIALOG_ID, -1) |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 139 | htext = d.GetDialogItemAsControl(TITLE_ITEM) |
| 140 | SetDialogItemText(htext, title) |
Jack Jansen | 8242c9e | 2000-01-13 16:22:12 +0000 | [diff] [blame] | 141 | path_ctl = d.GetDialogItemAsControl(TEXT_ITEM) |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 142 | data = string.joinfields(options['path'], '\r') |
Jack Jansen | 8242c9e | 2000-01-13 16:22:12 +0000 | [diff] [blame] | 143 | path_ctl.SetControlData(Controls.kControlEditTextPart, Controls.kControlEditTextTextTag, data) |
Jack Jansen | 6a6db07 | 1999-12-23 14:34:07 +0000 | [diff] [blame] | 144 | |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 145 | d.SelectDialogItemText(TEXT_ITEM, 0, 32767) |
| 146 | d.SelectDialogItemText(TEXT_ITEM, 0, 0) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 147 | ## d.SetDialogDefaultItem(OK_ITEM) |
| 148 | d.SetDialogCancelItem(CANCEL_ITEM) |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 149 | if not Help: |
| 150 | d.HideDialogItem(HELP_ITEM) |
Jack Jansen | a918b8c | 1996-11-20 14:55:26 +0000 | [diff] [blame] | 151 | d.GetDialogWindow().ShowWindow() |
| 152 | d.DrawDialog() |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 153 | while 1: |
| 154 | n = ModalDialog(None) |
| 155 | if n == OK_ITEM: |
| 156 | break |
| 157 | if n == CANCEL_ITEM: |
| 158 | return None |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 159 | ## if n == REVERT_ITEM: |
| 160 | ## return [], pythondir |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 161 | if n == DIR_ITEM: |
Jack Jansen | b340acf | 2003-01-26 21:40:00 +0000 | [diff] [blame] | 162 | fss = EasyDialogs.AskFolder(message='Select python home folder:', |
| 163 | wanted=macfs.FSSpec) |
Jack Jansen | 2373ff4 | 2003-01-26 22:15:10 +0000 | [diff] [blame] | 164 | if fss: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 165 | options['dir'] = fss |
Jack Jansen | 1bbf6ff | 2001-01-29 14:59:33 +0000 | [diff] [blame] | 166 | elif n == HELP_ITEM and Help: |
Jack Jansen | b95901e | 1997-09-09 13:58:19 +0000 | [diff] [blame] | 167 | onoff = Help.HMGetBalloons() |
| 168 | Help.HMSetBalloons(not onoff) |
Jack Jansen | 822a30b | 1996-04-10 14:52:18 +0000 | [diff] [blame] | 169 | if n == OPTIONS_ITEM: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 170 | noptions = options |
| 171 | for k in options.keys(): |
| 172 | noptions[k] = options[k] |
| 173 | noptions = optinteract(noptions) |
| 174 | if noptions: |
| 175 | options = noptions |
Jack Jansen | 8242c9e | 2000-01-13 16:22:12 +0000 | [diff] [blame] | 176 | data = path_ctl.GetControlData(Controls.kControlEditTextPart, Controls.kControlEditTextTextTag) |
| 177 | tmp = string.splitfields(data, '\r') |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 178 | newpath = [] |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 179 | for i in tmp: |
| 180 | if i: |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 181 | newpath.append(i) |
| 182 | options['path'] = newpath |
| 183 | return options |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 184 | |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 185 | |
| 186 | def edit_preferences(): |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 187 | handler = pythonprefs.PythonOptions() |
Jack Jansen | 43fd1f7 | 1999-12-02 22:52:12 +0000 | [diff] [blame] | 188 | options = handler.load() |
| 189 | if options['noargs']: |
| 190 | EasyDialogs.Message('Warning: system-wide sys.argv processing is off.\nIf you dropped an applet I have not seen it.') |
| 191 | result = interact(options, 'System-wide preferences') |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 192 | if result: |
| 193 | handler.save(result) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 194 | |
| 195 | def edit_applet(name): |
Jack Jansen | 3b3a287 | 1997-09-08 13:19:42 +0000 | [diff] [blame] | 196 | handler = pythonprefs.AppletOptions(name) |
| 197 | result = interact(handler.load(), os.path.split(name)[1]) |
| 198 | if result: |
| 199 | handler.save(result) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 200 | |
| 201 | def main(): |
Jack Jansen | 3c06b9a | 2001-08-27 21:41:23 +0000 | [diff] [blame] | 202 | macresource.need('DLOG', DIALOG_ID, 'EditPythonPrefs.rsrc') |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 203 | |
Jack Jansen | 8c94d5e | 2000-10-13 23:34:06 +0000 | [diff] [blame] | 204 | MacOS.SchedParams(1, 0) |
Jack Jansen | db0bace | 1996-04-04 15:38:44 +0000 | [diff] [blame] | 205 | if len(sys.argv) <= 1: |
| 206 | edit_preferences() |
| 207 | else: |
| 208 | for appl in sys.argv[1:]: |
| 209 | edit_applet(appl) |
| 210 | |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 211 | |
| 212 | if __name__ == '__main__': |
Jack Jansen | 7571f30 | 1995-07-29 13:48:41 +0000 | [diff] [blame] | 213 | main() |