some new dialogs and support files for new about and configuration implementations
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()