183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""IDLE Configuration Dialog: support user customization of IDLE by GUI 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehCustomize font faces, sizes, and colorization attributes. Set indentation 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehdefaults. Customize keybindings. Colorization and keybindings can be 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehsaved as user defined sets. Select startup options including shell/editor 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehand default window size. Define additional help sources. 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehNote that tab width in IDLE is currently fixed at eight due to Tk issues. 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew HsiehRefer to comments in EditorWindow autoindent code for details. 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh""" 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom Tkinter import * 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport tkMessageBox, tkColorChooser, tkFont 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehimport string 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.configHandler import idleConf 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.dynOptionMenuWidget import DynOptionMenu 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.tabbedpages import TabbedPageSet 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.keybindingDialog import GetKeysDialog 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.configSectionNameDialog import GetCfgSectionNameDialog 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib.configHelpSourceEdit import GetHelpSourceDialog 2283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom idlelib import macosxSupport 2383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass ConfigDialog(Toplevel): 2583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 2683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def __init__(self,parent,title): 2783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Toplevel.__init__(self, parent) 2883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.wm_withdraw() 2983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 3083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.configure(borderwidth=5) 3183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.title('IDLE Preferences') 3283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.geometry("+%d+%d" % (parent.winfo_rootx()+20, 3383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh parent.winfo_rooty()+30)) 3483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #Theme Elements. Each theme element key is its display name. 3583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #The first value of the tuple is the sample area tag name. 3683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #The second value is the display name list sort index. 3783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeElements={'Normal Text':('normal','00'), 3883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Python Keywords':('keyword','01'), 3983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Python Definitions':('definition','02'), 4083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Python Builtins':('builtin', '03'), 4183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Python Comments':('comment','04'), 4283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Python Strings':('string','05'), 4383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Selected Text':('hilite','06'), 4483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Found Text':('hit','07'), 4583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Cursor':('cursor','08'), 4683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Error Text':('error','09'), 4783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Shell Normal Text':('console','10'), 4883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Shell Stdout Text':('stdout','11'), 4983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Shell Stderr Text':('stderr','12'), 5083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh } 5183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.ResetChangedItems() #load initial values in changed items dict 5283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreateWidgets() 5383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.resizable(height=FALSE,width=FALSE) 5483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.transient(parent) 5583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.grab_set() 5683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.protocol("WM_DELETE_WINDOW", self.Cancel) 5783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.parent = parent 5883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.tabPages.focus_set() 5983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #key bindings for this dialog 6083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #self.bind('<Escape>',self.Cancel) #dismiss dialog, no save 6183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #self.bind('<Alt-a>',self.Apply) #apply changes, save 6283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #self.bind('<F1>',self.Help) #context help 6383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadConfigs() 6483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AttachVarCallbacks() #avoid callbacks during LoadConfigs 6583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 6683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.wm_deiconify() 6783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.wait_window() 6883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 6983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreateWidgets(self): 7083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.tabPages = TabbedPageSet(self, 7183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh page_names=['Fonts/Tabs','Highlighting','Keys','General']) 7283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameActionButtons = Frame(self,pady=2) 7383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #action buttons 7483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if macosxSupport.runningAsOSXApp(): 7583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # Changing the default padding on OSX results in unreadable 7683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # text in the buttons 7783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh paddingArgs={} 7883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 7983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh paddingArgs={'padx':6, 'pady':3} 8083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 8183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelp = Button(frameActionButtons,text='Help', 8283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.Help,takefocus=FALSE, 8383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh **paddingArgs) 8483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonOk = Button(frameActionButtons,text='Ok', 8583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.Ok,takefocus=FALSE, 8683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh **paddingArgs) 8783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonApply = Button(frameActionButtons,text='Apply', 8883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.Apply,takefocus=FALSE, 8983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh **paddingArgs) 9083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonCancel = Button(frameActionButtons,text='Cancel', 9183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.Cancel,takefocus=FALSE, 9283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh **paddingArgs) 9383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreatePageFontTab() 9483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreatePageHighlight() 9583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreatePageKeys() 9683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreatePageGeneral() 9783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelp.pack(side=RIGHT,padx=5) 9883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonOk.pack(side=LEFT,padx=5) 9983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonApply.pack(side=LEFT,padx=5) 10083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonCancel.pack(side=LEFT,padx=5) 10183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameActionButtons.pack(side=BOTTOM) 10283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Frame(self, height=2, borderwidth=0).pack(side=BOTTOM) 10383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.tabPages.pack(side=TOP,expand=TRUE,fill=BOTH) 10483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 10583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreatePageFontTab(self): 10683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #tkVars 10783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontSize=StringVar(self) 10883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontBold=BooleanVar(self) 10983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontName=StringVar(self) 11083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.spaceNum=IntVar(self) 11183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.editFont=tkFont.Font(self,('courier',10,'normal')) 11283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##widget creation 11383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body frame 11483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frame=self.tabPages.pages['Fonts/Tabs'].frame 11583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body section frames 11683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFont=LabelFrame(frame,borderwidth=2,relief=GROOVE, 11783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Base Editor Font ') 11883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameIndent=LabelFrame(frame,borderwidth=2,relief=GROOVE, 11983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Indentation Width ') 12083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameFont 12183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontName=Frame(frameFont) 12283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontParam=Frame(frameFont) 12383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelFontNameTitle=Label(frameFontName,justify=LEFT, 12483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text='Font Face :') 12583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE, 12683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exportselection=FALSE) 12783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.bind('<ButtonRelease-1>',self.OnListFontButtonRelease) 12883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollFont=Scrollbar(frameFontName) 12983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollFont.config(command=self.listFontName.yview) 13083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.config(yscrollcommand=scrollFont.set) 13183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelFontSizeTitle=Label(frameFontParam,text='Size :') 13283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuFontSize=DynOptionMenu(frameFontParam,self.fontSize,None, 13383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.SetFontSample) 13483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh checkFontBold=Checkbutton(frameFontParam,variable=self.fontBold, 13583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh onvalue=1,offvalue=0,text='Bold',command=self.SetFontSample) 13683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1) 13783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.labelFontSample=Label(frameFontSample, 13883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]', 13983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh justify=LEFT,font=self.editFont) 14083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameIndent 14183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameIndentSize=Frame(frameIndent) 14283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelSpaceNumTitle=Label(frameIndentSize, justify=LEFT, 14383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text='Python Standard: 4 Spaces!') 14483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.scaleSpaceNum=Scale(frameIndentSize, variable=self.spaceNum, 14583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh orient='horizontal', 14683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh tickinterval=2, from_=2, to=16) 14783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #widget packing 14883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body 14983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFont.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH) 15083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameIndent.pack(side=LEFT,padx=5,pady=5,fill=Y) 15183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameFont 15283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontName.pack(side=TOP,padx=5,pady=5,fill=X) 15383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontParam.pack(side=TOP,padx=5,pady=5,fill=X) 15483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelFontNameTitle.pack(side=TOP,anchor=W) 15583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.pack(side=LEFT,expand=TRUE,fill=X) 15683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollFont.pack(side=LEFT,fill=Y) 15783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelFontSizeTitle.pack(side=LEFT,anchor=W) 15883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuFontSize.pack(side=LEFT,anchor=W) 15983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh checkFontBold.pack(side=LEFT,anchor=W,padx=20) 16083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH) 16183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.labelFontSample.pack(expand=TRUE,fill=BOTH) 16283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameIndent 16383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameIndentSize.pack(side=TOP,fill=X) 16483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5) 16583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X) 16683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return frame 16783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 16883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreatePageHighlight(self): 16983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinTheme=StringVar(self) 17083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customTheme=StringVar(self) 17183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fgHilite=BooleanVar(self) 17283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.colour=StringVar(self) 17383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontName=StringVar(self) 17483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeIsBuiltin=BooleanVar(self) 17583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.highlightTarget=StringVar(self) 17683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##widget creation 17783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body frame 17883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frame=self.tabPages.pages['Highlighting'].frame 17983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body section frames 18083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameCustom=LabelFrame(frame,borderwidth=2,relief=GROOVE, 18183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Custom Highlighting ') 18283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTheme=LabelFrame(frame,borderwidth=2,relief=GROOVE, 18383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Highlighting Theme ') 18483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameCustom 18583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1, 18683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh font=('courier',12,''),cursor='hand2',width=21,height=11, 18783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh takefocus=FALSE,highlightthickness=0,wrap=NONE) 18883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=self.textHighlightSample 18983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text.bind('<Double-Button-1>',lambda e: 'break') 19083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text.bind('<B1-Motion>',lambda e: 'break') 19183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh textAndTags=(('#you can click here','comment'),('\n','normal'), 19283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('#to choose items','comment'),('\n','normal'),('def','keyword'), 19383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (' ','normal'),('func','definition'),('(param):','normal'), 19483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('\n ','normal'),('"""string"""','string'),('\n var0 = ','normal'), 19583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ("'string'",'string'),('\n var1 = ','normal'),("'selected'",'hilite'), 19683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('\n var2 = ','normal'),("'found'",'hit'), 19783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('\n var3 = ','normal'),('list', 'builtin'), ('(','normal'), 19883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('None', 'builtin'),(')\n\n','normal'), 19983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (' error ','error'),(' ','normal'),('cursor |','cursor'), 20083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'), 20183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh (' ','normal'),('stderr','stderr'),('\n','normal')) 20283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for txTa in textAndTags: 20383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text.insert(END,txTa[0],txTa[1]) 20483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for element in self.themeElements.keys(): 20583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text.tag_bind(self.themeElements[element][0],'<ButtonPress-1>', 20683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lambda event,elem=element: event.widget.winfo_toplevel() 20783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh .highlightTarget.set(elem)) 20883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text.config(state=DISABLED) 20983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.frameColourSet=Frame(frameCustom,relief=SOLID,borderwidth=1) 21083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFgBg=Frame(frameCustom) 21183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSetColour=Button(self.frameColourSet,text='Choose Colour for :', 21283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.GetColour,highlightthickness=0) 21383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuHighlightTarget=DynOptionMenu(self.frameColourSet, 21483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.highlightTarget,None,highlightthickness=0)#,command=self.SetHighlightTargetBinding 21583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioFg=Radiobutton(frameFgBg,variable=self.fgHilite, 21683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=1,text='Foreground',command=self.SetColourSampleBinding) 21783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioBg=Radiobutton(frameFgBg,variable=self.fgHilite, 21883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=0,text='Background',command=self.SetColourSampleBinding) 21983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fgHilite.set(1) 22083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSaveCustomTheme=Button(frameCustom, 22183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text='Save as New Custom Theme',command=self.SaveAsNewTheme) 22283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameTheme 22383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelTypeTitle=Label(frameTheme,text='Select : ') 22483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeIsBuiltin, 22583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=1,command=self.SetThemeType,text='a Built-in Theme') 22683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeCustom=Radiobutton(frameTheme,variable=self.themeIsBuiltin, 22783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=0,command=self.SetThemeType,text='a Custom Theme') 22883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin=DynOptionMenu(frameTheme, 22983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinTheme,None,command=None) 23083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom=DynOptionMenu(frameTheme, 23183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customTheme,None,command=None) 23283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme', 23383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.DeleteCustomTheme) 23483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##widget packing 23583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body 23683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH) 23783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTheme.pack(side=LEFT,padx=5,pady=5,fill=Y) 23883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameCustom 23983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.frameColourSet.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=X) 24083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameFgBg.pack(side=TOP,padx=5,pady=0) 24183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.textHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE, 24283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fill=BOTH) 24383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSetColour.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=4) 24483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuHighlightTarget.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=3) 24583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioFg.pack(side=LEFT,anchor=E) 24683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioBg.pack(side=RIGHT,anchor=W) 24783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5) 24883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameTheme 24983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5) 25083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5) 25183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2) 25283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5) 25383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5) 25483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5) 25583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return frame 25683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 25783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreatePageKeys(self): 25883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #tkVars 25983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.bindingTarget=StringVar(self) 26083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinKeys=StringVar(self) 26183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customKeys=StringVar(self) 26283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keysAreBuiltin=BooleanVar(self) 26383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keyBinding=StringVar(self) 26483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##widget creation 26583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body frame 26683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frame=self.tabPages.pages['Keys'].frame 26783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body section frames 26883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameCustom=LabelFrame(frame,borderwidth=2,relief=GROOVE, 26983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Custom Key Bindings ') 27083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameKeySets=LabelFrame(frame,borderwidth=2,relief=GROOVE, 27183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Key Set ') 27283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameCustom 27383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTarget=Frame(frameCustom) 27483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelTargetTitle=Label(frameTarget,text='Action - Key(s)') 27583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetY=Scrollbar(frameTarget) 27683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetX=Scrollbar(frameTarget,orient=HORIZONTAL) 27783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings=Listbox(frameTarget,takefocus=FALSE, 27883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exportselection=FALSE) 27983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.bind('<ButtonRelease-1>',self.KeyBindingSelected) 28083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetY.config(command=self.listBindings.yview) 28183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetX.config(command=self.listBindings.xview) 28283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.config(yscrollcommand=scrollTargetY.set) 28383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.config(xscrollcommand=scrollTargetX.set) 28483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonNewKeys=Button(frameCustom,text='Get New Keys for Selection', 28583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.GetNewKeys,state=DISABLED) 28683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameKeySets 28783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frames = [Frame(frameKeySets, padx=2, pady=2, borderwidth=0) 28883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for i in range(2)] 28983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysBuiltin=Radiobutton(frames[0],variable=self.keysAreBuiltin, 29083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=1,command=self.SetKeysType,text='Use a Built-in Key Set') 29183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysCustom=Radiobutton(frames[0],variable=self.keysAreBuiltin, 29283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=0,command=self.SetKeysType,text='Use a Custom Key Set') 29383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin=DynOptionMenu(frames[0], 29483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinKeys,None,command=None) 29583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom=DynOptionMenu(frames[0], 29683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customKeys,None,command=None) 29783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomKeys=Button(frames[1],text='Delete Custom Key Set', 29883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=self.DeleteCustomKeys) 29983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSaveCustomKeys=Button(frames[1], 30083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text='Save as New Custom Key Set',command=self.SaveAsNewKeySet) 30183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##widget packing 30283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body 30383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameCustom.pack(side=BOTTOM,padx=5,pady=5,expand=TRUE,fill=BOTH) 30483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameKeySets.pack(side=BOTTOM,padx=5,pady=5,fill=BOTH) 30583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameCustom 30683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonNewKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5) 30783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTarget.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH) 30883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frame target 30983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTarget.columnconfigure(0,weight=1) 31083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameTarget.rowconfigure(1,weight=1) 31183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelTargetTitle.grid(row=0,column=0,columnspan=2,sticky=W) 31283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.grid(row=1,column=0,sticky=NSEW) 31383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetY.grid(row=1,column=1,sticky=NS) 31483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollTargetX.grid(row=2,column=0,sticky=EW) 31583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameKeySets 31683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysBuiltin.grid(row=0, column=0, sticky=W+NS) 31783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysCustom.grid(row=1, column=0, sticky=W+NS) 31883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin.grid(row=0, column=1, sticky=NSEW) 31983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.grid(row=1, column=1, sticky=NSEW) 32083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomKeys.pack(side=LEFT,fill=X,expand=True,padx=2) 32183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh buttonSaveCustomKeys.pack(side=LEFT,fill=X,expand=True,padx=2) 32283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frames[0].pack(side=TOP, fill=BOTH, expand=True) 32383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frames[1].pack(side=TOP, fill=X, expand=True, pady=2) 32483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return frame 32583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 32683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreatePageGeneral(self): 32783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #tkVars 32883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winWidth=StringVar(self) 32983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winHeight=StringVar(self) 33083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.paraWidth=StringVar(self) 33183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.startupEdit=IntVar(self) 33283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.autoSave=IntVar(self) 33383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.encoding=StringVar(self) 33483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.userHelpBrowser=BooleanVar(self) 33583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.helpBrowser=StringVar(self) 33683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #widget creation 33783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body 33883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frame=self.tabPages.pages['General'].frame 33983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body section frames 34083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameRun=LabelFrame(frame,borderwidth=2,relief=GROOVE, 34183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Startup Preferences ') 34283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameSave=LabelFrame(frame,borderwidth=2,relief=GROOVE, 34383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Autosave Preferences ') 34483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE) 34583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameParaSize=Frame(frame,borderwidth=2,relief=GROOVE) 34683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameEncoding=Frame(frame,borderwidth=2,relief=GROOVE) 34783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelp=LabelFrame(frame,borderwidth=2,relief=GROOVE, 34883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh text=' Additional Help Sources ') 34983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameRun 35083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelRunChoiceTitle=Label(frameRun,text='At Startup') 35183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioStartupEdit=Radiobutton(frameRun,variable=self.startupEdit, 35283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=1,command=self.SetKeysType,text="Open Edit Window") 35383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioStartupShell=Radiobutton(frameRun,variable=self.startupEdit, 35483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=0,command=self.SetKeysType,text='Open Shell Window') 35583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameSave 35683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelRunSaveTitle=Label(frameSave,text='At Start of Run (F5) ') 35783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioSaveAsk=Radiobutton(frameSave,variable=self.autoSave, 35883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=0,command=self.SetKeysType,text="Prompt to Save") 35983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioSaveAuto=Radiobutton(frameSave,variable=self.autoSave, 36083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=1,command=self.SetKeysType,text='No Prompt') 36183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameWinSize 36283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size'+ 36383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ' (in characters)') 36483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinWidthTitle=Label(frameWinSize,text='Width') 36583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth, 36683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh width=3) 36783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinHeightTitle=Label(frameWinSize,text='Height') 36883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight, 36983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh width=3) 37083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #paragraphFormatWidth 37183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelParaWidthTitle=Label(frameParaSize,text='Paragraph reformat'+ 37283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ' width (in characters)') 37383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryParaWidth=Entry(frameParaSize,textvariable=self.paraWidth, 37483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh width=3) 37583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameEncoding 37683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelEncodingTitle=Label(frameEncoding,text="Default Source Encoding") 37783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncLocale=Radiobutton(frameEncoding,variable=self.encoding, 37883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value="locale",text="Locale-defined") 37983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncUTF8=Radiobutton(frameEncoding,variable=self.encoding, 38083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value="utf-8",text="UTF-8") 38183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncNone=Radiobutton(frameEncoding,variable=self.encoding, 38283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value="none",text="None") 38383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameHelp 38483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelpList=Frame(frameHelp) 38583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelpListButtons=Frame(frameHelpList) 38683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollHelpList=Scrollbar(frameHelpList) 38783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp=Listbox(frameHelpList,height=5,takefocus=FALSE, 38883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh exportselection=FALSE) 38983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollHelpList.config(command=self.listHelp.yview) 39083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.config(yscrollcommand=scrollHelpList.set) 39183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.bind('<ButtonRelease-1>',self.HelpSourceSelected) 39283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListEdit=Button(frameHelpListButtons,text='Edit', 39383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh state=DISABLED,width=8,command=self.HelpListItemEdit) 39483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListAdd=Button(frameHelpListButtons,text='Add', 39583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh width=8,command=self.HelpListItemAdd) 39683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListRemove=Button(frameHelpListButtons,text='Remove', 39783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh state=DISABLED,width=8,command=self.HelpListItemRemove) 39883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #widget packing 39983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #body 40083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameRun.pack(side=TOP,padx=5,pady=5,fill=X) 40183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameSave.pack(side=TOP,padx=5,pady=5,fill=X) 40283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X) 40383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameParaSize.pack(side=TOP,padx=5,pady=5,fill=X) 40483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameEncoding.pack(side=TOP,padx=5,pady=5,fill=X) 40583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelp.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH) 40683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameRun 40783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5) 40883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioStartupShell.pack(side=RIGHT,anchor=W,padx=5,pady=5) 40983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioStartupEdit.pack(side=RIGHT,anchor=W,padx=5,pady=5) 41083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameSave 41183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelRunSaveTitle.pack(side=LEFT,anchor=W,padx=5,pady=5) 41283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioSaveAuto.pack(side=RIGHT,anchor=W,padx=5,pady=5) 41383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioSaveAsk.pack(side=RIGHT,anchor=W,padx=5,pady=5) 41483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameWinSize 41583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinSizeTitle.pack(side=LEFT,anchor=W,padx=5,pady=5) 41683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryWinHeight.pack(side=RIGHT,anchor=E,padx=10,pady=5) 41783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinHeightTitle.pack(side=RIGHT,anchor=E,pady=5) 41883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryWinWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5) 41983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelWinWidthTitle.pack(side=RIGHT,anchor=E,pady=5) 42083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #paragraphFormatWidth 42183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelParaWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5) 42283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh entryParaWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5) 42383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameEncoding 42483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh labelEncodingTitle.pack(side=LEFT,anchor=W,padx=5,pady=5) 42583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncNone.pack(side=RIGHT,anchor=E,pady=5) 42683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncUTF8.pack(side=RIGHT,anchor=E,pady=5) 42783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh radioEncLocale.pack(side=RIGHT,anchor=E,pady=5) 42883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #frameHelp 42983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelpListButtons.pack(side=RIGHT,padx=5,pady=5,fill=Y) 43083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh frameHelpList.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH) 43183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh scrollHelpList.pack(side=RIGHT,anchor=W,fill=Y) 43283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH) 43383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListEdit.pack(side=TOP,anchor=W,pady=5) 43483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListAdd.pack(side=TOP,anchor=W) 43583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListRemove.pack(side=TOP,anchor=W,pady=5) 43683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return frame 43783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 43883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def AttachVarCallbacks(self): 43983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontSize.trace_variable('w',self.VarChanged_fontSize) 44083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontName.trace_variable('w',self.VarChanged_fontName) 44183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontBold.trace_variable('w',self.VarChanged_fontBold) 44283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.spaceNum.trace_variable('w',self.VarChanged_spaceNum) 44383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.colour.trace_variable('w',self.VarChanged_colour) 44483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinTheme.trace_variable('w',self.VarChanged_builtinTheme) 44583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customTheme.trace_variable('w',self.VarChanged_customTheme) 44683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeIsBuiltin.trace_variable('w',self.VarChanged_themeIsBuiltin) 44783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.highlightTarget.trace_variable('w',self.VarChanged_highlightTarget) 44883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keyBinding.trace_variable('w',self.VarChanged_keyBinding) 44983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinKeys.trace_variable('w',self.VarChanged_builtinKeys) 45083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customKeys.trace_variable('w',self.VarChanged_customKeys) 45183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keysAreBuiltin.trace_variable('w',self.VarChanged_keysAreBuiltin) 45283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winWidth.trace_variable('w',self.VarChanged_winWidth) 45383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winHeight.trace_variable('w',self.VarChanged_winHeight) 45483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.paraWidth.trace_variable('w',self.VarChanged_paraWidth) 45583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.startupEdit.trace_variable('w',self.VarChanged_startupEdit) 45683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.autoSave.trace_variable('w',self.VarChanged_autoSave) 45783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.encoding.trace_variable('w',self.VarChanged_encoding) 45883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 45983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_fontSize(self,*params): 46083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.fontSize.get() 46183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','font-size',value) 46283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 46383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_fontName(self,*params): 46483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.fontName.get() 46583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','font',value) 46683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 46783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_fontBold(self,*params): 46883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.fontBold.get() 46983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','font-bold',value) 47083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 47183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_spaceNum(self,*params): 47283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.spaceNum.get() 47383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Indent','num-spaces',value) 47483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 47583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_colour(self,*params): 47683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.OnNewColourSet() 47783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 47883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_builtinTheme(self,*params): 47983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.builtinTheme.get() 48083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Theme','name',value) 48183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.PaintThemeSample() 48283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 48383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_customTheme(self,*params): 48483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.customTheme.get() 48583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if value != '- no custom themes -': 48683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Theme','name',value) 48783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.PaintThemeSample() 48883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 48983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_themeIsBuiltin(self,*params): 49083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.themeIsBuiltin.get() 49183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Theme','default',value) 49283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if value: 49383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.VarChanged_builtinTheme() 49483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 49583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.VarChanged_customTheme() 49683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 49783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_highlightTarget(self,*params): 49883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHighlightTarget() 49983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 50083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_keyBinding(self,*params): 50183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.keyBinding.get() 50283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySet=self.customKeys.get() 50383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh event=self.listBindings.get(ANCHOR).split()[0] 50483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if idleConf.IsCoreBinding(event): 50583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #this is a core keybinding 50683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('keys',keySet,event,value) 50783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #this is an extension key binding 50883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh extName=idleConf.GetExtnNameForEvent(event) 50983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh extKeybindSection=extName+'_cfgBindings' 51083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('extensions',extKeybindSection,event,value) 51183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 51283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_builtinKeys(self,*params): 51383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.builtinKeys.get() 51483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Keys','name',value) 51583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadKeysList(value) 51683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 51783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_customKeys(self,*params): 51883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.customKeys.get() 51983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if value != '- no custom keys -': 52083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Keys','name',value) 52183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadKeysList(value) 52283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 52383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_keysAreBuiltin(self,*params): 52483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.keysAreBuiltin.get() 52583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','Keys','default',value) 52683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if value: 52783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.VarChanged_builtinKeys() 52883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 52983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.VarChanged_customKeys() 53083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 53183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_winWidth(self,*params): 53283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.winWidth.get() 53383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','width',value) 53483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 53583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_winHeight(self,*params): 53683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.winHeight.get() 53783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','height',value) 53883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 53983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_paraWidth(self,*params): 54083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.paraWidth.get() 54183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','FormatParagraph','paragraph',value) 54283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 54383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_startupEdit(self,*params): 54483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.startupEdit.get() 54583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','General','editor-on-startup',value) 54683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 54783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_autoSave(self,*params): 54883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.autoSave.get() 54983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','General','autosave',value) 55083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 55183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def VarChanged_encoding(self,*params): 55283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=self.encoding.get() 55383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','EditorWindow','encoding',value) 55483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 55583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def ResetChangedItems(self): 55683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #When any config item is changed in this dialog, an entry 55783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #should be made in the relevant section (config type) of this 55883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #dictionary. The key should be the config file section name and the 55983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #value a dictionary, whose key:value pairs are item=value pairs for 56083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #that config file section. 56183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.changedItems={'main':{},'highlight':{},'keys':{},'extensions':{}} 56283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 56383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def AddChangedItem(self,type,section,item,value): 56483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=str(value) #make sure we use a string 56583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if section not in self.changedItems[type]: 56683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.changedItems[type][section]={} 56783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.changedItems[type][section][item]=value 56883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 56983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def GetDefaultItems(self): 57083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh dItems={'main':{},'highlight':{},'keys':{},'extensions':{}} 57183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for configType in dItems.keys(): 57283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sections=idleConf.GetSectionList('default',configType) 57383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for section in sections: 57483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh dItems[configType][section]={} 57583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh options=idleConf.defaultCfg[configType].GetOptionList(section) 57683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for option in options: 57783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh dItems[configType][section][option]=( 57883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.defaultCfg[configType].Get(section,option)) 57983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return dItems 58083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 58183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetThemeType(self): 58283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.themeIsBuiltin.get(): 58383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin.config(state=NORMAL) 58483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.config(state=DISABLED) 58583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomTheme.config(state=DISABLED) 58683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 58783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin.config(state=DISABLED) 58883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeCustom.config(state=NORMAL) 58983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.config(state=NORMAL) 59083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomTheme.config(state=NORMAL) 59183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 59283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetKeysType(self): 59383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.keysAreBuiltin.get(): 59483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin.config(state=NORMAL) 59583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.config(state=DISABLED) 59683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomKeys.config(state=DISABLED) 59783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 59883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin.config(state=DISABLED) 59983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysCustom.config(state=NORMAL) 60083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.config(state=NORMAL) 60183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonDeleteCustomKeys.config(state=NORMAL) 60283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 60383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def GetNewKeys(self): 60483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh listIndex=self.listBindings.index(ANCHOR) 60583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh binding=self.listBindings.get(listIndex) 60683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bindName=binding.split()[0] #first part, up to first space 60783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.keysAreBuiltin.get(): 60883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentKeySetName=self.builtinKeys.get() 60983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 61083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentKeySetName=self.customKeys.get() 61183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentBindings=idleConf.GetCurrentKeySet() 61283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if currentKeySetName in self.changedItems['keys'].keys(): #unsaved changes 61383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySetChanges=self.changedItems['keys'][currentKeySetName] 61483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for event in keySetChanges.keys(): 61583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentBindings[event]=keySetChanges[event].split() 61683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentKeySequences=currentBindings.values() 61783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeys=GetKeysDialog(self,'Get New Keys',bindName, 61883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentKeySequences).result 61983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if newKeys: #new keys were specified 62083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.keysAreBuiltin.get(): #current key set is a built-in 62183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh message=('Your changes will be saved as a new Custom Key Set. '+ 62283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Enter a name for your new Custom Key Set below.') 62383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeySet=self.GetNewKeysName(message) 62483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not newKeySet: #user cancelled custom key set creation 62583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_set(listIndex) 62683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_anchor(listIndex) 62783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return 62883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #create new custom key set based on previously active key set 62983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreateNewKeySet(newKeySet) 63083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.delete(listIndex) 63183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.insert(listIndex,bindName+' - '+newKeys) 63283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_set(listIndex) 63383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_anchor(listIndex) 63483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keyBinding.set(newKeys) 63583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 63683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_set(listIndex) 63783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_anchor(listIndex) 63883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 63983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def GetNewKeysName(self,message): 64083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh usedNames=(idleConf.GetSectionList('user','keys')+ 64183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.GetSectionList('default','keys')) 64283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeySet=GetCfgSectionNameDialog(self,'New Custom Key Set', 64383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh message,usedNames).result 64483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return newKeySet 64583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 64683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SaveAsNewKeySet(self): 64783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeysName=self.GetNewKeysName('New Key Set Name:') 64883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if newKeysName: 64983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreateNewKeySet(newKeysName) 65083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 65183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def KeyBindingSelected(self,event): 65283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonNewKeys.config(state=NORMAL) 65383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 65483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreateNewKeySet(self,newKeySetName): 65583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #creates new custom key set based on the previously active key set, 65683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #and makes the new key set active 65783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.keysAreBuiltin.get(): 65883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh prevKeySetName=self.builtinKeys.get() 65983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 66083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh prevKeySetName=self.customKeys.get() 66183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh prevKeys=idleConf.GetCoreKeys(prevKeySetName) 66283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeys={} 66383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for event in prevKeys.keys(): #add key set to changed items 66483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh eventName=event[2:-2] #trim off the angle brackets 66583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh binding=string.join(prevKeys[event]) 66683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeys[eventName]=binding 66783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #handle any unsaved changes to prev key set 66883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if prevKeySetName in self.changedItems['keys'].keys(): 66983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySetChanges=self.changedItems['keys'][prevKeySetName] 67083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for event in keySetChanges.keys(): 67183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeys[event]=keySetChanges[event] 67283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #save the new theme 67383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SaveNewKeySet(newKeySetName,newKeys) 67483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #change gui over to the new key set 67583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh customKeyList=idleConf.GetSectionList('user','keys') 67683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh customKeyList.sort() 67783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.SetMenu(customKeyList,newKeySetName) 67883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keysAreBuiltin.set(0) 67983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetKeysType() 68083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 68183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadKeysList(self,keySetName): 68283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh reselect=0 68383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newKeySet=0 68483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.listBindings.curselection(): 68583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh reselect=1 68683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh listIndex=self.listBindings.index(ANCHOR) 68783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySet=idleConf.GetKeySet(keySetName) 68883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bindNames=keySet.keys() 68983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bindNames.sort() 69083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.delete(0,END) 69183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for bindName in bindNames: 69283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh key=string.join(keySet[bindName]) #make key(s) into a string 69383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh bindName=bindName[2:-2] #trim off the angle brackets 69483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if keySetName in self.changedItems['keys'].keys(): 69583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #handle any unsaved changes to this key set 69683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if bindName in self.changedItems['keys'][keySetName].keys(): 69783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh key=self.changedItems['keys'][keySetName][bindName] 69883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.insert(END, bindName+' - '+key) 69983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if reselect: 70083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.see(listIndex) 70183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_set(listIndex) 70283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listBindings.select_anchor(listIndex) 70383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 70483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def DeleteCustomKeys(self): 70583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySetName=self.customKeys.get() 70683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not tkMessageBox.askyesno('Delete Key Set','Are you sure you wish '+ 70783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'to delete the key set %r ?' % (keySetName), 70883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh parent=self): 70983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return 71083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #remove key set from config 71183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['keys'].remove_section(keySetName) 71283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if keySetName in self.changedItems['keys']: 71383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del(self.changedItems['keys'][keySetName]) 71483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #write changes 71583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['keys'].Save() 71683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #reload user key set list 71783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','keys') 71883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 71983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not itemList: 72083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysCustom.config(state=DISABLED) 72183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.SetMenu(itemList,'- no custom keys -') 72283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 72383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.SetMenu(itemList,itemList[0]) 72483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #revert to default key set 72583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys','default')) 72683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys','name')) 72783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #user can't back out of these changes, they must be applied now 72883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.Apply() 72983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetKeysType() 73083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 73183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def DeleteCustomTheme(self): 73283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeName=self.customTheme.get() 73383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not tkMessageBox.askyesno('Delete Theme','Are you sure you wish '+ 73483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'to delete the theme %r ?' % (themeName,), 73583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh parent=self): 73683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return 73783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #remove theme from config 73883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['highlight'].remove_section(themeName) 73983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if themeName in self.changedItems['highlight']: 74083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del(self.changedItems['highlight'][themeName]) 74183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #write changes 74283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['highlight'].Save() 74383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #reload user theme list 74483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','highlight') 74583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 74683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not itemList: 74783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeCustom.config(state=DISABLED) 74883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.SetMenu(itemList,'- no custom themes -') 74983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 75083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.SetMenu(itemList,itemList[0]) 75183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #revert to default theme 75283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeIsBuiltin.set(idleConf.defaultCfg['main'].Get('Theme','default')) 75383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.builtinTheme.set(idleConf.defaultCfg['main'].Get('Theme','name')) 75483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #user can't back out of these changes, they must be applied now 75583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.Apply() 75683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetThemeType() 75783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 75883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def GetColour(self): 75983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh target=self.highlightTarget.get() 76083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh prevColour=self.frameColourSet.cget('bg') 76183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh rgbTuplet, colourString = tkColorChooser.askcolor(parent=self, 76283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh title='Pick new colour for : '+target,initialcolor=prevColour) 76383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if colourString and (colourString!=prevColour): 76483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #user didn't cancel, and they chose a new colour 76583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.themeIsBuiltin.get(): #current theme is a built-in 76683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh message=('Your changes will be saved as a new Custom Theme. '+ 76783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'Enter a name for your new Custom Theme below.') 76883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newTheme=self.GetNewThemeName(message) 76983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not newTheme: #user cancelled custom theme creation 77083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return 77183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #create new custom theme based on previously active theme 77283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreateNewTheme(newTheme) 77383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.colour.set(colourString) 77483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #current theme is user defined 77583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.colour.set(colourString) 77683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 77783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def OnNewColourSet(self): 77883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newColour=self.colour.get() 77983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.frameColourSet.config(bg=newColour)#set sample 78083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.fgHilite.get(): plane='foreground' 78183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: plane='background' 78283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh sampleElement=self.themeElements[self.highlightTarget.get()][0] 78383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.textHighlightSample.tag_config(sampleElement, **{plane:newColour}) 78483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh theme=self.customTheme.get() 78583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeElement=sampleElement+'-'+plane 78683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('highlight',theme,themeElement,newColour) 78783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 78883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def GetNewThemeName(self,message): 78983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh usedNames=(idleConf.GetSectionList('user','highlight')+ 79083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.GetSectionList('default','highlight')) 79183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newTheme=GetCfgSectionNameDialog(self,'New Custom Theme', 79283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh message,usedNames).result 79383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return newTheme 79483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 79583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SaveAsNewTheme(self): 79683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newThemeName=self.GetNewThemeName('New Theme Name:') 79783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if newThemeName: 79883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.CreateNewTheme(newThemeName) 79983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 80083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def CreateNewTheme(self,newThemeName): 80183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #creates new custom theme based on the previously active theme, 80283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #and makes the new theme active 80383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.themeIsBuiltin.get(): 80483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeType='default' 80583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeName=self.builtinTheme.get() 80683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 80783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeType='user' 80883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeName=self.customTheme.get() 80983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newTheme=idleConf.GetThemeDict(themeType,themeName) 81083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #apply any of the old theme's unsaved changes to the new theme 81183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if themeName in self.changedItems['highlight'].keys(): 81283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeChanges=self.changedItems['highlight'][themeName] 81383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for element in themeChanges.keys(): 81483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newTheme[element]=themeChanges[element] 81583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #save the new theme 81683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SaveNewTheme(newThemeName,newTheme) 81783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #change gui over to the new theme 81883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh customThemeList=idleConf.GetSectionList('user','highlight') 81983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh customThemeList.sort() 82083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.SetMenu(customThemeList,newThemeName) 82183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeIsBuiltin.set(0) 82283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetThemeType() 82383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 82483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def OnListFontButtonRelease(self,event): 82583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh font = self.listFontName.get(ANCHOR) 82683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontName.set(font.lower()) 82783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetFontSample() 82883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 82983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetFontSample(self,event=None): 83083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fontName=self.fontName.get() 83183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.fontBold.get(): 83283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fontWeight=tkFont.BOLD 83383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 83483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fontWeight=tkFont.NORMAL 83583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newFont = (fontName, self.fontSize.get(), fontWeight) 83683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.labelFontSample.config(font=newFont) 83783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.textHighlightSample.configure(font=newFont) 83883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 83983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetHighlightTarget(self): 84083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.highlightTarget.get()=='Cursor': #bg not possible 84183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioFg.config(state=DISABLED) 84283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioBg.config(state=DISABLED) 84383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fgHilite.set(1) 84483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #both fg and bg can be set 84583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioFg.config(state=NORMAL) 84683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioBg.config(state=NORMAL) 84783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fgHilite.set(1) 84883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetColourSample() 84983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 85083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetColourSampleBinding(self,*args): 85183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetColourSample() 85283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 85383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetColourSample(self): 85483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #set the colour smaple area 85583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh tag=self.themeElements[self.highlightTarget.get()][0] 85683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.fgHilite.get(): plane='foreground' 85783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: plane='background' 85883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh colour=self.textHighlightSample.tag_cget(tag,plane) 85983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.frameColourSet.config(bg=colour) 86083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 86183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def PaintThemeSample(self): 86283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.themeIsBuiltin.get(): #a default theme 86383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh theme=self.builtinTheme.get() 86483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #a user theme 86583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh theme=self.customTheme.get() 86683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for elementTitle in self.themeElements.keys(): 86783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh element=self.themeElements[elementTitle][0] 86883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh colours=idleConf.GetHighlight(theme,element) 86983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if element=='cursor': #cursor sample needs special painting 87083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh colours['background']=idleConf.GetHighlight(theme, 87183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'normal', fgBg='bg') 87283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #handle any unsaved changes to this theme 87383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if theme in self.changedItems['highlight'].keys(): 87483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeDict=self.changedItems['highlight'][theme] 87583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if element+'-foreground' in themeDict: 87683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh colours['foreground']=themeDict[element+'-foreground'] 87783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if element+'-background' in themeDict: 87883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh colours['background']=themeDict[element+'-background'] 87983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.textHighlightSample.tag_config(element, **colours) 88083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetColourSample() 88183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 88283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def HelpSourceSelected(self,event): 88383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHelpListButtonStates() 88483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 88583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetHelpListButtonStates(self): 88683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.listHelp.size()<1: #no entries in list 88783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListEdit.config(state=DISABLED) 88883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListRemove.config(state=DISABLED) 88983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #there are some entries 89083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.listHelp.curselection(): #there currently is a selection 89183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListEdit.config(state=NORMAL) 89283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListRemove.config(state=NORMAL) 89383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #there currently is not a selection 89483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListEdit.config(state=DISABLED) 89583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.buttonHelpListRemove.config(state=DISABLED) 89683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 89783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def HelpListItemAdd(self): 89883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh helpSource=GetHelpSourceDialog(self,'New Help Source').result 89983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if helpSource: 90083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.userHelpList.append( (helpSource[0],helpSource[1]) ) 90183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.insert(END,helpSource[0]) 90283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.UpdateUserHelpChangedItems() 90383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHelpListButtonStates() 90483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 90583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def HelpListItemEdit(self): 90683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemIndex=self.listHelp.index(ANCHOR) 90783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh helpSource=self.userHelpList[itemIndex] 90883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh newHelpSource=GetHelpSourceDialog(self,'Edit Help Source', 90983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh menuItem=helpSource[0],filePath=helpSource[1]).result 91083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if (not newHelpSource) or (newHelpSource==helpSource): 91183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return #no changes 91283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.userHelpList[itemIndex]=newHelpSource 91383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.delete(itemIndex) 91483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.insert(itemIndex,newHelpSource[0]) 91583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.UpdateUserHelpChangedItems() 91683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHelpListButtonStates() 91783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 91883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def HelpListItemRemove(self): 91983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemIndex=self.listHelp.index(ANCHOR) 92083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh del(self.userHelpList[itemIndex]) 92183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.delete(itemIndex) 92283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.UpdateUserHelpChangedItems() 92383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHelpListButtonStates() 92483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 92583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def UpdateUserHelpChangedItems(self): 92683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Clear and rebuild the HelpFiles section in self.changedItems" 92783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.changedItems['main']['HelpFiles'] = {} 92883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for num in range(1,len(self.userHelpList)+1): 92983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.AddChangedItem('main','HelpFiles',str(num), 93083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh string.join(self.userHelpList[num-1][:2],';')) 93183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 93283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadFontCfg(self): 93383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##base editor font selection list 93483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fonts=list(tkFont.families(self)) 93583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fonts.sort() 93683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for font in fonts: 93783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.insert(END,font) 93883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh configuredFont=idleConf.GetOption('main','EditorWindow','font', 93983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh default='courier') 94083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lc_configuredFont = configuredFont.lower() 94183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontName.set(lc_configuredFont) 94283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh lc_fonts = [s.lower() for s in fonts] 94383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if lc_configuredFont in lc_fonts: 94483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentFontIndex = lc_fonts.index(lc_configuredFont) 94583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.see(currentFontIndex) 94683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.select_set(currentFontIndex) 94783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listFontName.select_anchor(currentFontIndex) 94883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##font size dropdown 94983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh fontSize=idleConf.GetOption('main','EditorWindow','font-size', 95083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='int', default='10') 95183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuFontSize.SetMenu(('7','8','9','10','11','12','13','14', 95283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh '16','18','20','22'),fontSize ) 95383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##fontWeight 95483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.fontBold.set(idleConf.GetOption('main','EditorWindow', 95583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'font-bold',default=0,type='bool')) 95683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##font sample 95783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetFontSample() 95883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 95983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadTabCfg(self): 96083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##indent sizes 96183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh spaceNum=idleConf.GetOption('main','Indent','num-spaces', 96283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh default=4,type='int') 96383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.spaceNum.set(spaceNum) 96483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 96583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadThemeCfg(self): 96683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##current theme type radiobutton 96783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.themeIsBuiltin.set(idleConf.GetOption('main','Theme','default', 96883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='bool',default=1)) 96983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##currently set theme 97083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentOption=idleConf.CurrentTheme() 97183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##load available theme option menus 97283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.themeIsBuiltin.get(): #default theme selected 97383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('default','highlight') 97483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 97583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin.SetMenu(itemList,currentOption) 97683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','highlight') 97783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 97883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not itemList: 97983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioThemeCustom.config(state=DISABLED) 98083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customTheme.set('- no custom themes -') 98183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 98283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.SetMenu(itemList,itemList[0]) 98383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #user theme selected 98483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','highlight') 98583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 98683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeCustom.SetMenu(itemList,currentOption) 98783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('default','highlight') 98883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 98983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuThemeBuiltin.SetMenu(itemList,itemList[0]) 99083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetThemeType() 99183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##load theme element option menu 99283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeNames=self.themeElements.keys() 99383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeNames.sort(key=lambda x: self.themeElements[x][1]) 99483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuHighlightTarget.SetMenu(themeNames,themeNames[0]) 99583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.PaintThemeSample() 99683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHighlightTarget() 99783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 99883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadKeyCfg(self): 99983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##current keys type radiobutton 100083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.keysAreBuiltin.set(idleConf.GetOption('main','Keys','default', 100183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='bool',default=1)) 100283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##currently set keys 100383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh currentOption=idleConf.CurrentKeys() 100483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##load available keyset option menus 100583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.keysAreBuiltin.get(): #default theme selected 100683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('default','keys') 100783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 100883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin.SetMenu(itemList,currentOption) 100983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','keys') 101083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 101183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not itemList: 101283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.radioKeysCustom.config(state=DISABLED) 101383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.customKeys.set('- no custom keys -') 101483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: 101583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.SetMenu(itemList,itemList[0]) 101683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh else: #user key set selected 101783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('user','keys') 101883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 101983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysCustom.SetMenu(itemList,currentOption) 102083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList=idleConf.GetSectionList('default','keys') 102183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh itemList.sort() 102283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.optMenuKeysBuiltin.SetMenu(itemList,itemList[0]) 102383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetKeysType() 102483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ##load keyset element list 102583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySetName=idleConf.CurrentKeys() 102683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadKeysList(keySetName) 102783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 102883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadGeneralCfg(self): 102983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #startup state 103083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.startupEdit.set(idleConf.GetOption('main','General', 103183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'editor-on-startup',default=1,type='bool')) 103283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #autosave state 103383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.autoSave.set(idleConf.GetOption('main', 'General', 'autosave', 103483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh default=0, type='bool')) 103583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #initial window size 103683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winWidth.set(idleConf.GetOption('main','EditorWindow','width', 103783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='int')) 103883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.winHeight.set(idleConf.GetOption('main','EditorWindow','height', 103983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='int')) 104083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #initial paragraph reformat size 104183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.paraWidth.set(idleConf.GetOption('main','FormatParagraph','paragraph', 104283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh type='int')) 104383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # default source encoding 104483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.encoding.set(idleConf.GetOption('main', 'EditorWindow', 104583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 'encoding', default='none')) 104683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # additional help sources 104783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.userHelpList = idleConf.GetAllExtraHelpSourcesList() 104883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for helpItem in self.userHelpList: 104983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.listHelp.insert(END,helpItem[0]) 105083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SetHelpListButtonStates() 105183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 105283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def LoadConfigs(self): 105383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 105483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh load configuration from default and user config files and populate 105583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh the widgets on the config dialog pages. 105683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 105783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ### fonts / tabs page 105883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadFontCfg() 105983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadTabCfg() 106083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ### highlighting page 106183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadThemeCfg() 106283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ### keys page 106383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadKeyCfg() 106483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh ### general page 106583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.LoadGeneralCfg() 106683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 106783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SaveNewKeySet(self,keySetName,keySet): 106883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 106983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh save a newly created core key set. 107083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySetName - string, the name of the new key set 107183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh keySet - dictionary containing the new key set 107283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 107383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not idleConf.userCfg['keys'].has_section(keySetName): 107483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['keys'].add_section(keySetName) 107583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for event in keySet.keys(): 107683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=keySet[event] 107783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['keys'].SetOption(keySetName,event,value) 107883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 107983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SaveNewTheme(self,themeName,theme): 108083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 108183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh save a newly created theme. 108283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh themeName - string, the name of the new theme 108383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh theme - dictionary containing the new theme 108483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 108583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if not idleConf.userCfg['highlight'].has_section(themeName): 108683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['highlight'].add_section(themeName) 108783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for element in theme.keys(): 108883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value=theme[element] 108983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['highlight'].SetOption(themeName,element,value) 109083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 109183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SetUserValue(self,configType,section,item,value): 109283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if idleConf.defaultCfg[configType].has_option(section,item): 109383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if idleConf.defaultCfg[configType].Get(section,item)==value: 109483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #the setting equals a default setting, remove it from user cfg 109583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return idleConf.userCfg[configType].RemoveOption(section,item) 109683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #if we got here set the option 109783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh return idleConf.userCfg[configType].SetOption(section,item,value) 109883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 109983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def SaveAllChangedConfigs(self): 110083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Save configuration changes to the user config file." 110183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['main'].Save() 110283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for configType in self.changedItems.keys(): 110383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cfgTypeHasChanges = False 110483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for section in self.changedItems[configType].keys(): 110583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if section == 'HelpFiles': 110683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #this section gets completely replaced 110783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg['main'].remove_section('HelpFiles') 110883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cfgTypeHasChanges = True 110983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for item in self.changedItems[configType][section].keys(): 111083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh value = self.changedItems[configType][section][item] 111183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if self.SetUserValue(configType,section,item,value): 111283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh cfgTypeHasChanges = True 111383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh if cfgTypeHasChanges: 111483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg[configType].Save() 111583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for configType in ['keys', 'highlight']: 111683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh # save these even if unchanged! 111783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh idleConf.userCfg[configType].Save() 111883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.ResetChangedItems() #clear the changed items dict 111983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 112083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def DeactivateCurrentConfig(self): 112183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #Before a config is saved, some cleanup of current 112283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #config must be done - remove the previous keybindings 112383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh winInstances=self.parent.instance_dict.keys() 112483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for instance in winInstances: 112583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.RemoveKeybindings() 112683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 112783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def ActivateConfigChanges(self): 112883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh "Dynamically apply configuration changes" 112983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh winInstances=self.parent.instance_dict.keys() 113083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh for instance in winInstances: 113183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.ResetColorizer() 113283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.ResetFont() 113383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.set_notabs_indentwidth() 113483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.ApplyKeybindings() 113583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh instance.reset_help_menu_entries() 113683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 113783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def Cancel(self): 113883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.destroy() 113983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 114083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def Ok(self): 114183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.Apply() 114283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.destroy() 114383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 114483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def Apply(self): 114583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.DeactivateCurrentConfig() 114683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.SaveAllChangedConfigs() 114783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh self.ActivateConfigChanges() 114883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 114983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def Help(self): 115083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh pass 115183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 115283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehif __name__ == '__main__': 115383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh #test the dialog 115483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh root=Tk() 115583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh Button(root,text='Dialog', 115683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh command=lambda:ConfigDialog(root,'Settings')).pack() 115783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh root.instance_dict={} 115883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh root.mainloop() 1159