diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 1996-09-06 22:25:34 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 1996-09-06 22:25:34 (GMT) |
commit | 6c4e9874431a892af10e5d48f2c476c4933ea715 (patch) | |
tree | 82c4ed3c8139a9c3763f28439b700355d560e8e8 /Mac/scripts/EditPythonPrefs.py | |
parent | ca3cddd4a2c128cd7b3fa1d47d454f0d02f52cfc (diff) | |
download | cpython-6c4e9874431a892af10e5d48f2c476c4933ea715.zip cpython-6c4e9874431a892af10e5d48f2c476c4933ea715.tar.gz cpython-6c4e9874431a892af10e5d48f2c476c4933ea715.tar.bz2 |
Allow editing selected bits of the GUSI preferences (creator, type and
delayed-sioux-window flag).
Diffstat (limited to 'Mac/scripts/EditPythonPrefs.py')
-rw-r--r-- | Mac/scripts/EditPythonPrefs.py | 105 |
1 files changed, 94 insertions, 11 deletions
diff --git a/Mac/scripts/EditPythonPrefs.py b/Mac/scripts/EditPythonPrefs.py index 40a406d..48ed19c 100644 --- a/Mac/scripts/EditPythonPrefs.py +++ b/Mac/scripts/EditPythonPrefs.py @@ -28,19 +28,32 @@ OPTIONS_ITEM = 7 # The options dialog. There is a correspondence between # the dialog item numbers and the option. OPT_DIALOG_ID = 513 -# 1 thru 7 are the options -OD_OK_ITEM = 8 -OD_CANCEL_ITEM = 9 +# 1 thru 9 are the options +# The GUSI creator/type and delay-console +OD_CREATOR_ITEM = 10 +OD_TYPE_ITEM = 11 +OD_DELAYCONSOLE_ITEM = 12 +OD_OK_ITEM = 13 +OD_CANCEL_ITEM = 14 # Resource IDs in the preferences file PATH_STRINGS_ID = 128 DIRECTORY_ID = 128 OPTIONS_ID = 128 +GUSI_ID = 10240 # Override IDs (in the applet) OVERRIDE_PATH_STRINGS_ID = 129 OVERRIDE_DIRECTORY_ID = 129 OVERRIDE_OPTIONS_ID = 129 +OVERRIDE_GUSI_ID = 10240 + +# Things we know about the GUSI resource. Note the code knows these too. +GUSIPOS_TYPE=0 +GUSIPOS_CREATOR=4 +GUSIPOS_SKIP=8 +GUSIPOS_FLAGS=9 +GUSIFLAGS_DELAY=0x04 # Mask READ = 1 WRITE = 2 @@ -80,21 +93,38 @@ def message(str = "Hello, world!", id = MESSAGE_ID): n = ModalDialog(None) if n == 1: break -def optinteract(options): +def optinteract((options, creator, type, delaycons)): """Let the user interact with the options dialog""" - old_options = options[:] + old_options = (options[:], creator, type, delaycons) d = GetNewDialog(OPT_DIALOG_ID, -1) + tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM) + SetDialogItemText(h, creator) + tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM) + SetDialogItemText(h, type) d.SetDialogDefaultItem(OD_OK_ITEM) d.SetDialogCancelItem(OD_CANCEL_ITEM) while 1: for i in range(len(options)): tp, h, rect = d.GetDialogItem(i+1) h.as_Control().SetControlValue(options[i]) + tp, h, rect = d.GetDialogItem(OD_DELAYCONSOLE_ITEM) + h.as_Control().SetControlValue(delaycons) n = ModalDialog(None) if n == OD_OK_ITEM: - return options + tp, h, rect = d.GetDialogItem(OD_CREATOR_ITEM) + ncreator = GetDialogItemText(h) + tp, h, rect = d.GetDialogItem(OD_TYPE_ITEM) + ntype = GetDialogItemText(h) + if len(ncreator) == 4 and len(ntype) == 4: + return options, ncreator, ntype, delaycons + else: + sys.stderr.write('\007') elif n == OD_CANCEL_ITEM: return old_options + elif n in (OD_CREATOR_ITEM, OD_TYPE_ITEM): + pass + elif n == OD_DELAYCONSOLE_ITEM: + delaycons = (not delaycons) elif 1 <= n <= len(options): options[n-1] = (not options[n-1]) @@ -160,6 +190,28 @@ def getoptions(id): return [0]*7, None return map(lambda x: ord(x), opr.data), opr +def getgusioptions(id): + try: + opr = GetResource('GU\267I', id) + except (MacOS.Error, Res.Error): + return '????', '????', 0, None + data = opr.data + type = data[GUSIPOS_TYPE:GUSIPOS_TYPE+4] + creator = data[GUSIPOS_CREATOR:GUSIPOS_CREATOR+4] + flags = ord(data[GUSIPOS_FLAGS]) + delay = (not not (flags & GUSIFLAGS_DELAY)) + return creator, type, delay, opr + +def setgusioptions(opr, creator, type, delay): + data = opr.data + flags = ord(data[GUSIPOS_FLAGS]) + if delay: + flags = flags | GUSIFLAGS_DELAY + else: + flags = flags & ~GUSIFLAGS_DELAY + data = type + creator + data[GUSIPOS_SKIP] + chr(flags) + data[GUSIPOS_FLAGS+1:] + return data + def openpreffile(rw): # Find the preferences folder and our prefs file, create if needed. vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0) @@ -199,14 +251,18 @@ def edit_preferences(): options, opr = getoptions(OPTIONS_ID) saved_options = options[:] + creator, type, delaycons, gusi_opr = getgusioptions(GUSI_ID) + saved_gusi_options = creator, type, delaycons + # Let the user play away - result = interact(l, fss, options, 'System-wide preferences') + result = interact(l, fss, (options, creator, type, delaycons), + 'System-wide preferences') # See what we have to update, and how if result == None: sys.exit(0) - pathlist, nfss, options = result + pathlist, nfss, (options, creator, type, delaycons) = result if nfss != fss: fss_changed = 1 @@ -238,6 +294,16 @@ def edit_preferences(): else: opr = Resource(newdata) opr.AddResource('Popt', OPTIONS_ID, '') + + if (creator, type, delaycons) != saved_gusi_options: + newdata = setgusioptions(gusi_opr, creator, type, delaycons) + if gusi_opr.HomeResFile() == preff_handle: + gusi_opr.data = newdata + gusi_opr.ChangedResource() + else: + print 'Created new GUSI option' + ngusi_opr = Resource(gusi_opr.data) + ngusi_opr.AddResource('GU\267I', GUSI_ID, '') CloseResFile(preff_handle) @@ -275,12 +341,21 @@ def edit_applet(name): options, dummy = getoptions(OPTIONS_ID) saved_options = options[:] + creator, type, delaycons, gusi_opr = getgusioptions(OVERRIDE_GUSI_ID) + if not opr: + if notfound: + notfound = notfound + ', GUSI options' + else: + notfound = 'GUSI options' + creator, type, delaycons, dummy = getgusioptions(GUSI_ID) + saved_gusi_options = creator, type, delaycons + dummy = dummy2 = None # Discard them. if notfound: message('Warning: initial %s taken from system-wide defaults'%notfound) # Let the user play away - result = interact(l, fss, options, name) + result = interact(l, fss, (options, creator, type, delaycons), name) # See what we have to update, and how if result == None: @@ -318,7 +393,16 @@ def edit_applet(name): else: opr = Resource(newdata) opr.AddResource('Popt', OVERRIDE_OPTIONS_ID, '') - + + if (creator, type, delaycons) != saved_gusi_options: + newdata = setgusioptions(gusi_opr, creator, type, delaycons) + if gusi_opr.HomeResFile == app_handle: + gusi_opr.data = newdata + gusi_opr.ChangedResource() + else: + gusi_opr = Resource(gusi_opr.data) + gusi_opr.AddResource('GU\267I', OVERRIDE_GUSI_ID, '') + CloseResFile(app_handle) def main(): @@ -335,5 +419,4 @@ def main(): if __name__ == '__main__': - print # Stupid, to init toolboxes... main() |