blob: 8e843e6ca534c083cbe5533c85d31c89e6142e44 [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. Gava074c9d22001-08-08 01:30:38 +000011import tkMessageBox, tkColorChooser
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
31 #no ugly bold default text font on *nix
32 self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',)
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000033
Steven M. Gavad721c482001-07-31 10:46:53 +000034 self.CreateWidgets()
35 self.resizable(height=FALSE,width=FALSE)
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000036 self.ChangePage()
Steven M. Gavad721c482001-07-31 10:46:53 +000037 self.transient(parent)
38 self.grab_set()
39 self.protocol("WM_DELETE_WINDOW", self.Cancel)
40 self.parent = parent
41 self.framePages.focus_set()
42 #key bindings for this dialog
Steven M. Gavad721c482001-07-31 10:46:53 +000043 self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
44 self.bind('<Alt-s>',self.SaveBinding) #dismiss dialog, save
Steven M. Gava952d0a52001-08-03 04:43:44 +000045 self.bind('<F1>',self.HelpBinding) #context help
Steven M. Gavad721c482001-07-31 10:46:53 +000046 self.bind('<Alt-f>',self.ChangePageBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +000047 self.bind('<Alt-h>',self.ChangePageBinding)
Steven M. Gavad721c482001-07-31 10:46:53 +000048 self.bind('<Alt-k>',self.ChangePageBinding)
49 self.bind('<Alt-g>',self.ChangePageBinding)
50 self.wait_window()
51
Steven M. Gava60fc7072001-08-04 13:58:22 +000052 def LoadConfig(self):
53 #self.configParser=IdleConf.idleconf
54 #self.loadedConfig={}
55 #self.workingConfig={}
56 #for key in .keys():
57 #print self.configParser.getsection('Colors').options()
58 self.workingTestColours={
59 'Foo-Bg': '#ffffff',
60 'Foo-Fg': '#000000',
61 'Bar-Bg': '#777777'}
62
Steven M. Gavad721c482001-07-31 10:46:53 +000063 def Cancel(self):
64 self.destroy()
65
66 def Save(self):
67 pass
68
Steven M. Gava952d0a52001-08-03 04:43:44 +000069 def Help(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000070 pass
71
Steven M. Gavad721c482001-07-31 10:46:53 +000072 def CancelBinding(self,event):
73 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000074
Steven M. Gavad721c482001-07-31 10:46:53 +000075 def SaveBinding(self,event):
76 self.Save()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000077
Steven M. Gava952d0a52001-08-03 04:43:44 +000078 def HelpBinding(self,event):
79 self.Help()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000080
Steven M. Gava952d0a52001-08-03 04:43:44 +000081 def ChangePage(self):
82 self.pages[self.pageNum.get()].lift()
Steven M. Gava230e5782001-08-07 03:28:25 +000083 self.title('Settings - '+
84 self.pageButtons[self.pageNum.get()].cget('text'))
Steven M. Gava952d0a52001-08-03 04:43:44 +000085
Steven M. Gavad721c482001-07-31 10:46:53 +000086 def ChangePageBinding(self,event):
Steven M. Gava952d0a52001-08-03 04:43:44 +000087 pageKeys=('f','h','k','g')
Steven M. Gavad721c482001-07-31 10:46:53 +000088 pos=0
89 for key in pageKeys:
90 if event.char == key:
91 self.pageNum.set(pos)
92 self.ChangePage()
93 return
94 pos=pos+1
95
Steven M. Gava952d0a52001-08-03 04:43:44 +000096 def SetThemeType(self):
97 if self.themeType.get()==0:
98 self.optMenuThemeBuiltin.config(state=NORMAL)
99 self.optMenuThemeCustom.config(state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000100 self.buttonDeleteCustomTheme.config(state=DISABLED)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000101 elif self.themeType.get()==1:
102 self.optMenuThemeBuiltin.config(state=DISABLED)
103 self.optMenuThemeCustom.config(state=NORMAL)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000104 self.buttonDeleteCustomTheme.config(state=NORMAL)
105
106 def SetKeysType(self):
107 if self.keysType.get()==0:
108 self.optMenuKeysBuiltin.config(state=NORMAL)
109 self.optMenuKeysCustom.config(state=DISABLED)
110 self.buttonDeleteCustomKeys.config(state=DISABLED)
111 elif self.keysType.get()==1:
112 self.optMenuKeysBuiltin.config(state=DISABLED)
113 self.optMenuKeysCustom.config(state=NORMAL)
114 self.buttonDeleteCustomKeys.config(state=NORMAL)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000115
Steven M. Gava074c9d22001-08-08 01:30:38 +0000116 def GetColour(self):
117 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
118 title='Pick new colour for : '+self.highlightTarget.get(),
119 initialcolor=self.workingTestColours['Foo-Bg'])#._root()
120 if colourString: #user didn't cancel
121 self.workingTestColours['Foo-Bg']=colourString
122 self.frameColourSet.config(bg=self.workingTestColours['Foo-Bg'])
123 self.labelTestSample.config(bg=self.workingTestColours['Foo-Bg'])
124 self.frameHighlightSample.config(bg=self.workingTestColours['Foo-Bg'])
125 self.frameColourSet.update() #redraw after dialog
126 self.frameHighlightSample.update() #redraw after dialog
127 self.labelTestSample.update()
128
Steven M. Gavad721c482001-07-31 10:46:53 +0000129 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +0000130 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000131 frameActionButtons = Frame(self)
132 framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
133 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000134 self.buttonHelp = Button(frameActionButtons,text='Help',
135 command=self.Help,takefocus=FALSE)
136 self.buttonSave = Button(frameActionButtons,text='Save, Apply and Exit',
Steven M. Gavad721c482001-07-31 10:46:53 +0000137 command=self.Save,underline=0,takefocus=FALSE)
138 self.buttonCancel = Button(frameActionButtons,text='Cancel',
139 command=self.Cancel,takefocus=FALSE)
140 #page buttons
141 self.pageNum=IntVar()
142 self.pageNum.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000143 buttonPageFontTab = Radiobutton(framePageButtons,value=0,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000144 text='Font/Tabs',padx=5,pady=5)
145 buttonPageHighlight = Radiobutton(framePageButtons,value=1,
146 text='Highlighting',padx=5,pady=5)
147 buttonPageKeys = Radiobutton(framePageButtons,value=2,
148 text='Keys',padx=5,pady=5)
149 buttonPageGeneral = Radiobutton(framePageButtons,value=3,
150 text='General',padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000151 self.pageButtons=(buttonPageFontTab,buttonPageHighlight,
Steven M. Gavad721c482001-07-31 10:46:53 +0000152 buttonPageKeys,buttonPageGeneral)
153 for button in self.pageButtons:
154 button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
155 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
156 selectcolor=self.bg,borderwidth=1)
157 button.pack(side=LEFT)
158 #pages
Steven M. Gava60fc7072001-08-04 13:58:22 +0000159 self.pages=(self.CreatePageFontTab(),
Steven M. Gava952d0a52001-08-03 04:43:44 +0000160 self.CreatePageHighlight(),
161 self.CreatePageKeys(),
162 self.CreatePageGeneral())
163
Steven M. Gavad721c482001-07-31 10:46:53 +0000164 #grid in framePages so we can overlap pages
165 framePageButtons.grid(row=0,column=0,sticky=W)
166 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
167
Steven M. Gava952d0a52001-08-03 04:43:44 +0000168 self.buttonHelp.pack(side=RIGHT,padx=20,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000169 self.buttonSave.pack(side=LEFT,padx=5,pady=5)
170 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
171 frameActionButtons.pack(side=BOTTOM)
172 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
173
Steven M. Gava60fc7072001-08-04 13:58:22 +0000174 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000175 #tkVars
176 self.fontName=StringVar()
177 self.fontSize=StringVar()
178 self.spaceNum=IntVar()
179 self.tabCols=IntVar()
180 self.indentType=IntVar()
181 ##widget creation
182 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000183 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000184 #body section frames
185 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
186 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
187 #frameFont
188 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
189 frameFontName=Frame(frameFont)
190 frameFontSize=Frame(frameFont)
191 labelFontNameTitle=Label(frameFontName,justify=LEFT,
192 text='Choose from available\nmonospaced fonts :')
193 optFontName=OptionMenu(frameFontName,
194 self.fontName,'Courier','Font Name 2','Font Name 3')
195 self.fontName.set('Courier')
196 labelFontSizeTitle=Label(frameFontSize,text='Choose font size :')
197 optFontSize=OptionMenu(frameFontSize,
198 self.fontSize,'8','10','12','14','16','18','20')
199 self.fontSize.set('12')
200 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1,
201 bg=self.workingTestColours['Foo-Bg'])
202 labelFontSample=Label(frameFontSample,bg=self.workingTestColours['Foo-Bg'],
203 fg='#000000',text='Font\nSample',justify=LEFT,
204 font=('courier',12,''))
205 #frameIndent
206 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
207 frameIndentType=Frame(frameIndent)
208 frameIndentSize=Frame(frameIndent)
209 labelIndentTypeTitle=Label(frameIndentType,
210 text='Choose indentation type :')
211 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
212 value=0,text='Tab key inserts spaces')
213 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
214 value=1,text='Tab key inserts tabs')
215 labelIndentSizeTitle=Label(frameIndentSize,
216 text='Choose indentation size :')
217 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
218 text='when tab key inserts spaces,\nspaces per tab')
219 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
220 orient='horizontal',tickinterval=2,from_=2,to=8)
221 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
222 text='when tab key inserts tabs,\ncolumns per tab')
223 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
224 orient='horizontal',tickinterval=2,from_=2,to=8)
225
226 #widget packing
227 #body
228 frameFont.pack(side=LEFT,padx=5,pady=10,fill=Y)
229 frameIndent.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
230 #frameFont
231 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
232 frameFontName.pack(side=TOP,padx=5,pady=5,fill=X)
233 frameFontSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
234 labelFontNameTitle.pack(side=TOP,anchor=W)
235 optFontName.pack(side=TOP,pady=5,fill=X)
236 labelFontSizeTitle.pack(side=TOP,anchor=W)
237 optFontSize.pack(side=TOP,pady=5,fill=X)
238 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
239 labelFontSample.pack(expand=TRUE,fill=BOTH)
240 #frameIndent
241 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
242 frameIndentType.pack(side=TOP,padx=5,fill=X)
243 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
244 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
245 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
246 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
247 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
248 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
249 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
250 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
251 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000252 return frame
253
254 def CreatePageHighlight(self):
255 #tkVars
Steven M. Gava60fc7072001-08-04 13:58:22 +0000256 self.highlightTarget=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000257 self.builtinTheme=StringVar()
258 self.customTheme=StringVar()
259 self.colour=StringVar()
260 self.fontName=StringVar()
261 self.fontBold=StringVar()
262 self.fontItalic=StringVar()
263 self.fontSize=IntVar()
264 self.themeType=IntVar()
265 ##widget creation
266 #body frame
267 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
268 #body section frames
269 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
270 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000271 #frameCustom
272 frameTarget=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000273 self.frameHighlightSample=Frame(frameCustom,relief=SOLID,borderwidth=1,
274 bg=self.workingTestColours['Foo-Bg'],cursor='hand2')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000275 frameSet=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000276 self.frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1,
Steven M. Gava60fc7072001-08-04 13:58:22 +0000277 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gava952d0a52001-08-03 04:43:44 +0000278 frameFontSet=Frame(frameSet)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000279 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
280 labelTargetTitle=Label(frameTarget,text='for : ')
281 optMenuTarget=OptionMenu(frameTarget,
Steven M. Gava074c9d22001-08-08 01:30:38 +0000282 self.highlightTarget,'normal text background','test target interface item 2')
283 self.highlightTarget.set('normal text background')
284 buttonSetColour=Button(self.frameColourSet,text='Set Colour',
285 command=self.GetColour)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000286 labelFontTitle=Label(frameFontSet,text='Set Font Style')
287 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
288 onvalue='Bold',offvalue='',text='Bold')
289 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
290 onvalue='Italic',offvalue='',text='Italic')
Steven M. Gava074c9d22001-08-08 01:30:38 +0000291 self.labelTestSample=Label(self.frameHighlightSample,justify=LEFT,font=('courier',12,''),
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000292 text='#when finished, this\n#sample area will\n#be interactive\n'+
293 'def Ahem(foo,bar):\n '+
294 '"""'+'doc hazard'+'"""'+
295 '\n test=foo\n text=bar\n return',
Steven M. Gava60fc7072001-08-04 13:58:22 +0000296 bg=self.workingTestColours['Foo-Bg'])
297 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000298 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000299 #frameTheme
300 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
301 # width=2,height=10)
302 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
303 labelTypeTitle=Label(frameTheme,text='Select : ')
304 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
305 value=0,command=self.SetThemeType,text='a Built-in Theme')
306 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
307 value=1,command=self.SetThemeType,text='a Custom Theme')
308 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
309 self.builtinTheme,'test builtin junk','test builtin junk 2')
310 self.builtinTheme.set('test builtin junk')
311 self.optMenuThemeCustom=OptionMenu(frameTheme,
312 self.customTheme,'test custom junk','test custom junk 2')
313 self.customTheme.set('test custom junk')
314 self.themeType.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000315 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000316 self.SetThemeType()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000317 ##widget packing
318 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000319 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
320 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000321 #frameCustom
322 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000323 frameTarget.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000324 self.frameHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000325 frameSet.pack(side=TOP,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000326 self.frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000327 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
328 labelTargetTitle.pack(side=LEFT,anchor=E)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000329 optMenuTarget.pack(side=RIGHT,anchor=W,expand=TRUE,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000330 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
331 labelFontTitle.pack(side=TOP,anchor=W)
332 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
333 checkFontItalic.pack(side=RIGHT,anchor=W)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000334 self.labelTestSample.pack(anchor=CENTER,expand=TRUE,fill=BOTH)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000335 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000336 #frameTheme
337 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
338 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
339 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
340 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
341 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
342 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
343 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000344 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000345 return frame
346
347 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000348 #tkVars
349 self.bindingTarget=StringVar()
350 self.builtinKeys=StringVar()
351 self.customKeys=StringVar()
352 self.keyChars=StringVar()
353 self.keyCtrl=StringVar()
354 self.keyAlt=StringVar()
355 self.keyShift=StringVar()
356 self.keysType=IntVar()
357 ##widget creation
358 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000359 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000360 #body section frames
361 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
362 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
363 #frameCustom
364 frameTarget=Frame(frameCustom)
365 frameSet=Frame(frameCustom)
366 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
367 labelTargetTitle=Label(frameTarget,text='Action')
368 scrollTarget=Scrollbar(frameTarget)
369 listTarget=Listbox(frameTarget)
370 labelKeyBindTitle=Label(frameSet,text='Binding')
371 labelModifierTitle=Label(frameSet,text='Modifier:')
372 checkCtrl=Checkbutton(frameSet,text='Ctrl')
373 checkAlt=Checkbutton(frameSet,text='Alt')
374 checkShift=Checkbutton(frameSet,text='Shift')
375 labelKeyEntryTitle=Label(frameSet,text='Key:')
376 entryKey=Entry(frameSet,width=4)
377 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
378 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000379 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000380 labelTypeTitle=Label(frameKeySets,text='Select : ')
381 radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysType,
382 value=0,command=self.SetKeysType,text='a Built-in Key Set')
383 radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysType,
384 value=1,command=self.SetKeysType,text='a Custom Key Set')
385 self.optMenuKeysBuiltin=OptionMenu(frameKeySets,
386 self.builtinKeys,'test builtin junk','test builtin junk 2')
387 self.builtinKeys.set('test builtin junk')
388 self.optMenuKeysCustom=OptionMenu(frameKeySets,
389 self.customKeys,'test custom junk','test custom junk 2')
390 self.customKeys.set('test custom junk')
391 self.keysType.set(0)
392 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
393 self.SetKeysType()
394 ##widget packing
395 #body
396 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
397 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
398 #frameCustom
399 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
400 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
401 frameTarget.pack(side=LEFT,padx=5,pady=5,fill=Y)
402 frameSet.pack(side=LEFT,padx=5,pady=5,fill=Y)
403 labelTargetTitle.pack(side=TOP,anchor=W)
404 scrollTarget.pack(side=RIGHT,anchor=W,fill=Y)
405 listTarget.pack(side=TOP,anchor=W,expand=TRUE,fill=BOTH)
406 labelKeyBindTitle.pack(side=TOP,anchor=W)
407 labelModifierTitle.pack(side=TOP,anchor=W,pady=5)
408 checkCtrl.pack(side=TOP,anchor=W)
409 checkAlt.pack(side=TOP,anchor=W,pady=2)
410 checkShift.pack(side=TOP,anchor=W)
411 labelKeyEntryTitle.pack(side=TOP,anchor=W,pady=5)
412 entryKey.pack(side=TOP,anchor=W)
413 #frameKeySets
414 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
415 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
416 radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
417 radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
418 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
419 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
420 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000421 return frame
422
423 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000424 #tkVars
425 self.runType=IntVar()
426 self.winWidth=StringVar()
427 self.winHeight=StringVar()
428 self.extState=IntVar()
429 #widget creation
430 #body
Steven M. Gava952d0a52001-08-03 04:43:44 +0000431 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava230e5782001-08-07 03:28:25 +0000432 #body section frames
433 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
434 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
435 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
436 #frameRun
437 labelRunTitle=Label(frameRun,text='Run Preferences')
438 labelRunChoiceTitle=Label(frameRun,text='Run code : ')
439 radioRunInternal=Radiobutton(frameRun,variable=self.runType,
440 value=0,command=self.SetKeysType,text="in IDLE's Process")
441 radioRunSeparate=Radiobutton(frameRun,variable=self.runType,
442 value=1,command=self.SetKeysType,text='in a Separate Process')
443 #frameWinSize
444 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size')
445 buttonWinSizeSet=Button(frameWinSize,text='Set to current window size')
446 labelWinWidthTitle=Label(frameWinSize,text='Width')
447 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
448 width=3)
449 labelWinHeightTitle=Label(frameWinSize,text='Height')
450 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
451 width=3)
452 #frameExt
453 frameExtList=Frame(frameExt)
454 frameExtSet=Frame(frameExt)
455 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
456 labelExtListTitle=Label(frameExtList,text='Extension')
457 scrollExtList=Scrollbar(frameExtList)
458 listExt=Listbox(frameExtList,height=5)
459 labelExtSetTitle=Label(frameExtSet,text='Settings')
460 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
461 value=1,text="enable")
462 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
463 value=0,text="disable")
464 self.extState.set(1)
465 buttonExtConfig=Button(frameExtSet,text='Configure')
466
467 #widget packing
468 #body
469 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
470 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
471 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
472 #frameRun
473 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
474 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
475 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
476 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
477 #frameWinSize
478 labelWinSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
479 buttonWinSizeSet.pack(side=LEFT,anchor=W,padx=5,pady=5)
480 labelWinWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
481 entryWinWidth.pack(side=LEFT,anchor=W,padx=5,pady=5)
482 labelWinHeightTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
483 entryWinHeight.pack(side=LEFT,anchor=W,padx=5,pady=5)
484 #frameExt
485 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
486 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
487 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
488 labelExtListTitle.pack(side=TOP,anchor=W)
489 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
490 listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
491 labelExtSetTitle.pack(side=TOP,anchor=W)
492 radioEnableExt.pack(side=TOP,anchor=W)
493 radioDisableExt.pack(side=TOP,anchor=W)
494 buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
495
Steven M. Gava952d0a52001-08-03 04:43:44 +0000496 return frame
497
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000498if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000499 #test the dialog
500 root=Tk()
501 Button(root,text='Dialog',
502 command=lambda:ConfigDialog(root,'Settings',None)).pack()
503 root.mainloop()