Added support for editing override preferences in applets
diff --git a/Mac/scripts/EditPythonPrefs.py b/Mac/scripts/EditPythonPrefs.py
index f070d82..0fd6bed 100644
--- a/Mac/scripts/EditPythonPrefs.py
+++ b/Mac/scripts/EditPythonPrefs.py
@@ -18,13 +18,20 @@
 TEXT_ITEM = 1
 OK_ITEM = 2
 CANCEL_ITEM = 3
-REVERT_ITEM = 4
-DIR_ITEM = 5
+DIR_ITEM = 4
+TITLE_ITEM = 5
 
 # Resource IDs in the preferences file
 PATH_STRINGS_ID = 128
 DIRECTORY_ID = 128
+OPTIONS_ID = 128
 
+# Override IDs (in the applet)
+OVERRIDE_PATH_STRINGS_ID = 129
+OVERRIDE_DIRECTORY_ID = 129
+OVERRIDE_OPTIONS_ID = 129
+
+READ = 1
 WRITE = 2
 smAllScripts = -3
 kOnSystemDisk = 0x8000
@@ -61,7 +68,7 @@
 		n = ModalDialog(None)
 		if n == 1: break
 		
-def interact(list, pythondir):
+def interact(list, pythondir, title):
 	"""Let the user interact with the dialog"""
 	opythondir = pythondir
 	try:
@@ -70,16 +77,20 @@
 	except os.error:
 		pass
 	d = GetNewDialog(DIALOG_ID, -1)
-	tp, h, rect = d.GetDialogItem(1)
+	tp, h, rect = d.GetDialogItem(TITLE_ITEM)
+	SetDialogItemText(h, title)
+	tp, h, rect = d.GetDialogItem(TEXT_ITEM)
 	SetDialogItemText(h, string.joinfields(list, '\r'))
+##	d.SetDialogDefaultItem(OK_ITEM)
+	d.SetDialogCancelItem(CANCEL_ITEM)
 	while 1:
 		n = ModalDialog(None)
 		if n == OK_ITEM:
 			break
 		if n == CANCEL_ITEM:
 			return None
-		if n == REVERT_ITEM:
-			return [], pythondir
+##		if n == REVERT_ITEM:
+##			return [], pythondir
 		if n == DIR_ITEM:
 			fss, ok = macfs.GetDirectory('Select python home folder:')
 			if ok:
@@ -91,42 +102,62 @@
 			rv.append(i)
 	return rv, pythondir
 	
-def main():
+def getprefpath(id):
+	# Load the path and directory resources
 	try:
-		h = OpenResFile('EditPythonPrefs.rsrc')
-	except Res.Error:
-		pass	# Assume we already have acces to our own resource
+		sr = GetResource('STR#', id)
+	except (MacOS.Error, Res.Error):
+		return None, None
+	d = sr.data
+	l = restolist(d)
+	return l, sr
+
+def getprefdir(id):
+	try:
+		dr = GetResource('alis', id)
+		fss, fss_changed = macfs.RawAlias(dr.data).Resolve()
+	except (MacOS.Error, Res.Error):
+		return None, None, 1
+	return fss, dr, fss_changed
 	
+def openpreffile(rw):
 	# Find the preferences folder and our prefs file, create if needed.	
 	vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0)
 	preff_fss = macfs.FSSpec((vrefnum, dirid, 'Python Preferences'))
 	try:
-		preff_handle = FSpOpenResFile(preff_fss, WRITE)
+		preff_handle = FSpOpenResFile(preff_fss, rw)
 	except Res.Error:
 		# Create it
 		message('No preferences file, creating one...')
 		FSpCreateResFile(preff_fss, 'Pyth', 'pref', smAllScripts)
-		preff_handle = FSpOpenResFile(preff_fss, WRITE)
-		
-	# Load the path and directory resources
+		preff_handle = FSpOpenResFile(preff_fss, rw)
+	return preff_handle
+	
+def openapplet(name):
+	fss = macfs.FSSpec(name)
 	try:
