[Idle-dev] CVS: idle configDialog.py,1.32,1.33

Stephen M. Gava elguavas@users.sourceforge.net
Sun, 10 Feb 2002 18:19:53 -0800


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv8151

Modified Files:
	configDialog.py 
Log Message:
further work on config saving


Index: configDialog.py
===================================================================
RCS file: /cvsroot/idlefork/idle/configDialog.py,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -r1.32 -r1.33
*** configDialog.py	5 Feb 2002 04:50:26 -0000	1.32
--- configDialog.py	11 Feb 2002 02:19:51 -0000	1.33
***************
*** 4,8 ****
  from Tkinter import *
  import tkMessageBox, tkColorChooser, tkFont
! import string
  
  from configHandler import idleConf
--- 4,8 ----
  from Tkinter import *
  import tkMessageBox, tkColorChooser, tkFont
! import string, copy
  
  from configHandler import idleConf
***************
*** 186,190 ****
          text.bind('<Double-Button-1>',lambda e: 'break')
          text.bind('<B1-Motion>',lambda e: 'break')
!         textAndTags=(('#you can click in here','comment'),('\n','normal'),
              ('#to choose items','comment'),('\n','normal'),('def','keyword'),
              (' ','normal'),('func','definition'),('(param):','normal'),
--- 186,190 ----
          text.bind('<Double-Button-1>',lambda e: 'break')
          text.bind('<B1-Motion>',lambda e: 'break')
!         textAndTags=(('#you can click here','comment'),('\n','normal'),
              ('#to choose items','comment'),('\n','normal'),('def','keyword'),
              (' ','normal'),('func','definition'),('(param):','normal'),
***************
*** 258,262 ****
          self.builtinKeys=StringVar(self)
          self.customKeys=StringVar(self)
!         self.keysAreDefault=BooleanVar(self) 
          self.keyBinding=StringVar(self)
          ##widget creation
--- 258,262 ----
          self.builtinKeys=StringVar(self)
          self.customKeys=StringVar(self)
!         self.keysAreBuiltin=BooleanVar(self) 
          self.keyBinding=StringVar(self)
          ##widget creation
***************
*** 286,292 ****
          labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
          labelTypeTitle=Label(frameKeySets,text='Select : ')
!         self.radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysAreDefault,
              value=1,command=self.SetKeysType,text='a Built-in Key Set')
!         self.radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysAreDefault,
              value=0,command=self.SetKeysType,text='a Custom Key Set')
          self.optMenuKeysBuiltin=DynOptionMenu(frameKeySets,
--- 286,292 ----
          labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
          labelTypeTitle=Label(frameKeySets,text='Select : ')
!         self.radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysAreBuiltin,
              value=1,command=self.SetKeysType,text='a Built-in Key Set')
