diff options
author | Steven M. Gava <elguavas@python.net> | 2001-07-31 06:59:02 (GMT) |
---|---|---|
committer | Steven M. Gava <elguavas@python.net> | 2001-07-31 06:59:02 (GMT) |
commit | 44d3d1a394571c6ddfe29911f92fdd29fd62db71 (patch) | |
tree | a030379584390b1eb7ac0fbad2a8c7ea6eaad0d9 /Lib/idlelib/configDialog.py | |
parent | 0fbca4aaf0b5caa39e2456a176ccb52ded948488 (diff) | |
download | cpython-44d3d1a394571c6ddfe29911f92fdd29fd62db71.zip cpython-44d3d1a394571c6ddfe29911f92fdd29fd62db71.tar.gz cpython-44d3d1a394571c6ddfe29911f92fdd29fd62db71.tar.bz2 |
some new dialogs and support files for new about and configuration implementations
Diffstat (limited to 'Lib/idlelib/configDialog.py')
-rw-r--r-- | Lib/idlelib/configDialog.py | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py new file mode 100644 index 0000000..f46f95f --- /dev/null +++ b/Lib/idlelib/configDialog.py @@ -0,0 +1,138 @@ +##---------------------------------------------------------------------------## +## +## idle - configuration dialog +## elguavas +## +##---------------------------------------------------------------------------## +""" +configuration dialog +""" +from Tkinter import * +import tkMessageBox + +class ConfigDialog(Toplevel): + """ + configuration dialog for idle + """ + def __init__(self,parent,title,configDict): + """ + configDict - dictionary of configuration items + """ + Toplevel.__init__(self, parent) + self.configure(borderwidth=5) + self.geometry("+%d+%d" % (parent.winfo_rootx()+20, + parent.winfo_rooty()+30)) + self.config=configDict + #elguavas - config placeholders til config stuff completed + self.bg=self.cget('bg') + self.fg=None + #no ugly bold default text font on *nix + self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) + + self.CreateWidgets() + self.resizable(height=FALSE,width=FALSE) + self.ChangePage() + self.transient(parent) + self.grab_set() + self.protocol("WM_DELETE_WINDOW", self.Cancel) + self.parent = parent + self.framePages.focus_set() + #key bindings for this dialog +# self.bind('<Return>',self.Ok) #dismiss dialog + self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save + self.bind('<Alt-s>',self.SaveBinding) #dismiss dialog, save + self.bind('<Alt-r>',self.RevertBinding) #revert to defaults + self.bind('<Alt-f>',self.ChangePageBinding) + self.bind('<Alt-c>',self.ChangePageBinding) + self.bind('<Alt-k>',self.ChangePageBinding) + self.bind('<Alt-g>',self.ChangePageBinding) + self.wait_window() + + def Cancel(self): + self.destroy() + + def Save(self): + pass + + def Revert(self): + pass + + def ChangePage(self): + self.pages[self.pageNum.get()].lift() + self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text')) + + def CancelBinding(self,event): + self.Cancel() + + def SaveBinding(self,event): + self.Save() + + def RevertBinding(self,event): + self.Revert() + + def ChangePageBinding(self,event): + pageKeys=('f','c','k','g') + pos=0 + for key in pageKeys: + if event.char == key: + self.pageNum.set(pos) + self.ChangePage() + return + pos=pos+1 + + def CreateWidgets(self): + self.framePages = Frame(self,borderwidth=2,relief=SUNKEN) + frameActionButtons = Frame(self) + framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN) + #action buttons + self.buttonRevert = Button(frameActionButtons,text='Revert', + command=self.Revert,underline=0,takefocus=FALSE) + self.buttonSave = Button(frameActionButtons,text='Save', + command=self.Save,underline=0,takefocus=FALSE) + self.buttonCancel = Button(frameActionButtons,text='Cancel', + command=self.Cancel,takefocus=FALSE) + #page buttons + self.pageNum=IntVar() + self.pageNum.set(0) + buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts') + buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours') + buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys') + buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General') + self.pageButtons=(buttonPageFonts,buttonPageColours, + buttonPageKeys,buttonPageGeneral) + for button in self.pageButtons: + button.config(command=self.ChangePage,underline=0,takefocus=FALSE, + indicatoron=FALSE,highlightthickness=0,variable=self.pageNum, + selectcolor=self.bg,borderwidth=1) + button.pack(side=LEFT) + #pages + framePageFonts=Frame(self.framePages) + framePageColours=Frame(self.framePages) + framePageKeys=Frame(self.framePages) + framePageGeneral=Frame(self.framePages) + self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral) + #pageFonts + Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30) + #pageColours + Button(framePageColours,text='colours page test').pack(padx=60,pady=60) + #pageKeys + Button(framePageKeys,text='keys page test').pack(padx=90,pady=90) + #pageGeneral + Button(framePageGeneral,text='general page test').pack(padx=110,pady=110) + + #grid in framePages so we can overlap pages + framePageButtons.grid(row=0,column=0,sticky=W) + for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W)) + + self.buttonRevert.pack(side=LEFT,padx=5,pady=5) + self.buttonSave.pack(side=LEFT,padx=5,pady=5) + self.buttonCancel.pack(side=LEFT,padx=5,pady=5) + frameActionButtons.pack(side=BOTTOM) + self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH) + +if __name__ == '__main__': + #test the dialog + root=Tk() + Button(root,text='Dialog', + command=lambda:ConfigDialog(root,'Settings',None)).pack() + root.mainloop() |