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

handle user theme and key set deletion

parent 6354386d
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
[IDLE Classic Windows] [IDLE Classic Windows]
copy=<Control-Key-c> copy=<Control-Key-c>
cut=<Control-Key-x> cut=<Control-Key-x>
paste=<Control-Key-v> paste=<Control-Key-m>
beginning-of-line= <Key-Home> beginning-of-line= <Key-Home>
center-insert=<Control-Key-l> center-insert=<Control-Key-l>
close-all-windows=<Control-Key-q> close-all-windows=<Control-Key-q>
......
...@@ -226,7 +226,8 @@ class ConfigDialog(Toplevel): ...@@ -226,7 +226,8 @@ class ConfigDialog(Toplevel):
self.builtinTheme,None,command=None) self.builtinTheme,None,command=None)
self.optMenuThemeCustom=DynOptionMenu(frameTheme, self.optMenuThemeCustom=DynOptionMenu(frameTheme,
self.customTheme,None,command=None) self.customTheme,None,command=None)
self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme') self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme',
command=self.DeleteCustomTheme)
##widget packing ##widget packing
#body #body
frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH) frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
...@@ -293,7 +294,8 @@ class ConfigDialog(Toplevel): ...@@ -293,7 +294,8 @@ class ConfigDialog(Toplevel):
self.builtinKeys,None,command=None) self.builtinKeys,None,command=None)
self.optMenuKeysCustom=DynOptionMenu(frameKeySets, self.optMenuKeysCustom=DynOptionMenu(frameKeySets,
self.customKeys,None,command=None) self.customKeys,None,command=None)
self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set') self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set',
command=self.DeleteCustomKeys)
##widget packing ##widget packing
#body #body
frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH) frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
...@@ -456,6 +458,7 @@ class ConfigDialog(Toplevel): ...@@ -456,6 +458,7 @@ class ConfigDialog(Toplevel):
def VarChanged_customTheme(self,*params): def VarChanged_customTheme(self,*params):
value=self.customTheme.get() value=self.customTheme.get()
if value != '- no custom themes -':
self.AddChangedItem('main','Theme','name',value) self.AddChangedItem('main','Theme','name',value)
self.PaintThemeSample() self.PaintThemeSample()
...@@ -486,6 +489,7 @@ class ConfigDialog(Toplevel): ...@@ -486,6 +489,7 @@ class ConfigDialog(Toplevel):
def VarChanged_customKeys(self,*params): def VarChanged_customKeys(self,*params):
value=self.customKeys.get() value=self.customKeys.get()
if value != '- no custom keys -':
self.AddChangedItem('main','Keys','name',value) self.AddChangedItem('main','Keys','name',value)
self.LoadKeysList(value) self.LoadKeysList(value)
...@@ -594,7 +598,8 @@ class ConfigDialog(Toplevel): ...@@ -594,7 +598,8 @@ class ConfigDialog(Toplevel):
self.listBindings.select_anchor(listIndex) self.listBindings.select_anchor(listIndex)
def GetNewKeysName(self,message): def GetNewKeysName(self,message):
usedNames=idleConf.GetSectionList('user','keys') usedNames=(idleConf.GetSectionList('user','keys')+
idleConf.GetSectionList('default','keys'))
newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set', newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set',
message,usedNames).result message,usedNames).result
return newKeySet return newKeySet
...@@ -657,6 +662,58 @@ class ConfigDialog(Toplevel): ...@@ -657,6 +662,58 @@ class ConfigDialog(Toplevel):
self.listBindings.select_set(listIndex) self.listBindings.select_set(listIndex)
self.listBindings.select_anchor(listIndex) self.listBindings.select_anchor(listIndex)
def DeleteCustomKeys(self):
keySetName=self.customKeys.get()
if not tkMessageBox.askyesno('Delete Key Set','Are you sure you wish '+
'to delete the key set '+`keySetName`+' ?'):
return
#remove key set from config
idleConf.userCfg['keys'].remove_section(keySetName)
if self.changedItems['keys'].has_key(keySetName):
del(self.changedItems['keys'][keySetName])
#write changes
idleConf.userCfg['keys'].Save()
#reload user key set list
itemList=idleConf.GetSectionList('user','keys')
itemList.sort()
if not itemList:
self.radioKeysCustom.config(state=DISABLED)
self.optMenuKeysCustom.SetMenu(itemList,'- no custom keys -')
else:
self.optMenuKeysCustom.SetMenu(itemList,itemList[0])
#revert to default key set
self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys','default'))
self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys','name'))
#user can't back out of these changes, they must be applied now
self.Apply()
self.SetKeysType()
def DeleteCustomTheme(self):
themeName=self.customTheme.get()
if not tkMessageBox.askyesno('Delete Theme','Are you sure you wish '+
'to delete the theme '+`themeName`+' ?'):
return
#remove theme from config
idleConf.userCfg['highlight'].remove_section(themeName)
if self.changedItems['highlight'].has_key(themeName):
del(self.changedItems['highlight'][themeName])
#write changes
idleConf.userCfg['highlight'].Save()
#reload user theme list
itemList=idleConf.GetSectionList('user','highlight')
itemList.sort()
if not itemList:
self.radioThemeCustom.config(state=DISABLED)
self.optMenuThemeCustom.SetMenu(itemList,'- no custom themes -')
else:
self.optMenuThemeCustom.SetMenu(itemList,itemList[0])
#revert to default theme
self.themeIsBuiltin.set(idleConf.defaultCfg['main'].Get('Theme','default'))
self.builtinTheme.set(idleConf.defaultCfg['main'].Get('Theme','name'))
#user can't back out of these changes, they must be applied now
self.Apply()
self.SetThemeType()
def GetColour(self): def GetColour(self):
target=self.highlightTarget.get() target=self.highlightTarget.get()
prevColour=self.frameColourSet.cget('bg') prevColour=self.frameColourSet.cget('bg')
...@@ -689,7 +746,8 @@ class ConfigDialog(Toplevel): ...@@ -689,7 +746,8 @@ class ConfigDialog(Toplevel):
self.AddChangedItem('highlight',theme,themeElement,newColour) self.AddChangedItem('highlight',theme,themeElement,newColour)
def GetNewThemeName(self,message): def GetNewThemeName(self,message):
usedNames=idleConf.GetSectionList('user','highlight') usedNames=(idleConf.GetSectionList('user','highlight')+
idleConf.GetSectionList('default','highlight'))
newTheme=GetCfgSectionNameDialog(self,'New Custom Theme', newTheme=GetCfgSectionNameDialog(self,'New Custom Theme',
message,usedNames).result message,usedNames).result
return newTheme return newTheme
...@@ -1025,6 +1083,17 @@ class ConfigDialog(Toplevel): ...@@ -1025,6 +1083,17 @@ class ConfigDialog(Toplevel):
idleConf.userCfg[configType].Save() idleConf.userCfg[configType].Save()
self.ResetChangedItems() #clear the changed items dict self.ResetChangedItems() #clear the changed items dict
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
def Cancel(self): def Cancel(self):
self.destroy() self.destroy()
...@@ -1034,6 +1103,7 @@ class ConfigDialog(Toplevel): ...@@ -1034,6 +1103,7 @@ class ConfigDialog(Toplevel):
def Apply(self): def Apply(self):
self.SaveAllChangedConfigs() self.SaveAllChangedConfigs()
self.ActivateConfigChanges()
def Help(self): def Help(self):
pass pass
......
...@@ -518,8 +518,14 @@ class IdleConf: ...@@ -518,8 +518,14 @@ class IdleConf:
if keySetName: if keySetName:
for event in keyBindings.keys(): for event in keyBindings.keys():
binding=self.GetKeyBinding(keySetName,event) binding=self.GetKeyBinding(keySetName,event)
if binding: #otherwise will keep default if binding:
keyBindings[event]=binding keyBindings[event]=binding
else: #we are going to return a default, print warning
warning=('\n Warning: configHandler.py - IdleConf.GetCoreKeys'+
' -\n problem retrieving key binding for event '+
`event`+'\n from key set '+`keySetName`+'.\n'+
' returning default value: '+`keyBindings[event]`+'\n')
sys.stderr.write(warning)
return keyBindings return keyBindings
def GetExtraHelpSourceList(self,configSet): def GetExtraHelpSourceList(self,configSet):
......
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