!         self.radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysAreBuiltin,
              value=0,command=self.SetKeysType,text='a Custom Key Set')
          self.optMenuKeysBuiltin=DynOptionMenu(frameKeySets,
***************
*** 411,419 ****
          self.indentBySpaces.trace_variable('w',self.VarChanged_indentBySpaces)
          self.colour.trace_variable('w',self.VarChanged_colour)
          self.keyBinding.trace_variable('w',self.VarChanged_keyBinding)
          self.winWidth.trace_variable('w',self.VarChanged_winWidth)
          self.winHeight.trace_variable('w',self.VarChanged_winHeight)
          self.startupEdit.trace_variable('w',self.VarChanged_startupEdit)
!     
      def VarChanged_fontSize(self,*params):
          value=self.fontSize.get()
--- 411,426 ----
          self.indentBySpaces.trace_variable('w',self.VarChanged_indentBySpaces)
          self.colour.trace_variable('w',self.VarChanged_colour)
+         self.builtinTheme.trace_variable('w',self.VarChanged_builtinTheme)
+         self.customTheme.trace_variable('w',self.VarChanged_customTheme)
+         self.themeIsBuiltin.trace_variable('w',self.VarChanged_themeIsBuiltin) 
+         self.highlightTarget.trace_variable('w',self.VarChanged_highlightTarget)
          self.keyBinding.trace_variable('w',self.VarChanged_keyBinding)
+         self.builtinKeys.trace_variable('w',self.VarChanged_builtinKeys)
+         self.customKeys.trace_variable('w',self.VarChanged_customKeys)
+         self.keysAreBuiltin.trace_variable('w',self.VarChanged_keysAreBuiltin) 
          self.winWidth.trace_variable('w',self.VarChanged_winWidth)
          self.winHeight.trace_variable('w',self.VarChanged_winHeight)
          self.startupEdit.trace_variable('w',self.VarChanged_startupEdit)
! 
      def VarChanged_fontSize(self,*params):
          value=self.fontSize.get()
***************
*** 441,448 ****
  
      def VarChanged_colour(self,*params):
!         value=self.colour.get()
!         theme=self.customTheme.get()
!         element=self.themeElements[self.highlightTarget.get()][0]
!         self.AddChangedItem('highlight',theme,element,value)
          
      def VarChanged_keyBinding(self,*params):
--- 448,470 ----
  
      def VarChanged_colour(self,*params):
!         self.OnNewColourSet()
! 
!     def VarChanged_builtinTheme(self,*params):
!         value=self.builtinTheme.get()
!         self.AddChangedItem('main','Theme','name',value)
!         self.PaintThemeSample()
! 
!     def VarChanged_customTheme(self,*params):
!         value=self.customTheme.get()
!         self.AddChangedItem('main','Theme','name',value)
!         self.PaintThemeSample()
! 
!     def VarChanged_themeIsBuiltin(self,*params):
!         value=self.themeIsBuiltin.get()
!         self.AddChangedItem('main','Theme','default',value)
!         self.PaintThemeSample()
! 
!     def VarChanged_highlightTarget(self,*params):
!         self.SetHighlightTarget()
          
      def VarChanged_keyBinding(self,*params):
***************
*** 458,461 ****
--- 480,501 ----
              self.AddChangedItem('extensions',extKeybindSection,event,value)
          
+     def VarChanged_builtinKeys(self,*params):
+         value=self.builtinKeys.get()
+         self.AddChangedItem('main','Keys','name',value)
+         self.LoadKeysList(value)
+ 
+     def VarChanged_customKeys(self,*params):
+         value=self.customKeys.get()
+         self.AddChangedItem('main','Keys','name',value)
+         self.LoadKeysList(value)
+ 
+     def VarChanged_keysAreBuiltin(self,*params):
+         value=self.keysAreBuiltin.get() 
+         self.AddChangedItem('main','Keys','default',value)
+         if value: 
+             self.LoadKeysList(self.builtinKeys.get())
+         else:
+             self.LoadKeysList(self.customKeys.get())
+ 
      def VarChanged_winWidth(self,*params):
          value=self.winWidth.get()
***************
*** 470,479 ****
          self.AddChangedItem('main','General','editor-on-startup',value)
  
-     def ExtensionStateToggled(self):
-         #callback for the extension enable/disable radio buttons
-         value=self.extEnabled.get()
-         extension=self.listExt.get(ANCHOR)
-         self.AddChangedItem('extensions',extension,'enabled',value)
- 
      def ResetChangedItems(self):
          #changedItems. When any config item is changed in this dialog, an entry
--- 510,513 ----
***************
*** 515,519 ****
  
      def SetKeysType(self):
!         if self.keysAreDefault.get():
              self.optMenuKeysBuiltin.config(state=NORMAL)
              self.optMenuKeysCustom.config(state=DISABLED)
--- 549,553 ----
  
      def SetKeysType(self):
!         if self.keysAreBuiltin.get():
              self.optMenuKeysBuiltin.config(state=NORMAL)
              self.optMenuKeysCustom.config(state=DISABLED)
***************
*** 533,537 ****
                  currentKeySequences).result
          if newKeys: #new keys were specified
!             if self.keysAreDefault.get(): #current key set is a built-in
                  message=('Your changes will be saved as a new Custom Key Set. '+
                          'Enter a name for your new Custom Key Set below.')
--- 567,571 ----
                  currentKeySequences).result
          if newKeys: #new keys were specified
!             if self.keysAreBuiltin.get(): #current key set is a built-in
                  message=('Your changes will be saved as a new Custom Key Set. '+
                          'Enter a name for your new Custom Key Set below.')
***************
*** 547,551 ****
              self.listBindings.select_set(listIndex)
              self.listBindings.select_anchor(listIndex)
!             self.keyBinding.set(newKeys.result)
          else:
              self.listBindings.select_set(listIndex)
--- 581,585 ----
              self.listBindings.select_set(listIndex)
              self.listBindings.select_anchor(listIndex)
!             self.keyBinding.set(newKeys)
          else:
              self.listBindings.select_set(listIndex)
***************
*** 554,559 ****
      def GetNewKeysName(self,message):
          usedNames=idleConf.GetSectionList('user','keys')
!         for newName in self.changedItems['keys'].keys():
!             if newName not in usedNames: usedNames.append(newName)
          newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set',
                  message,usedNames).result
--- 588,593 ----
      def GetNewKeysName(self,message):
          usedNames=idleConf.GetSectionList('user','keys')
! #         for newName in self.changedItems['keys'].keys():
! #             if newName not in usedNames: usedNames.append(newName)
          newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set',
                  message,usedNames).result
***************
*** 571,599 ****
          #creates new custom key set based on the previously active key set,
          #and makes the new key set active
!         if self.keysAreDefault.get(): 
!             keySetName=self.builtinKeys.get()
          else:  
!             keySetName=self.customKeys.get()
!         #add the new key set to changedItems
!         prevCoreKeys=idleConf.GetCoreKeys(keySetName)
!         for event in prevCoreKeys.keys(): #add core key set to changed items
              eventName=event[2:-2] #trim off the angle brackets
!             self.AddChangedItem('keys',newKeySetName,eventName,
!                     string.join(prevCoreKeys[event]))
          #change gui over to the new key set
          customKeyList=idleConf.GetSectionList('user','keys')
!         for newName in self.changedItems['keys'].keys():
!             if newName not in customKeyList: customKeyList.append(newName)
          customKeyList.sort()
          self.optMenuKeysCustom.SetMenu(customKeyList,newKeySetName)
!         self.keysAreDefault.set(0)
          self.SetKeysType()
      
      def GetColour(self):
          target=self.highlightTarget.get()
          rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
!             title='Pick new colour for : '+target,
!             initialcolor=self.frameColourSet.cget('bg'))
!         if colourString: #user didn't cancel
              if self.themeIsBuiltin.get(): #current theme is a built-in
                  message=('Your changes will be saved as a new Custom Theme. '+
--- 605,695 ----
          #creates new custom key set based on the previously active key set,
          #and makes the new key set active
!         if self.keysAreBuiltin.get(): 
!             prevKeySetName=self.builtinKeys.get()
          else:  
!             prevKeySetName=self.customKeys.get()
! #         #add the new core key set to changedItems
! #         if prevKeySetName in self.changedItems['keys'].keys():
! #             #existing core key set hasn't been saved yet, copy from changedItems
! #             self.changedItems['keys'][newKeySetName]=copy.deepcopy(
! #                     self.changedItems['keys'][prevKeySetName]) #copy core bindings
! #         else: #get core key set from config
!         prevKeys=idleConf.GetCoreKeys(prevKeySetName)
! 
!         newKeys={}
!         for event in prevKeys.keys(): #add key set to changed items
              eventName=event[2:-2] #trim off the angle brackets
!             binding=string.join(prevKeys[event])
!             newKeys[eventName]=binding
! #             self.AddChangedItem('keys',newKeySetName,eventName,binding)
! 
!         #handle any unsaved changes to prev key set
!         if prevKeySetName in self.changedItems['keys'].keys():
!             keySetChanges=self.changedItems['keys'][prevKeySetName]
!             for event in keySetChanges.keys():
!                 newKeys[event]=keySetChanges[event]
!         
!         #save the new theme
!         self.SaveNewKeySet(newKeySetName,newKeys)
! 
!         
          #change gui over to the new key set
          customKeyList=idleConf.GetSectionList('user','keys')
! #         for newName in self.changedItems['keys'].keys():
! #             if newName not in customKeyList: customKeyList.append(newName)
          customKeyList.sort()
          self.optMenuKeysCustom.SetMenu(customKeyList,newKeySetName)
!         self.keysAreBuiltin.set(0)
          self.SetKeysType()
      
+     def LoadKeysList(self,keySetName):
+         reselect=0
+         newKeySet=0
+         if self.listBindings.curselection():
+             reselect=1
+             listIndex=self.listBindings.index(ANCHOR)
+ #         if keySetName in self.changedItems['keys'].keys():
+ #             #new key set, not yet in saved configuration
+ #             newKeySet=1
+ #             keySet=self.changedItems['keys'][keySetName] #core keys
+ #             for section in self.changedItems['extensions'].keys():
+ #                 #add active extension bindings
+ #                 keySet
+ #         else: #key set in existing configuration
+ 
+         keySet=idleConf.GetKeySet(keySetName)
+ #         print 'copy from new key set:',newKeySet
+         bindNames=keySet.keys()
+         bindNames.sort()
+         self.listBindings.delete(0,END)
+         for bindName in bindNames: 
+ #             if newKeySet:
+ #                 key=keySet[bindName]
+         
+             key=string.join(keySet[bindName]) #make key(s) into a string
+             bindName=bindName[2:-2] #trim off the angle brackets
+             
+             if keySetName in self.changedItems['keys'].keys():
+                 #handle any unsaved changes to this key set
+                 if bindName in self.changedItems['keys'][keySetName].keys():
+                     key=self.changedItems['keys'][keySetName][bindName]
+             
+ #             else: #convert existing config keys to list display string
+ #                 key=string.join(keySet[bindName]) #make key(s) into a string
+             
+             self.listBindings.insert(END, bindName+' - '+key)
+ 
+         if reselect:
+             self.listBindings.see(listIndex)
+             self.listBindings.select_set(listIndex)
+             self.listBindings.select_anchor(listIndex)
+ 
      def GetColour(self):
          target=self.highlightTarget.get()
+         prevColour=self.frameColourSet.cget('bg')
          rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
!             title='Pick new colour for : '+target,initialcolor=prevColour)
!         if colourString and (colourString!=prevColour): 
!             #user didn't cancel, and they chose a new colour
              if self.themeIsBuiltin.get(): #current theme is a built-in
                  message=('Your changes will be saved as a new Custom Theme. '+
***************
*** 604,618 ****
                  else: #create new custom theme based on previously active theme 
                      self.CreateNewTheme(newTheme)    
!             self.colour.set(colourString)
!             self.frameColourSet.config(bg=colourString)#set sample
!             if self.fgHilite.get(): plane='foreground'
!             else: plane='background'
!             apply(self.textHighlightSample.tag_config,
!                 (self.themeElements[target][0],),{plane:colourString})
!     
      def GetNewThemeName(self,message):
          usedNames=idleConf.GetSectionList('user','highlight')
-         for newName in self.changedItems['highlight'].keys():
-             if newName not in usedNames: usedNames.append(newName)
          newTheme=GetCfgSectionNameDialog(self,'New Custom Theme',
                  message,usedNames).result
--- 700,722 ----
                  else: #create new custom theme based on previously active theme 
                      self.CreateNewTheme(newTheme)    
!                     self.colour.set(colourString)
!             else: #current theme is user defined
!                 self.colour.set(colourString)
!     
!     def OnNewColourSet(self):
!         newColour=self.colour.get()
!         self.frameColourSet.config(bg=newColour)#set sample
!         if self.fgHilite.get(): plane='foreground'
!         else: plane='background'
!         sampleElement=self.themeElements[self.highlightTarget.get()][0]
!         apply(self.textHighlightSample.tag_config,
!                 (sampleElement,),{plane:newColour})
!         theme=self.customTheme.get()
!         themeElement=sampleElement+'-'+plane
!         self.AddChangedItem('highlight',theme,themeElement,newColour)
!         print self.changedItems['highlight'][theme]
! 
      def GetNewThemeName(self,message):
          usedNames=idleConf.GetSectionList('user','highlight')
          newTheme=GetCfgSectionNameDialog(self,'New Custom Theme',
                  message,usedNames).result
***************
*** 634,643 ****
              themeName=self.customTheme.get()
          newTheme=idleConf.GetThemeDict(themeType,themeName)
!         #add the new theme to changedItems
!         self.changedItems['highlight'][newThemeName]=newTheme    
          #change gui over to the new theme
          customThemeList=idleConf.GetSectionList('user','highlight')
-         for newName in self.changedItems['highlight'].keys():
-             if newName not in customThemeList: customThemeList.append(newName)
          customThemeList.sort()
          self.optMenuThemeCustom.SetMenu(customThemeList,newThemeName)
--- 738,750 ----
              themeName=self.customTheme.get()
          newTheme=idleConf.GetThemeDict(themeType,themeName)
!         #apply any of the old theme's unsaved changes to the new theme
!         if themeName in self.changedItems['highlight'].keys():
!             themeChanges=self.changedItems['highlight'][themeName]
!             for element in themeChanges.keys():
!                 newTheme[element]=themeChanges[element]
!         #save the new theme
!         self.SaveNewTheme(newThemeName,newTheme)
          #change gui over to the new theme
          customThemeList=idleConf.GetSectionList('user','highlight')
          customThemeList.sort()
          self.optMenuThemeCustom.SetMenu(customThemeList,newThemeName)
***************
*** 658,664 ****
                  weight=fontWeight,family=fontName)
  
-     def SetHighlightTargetBinding(self,*args):
-         self.SetHighlightTarget()
-         
      def SetHighlightTarget(self):
          if self.highlightTarget.get()=='Cursor': #bg not possible
--- 765,768 ----
***************
*** 688,698 ****
          else: #a user theme
              theme=self.customTheme.get()
!         for element in self.themeElements.keys():
!             colours=idleConf.GetHighlight(theme, self.themeElements[element][0])
!             if element=='Cursor': #cursor sample needs special painting
                  colours['background']=idleConf.GetHighlight(theme, 
                          'normal', fgBg='bg')
!             apply(self.textHighlightSample.tag_config,
!                 (self.themeElements[element][0],),colours)
      
      def OnCheckUserHelpBrowser(self):
--- 792,810 ----
          else: #a user theme
              theme=self.customTheme.get()
!         for elementTitle in self.themeElements.keys():
!             element=self.themeElements[elementTitle][0]
!             colours=idleConf.GetHighlight(theme,element)
!             if element=='cursor': #cursor sample needs special painting
                  colours['background']=idleConf.GetHighlight(theme, 
                          'normal', fgBg='bg')
!             #handle any unsaved changes to this theme
!             if theme in self.changedItems['highlight'].keys():
!                 themeDict=self.changedItems['highlight'][theme]
!                 if themeDict.has_key(element+'-foreground'):
!                     colours['foreground']=themeDict[element+'-foreground']
!                 if themeDict.has_key(element+'-background'):
!                     colours['background']=themeDict[element+'-background']
!             apply(self.textHighlightSample.tag_config,(element,),colours)
!         self.SetColourSample()
      
      def OnCheckUserHelpBrowser(self):
