summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven M. Gava <elguavas@python.net>2002-03-02 07:16:21 (GMT)
committerSteven M. Gava <elguavas@python.net>2002-03-02 07:16:21 (GMT)
commitb77d343bc846c2049a4cffb1dfd65eb49d1728b4 (patch)
treea51c275c42fbca32c9bf3d43d4dfe8c66c3abe86
parent03b18834c33dff7b231a22e5da28c8a9f250d1d3 (diff)
downloadcpython-b77d343bc846c2049a4cffb1dfd65eb49d1728b4.zip
cpython-b77d343bc846c2049a4cffb1dfd65eb49d1728b4.tar.gz
cpython-b77d343bc846c2049a4cffb1dfd65eb49d1728b4.tar.bz2
First work on making config changes dynamic,
dynamic theme changes
-rw-r--r--Lib/idlelib/ColorDelegator.py29
-rw-r--r--Lib/idlelib/EditorWindow.py10
-rw-r--r--Lib/idlelib/PyShell.py28
-rw-r--r--Lib/idlelib/configDialog.py15
-rw-r--r--Lib/idlelib/configHandler.py10
5 files changed, 56 insertions, 36 deletions
diff --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py
index a4aefb2..ab84060 100644
--- a/Lib/idlelib/ColorDelegator.py
+++ b/Lib/idlelib/ColorDelegator.py
@@ -37,6 +37,7 @@ class ColorDelegator(Delegator):
self.prog = prog
self.idprog = idprog
self.asprog = asprog
+ self.LoadTagDefs()
def setdelegate(self, delegate):
if self.delegate is not None:
@@ -52,21 +53,21 @@ class ColorDelegator(Delegator):
if cnf:
apply(self.tag_configure, (tag,), cnf)
self.tag_raise('sel')
-
- theme = idleConf.GetOption('main','Theme','name')
-
- tagdefs = {
- "COMMENT": idleConf.GetHighlight(theme, "comment"),
- "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
- "STRING": idleConf.GetHighlight(theme, "string"),
- "DEFINITION": idleConf.GetHighlight(theme, "definition"),
- "SYNC": {'background':None,'foreground':None},
- "TODO": {'background':None,'foreground':None},
- "BREAK": idleConf.GetHighlight(theme, "break"),
- # The following is used by ReplaceDialog:
- "hit": idleConf.GetHighlight(theme, "hit"),
- }
+ def LoadTagDefs(self):
+ theme = idleConf.GetOption('main','Theme','name')
+ self.tagdefs = {
+ "COMMENT": idleConf.GetHighlight(theme, "comment"),
+ "KEYWORD": idleConf.GetHighlight(theme, "keyword"),
+ "STRING": idleConf.GetHighlight(theme, "string"),
+ "DEFINITION": idleConf.GetHighlight(theme, "definition"),
+ "SYNC": {'background':None,'foreground':None},
+ "TODO": {'background':None,'foreground':None},
+ "BREAK": idleConf.GetHighlight(theme, "break"),
+ # The following is used by ReplaceDialog:
+ "hit": idleConf.GetHighlight(theme, "hit"),
+ }
+
if DEBUG: print 'tagdefs',tagdefs
def insert(self, index, chars, tags=None):
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index 81d9470..8a2109d 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -102,6 +102,9 @@ class EditorWindow:
self.vars = flist.vars
self.menubar = Menu(root)
self.top = top = self.Toplevel(root, menu=self.menubar)
+ #self.top.instanceDict makes flist.inversedict avalable to
+ #configDialog.py so it can access all EditorWindow instaces
+ self.top.instanceDict=flist.inversedict
self.vbar = vbar = Scrollbar(top, name='vbar')
self.text_frame = text_frame = Frame(top)
self.text = text = Text(text_frame, name='text', padx=5, wrap=None,
@@ -467,6 +470,13 @@ class EditorWindow:
self.per.removefilter(self.color)
self.color = None
self.per.insertfilter(self.undo)
+
+ def ResetColorizer(self):
+ #this function is called from configDialog.py
+ #to update the colour theme if it is changed
+ if self.color:
+ self.color = self.ColorDelegator()
+ self.per.insertfilter(self.color)
def saved_change_hook(self):
short = self.short_title()
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 9333ea9..fa4bb3d 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -134,23 +134,27 @@ class PyShellFileList(FileList):
class ModifiedColorDelegator(ColorDelegator):
# Colorizer for the shell window itself
+
+ def __init__(self):
+ ColorDelegator.__init__(self)
+ self.LoadTagDefs()
def recolorize_main(self):
self.tag_remove("TODO", "1.0", "iomark")
self.tag_add("SYNC", "1.0", "iomark")
ColorDelegator.recolorize_main(self)
-
- tagdefs = ColorDelegator.tagdefs.copy()
- theme = idleConf.GetOption('main','Theme','name')
-
- tagdefs.update({
- "stdin": {'background':None,'foreground':None},
- "stdout": idleConf.GetHighlight(theme, "stdout"),
- "stderr": idleConf.GetHighlight(theme, "stderr"),
- "console": idleConf.GetHighlight(theme, "console"),
- "ERROR": idleConf.GetHighlight(theme, "error"),
- None: idleConf.GetHighlight(theme, "normal"),
- })
+
+ def LoadTagDefs(self):
+ ColorDelegator.LoadTagDefs(self)
+ theme = idleConf.GetOption('main','Theme','name')
+ self.tagdefs.update({
+ "stdin": {'background':None,'foreground':None},
+ "stdout": idleConf.GetHighlight(theme, "stdout"),
+ "stderr": idleConf.GetHighlight(theme, "stderr"),
+ "console": idleConf.GetHighlight(theme, "console"),
+ "ERROR": idleConf.GetHighlight(theme, "error"),
+ None: idleConf.GetHighlight(theme, "normal"),
+ })
class ModifiedUndoDelegator(UndoDelegator):
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index aaec2f7..6b9a146 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -23,8 +23,6 @@ class ConfigDialog(Toplevel):
#Theme Elements. Each theme element key is it's display name.
#The first value of the tuple is the sample area tag name.
#The second value is the display name list sort index.
- #The third value indicates whether the element can have a foreground
- #or background colour or both.
self.themeElements={'Normal Text':('normal','00'),
'Python Keywords':('keyword','01'),
'Python Definitions':('definition','02'),
@@ -180,8 +178,8 @@ class ConfigDialog(Toplevel):
frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
#frameCustom
self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,
- font=('courier',12,''),cursor='hand2',width=10,height=10,
- takefocus=FALSE,highlightthickness=0)
+ font=('courier',12,''),cursor='hand2',width=21,height=10,
+ takefocus=FALSE,highlightthickness=0,wrap=NONE)
text=self.textHighlightSample
text.bind('<Double-Button-1>',lambda e: 'break')
text.bind('<B1-Motion>',lambda e: 'break')
@@ -514,7 +512,7 @@ class ConfigDialog(Toplevel):
self.AddChangedItem('main','General','editor-on-startup',value)
def ResetChangedItems(self):
- #changedItems. When any config item is changed in this dialog, an entry
+ #When any config item is changed in this dialog, an entry
#should be made in the relevant section (config type) of this
#dictionary. The key should be the config file section name and the
#value a dictionary, whose key:value pairs are item=value pairs for
@@ -1086,14 +1084,15 @@ class ConfigDialog(Toplevel):
def ActivateConfigChanges(self):
#things that need to be done to make
#applied config changes dynamic:
- #
#update editor/shell font and repaint
#dynamically update indentation setttings
#update theme and repaint
#update keybindings and re-bind
#update user help sources menu
- pass
-
+ winInstances=self.parent.instanceDict.keys()
+ for instance in winInstances:
+ instance.ResetColorizer()
+
def Cancel(self):
self.destroy()
diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py
index 9db7120..82bf6d2 100644
--- a/Lib/idlelib/configHandler.py
+++ b/Lib/idlelib/configHandler.py
@@ -110,6 +110,13 @@ class IdleUserConfParser(IdleConfParser):
self.set(section,option,value)
return 1
+ def RemoveFile(self):
+ """
+ Removes the user config file from disk if it exists.
+ """
+ if os.path.exists(self.file):
+ os.remove(self.file)
+
def Save(self):
"""
If config isn't empty, write file to disk. If config is empty,
@@ -119,8 +126,7 @@ class IdleUserConfParser(IdleConfParser):
cfgFile=open(self.file,'w')
self.write(cfgFile)
else:
- if os.path.exists(self.file):
- os.remove(self.file)
+ self.RemoveFile()
class IdleConf:
"""