[Idle-dev] CVS: idle configDialog.py,NONE,1.1

Stephen elguavas@users.sourceforge.net
Mon, 30 Jul 2001 23:58:55 -0700


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv19222

Added Files:
	configDialog.py 
Log Message:
some new dialogs and support files for new about and configuration implementations


--- NEW FILE: configDialog.py ---
##---------------------------------------------------------------------------##
##
## 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()