mirror of
https://github.com/python/cpython.git
synced 2025-10-14 10:53:40 +00:00
handle user theme and key set deletion
This commit is contained in:
parent
6354386d65
commit
4974575609
3 changed files with 87 additions and 11 deletions
|
@ -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):
|
||||||
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):
|
||||||
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,8 +458,9 @@ class ConfigDialog(Toplevel):
|
||||||
|
|
||||||
def VarChanged_customTheme(self,*params):
|
def VarChanged_customTheme(self,*params):
|
||||||
value=self.customTheme.get()
|
value=self.customTheme.get()
|
||||||
self.AddChangedItem('main','Theme','name',value)
|
if value != '- no custom themes -':
|
||||||
self.PaintThemeSample()
|
self.AddChangedItem('main','Theme','name',value)
|
||||||
|
self.PaintThemeSample()
|
||||||
|
|
||||||
def VarChanged_themeIsBuiltin(self,*params):
|
def VarChanged_themeIsBuiltin(self,*params):
|
||||||
value=self.themeIsBuiltin.get()
|
value=self.themeIsBuiltin.get()
|
||||||
|
@ -486,8 +489,9 @@ class ConfigDialog(Toplevel):
|
||||||
|
|
||||||
def VarChanged_customKeys(self,*params):
|
def VarChanged_customKeys(self,*params):
|
||||||
value=self.customKeys.get()
|
value=self.customKeys.get()
|
||||||
self.AddChangedItem('main','Keys','name',value)
|
if value != '- no custom keys -':
|
||||||
self.LoadKeysList(value)
|
self.AddChangedItem('main','Keys','name',value)
|
||||||
|
self.LoadKeysList(value)
|
||||||
|
|
||||||
def VarChanged_keysAreBuiltin(self,*params):
|
def VarChanged_keysAreBuiltin(self,*params):
|
||||||
value=self.keysAreBuiltin.get()
|
value=self.keysAreBuiltin.get()
|
||||||
|
@ -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):
|
||||||
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):
|
||||||
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):
|
||||||
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):
|
||||||
|
|
||||||
def Apply(self):
|
def Apply(self):
|
||||||
self.SaveAllChangedConfigs()
|
self.SaveAllChangedConfigs()
|
||||||
|
self.ActivateConfigChanges()
|
||||||
|
|
||||||
def Help(self):
|
def Help(self):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -518,10 +518,16 @@ 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):
|
||||||
"""
|
"""
|
||||||
Returns a list of tuples containing the details of any additional
|
Returns a list of tuples containing the details of any additional
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue