blob: e290aa57f0e3d3a4d3bbacf7ad04aa1d62a7e649 [file] [log] [blame]
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00001##---------------------------------------------------------------------------##
2##
3## idle - configuration dialog
4## elguavas
5##
6##---------------------------------------------------------------------------##
7"""
8configuration dialog
9"""
10from Tkinter import *
11import tkMessageBox
12
13class ConfigDialog(Toplevel):
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000014 """
Steven M. Gavad721c482001-07-31 10:46:53 +000015 configuration dialog for idle
16 """
17 def __init__(self,parent,title,configDict):
18 """
19 configDict - dictionary of configuration items
20 """
21 Toplevel.__init__(self, parent)
22 self.configure(borderwidth=5)
23 self.geometry("+%d+%d" % (parent.winfo_rootx()+20,
24 parent.winfo_rooty()+30))
25 self.config=configDict
26 #elguavas - config placeholders til config stuff completed
27 self.bg=self.cget('bg')
28 self.fg=None
29 #no ugly bold default text font on *nix
30 self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',)
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000031
Steven M. Gavad721c482001-07-31 10:46:53 +000032 self.CreateWidgets()
33 self.resizable(height=FALSE,width=FALSE)
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000034 self.ChangePage()
Steven M. Gavad721c482001-07-31 10:46:53 +000035 self.transient(parent)
36 self.grab_set()
37 self.protocol("WM_DELETE_WINDOW", self.Cancel)
38 self.parent = parent
39 self.framePages.focus_set()
40 #key bindings for this dialog
41# self.bind('<Return>',self.Ok) #dismiss dialog
42 self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
43 self.bind('<Alt-s>',self.SaveBinding) #dismiss dialog, save
44 self.bind('<Alt-r>',self.RevertBinding) #revert to defaults
45 self.bind('<Alt-f>',self.ChangePageBinding)
46 self.bind('<Alt-c>',self.ChangePageBinding)
47 self.bind('<Alt-k>',self.ChangePageBinding)
48 self.bind('<Alt-g>',self.ChangePageBinding)
49 self.wait_window()
50
51 def Cancel(self):
52 self.destroy()
53
54 def Save(self):
55 pass
56
57 def Revert(self):
58 pass
59
60 def ChangePage(self):
61 self.pages[self.pageNum.get()].lift()
62 self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text'))
63
64 def CancelBinding(self,event):
65 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000066
Steven M. Gavad721c482001-07-31 10:46:53 +000067 def SaveBinding(self,event):
68 self.Save()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000069
Steven M. Gavad721c482001-07-31 10:46:53 +000070 def RevertBinding(self,event):
71 self.Revert()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000072
Steven M. Gavad721c482001-07-31 10:46:53 +000073 def ChangePageBinding(self,event):
74 pageKeys=('f','c','k','g')
75 pos=0
76 for key in pageKeys:
77 if event.char == key:
78 self.pageNum.set(pos)
79 self.ChangePage()
80 return
81 pos=pos+1
82
83 def CreateWidgets(self):
84 self.framePages = Frame(self,borderwidth=2,relief=SUNKEN)
85 frameActionButtons = Frame(self)
86 framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
87 #action buttons
88 self.buttonRevert = Button(frameActionButtons,text='Revert',
89 command=self.Revert,underline=0,takefocus=FALSE)
90 self.buttonSave = Button(frameActionButtons,text='Save',
91 command=self.Save,underline=0,takefocus=FALSE)
92 self.buttonCancel = Button(frameActionButtons,text='Cancel',
93 command=self.Cancel,takefocus=FALSE)
94 #page buttons
95 self.pageNum=IntVar()
96 self.pageNum.set(0)
97 buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts')
98 buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours')
99 buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys')
100 buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General')
101 self.pageButtons=(buttonPageFonts,buttonPageColours,
102 buttonPageKeys,buttonPageGeneral)
103 for button in self.pageButtons:
104 button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
105 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
106 selectcolor=self.bg,borderwidth=1)
107 button.pack(side=LEFT)
108 #pages
109 framePageFonts=Frame(self.framePages)
110 framePageColours=Frame(self.framePages)
111 framePageKeys=Frame(self.framePages)
112 framePageGeneral=Frame(self.framePages)
113 self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral)
114 #pageFonts
115 Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30)
116 #pageColours
117 Button(framePageColours,text='colours page test').pack(padx=60,pady=60)
118 #pageKeys
119 Button(framePageKeys,text='keys page test').pack(padx=90,pady=90)
120 #pageGeneral
121 Button(framePageGeneral,text='general page test').pack(padx=110,pady=110)
122
123 #grid in framePages so we can overlap pages
124 framePageButtons.grid(row=0,column=0,sticky=W)
125 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
126
127 self.buttonRevert.pack(side=LEFT,padx=5,pady=5)
128 self.buttonSave.pack(side=LEFT,padx=5,pady=5)
129 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
130 frameActionButtons.pack(side=BOTTOM)
131 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
132
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000133if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000134 #test the dialog
135 root=Tk()
136 Button(root,text='Dialog',
137 command=lambda:ConfigDialog(root,'Settings',None)).pack()
138 root.mainloop()