Commit b77d343b authored by Steven M. Gava's avatar Steven M. Gava

First work on making config changes dynamic,

dynamic theme changes
parent 03b18834
...@@ -37,6 +37,7 @@ class ColorDelegator(Delegator): ...@@ -37,6 +37,7 @@ class ColorDelegator(Delegator):
self.prog = prog self.prog = prog
self.idprog = idprog self.idprog = idprog
self.asprog = asprog self.asprog = asprog
self.LoadTagDefs()
def setdelegate(self, delegate): def setdelegate(self, delegate):
if self.delegate is not None: if self.delegate is not None:
...@@ -52,21 +53,21 @@ class ColorDelegator(Delegator): ...@@ -52,21 +53,21 @@ class ColorDelegator(Delegator):
if cnf: if cnf:
apply(self.tag_configure, (tag,), cnf) apply(self.tag_configure, (tag,), cnf)
self.tag_raise('sel') 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 if DEBUG: print 'tagdefs',tagdefs
def insert(self, index, chars, tags=None): def insert(self, index, chars, tags=None):
......
...@@ -102,6 +102,9 @@ class EditorWindow: ...@@ -102,6 +102,9 @@ class EditorWindow:
self.vars = flist.vars self.vars = flist.vars
self.menubar = Menu(root) self.menubar = Menu(root)
self.top = top = self.Toplevel(root, menu=self.menubar) 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.vbar = vbar = Scrollbar(top, name='vbar')
self.text_frame = text_frame = Frame(top) self.text_frame = text_frame = Frame(top)
self.text = text = Text(text_frame, name='text', padx=5, wrap=None, self.text = text = Text(text_frame, name='text', padx=5, wrap=None,
...@@ -467,6 +470,13 @@ class EditorWindow: ...@@ -467,6 +470,13 @@ class EditorWindow:
self.per.removefilter(self.color) self.per.removefilter(self.color)
self.color = None self.color = None
self.per.insertfilter(self.undo) 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): def saved_change_hook(self):
short = self.short_title() short = self.short_title()
......
...@@ -134,23 +134,27 @@ class PyShellFileList(FileList): ...@@ -134,23 +134,27 @@ class PyShellFileList(FileList):
class ModifiedColorDelegator(ColorDelegator): class ModifiedColorDelegator(ColorDelegator):
# Colorizer for the shell window itself # Colorizer for the shell window itself
def __init__(self):
ColorDelegator.__init__(self)
self.LoadTagDefs()
def recolorize_main(self): def recolorize_main(self):
self.tag_remove("TODO", "1.0", "iomark") self.tag_remove("TODO", "1.0", "iomark")
self.tag_add("SYNC", "1.0", "iomark") self.tag_add("SYNC", "1.0", "iomark")
ColorDelegator.recolorize_main(self) ColorDelegator.recolorize_main(self)
tagdefs = ColorDelegator.tagdefs.copy() def LoadTagDefs(self):
theme = idleConf.GetOption('main','Theme','name') ColorDelegator.LoadTagDefs(self)
theme = idleConf.GetOption('main','Theme','name')
tagdefs.update({ self.tagdefs.update({
"stdin": {'background':None,'foreground':None}, "stdin": {'background':None,'foreground':None},
"stdout": idleConf.GetHighlight(theme, "stdout"), "stdout": idleConf.GetHighlight(theme, "stdout"),
"stderr": idleConf.GetHighlight(theme, "stderr"), "stderr": idleConf.GetHighlight(theme, "stderr"),
"console": idleConf.GetHighlight(theme, "console"), "console": idleConf.GetHighlight(theme, "console"),
"ERROR": idleConf.GetHighlight(theme, "error"), "ERROR": idleConf.GetHighlight(theme, "error"),
None: idleConf.GetHighlight(theme, "normal"), None: idleConf.GetHighlight(theme, "normal"),
}) })
class ModifiedUndoDelegator(UndoDelegator): class ModifiedUndoDelegator(UndoDelegator):
......
...@@ -23,8 +23,6 @@ class ConfigDialog(Toplevel): ...@@ -23,8 +23,6 @@ class ConfigDialog(Toplevel):
#Theme Elements. Each theme element key is it's display name. #Theme Elements. Each theme element key is it's display name.
#The first value of the tuple is the sample area tag name. #The first value of the tuple is the sample area tag name.
#The second value is the display name list sort index. #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'), self.themeElements={'Normal Text':('normal','00'),
'Python Keywords':('keyword','01'), 'Python Keywords':('keyword','01'),
'Python Definitions':('definition','02'), 'Python Definitions':('definition','02'),
...@@ -180,8 +178,8 @@ class ConfigDialog(Toplevel): ...@@ -180,8 +178,8 @@ class ConfigDialog(Toplevel):
frameTheme=Frame(frame,borderwidth=2,relief=GROOVE) frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
#frameCustom #frameCustom
self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1, self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,
font=('courier',12,''),cursor='hand2',width=10,height=10, font=('courier',12,''),cursor='hand2',width=21,height=10,
takefocus=FALSE,highlightthickness=0) takefocus=FALSE,highlightthickness=0,wrap=NONE)
text=self.textHighlightSample text=self.textHighlightSample
text.bind('<Double-Button-1>',lambda e: 'break') text.bind('<Double-Button-1>',lambda e: 'break')
text.bind('<B1-Motion>',lambda e: 'break') text.bind('<B1-Motion>',lambda e: 'break')
...@@ -514,7 +512,7 @@ class ConfigDialog(Toplevel): ...@@ -514,7 +512,7 @@ class ConfigDialog(Toplevel):
self.AddChangedItem('main','General','editor-on-startup',value) self.AddChangedItem('main','General','editor-on-startup',value)
def ResetChangedItems(self): 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 #should be made in the relevant section (config type) of this
#dictionary. The key should be the config file section name and the #dictionary. The key should be the config file section name and the
#value a dictionary, whose key:value pairs are item=value pairs for #value a dictionary, whose key:value pairs are item=value pairs for
...@@ -1086,14 +1084,15 @@ class ConfigDialog(Toplevel): ...@@ -1086,14 +1084,15 @@ class ConfigDialog(Toplevel):
def ActivateConfigChanges(self): def ActivateConfigChanges(self):
#things that need to be done to make #things that need to be done to make
#applied config changes dynamic: #applied config changes dynamic:
#
#update editor/shell font and repaint #update editor/shell font and repaint
#dynamically update indentation setttings #dynamically update indentation setttings
#update theme and repaint #update theme and repaint
#update keybindings and re-bind #update keybindings and re-bind
#update user help sources menu #update user help sources menu
pass winInstances=self.parent.instanceDict.keys()
for instance in winInstances:
instance.ResetColorizer()
def Cancel(self): def Cancel(self):
self.destroy() self.destroy()
......
...@@ -110,6 +110,13 @@ class IdleUserConfParser(IdleConfParser): ...@@ -110,6 +110,13 @@ class IdleUserConfParser(IdleConfParser):
self.set(section,option,value) self.set(section,option,value)
return 1 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): def Save(self):
""" """
If config isn't empty, write file to disk. If config is empty, If config isn't empty, write file to disk. If config is empty,
...@@ -119,8 +126,7 @@ class IdleUserConfParser(IdleConfParser): ...@@ -119,8 +126,7 @@ class IdleUserConfParser(IdleConfParser):
cfgFile=open(self.file,'w') cfgFile=open(self.file,'w')
self.write(cfgFile) self.write(cfgFile)
else: else:
if os.path.exists(self.file): self.RemoveFile()
os.remove(self.file)
class IdleConf: class IdleConf:
""" """
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment