1147 lines · 52.1 KB · Python
RawDownload
"""IDLE Configuration Dialog: support user customization of IDLE by GUI Customize font faces, sizes, and colorization attributes.  Set indentationdefaults.  Customize keybindings.  Colorization and keybindings can besaved as user defined sets.  Select startup options including shell/editorand default window size.  Define additional help sources. Note that tab width in IDLE is currently fixed at eight due to Tk issues.Refer to comments in EditorWindow autoindent code for details. """from Tkinter import *import tkMessageBox, tkColorChooser, tkFontimport string, copy from configHandler import idleConffrom dynOptionMenuWidget import DynOptionMenufrom tabpage import TabPageSetfrom keybindingDialog import GetKeysDialogfrom configSectionNameDialog import GetCfgSectionNameDialogfrom configHelpSourceEdit import GetHelpSourceDialog class ConfigDialog(Toplevel):     def __init__(self,parent,title):        Toplevel.__init__(self, parent)        self.configure(borderwidth=5)        self.geometry("+%d+%d" % (parent.winfo_rootx()+20,                parent.winfo_rooty()+30))        #Theme Elements. Each theme element key is its display name.        #The first value of the tuple is the sample area tag name.        #The second value is the display name list sort index.        self.themeElements={'Normal Text':('normal','00'),            'Python Keywords':('keyword','01'),            'Python Definitions':('definition','02'),            'Python Builtins':('builtin', '03'),            'Python Comments':('comment','04'),            'Python Strings':('string','05'),            'Selected Text':('hilite','06'),            'Found Text':('hit','07'),            'Cursor':('cursor','08'),            'Error Text':('error','09'),            'Shell Normal Text':('console','10'),            'Shell Stdout Text':('stdout','11'),            'Shell Stderr Text':('stderr','12'),            }        self.ResetChangedItems() #load initial values in changed items dict        self.CreateWidgets()        self.resizable(height=FALSE,width=FALSE)        self.transient(parent)        self.grab_set()        self.protocol("WM_DELETE_WINDOW", self.Cancel)        self.parent = parent        self.tabPages.focus_set()        #key bindings for this dialog        #self.bind('<Escape>',self.Cancel) #dismiss dialog, no save        #self.bind('<Alt-a>',self.Apply) #apply changes, save        #self.bind('<F1>',self.Help) #context help        self.LoadConfigs()        self.AttachVarCallbacks() #avoid callbacks during LoadConfigs        self.wait_window()     def CreateWidgets(self):        self.tabPages = TabPageSet(self,                pageNames=['Fonts/Tabs','Highlighting','Keys','General'])        self.tabPages.ChangePage()#activates default (first) page        frameActionButtons = Frame(self)        #action buttons        self.buttonHelp = Button(frameActionButtons,text='Help',                command=self.Help,takefocus=FALSE)        self.buttonOk = Button(frameActionButtons,text='Ok',                command=self.Ok,takefocus=FALSE)        self.buttonApply = Button(frameActionButtons,text='Apply',                command=self.Apply,takefocus=FALSE)        self.buttonCancel = Button(frameActionButtons,text='Cancel',                command=self.Cancel,takefocus=FALSE)        self.CreatePageFontTab()        self.CreatePageHighlight()        self.CreatePageKeys()        self.CreatePageGeneral()        self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)        self.buttonOk.pack(side=LEFT,padx=5,pady=5)        self.buttonApply.pack(side=LEFT,padx=5,pady=5)        self.buttonCancel.pack(side=LEFT,padx=5,pady=5)        frameActionButtons.pack(side=BOTTOM)        self.tabPages.pack(side=TOP,expand=TRUE,fill=BOTH)     def CreatePageFontTab(self):        #tkVars        self.fontSize=StringVar(self)        self.fontBold=BooleanVar(self)        self.fontName=StringVar(self)        self.spaceNum=IntVar(self)        self.editFont=tkFont.Font(self,('courier',10,'normal'))        ##widget creation        #body frame        frame=self.tabPages.pages['Fonts/Tabs']['page']        #body section frames        frameFont=Frame(frame,borderwidth=2,relief=GROOVE)        frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)        #frameFont        labelFontTitle=Label(frameFont,text='Set Base Editor Font')        frameFontName=Frame(frameFont)        frameFontParam=Frame(frameFont)        labelFontNameTitle=Label(frameFontName,justify=LEFT,                text='Font :')        self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,                exportselection=FALSE)        self.listFontName.bind('<ButtonRelease-1>',self.OnListFontButtonRelease)        scrollFont=Scrollbar(frameFontName)        scrollFont.config(command=self.listFontName.yview)        self.listFontName.config(yscrollcommand=scrollFont.set)        labelFontSizeTitle=Label(frameFontParam,text='Size :')        self.optMenuFontSize=DynOptionMenu(frameFontParam,self.fontSize,None,            command=self.SetFontSample)        checkFontBold=Checkbutton(frameFontParam,variable=self.fontBold,            onvalue=1,offvalue=0,text='Bold',command=self.SetFontSample)        frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1)        self.labelFontSample=Label(frameFontSample,                text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',                justify=LEFT,font=self.editFont)        #frameIndent        frameIndentSize=Frame(frameIndent)        labelSpaceNumTitle=Label(frameIndentSize, justify=LEFT,                                 text='Python Standard: 4 Spaces!')        self.scaleSpaceNum=Scale(frameIndentSize, variable=self.spaceNum,                                 label='Indentation Width', orient='horizontal',                                 tickinterval=2, from_=2, to=16)        #widget packing        #body        frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)        frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)        #frameFont        labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        frameFontName.pack(side=TOP,padx=5,pady=5,fill=X)        frameFontParam.pack(side=TOP,padx=5,pady=5,fill=X)        labelFontNameTitle.pack(side=TOP,anchor=W)        self.listFontName.pack(side=LEFT,expand=TRUE,fill=X)        scrollFont.pack(side=LEFT,fill=Y)        labelFontSizeTitle.pack(side=LEFT,anchor=W)        self.optMenuFontSize.pack(side=LEFT,anchor=W)        checkFontBold.pack(side=LEFT,anchor=W,padx=20)        frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)        self.labelFontSample.pack(expand=TRUE,fill=BOTH)        #frameIndent        frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)        labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)        self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)        return frame     def CreatePageHighlight(self):        self.builtinTheme=StringVar(self)        self.customTheme=StringVar(self)        self.fgHilite=BooleanVar(self)        self.colour=StringVar(self)        self.fontName=StringVar(self)        self.themeIsBuiltin=BooleanVar(self)        self.highlightTarget=StringVar(self)        ##widget creation        #body frame        frame=self.tabPages.pages['Highlighting']['page']        #body section frames        frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)        frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)        #frameCustom        self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,            font=('courier',12,''),cursor='hand2',width=21,height=10,            takefocus=FALSE,highlightthickness=0,wrap=NONE)        text=self.textHighlightSample        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'),            ('\n  ','normal'),('"""string"""','string'),('\n  var0 = ','normal'),            ("'string'",'string'),('\n  var1 = ','normal'),("'selected'",'hilite'),            ('\n  var2 = ','normal'),("'found'",'hit'),            ('\n  var3 = ','normal'),('list', 'builtin'), ('(','normal'),            ('None', 'builtin'),(')\n\n','normal'),            (' error ','error'),(' ','normal'),('cursor |','cursor'),            ('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'),            (' ','normal'),('stderr','stderr'),('\n','normal'))        for txTa in textAndTags:            text.insert(END,txTa[0],txTa[1])        for element in self.themeElements.keys():            text.tag_bind(self.themeElements[element][0],'<ButtonPress-1>',                lambda event,elem=element: event.widget.winfo_toplevel()                .highlightTarget.set(elem))        text.config(state=DISABLED)        self.frameColourSet=Frame(frameCustom,relief=SOLID,borderwidth=1)        frameFgBg=Frame(frameCustom)        labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')        buttonSetColour=Button(self.frameColourSet,text='Choose Colour for :',            command=self.GetColour,highlightthickness=0)        self.optMenuHighlightTarget=DynOptionMenu(self.frameColourSet,            self.highlightTarget,None,highlightthickness=0)#,command=self.SetHighlightTargetBinding        self.radioFg=Radiobutton(frameFgBg,variable=self.fgHilite,            value=1,text='Foreground',command=self.SetColourSampleBinding)        self.radioBg=Radiobutton(frameFgBg,variable=self.fgHilite,            value=0,text='Background',command=self.SetColourSampleBinding)        self.fgHilite.set(1)        buttonSaveCustomTheme=Button(frameCustom,            text='Save as New Custom Theme',command=self.SaveAsNewTheme)        #frameTheme        labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')        labelTypeTitle=Label(frameTheme,text='Select : ')        self.radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeIsBuiltin,            value=1,command=self.SetThemeType,text='a Built-in Theme')        self.radioThemeCustom=Radiobutton(frameTheme,variable=self.themeIsBuiltin,            value=0,command=self.SetThemeType,text='a Custom Theme')        self.optMenuThemeBuiltin=DynOptionMenu(frameTheme,            self.builtinTheme,None,command=None)        self.optMenuThemeCustom=DynOptionMenu(frameTheme,            self.customTheme,None,command=None)        self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme',                command=self.DeleteCustomTheme)        ##widget packing        #body        frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)        frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)        #frameCustom        labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        self.frameColourSet.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=X)        frameFgBg.pack(side=TOP,padx=5,pady=0)        self.textHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,            fill=BOTH)        buttonSetColour.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=4)        self.optMenuHighlightTarget.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=3)        self.radioFg.pack(side=LEFT,anchor=E)        self.radioBg.pack(side=RIGHT,anchor=W)        buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)        #frameTheme        labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        self.radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)        self.radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)        self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)        self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)        self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)        return frame     def CreatePageKeys(self):        #tkVars        self.bindingTarget=StringVar(self)        self.builtinKeys=StringVar(self)        self.customKeys=StringVar(self)        self.keysAreBuiltin=BooleanVar(self)        self.keyBinding=StringVar(self)        ##widget creation        #body frame        frame=self.tabPages.pages['Keys']['page']        #body section frames        frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)        frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)        #frameCustom        frameTarget=Frame(frameCustom)        labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')        labelTargetTitle=Label(frameTarget,text='Action - Key(s)')        scrollTargetY=Scrollbar(frameTarget)        scrollTargetX=Scrollbar(frameTarget,orient=HORIZONTAL)        self.listBindings=Listbox(frameTarget,takefocus=FALSE,                exportselection=FALSE)        self.listBindings.bind('<ButtonRelease-1>',self.KeyBindingSelected)        scrollTargetY.config(command=self.listBindings.yview)        scrollTargetX.config(command=self.listBindings.xview)        self.listBindings.config(yscrollcommand=scrollTargetY.set)        self.listBindings.config(xscrollcommand=scrollTargetX.set)        self.buttonNewKeys=Button(frameCustom,text='Get New Keys for Selection',            command=self.GetNewKeys,state=DISABLED)        buttonSaveCustomKeys=Button(frameCustom,                text='Save as New Custom Key Set',command=self.SaveAsNewKeySet)        #frameKeySets        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,            self.builtinKeys,None,command=None)        self.optMenuKeysCustom=DynOptionMenu(frameKeySets,            self.customKeys,None,command=None)        self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set',                command=self.DeleteCustomKeys)        ##widget packing        #body        frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)        frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)        #frameCustom        labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)        self.buttonNewKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)        frameTarget.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)        #frame target        frameTarget.columnconfigure(0,weight=1)        frameTarget.rowconfigure(1,weight=1)        labelTargetTitle.grid(row=0,column=0,columnspan=2,sticky=W)        self.listBindings.grid(row=1,column=0,sticky=NSEW)        scrollTargetY.grid(row=1,column=1,sticky=NS)        scrollTargetX.grid(row=2,column=0,sticky=EW)        #frameKeySets        labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        self.radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)        self.radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)        self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)        self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)        self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)        return frame     def CreatePageGeneral(self):        #tkVars        self.winWidth=StringVar(self)        self.winHeight=StringVar(self)        self.paraWidth=StringVar(self)        self.startupEdit=IntVar(self)        self.autoSave=IntVar(self)        self.encoding=StringVar(self)        self.userHelpBrowser=BooleanVar(self)        self.helpBrowser=StringVar(self)        #widget creation        #body        frame=self.tabPages.pages['General']['page']        #body section frames        frameRun=Frame(frame,borderwidth=2,relief=GROOVE)        frameSave=Frame(frame,borderwidth=2,relief=GROOVE)        frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)        frameParaSize=Frame(frame,borderwidth=2,relief=GROOVE)        frameEncoding=Frame(frame,borderwidth=2,relief=GROOVE)        frameHelp=Frame(frame,borderwidth=2,relief=GROOVE)        #frameRun        labelRunTitle=Label(frameRun,text='Startup Preferences')        labelRunChoiceTitle=Label(frameRun,text='At Startup')        radioStartupEdit=Radiobutton(frameRun,variable=self.startupEdit,            value=1,command=self.SetKeysType,text="Open Edit Window")        radioStartupShell=Radiobutton(frameRun,variable=self.startupEdit,            value=0,command=self.SetKeysType,text='Open Shell Window')        #frameSave        labelSaveTitle=Label(frameSave,text='Autosave Preference')        labelRunSaveTitle=Label(frameSave,text='At Start of Run (F5)  ')        radioSaveAsk=Radiobutton(frameSave,variable=self.autoSave,            value=0,command=self.SetKeysType,text="Prompt to Save")        radioSaveAuto=Radiobutton(frameSave,variable=self.autoSave,            value=1,command=self.SetKeysType,text='No Prompt')        #frameWinSize        labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size'+                '  (in characters)')        labelWinWidthTitle=Label(frameWinSize,text='Width')        entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,                width=3)        labelWinHeightTitle=Label(frameWinSize,text='Height')        entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,                width=3)        #paragraphFormatWidth        labelParaWidthTitle=Label(frameParaSize,text='Paragraph reformat'+                ' width (in characters)')        entryParaWidth=Entry(frameParaSize,textvariable=self.paraWidth,                width=3)        #frameEncoding        labelEncodingTitle=Label(frameEncoding,text="Default Source Encoding")        radioEncLocale=Radiobutton(frameEncoding,variable=self.encoding,            value="locale",text="Locale-defined")        radioEncUTF8=Radiobutton(frameEncoding,variable=self.encoding,            value="utf-8",text="UTF-8")        radioEncNone=Radiobutton(frameEncoding,variable=self.encoding,            value="none",text="None")        #frameHelp        frameHelpList=Frame(frameHelp)        frameHelpListButtons=Frame(frameHelpList)        labelHelpListTitle=Label(frameHelpList,text='Additional Help Sources:')        scrollHelpList=Scrollbar(frameHelpList)        self.listHelp=Listbox(frameHelpList,height=5,takefocus=FALSE,                exportselection=FALSE)        scrollHelpList.config(command=self.listHelp.yview)        self.listHelp.config(yscrollcommand=scrollHelpList.set)        self.listHelp.bind('<ButtonRelease-1>',self.HelpSourceSelected)        self.buttonHelpListEdit=Button(frameHelpListButtons,text='Edit',                state=DISABLED,width=8,command=self.HelpListItemEdit)        self.buttonHelpListAdd=Button(frameHelpListButtons,text='Add',                width=8,command=self.HelpListItemAdd)        self.buttonHelpListRemove=Button(frameHelpListButtons,text='Remove',                state=DISABLED,width=8,command=self.HelpListItemRemove)        #widget packing        #body        frameRun.pack(side=TOP,padx=5,pady=5,fill=X)        frameSave.pack(side=TOP,padx=5,pady=5,fill=X)        frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)        frameParaSize.pack(side=TOP,padx=5,pady=5,fill=X)        frameEncoding.pack(side=TOP,padx=5,pady=5,fill=X)        frameHelp.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)        #frameRun        labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)        radioStartupShell.pack(side=RIGHT,anchor=W,padx=5,pady=5)        radioStartupEdit.pack(side=RIGHT,anchor=W,padx=5,pady=5)        #frameSave        labelSaveTitle.pack(side=TOP,anchor=W,padx=5,pady=5)        labelRunSaveTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)        radioSaveAuto.pack(side=RIGHT,anchor=W,padx=5,pady=5)        radioSaveAsk.pack(side=RIGHT,anchor=W,padx=5,pady=5)        #frameWinSize        labelWinSizeTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)        entryWinHeight.pack(side=RIGHT,anchor=E,padx=10,pady=5)        labelWinHeightTitle.pack(side=RIGHT,anchor=E,pady=5)        entryWinWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5)        labelWinWidthTitle.pack(side=RIGHT,anchor=E,pady=5)        #paragraphFormatWidth        labelParaWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)        entryParaWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5)        #frameEncoding        labelEncodingTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)        radioEncNone.pack(side=RIGHT,anchor=E,pady=5)        radioEncUTF8.pack(side=RIGHT,anchor=E,pady=5)        radioEncLocale.pack(side=RIGHT,anchor=E,pady=5)        #frameHelp        frameHelpListButtons.pack(side=RIGHT,padx=5,pady=5,fill=Y)        frameHelpList.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)        labelHelpListTitle.pack(side=TOP,anchor=W)        scrollHelpList.pack(side=RIGHT,anchor=W,fill=Y)        self.listHelp.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)        self.buttonHelpListEdit.pack(side=TOP,anchor=W,pady=5)        self.buttonHelpListAdd.pack(side=TOP,anchor=W)        self.buttonHelpListRemove.pack(side=TOP,anchor=W,pady=5)        return frame     def AttachVarCallbacks(self):        self.fontSize.trace_variable('w',self.VarChanged_fontSize)        self.fontName.trace_variable('w',self.VarChanged_fontName)        self.fontBold.trace_variable('w',self.VarChanged_fontBold)        self.spaceNum.trace_variable('w',self.VarChanged_spaceNum)        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.paraWidth.trace_variable('w',self.VarChanged_paraWidth)        self.startupEdit.trace_variable('w',self.VarChanged_startupEdit)        self.autoSave.trace_variable('w',self.VarChanged_autoSave)        self.encoding.trace_variable('w',self.VarChanged_encoding)     def VarChanged_fontSize(self,*params):        value=self.fontSize.get()        self.AddChangedItem('main','EditorWindow','font-size',value)     def VarChanged_fontName(self,*params):        value=self.fontName.get()        self.AddChangedItem('main','EditorWindow','font',value)     def VarChanged_fontBold(self,*params):        value=self.fontBold.get()        self.AddChangedItem('main','EditorWindow','font-bold',value)     def VarChanged_spaceNum(self,*params):        value=self.spaceNum.get()        self.AddChangedItem('main','Indent','num-spaces',value)     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()        if value != '- no custom themes -':            self.AddChangedItem('main','Theme','name',value)            self.PaintThemeSample()     def VarChanged_themeIsBuiltin(self,*params):        value=self.themeIsBuiltin.get()        self.AddChangedItem('main','Theme','default',value)        if value:            self.VarChanged_builtinTheme()        else:            self.VarChanged_customTheme()     def VarChanged_highlightTarget(self,*params):        self.SetHighlightTarget()     def VarChanged_keyBinding(self,*params):        value=self.keyBinding.get()        keySet=self.customKeys.get()        event=self.listBindings.get(ANCHOR).split()[0]        if idleConf.IsCoreBinding(event):            #this is a core keybinding            self.AddChangedItem('keys',keySet,event,value)        else: #this is an extension key binding            extName=idleConf.GetExtnNameForEvent(event)            extKeybindSection=extName+'_cfgBindings'            self.AddChangedItem('extensions',extKeybindSection,event,value)     def VarChanged_builtinKeys(self,*params):

Lines 1–500 of 1147.