blob: 41b91ebe858ab77b1e08331af96f7c43b6327861 [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
Steven M. Gava952d0a52001-08-03 04:43:44 +000044 self.bind('<F1>',self.HelpBinding) #context help
Steven M. Gavad721c482001-07-31 10:46:53 +000045 self.bind('<Alt-f>',self.ChangePageBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +000046 self.bind('<Alt-h>',self.ChangePageBinding)
Steven M. Gavad721c482001-07-31 10:46:53 +000047 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
Steven M. Gava952d0a52001-08-03 04:43:44 +000057 def Help(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000058 pass
59
Steven M. Gavad721c482001-07-31 10:46:53 +000060 def CancelBinding(self,event):
61 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000062
Steven M. Gavad721c482001-07-31 10:46:53 +000063 def SaveBinding(self,event):
64 self.Save()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000065
Steven M. Gava952d0a52001-08-03 04:43:44 +000066 def HelpBinding(self,event):
67 self.Help()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000068
Steven M. Gava952d0a52001-08-03 04:43:44 +000069 def ChangePage(self):
70 self.pages[self.pageNum.get()].lift()
71 self.title('Settings -'+self.pageButtons[self.pageNum.get()].cget('text'))
72
Steven M. Gavad721c482001-07-31 10:46:53 +000073 def ChangePageBinding(self,event):
Steven M. Gava952d0a52001-08-03 04:43:44 +000074 pageKeys=('f','h','k','g')
Steven M. Gavad721c482001-07-31 10:46:53 +000075 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
Steven M. Gava952d0a52001-08-03 04:43:44 +000083 def SetThemeType(self):
84 if self.themeType.get()==0:
85 self.optMenuThemeBuiltin.config(state=NORMAL)
86 self.optMenuThemeCustom.config(state=DISABLED)
87 self.buttonDeleteCustom.config(state=DISABLED)
88 elif self.themeType.get()==1:
89 self.optMenuThemeBuiltin.config(state=DISABLED)
90 self.optMenuThemeCustom.config(state=NORMAL)
91 self.buttonDeleteCustom.config(state=NORMAL)
92
Steven M. Gavad721c482001-07-31 10:46:53 +000093 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +000094 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +000095 frameActionButtons = Frame(self)
96 framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
97 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +000098 self.buttonHelp = Button(frameActionButtons,text='Help',
99 command=self.Help,takefocus=FALSE)
100 self.buttonSave = Button(frameActionButtons,text='Save, Apply and Exit',
Steven M. Gavad721c482001-07-31 10:46:53 +0000101 command=self.Save,underline=0,takefocus=FALSE)
102 self.buttonCancel = Button(frameActionButtons,text='Cancel',
103 command=self.Cancel,takefocus=FALSE)
104 #page buttons
105 self.pageNum=IntVar()
106 self.pageNum.set(0)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000107 buttonPageFonts = Radiobutton(framePageButtons,value=0,
108 text='Font/Tabs',padx=5,pady=5)
109 buttonPageHighlight = Radiobutton(framePageButtons,value=1,
110 text='Highlighting',padx=5,pady=5)
111 buttonPageKeys = Radiobutton(framePageButtons,value=2,
112 text='Keys',padx=5,pady=5)
113 buttonPageGeneral = Radiobutton(framePageButtons,value=3,
114 text='General',padx=5,pady=5)
115 self.pageButtons=(buttonPageFonts,buttonPageHighlight,
Steven M. Gavad721c482001-07-31 10:46:53 +0000116 buttonPageKeys,buttonPageGeneral)
117 for button in self.pageButtons:
118 button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
119 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
120 selectcolor=self.bg,borderwidth=1)
121 button.pack(side=LEFT)
122 #pages
Steven M. Gava952d0a52001-08-03 04:43:44 +0000123 self.pages=(self.CreatePageFonts(),
124 self.CreatePageHighlight(),
125 self.CreatePageKeys(),
126 self.CreatePageGeneral())
127
Steven M. Gavad721c482001-07-31 10:46:53 +0000128 #grid in framePages so we can overlap pages
129 framePageButtons.grid(row=0,column=0,sticky=W)
130 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
131
Steven M. Gava952d0a52001-08-03 04:43:44 +0000132 self.buttonHelp.pack(side=RIGHT,padx=20,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000133 self.buttonSave.pack(side=LEFT,padx=5,pady=5)
134 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
135 frameActionButtons.pack(side=BOTTOM)
136 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
137
Steven M. Gava952d0a52001-08-03 04:43:44 +0000138 def CreatePageFonts(self):
139 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
140 Button(frame,text='fonts page test').pack(padx=30,pady=30)
141 return frame
142
143 def CreatePageHighlight(self):
144 #tkVars
145 self.target=StringVar()
146 self.builtinTheme=StringVar()
147 self.customTheme=StringVar()
148 self.colour=StringVar()
149 self.fontName=StringVar()
150 self.fontBold=StringVar()
151 self.fontItalic=StringVar()
152 self.fontSize=IntVar()
153 self.themeType=IntVar()
154 ##widget creation
155 #body frame
156 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
157 #body section frames
158 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
159 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
160
161 #frameCustom
162 frameTarget=Frame(frameCustom)
163 frameSample=Frame(frameCustom,relief=SOLID,borderwidth=1)
164 frameSet=Frame(frameCustom)
165 frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1)
166 frameFontSet=Frame(frameSet)
167
168 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
169 labelTargetTitle=Label(frameTarget,text='for : ')
170 optMenuTarget=OptionMenu(frameTarget,
171 self.target,'test target interface item','test target interface item 2')
172 self.target.set('test target interface item')
173 buttonSetColour=Button(frameColourSet,text='Set Colour')
174 labelFontTitle=Label(frameFontSet,text='Set Font Style')
175 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
176 onvalue='Bold',offvalue='',text='Bold')
177 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
178 onvalue='Italic',offvalue='',text='Italic')
179 labelTestSample=Label(frameSample,justify=LEFT,
180 text='def Ahem(foo,bar):\n test=foo\n text=bar\n return')
181 buttonSaveCustom=Button(frameCustom,
182 text='Save as a Custom Theme')
183
184 #frameTheme
185 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
186 # width=2,height=10)
187 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
188 labelTypeTitle=Label(frameTheme,text='Select : ')
189 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
190 value=0,command=self.SetThemeType,text='a Built-in Theme')
191 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
192 value=1,command=self.SetThemeType,text='a Custom Theme')
193 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
194 self.builtinTheme,'test builtin junk','test builtin junk 2')
195 self.builtinTheme.set('test builtin junk')
196 self.optMenuThemeCustom=OptionMenu(frameTheme,
197 self.customTheme,'test custom junk','test custom junk 2')
198 self.customTheme.set('test custom junk')
199 self.themeType.set(0)
200 self.buttonDeleteCustom=Button(frameTheme,text='Delete Custom Theme')
201 self.SetThemeType()
202
203 ##widget packing
204 #body
205 frameCustom.pack(side=LEFT,padx=5,pady=10,fill=Y)
206 frameTheme.pack(side=RIGHT,padx=5,pady=10,fill=Y)
207 #frameCustom
208 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
209 frameTarget.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=X)
210 frameSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
211 frameSet.pack(side=TOP,fill=X)
212 frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
213 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
214 labelTargetTitle.pack(side=LEFT,anchor=E)
215 optMenuTarget.pack(side=RIGHT,anchor=W,fill=X,expand=TRUE)
216 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
217 labelFontTitle.pack(side=TOP,anchor=W)
218 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
219 checkFontItalic.pack(side=RIGHT,anchor=W)
220 labelTestSample.pack()
221 buttonSaveCustom.pack(side=BOTTOM,fill=X,padx=5,pady=5)
222
223 #frameTheme
224 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
225 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
226 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
227 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
228 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
229 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
230 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
231 self.buttonDeleteCustom.pack(side=TOP,fill=X,padx=5,pady=5)
232
233 return frame
234
235 def CreatePageKeys(self):
236 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
237 Button(frame,text='keys page test').pack(padx=90,pady=90)
238 return frame
239
240 def CreatePageGeneral(self):
241 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
242 Button(frame,text='general page test').pack(padx=110,pady=110)
243 return frame
244
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000245if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000246 #test the dialog
247 root=Tk()
248 Button(root,text='Dialog',
249 command=lambda:ConfigDialog(root,'Settings',None)).pack()
250 root.mainloop()