Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4974575

Browse files
author
Steven M. Gava
committed
handle user theme and key set deletion
1 parent 6354386 commit 4974575

3 files changed

Lines changed: 87 additions & 11 deletions

File tree

Lib/idlelib/config-keys.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
[IDLE Classic Windows]
1111
copy=<Control-Key-c>
1212
cut=<Control-Key-x>
13-
paste=<Control-Key-v>
13+
paste=<Control-Key-m>
1414
beginning-of-line= <Key-Home>
1515
center-insert=<Control-Key-l>
1616
close-all-windows=<Control-Key-q>

Lib/idlelib/configDialog.py

Lines changed: 78 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ def CreatePageHighlight(self):
226226
self.builtinTheme,None,command=None)
227227
self.optMenuThemeCustom=DynOptionMenu(frameTheme,
228228
self.customTheme,None,command=None)
229-
self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
229+
self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme',
230+
command=self.DeleteCustomTheme)
230231
##widget packing
231232
#body
232233
frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
@@ -293,7 +294,8 @@ def CreatePageKeys(self):
293294
self.builtinKeys,None,command=None)
294295
self.optMenuKeysCustom=DynOptionMenu(frameKeySets,
295296
self.customKeys,None,command=None)
296-
self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
297+
self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set',
298+
command=self.DeleteCustomKeys)
297299
##widget packing
298300
#body
299301
frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
@@ -456,8 +458,9 @@ def VarChanged_builtinTheme(self,*params):
456458

457459
def VarChanged_customTheme(self,*params):
458460
value=self.customTheme.get()
459-
self.AddChangedItem('main','Theme','name',value)
460-
self.PaintThemeSample()
461+
if value != '- no custom themes -':
462+
self.AddChangedItem('main','Theme','name',value)
463+
self.PaintThemeSample()
461464

462465
def VarChanged_themeIsBuiltin(self,*params):
463466
value=self.themeIsBuiltin.get()
@@ -486,8 +489,9 @@ def VarChanged_builtinKeys(self,*params):
486489

487490
def VarChanged_customKeys(self,*params):
488491
value=self.customKeys.get()
489-
self.AddChangedItem('main','Keys','name',value)
490-
self.LoadKeysList(value)
492+
if value != '- no custom keys -':
493+
self.AddChangedItem('main','Keys','name',value)
494+
self.LoadKeysList(value)
491495

492496
def VarChanged_keysAreBuiltin(self,*params):
493497
value=self.keysAreBuiltin.get()
@@ -594,7 +598,8 @@ def GetNewKeys(self):
594598
self.listBindings.select_anchor(listIndex)
595599

596600
def GetNewKeysName(self,message):
597-
usedNames=idleConf.GetSectionList('user','keys')
601+
usedNames=(idleConf.GetSectionList('user','keys')+
602+
idleConf.GetSectionList('default','keys'))
598603
newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set',
599604
message,usedNames).result
600605
return newKeySet
@@ -657,6 +662,58 @@ def LoadKeysList(self,keySetName):
657662
self.listBindings.select_set(listIndex)
658663
self.listBindings.select_anchor(listIndex)
659664