-		sr = GetResource('STR#', PATH_STRINGS_ID)
-	except (MacOS.Error, Res.Error):
+		app_handle = FSpOpenResFile(fss, WRITE)
+	except Res.Error:
+		message('File does not have a resource fork.')
+		sys.exit(0)
+	return app_handle
+		
+	
+def edit_preferences():
+	preff_handle = openpreffile(WRITE)
+	
+	l, sr = getprefpath(PATH_STRINGS_ID)
+	if l == None:	
 		message('Cannot find any sys.path resource! (Old python?)')
 		sys.exit(0)
-	d = sr.data
-	l = restolist(d)
-	
-	try:
-		dr = GetResource('alis', DIRECTORY_ID)
-		fss, fss_changed = macfs.RawAlias(dr.data).Resolve()
-	except (MacOS.Error, Res.Error):
-		dr = None
+		
+	fss, dr, fss_changed = getprefdir(DIRECTORY_ID)
+	if fss == None:
 		fss = macfs.FSSpec(os.getcwd())
 		fss_changed = 1
 	
 	# Let the user play away
-	result = interact(l, fss)
+	result = interact(l, fss, 'System-wide preferences')
 	
 	# See what we have to update, and how
 	if result == None:
@@ -158,6 +189,82 @@
 				sr.AddResource('STR#', PATH_STRINGS_ID, '')
 				
 	CloseResFile(preff_handle)
+	
+def edit_applet(name):
+	pref_handle = openpreffile(READ)
+	app_handle = openapplet(name)
+	
+	notfound = ''
+	l, sr = getprefpath(OVERRIDE_PATH_STRINGS_ID)
+	if l == None:
+		notfound = 'path'
+		
+		l, dummy = getprefpath(PATH_STRINGS_ID)
+		if l == None:	
+			message('Cannot find any sys.path resource! (Old python?)')
+			sys.exit(0)
+		
+	fss, dr, fss_changed = getprefdir(OVERRIDE_DIRECTORY_ID)
+	if fss == None:
+		if notfound:
+			notfound = notfound + ' and ' + 'directory'
+		else:
+			notfound = 'directory'
+		fss, dummy, dummy2 = getprefdir(DIRECTORY_ID)
+		if fss == None:
+			fss = macfs.FSSpec(os.getcwd())
+			fss_changed = 1
+	
+	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, name)
+	
+	# See what we have to update, and how
+	if result == None:
+		sys.exit(0)
+		
+	pathlist, nfss = result
+	if nfss != fss:
+		fss_changed = 1
+		
+	if fss_changed or pathlist != l:
+		if fss_changed:
+			alias = nfss.NewAlias()
+			if dr:
+				dr.data = alias.data
+				dr.ChangedResource()
+			else:
+				dr = Resource(alias.data)
+				dr.AddResource('alis', OVERRIDE_DIRECTORY_ID, '')
+				
+		if pathlist != l:
+			if pathlist == []:
+				if sr.HomeResFile() == app_handle:
+					sr.RemoveResource()
+			elif sr and sr.HomeResFile() == app_handle:
+				sr.data = listtores(pathlist)
+				sr.ChangedResource()
+			else:
+				sr = Resource(listtores(pathlist))
+				sr.AddResource('STR#', OVERRIDE_PATH_STRINGS_ID, '')
+				
+	CloseResFile(app_handle)
+
+def main():
+	try:
+		h = OpenResFile('EditPythonPrefs.rsrc')
+	except Res.Error:
+		pass	# Assume we already have acces to our own resource
+	
+	if len(sys.argv) <= 1:
+		edit_preferences()
+	else:
+		for appl in sys.argv[1:]:
+			edit_applet(appl)
+		
 
 if __name__ == '__main__':
 	print # Stupid, to init toolboxes...