summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/configDialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/configDialog.py')
-rw-r--r--Lib/idlelib/configDialog.py138
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()