blob: f5b87d7673eb96cf67feb7a52a1b503ee1229dab [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 *
Steven M. Gavac01e30f2001-08-11 15:48:13 +000011import tkMessageBox, tkColorChooser, tkFont
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000012
Steven M. Gava60fc7072001-08-04 13:58:22 +000013import IdleConf
14
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000015class ConfigDialog(Toplevel):
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000016 """
Steven M. Gavad721c482001-07-31 10:46:53 +000017 configuration dialog for idle
18 """
19 def __init__(self,parent,title,configDict):
20 """
21 configDict - dictionary of configuration items
22 """
23 Toplevel.__init__(self, parent)
24 self.configure(borderwidth=5)
25 self.geometry("+%d+%d" % (parent.winfo_rootx()+20,
26 parent.winfo_rooty()+30))
Steven M. Gava60fc7072001-08-04 13:58:22 +000027 self.LoadConfig()
Steven M. Gavad721c482001-07-31 10:46:53 +000028 #elguavas - config placeholders til config stuff completed
29 self.bg=self.cget('bg')
30 self.fg=None
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
Steven M. Gavad721c482001-07-31 10:46:53 +000041 self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
Steven M. Gavac01e30f2001-08-11 15:48:13 +000042 self.bind('<Alt-a>',self.ApplyBinding) #apply changes, save
Steven M. Gava952d0a52001-08-03 04:43:44 +000043 self.bind('<F1>',self.HelpBinding) #context help
Steven M. Gavad721c482001-07-31 10:46:53 +000044 self.bind('<Alt-f>',self.ChangePageBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +000045 self.bind('<Alt-h>',self.ChangePageBinding)
Steven M. Gavad721c482001-07-31 10:46:53 +000046 self.bind('<Alt-k>',self.ChangePageBinding)
47 self.bind('<Alt-g>',self.ChangePageBinding)
48 self.wait_window()
49
Steven M. Gava60fc7072001-08-04 13:58:22 +000050 def LoadConfig(self):
51 #self.configParser=IdleConf.idleconf
52 #self.loadedConfig={}
53 #self.workingConfig={}
54 #for key in .keys():
55 #print self.configParser.getsection('Colors').options()
56 self.workingTestColours={
57 'Foo-Bg': '#ffffff',
58 'Foo-Fg': '#000000',
59 'Bar-Bg': '#777777'}
60
Steven M. Gavad721c482001-07-31 10:46:53 +000061 def Cancel(self):
62 self.destroy()
63
Steven M. Gavac01e30f2001-08-11 15:48:13 +000064 def Ok(self):
65 pass
66
67 def Apply(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000068 pass
69
Steven M. Gava952d0a52001-08-03 04:43:44 +000070 def Help(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000071 pass
72
Steven M. Gavad721c482001-07-31 10:46:53 +000073 def CancelBinding(self,event):
74 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000075
Steven M. Gavac01e30f2001-08-11 15:48:13 +000076 def OkBinding(self,event):
77 self.Ok()
78
79 def ApplyBinding(self,event):
80 self.Apply()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000081
Steven M. Gava952d0a52001-08-03 04:43:44 +000082 def HelpBinding(self,event):
83 self.Help()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000084
Steven M. Gava952d0a52001-08-03 04:43:44 +000085 def ChangePage(self):
86 self.pages[self.pageNum.get()].lift()
Steven M. Gava230e5782001-08-07 03:28:25 +000087 self.title('Settings - '+
88 self.pageButtons[self.pageNum.get()].cget('text'))
Steven M. Gava952d0a52001-08-03 04:43:44 +000089
Steven M. Gavad721c482001-07-31 10:46:53 +000090 def ChangePageBinding(self,event):
Steven M. Gava952d0a52001-08-03 04:43:44 +000091 pageKeys=('f','h','k','g')
Steven M. Gavad721c482001-07-31 10:46:53 +000092 pos=0
93 for key in pageKeys:
94 if event.char == key:
95 self.pageNum.set(pos)
96 self.ChangePage()
97 return
98 pos=pos+1
99
Steven M. Gava952d0a52001-08-03 04:43:44 +0000100 def SetThemeType(self):
101 if self.themeType.get()==0:
102 self.optMenuThemeBuiltin.config(state=NORMAL)
103 self.optMenuThemeCustom.config(state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000104 self.buttonDeleteCustomTheme.config(state=DISABLED)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000105 elif self.themeType.get()==1:
106 self.optMenuThemeBuiltin.config(state=DISABLED)
107 self.optMenuThemeCustom.config(state=NORMAL)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000108 self.buttonDeleteCustomTheme.config(state=NORMAL)
109
110 def SetKeysType(self):
111 if self.keysType.get()==0:
112 self.optMenuKeysBuiltin.config(state=NORMAL)
113 self.optMenuKeysCustom.config(state=DISABLED)
114 self.buttonDeleteCustomKeys.config(state=DISABLED)
115 elif self.keysType.get()==1:
116 self.optMenuKeysBuiltin.config(state=DISABLED)
117 self.optMenuKeysCustom.config(state=NORMAL)
118 self.buttonDeleteCustomKeys.config(state=NORMAL)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000119
Steven M. Gava074c9d22001-08-08 01:30:38 +0000120 def GetColour(self):
121 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
122 title='Pick new colour for : '+self.highlightTarget.get(),
123 initialcolor=self.workingTestColours['Foo-Bg'])#._root()
124 if colourString: #user didn't cancel
125 self.workingTestColours['Foo-Bg']=colourString
126 self.frameColourSet.config(bg=self.workingTestColours['Foo-Bg'])
127 self.labelTestSample.config(bg=self.workingTestColours['Foo-Bg'])
128 self.frameHighlightSample.config(bg=self.workingTestColours['Foo-Bg'])
129 self.frameColourSet.update() #redraw after dialog
130 self.frameHighlightSample.update() #redraw after dialog
131 self.labelTestSample.update()
132
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000133 def __LoadFontList(self):
134 fonts=list(tkFont.families(self))
135 fonts.sort()
136 for font in fonts:
137 self.listFontName.insert(END,font)
138 currentFontIndex=fonts.index('courier')
139 self.listFontName.see(currentFontIndex)
140 self.listFontName.select_set(currentFontIndex)
141 self.fontSize.set('12')
142
143 def __SetFontSample(self,event):
144 self.newFont.config(size=self.fontSize.get(),weight=NORMAL,
145 family=self.listFontName.get(self.listFontName.curselection()[0]))
146
Steven M. Gavad721c482001-07-31 10:46:53 +0000147 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +0000148 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000149 frameActionButtons = Frame(self)
150 framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
151 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000152 self.buttonHelp = Button(frameActionButtons,text='Help',
153 command=self.Help,takefocus=FALSE)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000154 self.buttonOk = Button(frameActionButtons,text='Ok',
155 command=self.Ok,takefocus=FALSE)
156 self.buttonApply = Button(frameActionButtons,text='Apply',
157 command=self.Apply,underline=0,takefocus=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +0000158 self.buttonCancel = Button(frameActionButtons,text='Cancel',
159 command=self.Cancel,takefocus=FALSE)
160 #page buttons
161 self.pageNum=IntVar()
162 self.pageNum.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000163 buttonPageFontTab = Radiobutton(framePageButtons,value=0,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000164 text='Font/Tabs',padx=5,pady=5)
165 buttonPageHighlight = Radiobutton(framePageButtons,value=1,
166 text='Highlighting',padx=5,pady=5)
167 buttonPageKeys = Radiobutton(framePageButtons,value=2,
168 text='Keys',padx=5,pady=5)
169 buttonPageGeneral = Radiobutton(framePageButtons,value=3,
170 text='General',padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000171 self.pageButtons=(buttonPageFontTab,buttonPageHighlight,
Steven M. Gavad721c482001-07-31 10:46:53 +0000172 buttonPageKeys,buttonPageGeneral)
173 for button in self.pageButtons:
174 button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
175 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
176 selectcolor=self.bg,borderwidth=1)
177 button.pack(side=LEFT)
178 #pages
Steven M. Gava60fc7072001-08-04 13:58:22 +0000179 self.pages=(self.CreatePageFontTab(),
Steven M. Gava952d0a52001-08-03 04:43:44 +0000180 self.CreatePageHighlight(),
181 self.CreatePageKeys(),
182 self.CreatePageGeneral())
183
Steven M. Gavad721c482001-07-31 10:46:53 +0000184 #grid in framePages so we can overlap pages
185 framePageButtons.grid(row=0,column=0,sticky=W)
186 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
187
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000188 self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)
189 self.buttonOk.pack(side=LEFT,padx=5,pady=5)
190 self.buttonApply.pack(side=LEFT,padx=5,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000191 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
192 frameActionButtons.pack(side=BOTTOM)
193 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
194
Steven M. Gava60fc7072001-08-04 13:58:22 +0000195 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000196 #tkVars
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000197 self.fontSize=StringVar()
198 self.spaceNum=IntVar()
199 self.tabCols=IntVar()
200 self.indentType=IntVar()
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000201 self.newFont=tkFont.Font(self,('courier',12,'normal'))
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000202 ##widget creation
203 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000204 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000205 #body section frames
206 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
207 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
208 #frameFont
209 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
210 frameFontName=Frame(frameFont)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000211 frameFontSize=Frame(frameFontName)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000212 labelFontNameTitle=Label(frameFontName,justify=LEFT,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000213 text='Font :')
214 self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,
215 exportselection=FALSE)
216 self.listFontName.bind('<<ListboxSelect>>',self.__SetFontSample)
217 scrollFont=Scrollbar(frameFontName)
218 self.__LoadFontList()
219 scrollFont.config(command=self.listFontName.yview)
220 self.listFontName.config(yscrollcommand=scrollFont.set)
221 labelFontSizeTitle=Label(frameFontSize,text='Size :')
222 sizes=('10','11','12','13','14','16','18','20','22')
223 args=(frameFontSize,self.fontSize)+sizes
224 keyArgs={'command':self.__SetFontSample}
225 optFontSize=apply(OptionMenu,args,keyArgs)
226 #optFontSize.bind('<<MenuSelect>>',self.__SetFontSample)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000227 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1,
228 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000229 self.labelFontSample=Label(frameFontSample,bg=self.workingTestColours['Foo-Bg'],
230 fg='#000000',text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
231 justify=LEFT,font=self.newFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000232 #frameIndent
233 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
234 frameIndentType=Frame(frameIndent)
235 frameIndentSize=Frame(frameIndent)
236 labelIndentTypeTitle=Label(frameIndentType,
237 text='Choose indentation type :')
238 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
239 value=0,text='Tab key inserts spaces')
240 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
241 value=1,text='Tab key inserts tabs')
242 labelIndentSizeTitle=Label(frameIndentSize,
243 text='Choose indentation size :')
244 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
245 text='when tab key inserts spaces,\nspaces per tab')
246 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
247 orient='horizontal',tickinterval=2,from_=2,to=8)
248 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
249 text='when tab key inserts tabs,\ncolumns per tab')
250 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
251 orient='horizontal',tickinterval=2,from_=2,to=8)
252
253 #widget packing
254 #body
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000255 frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
256 frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000257 #frameFont
258 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000259 frameFontName.pack(side=TOP,padx=5,pady=5)
260 frameFontSize.pack(side=RIGHT,anchor=N,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000261 labelFontNameTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000262 self.listFontName.pack(side=LEFT,fill=Y)
263 scrollFont.pack(side=LEFT,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000264 labelFontSizeTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000265 optFontSize.pack(side=TOP,anchor=W,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000266 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000267 self.labelFontSample.pack(expand=TRUE,fill=BOTH)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000268 #frameIndent
269 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
270 frameIndentType.pack(side=TOP,padx=5,fill=X)
271 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
272 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
273 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
274 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
275 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
276 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
277 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
278 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
279 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000280 return frame
281
282 def CreatePageHighlight(self):
283 #tkVars
Steven M. Gava60fc7072001-08-04 13:58:22 +0000284 self.highlightTarget=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000285 self.builtinTheme=StringVar()
286 self.customTheme=StringVar()
287 self.colour=StringVar()
288 self.fontName=StringVar()
289 self.fontBold=StringVar()
290 self.fontItalic=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000291 self.themeType=IntVar()
292 ##widget creation
293 #body frame
294 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
295 #body section frames
296 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
297 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000298 #frameCustom
299 frameTarget=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000300 self.frameHighlightSample=Frame(frameCustom,relief=SOLID,borderwidth=1,
301 bg=self.workingTestColours['Foo-Bg'],cursor='hand2')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000302 frameSet=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000303 self.frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1,
Steven M. Gava60fc7072001-08-04 13:58:22 +0000304 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gava952d0a52001-08-03 04:43:44 +0000305 frameFontSet=Frame(frameSet)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000306 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
307 labelTargetTitle=Label(frameTarget,text='for : ')
308 optMenuTarget=OptionMenu(frameTarget,
Steven M. Gava074c9d22001-08-08 01:30:38 +0000309 self.highlightTarget,'normal text background','test target interface item 2')
310 self.highlightTarget.set('normal text background')
311 buttonSetColour=Button(self.frameColourSet,text='Set Colour',
312 command=self.GetColour)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000313 labelFontTitle=Label(frameFontSet,text='Set Font Style')
314 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
315 onvalue='Bold',offvalue='',text='Bold')
316 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
317 onvalue='Italic',offvalue='',text='Italic')
Steven M. Gava074c9d22001-08-08 01:30:38 +0000318 self.labelTestSample=Label(self.frameHighlightSample,justify=LEFT,font=('courier',12,''),
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000319 text='#when finished, this\n#sample area will\n#be interactive\n'+
320 'def Ahem(foo,bar):\n '+
321 '"""'+'doc hazard'+'"""'+
322 '\n test=foo\n text=bar\n return',
Steven M. Gava60fc7072001-08-04 13:58:22 +0000323 bg=self.workingTestColours['Foo-Bg'])
324 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000325 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000326 #frameTheme
327 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
328 # width=2,height=10)
329 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
330 labelTypeTitle=Label(frameTheme,text='Select : ')
331 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
332 value=0,command=self.SetThemeType,text='a Built-in Theme')
333 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
334 value=1,command=self.SetThemeType,text='a Custom Theme')
335 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
336 self.builtinTheme,'test builtin junk','test builtin junk 2')
337 self.builtinTheme.set('test builtin junk')
338 self.optMenuThemeCustom=OptionMenu(frameTheme,
339 self.customTheme,'test custom junk','test custom junk 2')
340 self.customTheme.set('test custom junk')
341 self.themeType.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000342 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000343 self.SetThemeType()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000344 ##widget packing
345 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000346 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
347 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000348 #frameCustom
349 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000350 frameTarget.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000351 self.frameHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000352 frameSet.pack(side=TOP,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000353 self.frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000354 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
355 labelTargetTitle.pack(side=LEFT,anchor=E)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000356 optMenuTarget.pack(side=RIGHT,anchor=W,expand=TRUE,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000357 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
358 labelFontTitle.pack(side=TOP,anchor=W)
359 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
360 checkFontItalic.pack(side=RIGHT,anchor=W)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000361 self.labelTestSample.pack(anchor=CENTER,expand=TRUE,fill=BOTH)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000362 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000363 #frameTheme
364 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
365 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
366 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
367 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
368 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
369 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
370 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000371 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000372 return frame
373
374 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000375 #tkVars
376 self.bindingTarget=StringVar()
377 self.builtinKeys=StringVar()
378 self.customKeys=StringVar()
379 self.keyChars=StringVar()
380 self.keyCtrl=StringVar()
381 self.keyAlt=StringVar()
382 self.keyShift=StringVar()
383 self.keysType=IntVar()
384 ##widget creation
385 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000386 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000387 #body section frames
388 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
389 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
390 #frameCustom
391 frameTarget=Frame(frameCustom)
392 frameSet=Frame(frameCustom)
393 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
394 labelTargetTitle=Label(frameTarget,text='Action')
395 scrollTarget=Scrollbar(frameTarget)
396 listTarget=Listbox(frameTarget)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000397 scrollTarget.config(command=listTarget.yview)
398 listTarget.config(yscrollcommand=scrollTarget.set)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000399 labelKeyBindTitle=Label(frameSet,text='Binding')
400 labelModifierTitle=Label(frameSet,text='Modifier:')
401 checkCtrl=Checkbutton(frameSet,text='Ctrl')
402 checkAlt=Checkbutton(frameSet,text='Alt')
403 checkShift=Checkbutton(frameSet,text='Shift')
404 labelKeyEntryTitle=Label(frameSet,text='Key:')
405 entryKey=Entry(frameSet,width=4)
406 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
407 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000408 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000409 labelTypeTitle=Label(frameKeySets,text='Select : ')
410 radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysType,
411 value=0,command=self.SetKeysType,text='a Built-in Key Set')
412 radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysType,
413 value=1,command=self.SetKeysType,text='a Custom Key Set')
414 self.optMenuKeysBuiltin=OptionMenu(frameKeySets,
415 self.builtinKeys,'test builtin junk','test builtin junk 2')
416 self.builtinKeys.set('test builtin junk')
417 self.optMenuKeysCustom=OptionMenu(frameKeySets,
418 self.customKeys,'test custom junk','test custom junk 2')
419 self.customKeys.set('test custom junk')
420 self.keysType.set(0)
421 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
422 self.SetKeysType()
423 ##widget packing
424 #body
425 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
426 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
427 #frameCustom
428 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
429 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
430 frameTarget.pack(side=LEFT,padx=5,pady=5,fill=Y)
431 frameSet.pack(side=LEFT,padx=5,pady=5,fill=Y)
432 labelTargetTitle.pack(side=TOP,anchor=W)
433 scrollTarget.pack(side=RIGHT,anchor=W,fill=Y)
434 listTarget.pack(side=TOP,anchor=W,expand=TRUE,fill=BOTH)
435 labelKeyBindTitle.pack(side=TOP,anchor=W)
436 labelModifierTitle.pack(side=TOP,anchor=W,pady=5)
437 checkCtrl.pack(side=TOP,anchor=W)
438 checkAlt.pack(side=TOP,anchor=W,pady=2)
439 checkShift.pack(side=TOP,anchor=W)
440 labelKeyEntryTitle.pack(side=TOP,anchor=W,pady=5)
441 entryKey.pack(side=TOP,anchor=W)
442 #frameKeySets
443 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
444 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
445 radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
446 radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
447 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
448 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
449 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000450 return frame
451
452 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000453 #tkVars
454 self.runType=IntVar()
455 self.winWidth=StringVar()
456 self.winHeight=StringVar()
457 self.extState=IntVar()
458 #widget creation
459 #body
Steven M. Gava952d0a52001-08-03 04:43:44 +0000460 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava230e5782001-08-07 03:28:25 +0000461 #body section frames
462 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
463 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
464 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
465 #frameRun
466 labelRunTitle=Label(frameRun,text='Run Preferences')
467 labelRunChoiceTitle=Label(frameRun,text='Run code : ')
468 radioRunInternal=Radiobutton(frameRun,variable=self.runType,
469 value=0,command=self.SetKeysType,text="in IDLE's Process")
470 radioRunSeparate=Radiobutton(frameRun,variable=self.runType,
471 value=1,command=self.SetKeysType,text='in a Separate Process')
472 #frameWinSize
473 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size')
474 buttonWinSizeSet=Button(frameWinSize,text='Set to current window size')
475 labelWinWidthTitle=Label(frameWinSize,text='Width')
476 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
477 width=3)
478 labelWinHeightTitle=Label(frameWinSize,text='Height')
479 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
480 width=3)
481 #frameExt
482 frameExtList=Frame(frameExt)
483 frameExtSet=Frame(frameExt)
484 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
485 labelExtListTitle=Label(frameExtList,text='Extension')
486 scrollExtList=Scrollbar(frameExtList)
487 listExt=Listbox(frameExtList,height=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000488 scrollExtList.config(command=listExt.yview)
489 listExt.config(yscrollcommand=scrollExtList.set)
Steven M. Gava230e5782001-08-07 03:28:25 +0000490 labelExtSetTitle=Label(frameExtSet,text='Settings')
491 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
492 value=1,text="enable")
493 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
494 value=0,text="disable")
495 self.extState.set(1)
496 buttonExtConfig=Button(frameExtSet,text='Configure')
497
498 #widget packing
499 #body
500 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
501 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
502 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
503 #frameRun
504 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
505 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
506 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
507 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
508 #frameWinSize
509 labelWinSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
510 buttonWinSizeSet.pack(side=LEFT,anchor=W,padx=5,pady=5)
511 labelWinWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
512 entryWinWidth.pack(side=LEFT,anchor=W,padx=5,pady=5)
513 labelWinHeightTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
514 entryWinHeight.pack(side=LEFT,anchor=W,padx=5,pady=5)
515 #frameExt
516 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
517 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
518 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
519 labelExtListTitle.pack(side=TOP,anchor=W)
520 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
521 listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
522 labelExtSetTitle.pack(side=TOP,anchor=W)
523 radioEnableExt.pack(side=TOP,anchor=W)
524 radioDisableExt.pack(side=TOP,anchor=W)
525 buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
526
Steven M. Gava952d0a52001-08-03 04:43:44 +0000527 return frame
528
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000529if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000530 #test the dialog
531 root=Tk()
532 Button(root,text='Dialog',
533 command=lambda:ConfigDialog(root,'Settings',None)).pack()
534 root.mainloop()