665+
def DeleteCustomKeys(self):
666+
keySetName=self.customKeys.get()
667+
if not tkMessageBox.askyesno('Delete Key Set','Are you sure you wish '+
668+
'to delete the key set '+`keySetName`+' ?'):
669+
return
670+
#remove key set from config
671+
idleConf.userCfg['keys'].remove_section(keySetName)
672+
if self.changedItems['keys'].has_key(keySetName):
673+
del(self.changedItems['keys'][keySetName])
674+
#write changes
675+
idleConf.userCfg['keys'].Save()
676+
#reload user key set list
677+
itemList=idleConf.GetSectionList('user','keys')
678+
itemList.sort()
679+
if not itemList:
680+
self.radioKeysCustom.config(state=DISABLED)
681+
self.optMenuKeysCustom.SetMenu(itemList,'- no custom keys -')
682+
else:
683+
self.optMenuKeysCustom.SetMenu(itemList,itemList[0])
684+
#revert to default key set
685+
self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys','default'))
686+
self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys','name'))
687+
#user can't back out of these changes, they must be applied now
688+
self.Apply()
689+
self.SetKeysType()
690+
691+
def DeleteCustomTheme(self):
692+
themeName=self.customTheme.get()
693+
if not tkMessageBox.askyesno('Delete Theme','Are you sure you wish '+
694+
'to delete the theme '+`themeName`+' ?'):
695+
return
696+
#remove theme from config
697+
idleConf.userCfg['highlight'].remove_section(themeName)
698+
if self.changedItems['highlight'].has_key(themeName):
699+
del(self.changedItems['highlight'][themeName])
700+
#write changes
701+
idleConf.userCfg['highlight'].Save()
702+
#reload user theme list
703+
itemList=idleConf.GetSectionList('user','highlight')
704+
itemList.sort()
705+
if not itemList:
706+
self.radioThemeCustom.config(state=DISABLED)
707+
self.optMenuThemeCustom.SetMenu(itemList,'- no custom themes -')
708+
else:
709+
self.optMenuThemeCustom.SetMenu(itemList,itemList[0])
710+
#revert to default theme
711+
self.themeIsBuiltin.set(idleConf.defaultCfg['main'].Get('Theme','default'))
712+
self.builtinTheme.set(idleConf.defaultCfg['main'].Get('Theme','name'))
713+
#user can't back out of these changes, they must be applied now
714+
self.Apply()
715+
self.SetThemeType()
716+
660717
def GetColour(self):
661718
target=self.highlightTarget.get()
662719
prevColour=self.frameColourSet.cget('bg')
@@ -689,7 +746,8 @@ def OnNewColourSet(self):
689746
self.AddChangedItem('highlight',theme,themeElement,newColour)
690747

691748
def GetNewThemeName(self,message):
692-
usedNames=idleConf.GetSectionList('user','highlight')
749+
usedNames=(idleConf.GetSectionList('user','highlight')+
750+
idleConf.GetSectionList('default','highlight'))
693751
newTheme=GetCfgSectionNameDialog(self,'New Custom Theme',
694752
message,usedNames).result
695753
return newTheme
@@ -1025,6 +1083,17 @@ def SaveAllChangedConfigs(self):
10251083
idleConf.userCfg[configType].Save()
10261084
self.ResetChangedItems() #clear the changed items dict
10271085

1086+
def ActivateConfigChanges(self):
1087+
#things that need to be done to make
1088+
#applied config changes dynamic:
1089+
#
1090+
#update editor/shell font and repaint
1091+
#dynamically update indentation setttings
1092+
#update theme and repaint
1093+
#update keybindings and re-bind
1094+
#update user help sources menu
1095+
pass
1096+
10281097
def Cancel(self):
10291098
self.destroy()
10301099

@@ -1034,6 +1103,7 @@ def Ok(self):
10341103

10351104
def Apply(self):
10361105
self.SaveAllChangedConfigs()
1106+
self.ActivateConfigChanges()
10371107

10381108
def Help(self):
10391109
pass

Lib/idlelib/configHandler.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,16 @@ def GetCoreKeys(self, keySetName=None):
518518
if keySetName:
519519
for event in keyBindings.keys():
520520
binding=self.GetKeyBinding(keySetName,event)
521-
if binding: #otherwise will keep default
521+
if binding:
522522
keyBindings[event]=binding
523+
else: #we are going to return a default, print warning
524+
warning=('\n Warning: configHandler.py - IdleConf.GetCoreKeys'+
525+
' -\n problem retrieving key binding for event '+
526+
`event`+'\n from key set '+`keySetName`+'.\n'+
527+
' returning default value: '+`keyBindings[event]`+'\n')
528+
sys.stderr.write(warning)
523529
return keyBindings
524-
530+
525531
def GetExtraHelpSourceList(self,configSet):
526532
"""
527533
Returns a list of tuples containing the details of any additional

0 commit comments

Comments
 (0)