***************
*** 831,840 ****
      def LoadKeyCfg(self):
          ##current keys type radiobutton
!         self.keysAreDefault.set(idleConf.GetOption('main','Keys','default',
              type='bool',default=1))
          ##currently set keys
          currentOption=idleConf.CurrentKeys()
          ##load available keyset option menus
!         if self.keysAreDefault.get(): #default theme selected
              itemList=idleConf.GetSectionList('default','keys')
              itemList.sort()
--- 943,952 ----
      def LoadKeyCfg(self):
          ##current keys type radiobutton
!         self.keysAreBuiltin.set(idleConf.GetOption('main','Keys','default',
              type='bool',default=1))
          ##currently set keys
          currentOption=idleConf.CurrentKeys()
          ##load available keyset option menus
!         if self.keysAreBuiltin.get(): #default theme selected
              itemList=idleConf.GetSectionList('default','keys')
              itemList.sort()
***************
*** 856,867 ****
          self.SetKeysType()   
          ##load keyset element list
!         keySet=idleConf.GetCurrentKeySet()
!         bindNames=keySet.keys()
!         bindNames.sort()
!         for bindName in bindNames: 
!             key=string.join(keySet[bindName]) #make key(s) into a string
!             bindName=bindName[2:-2] #trim off the angle brackets
!             self.listBindings.insert(END, bindName+' - '+key)
!    
      def LoadGeneralCfg(self):
          #startup state
--- 968,974 ----
          self.SetKeysType()   
          ##load keyset element list
!         keySetName=idleConf.CurrentKeys()
!         self.LoadKeysList(keySetName)
!     
      def LoadGeneralCfg(self):
          #startup state
***************
*** 897,900 ****
--- 1004,1031 ----
          self.LoadGeneralCfg()
          
+     def SaveNewKeySet(self,keySetName,keySet):
+         """
+         save a newly created core key set.
+         keySetName - string, the name of the new key set
+         keySet - dictionary containing the new key set
+         """
+         if not idleConf.userCfg['keys'].has_section(keySetName):
+             idleConf.userCfg['keys'].add_section(keySetName)
+         for event in keySet.keys():
+             value=keySet[event]
+             idleConf.userCfg['keys'].SetOption(keySetName,event,value)
+     
+     def SaveNewTheme(self,themeName,theme):
+         """
+         save a newly created theme.
+         themeName - string, the name of the new theme
+         theme - dictionary containing the new theme
+         """
+         if not idleConf.userCfg['highlight'].has_section(themeName):
+             idleConf.userCfg['highlight'].add_section(themeName)
+         for element in theme.keys():
+             value=theme[element]
+             idleConf.userCfg['highlight'].SetOption(themeName,element,value)
+     
      def SetUserValue(self,configType,section,item,value):
          if idleConf.defaultCfg[configType].has_option(section,item):
***************
*** 905,911 ****
          return idleConf.userCfg[configType].SetOption(section,item,value)
              
!     def SaveConfigs(self):
          """
!         save configuration changes to user config files.
          """
          if self.changedItems['main'].has_key('HelpFiles'):
--- 1036,1042 ----
          return idleConf.userCfg[configType].SetOption(section,item,value)
              
!     def SaveAllChangedConfigs(self):
          """
!         save all configuration changes to user config files.
          """
          if self.changedItems['main'].has_key('HelpFiles'):
***************
*** 931,935 ****
  
      def Apply(self):
!         self.SaveConfigs()
  
      def Help(self):
--- 1062,1066 ----
  
      def Apply(self):
!         self.SaveAllChangedConfigs()
  
      def Help(self):