blob: ee0bc283e97ad3356a0b39e54c0f6f126cde0867 [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
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. Gavad721c482001-07-31 10:46:53 +0000116 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +0000117 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000118 frameActionButtons = Frame(self)
119 framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN)
120 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000121 self.buttonHelp = Button(frameActionButtons,text='Help',
122 command=self.Help,takefocus=FALSE)
123 self.buttonSave = Button(frameActionButtons,text='Save, Apply and Exit',
Steven M. Gavad721c482001-07-31 10:46:53 +0000124 command=self.Save,underline=0,takefocus=FALSE)
125 self.buttonCancel = Button(frameActionButtons,text='Cancel',
126 command=self.Cancel,takefocus=FALSE)
127 #page buttons
128 self.pageNum=IntVar()
129 self.pageNum.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000130 buttonPageFontTab = Radiobutton(framePageButtons,value=0,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000131 text='Font/Tabs',padx=5,pady=5)
132 buttonPageHighlight = Radiobutton(framePageButtons,value=1,
133 text='Highlighting',padx=5,pady=5)
134 buttonPageKeys = Radiobutton(framePageButtons,value=2,
135 text='Keys',padx=5,pady=5)
136 buttonPageGeneral = Radiobutton(framePageButtons,value=3,
137 text='General',padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000138 self.pageButtons=(buttonPageFontTab,buttonPageHighlight,
Steven M. Gavad721c482001-07-31 10:46:53 +0000139 buttonPageKeys,buttonPageGeneral)
140 for button in self.pageButtons:
141 button.config(command=self.ChangePage,underline=0,takefocus=FALSE,
142 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
143 selectcolor=self.bg,borderwidth=1)
144 button.pack(side=LEFT)
145 #pages
Steven M. Gava60fc7072001-08-04 13:58:22 +0000146 self.pages=(self.CreatePageFontTab(),
Steven M. Gava952d0a52001-08-03 04:43:44 +0000147 self.CreatePageHighlight(),
148 self.CreatePageKeys(),
149 self.CreatePageGeneral())
150
Steven M. Gavad721c482001-07-31 10:46:53 +0000151 #grid in framePages so we can overlap pages
152 framePageButtons.grid(row=0,column=0,sticky=W)
153 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
154
Steven M. Gava952d0a52001-08-03 04:43:44 +0000155 self.buttonHelp.pack(side=RIGHT,padx=20,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000156 self.buttonSave.pack(side=LEFT,padx=5,pady=5)
157 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
158 frameActionButtons.pack(side=BOTTOM)
159 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
160
Steven M. Gava60fc7072001-08-04 13:58:22 +0000161 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000162 #tkVars
163 self.fontName=StringVar()
164 self.fontSize=StringVar()
165 self.spaceNum=IntVar()
166 self.tabCols=IntVar()
167 self.indentType=IntVar()
168 ##widget creation
169 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000170 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000171 #body section frames
172 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
173 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
174 #frameFont
175 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
176 frameFontName=Frame(frameFont)
177 frameFontSize=Frame(frameFont)
178 labelFontNameTitle=Label(frameFontName,justify=LEFT,
179 text='Choose from available\nmonospaced fonts :')
180 optFontName=OptionMenu(frameFontName,
181 self.fontName,'Courier','Font Name 2','Font Name 3')
182 self.fontName.set('Courier')
183 labelFontSizeTitle=Label(frameFontSize,text='Choose font size :')
184 optFontSize=OptionMenu(frameFontSize,
185 self.fontSize,'8','10','12','14','16','18','20')
186 self.fontSize.set('12')
187 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1,
188 bg=self.workingTestColours['Foo-Bg'])
189 labelFontSample=Label(frameFontSample,bg=self.workingTestColours['Foo-Bg'],
190 fg='#000000',text='Font\nSample',justify=LEFT,
191 font=('courier',12,''))
192 #frameIndent
193 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
194 frameIndentType=Frame(frameIndent)
195 frameIndentSize=Frame(frameIndent)
196 labelIndentTypeTitle=Label(frameIndentType,
197 text='Choose indentation type :')
198 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
199 value=0,text='Tab key inserts spaces')
200 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
201 value=1,text='Tab key inserts tabs')
202 labelIndentSizeTitle=Label(frameIndentSize,
203 text='Choose indentation size :')
204 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
205 text='when tab key inserts spaces,\nspaces per tab')
206 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
207 orient='horizontal',tickinterval=2,from_=2,to=8)
208 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
209 text='when tab key inserts tabs,\ncolumns per tab')
210 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
211 orient='horizontal',tickinterval=2,from_=2,to=8)
212
213 #widget packing
214 #body
215 frameFont.pack(side=LEFT,padx=5,pady=10,fill=Y)
216 frameIndent.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
217 #frameFont
218 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
219 frameFontName.pack(side=TOP,padx=5,pady=5,fill=X)
220 frameFontSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
221 labelFontNameTitle.pack(side=TOP,anchor=W)
222 optFontName.pack(side=TOP,pady=5,fill=X)
223 labelFontSizeTitle.pack(side=TOP,anchor=W)
224 optFontSize.pack(side=TOP,pady=5,fill=X)
225 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
226 labelFontSample.pack(expand=TRUE,fill=BOTH)
227 #frameIndent
228 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
229 frameIndentType.pack(side=TOP,padx=5,fill=X)
230 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
231 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
232 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
233 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
234 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
235 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
236 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
237 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
238 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000239 return frame
240
241 def CreatePageHighlight(self):
242 #tkVars
Steven M. Gava60fc7072001-08-04 13:58:22 +0000243 self.highlightTarget=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000244 self.builtinTheme=StringVar()
245 self.customTheme=StringVar()
246 self.colour=StringVar()
247 self.fontName=StringVar()
248 self.fontBold=StringVar()
249 self.fontItalic=StringVar()
250 self.fontSize=IntVar()
251 self.themeType=IntVar()
252 ##widget creation
253 #body frame
254 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
255 #body section frames
256 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
257 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000258 #frameCustom
259 frameTarget=Frame(frameCustom)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000260 frameSample=Frame(frameCustom,relief=SOLID,borderwidth=1,
261 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gava952d0a52001-08-03 04:43:44 +0000262 frameSet=Frame(frameCustom)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000263 frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1,
264 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gava952d0a52001-08-03 04:43:44 +0000265 frameFontSet=Frame(frameSet)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000266 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
267 labelTargetTitle=Label(frameTarget,text='for : ')
268 optMenuTarget=OptionMenu(frameTarget,
Steven M. Gava60fc7072001-08-04 13:58:22 +0000269 self.highlightTarget,'test target interface item','test target interface item 2')
270 self.highlightTarget.set('test target interface item')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000271 buttonSetColour=Button(frameColourSet,text='Set Colour')
272 labelFontTitle=Label(frameFontSet,text='Set Font Style')
273 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
274 onvalue='Bold',offvalue='',text='Bold')
275 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
276 onvalue='Italic',offvalue='',text='Italic')
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000277 labelTestSample=Label(frameSample,justify=LEFT,font=('courier',12,''),
278 text='#when finished, this\n#sample area will\n#be interactive\n'+
279 'def Ahem(foo,bar):\n '+
280 '"""'+'doc hazard'+'"""'+
281 '\n test=foo\n text=bar\n return',
Steven M. Gava60fc7072001-08-04 13:58:22 +0000282 bg=self.workingTestColours['Foo-Bg'])
283 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000284 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000285 #frameTheme
286 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
287 # width=2,height=10)
288 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
289 labelTypeTitle=Label(frameTheme,text='Select : ')
290 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
291 value=0,command=self.SetThemeType,text='a Built-in Theme')
292 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
293 value=1,command=self.SetThemeType,text='a Custom Theme')
294 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
295 self.builtinTheme,'test builtin junk','test builtin junk 2')
296 self.builtinTheme.set('test builtin junk')
297 self.optMenuThemeCustom=OptionMenu(frameTheme,
298 self.customTheme,'test custom junk','test custom junk 2')
299 self.customTheme.set('test custom junk')
300 self.themeType.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000301 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000302 self.SetThemeType()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000303 ##widget packing
304 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000305 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
306 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000307 #frameCustom
308 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000309 frameTarget.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000310 frameSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
311 frameSet.pack(side=TOP,fill=X)
312 frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
313 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
314 labelTargetTitle.pack(side=LEFT,anchor=E)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000315 optMenuTarget.pack(side=RIGHT,anchor=W,expand=TRUE,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000316 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
317 labelFontTitle.pack(side=TOP,anchor=W)
318 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
319 checkFontItalic.pack(side=RIGHT,anchor=W)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000320 labelTestSample.pack(anchor=CENTER,expand=TRUE,fill=BOTH)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000321 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000322 #frameTheme
323 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
324 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
325 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
326 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
327 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
328 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
329 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000330 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000331 return frame
332
333 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000334 #tkVars
335 self.bindingTarget=StringVar()
336 self.builtinKeys=StringVar()
337 self.customKeys=StringVar()
338 self.keyChars=StringVar()
339 self.keyCtrl=StringVar()
340 self.keyAlt=StringVar()
341 self.keyShift=StringVar()
342 self.keysType=IntVar()
343 ##widget creation
344 #body frame
Steven M. Gava952d0a52001-08-03 04:43:44 +0000345 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000346 #body section frames
347 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
348 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
349 #frameCustom
350 frameTarget=Frame(frameCustom)
351 frameSet=Frame(frameCustom)
352 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
353 labelTargetTitle=Label(frameTarget,text='Action')
354 scrollTarget=Scrollbar(frameTarget)
355 listTarget=Listbox(frameTarget)
356 labelKeyBindTitle=Label(frameSet,text='Binding')
357 labelModifierTitle=Label(frameSet,text='Modifier:')
358 checkCtrl=Checkbutton(frameSet,text='Ctrl')
359 checkAlt=Checkbutton(frameSet,text='Alt')
360 checkShift=Checkbutton(frameSet,text='Shift')
361 labelKeyEntryTitle=Label(frameSet,text='Key:')
362 entryKey=Entry(frameSet,width=4)
363 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
364 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000365 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000366 labelTypeTitle=Label(frameKeySets,text='Select : ')
367 radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysType,
368 value=0,command=self.SetKeysType,text='a Built-in Key Set')
369 radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysType,
370 value=1,command=self.SetKeysType,text='a Custom Key Set')
371 self.optMenuKeysBuiltin=OptionMenu(frameKeySets,
372 self.builtinKeys,'test builtin junk','test builtin junk 2')
373 self.builtinKeys.set('test builtin junk')
374 self.optMenuKeysCustom=OptionMenu(frameKeySets,
375 self.customKeys,'test custom junk','test custom junk 2')
376 self.customKeys.set('test custom junk')
377 self.keysType.set(0)
378 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
379 self.SetKeysType()
380 ##widget packing
381 #body
382 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
383 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
384 #frameCustom
385 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
386 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
387 frameTarget.pack(side=LEFT,padx=5,pady=5,fill=Y)
388 frameSet.pack(side=LEFT,padx=5,pady=5,fill=Y)
389 labelTargetTitle.pack(side=TOP,anchor=W)
390 scrollTarget.pack(side=RIGHT,anchor=W,fill=Y)
391 listTarget.pack(side=TOP,anchor=W,expand=TRUE,fill=BOTH)
392 labelKeyBindTitle.pack(side=TOP,anchor=W)
393 labelModifierTitle.pack(side=TOP,anchor=W,pady=5)
394 checkCtrl.pack(side=TOP,anchor=W)
395 checkAlt.pack(side=TOP,anchor=W,pady=2)
396 checkShift.pack(side=TOP,anchor=W)
397 labelKeyEntryTitle.pack(side=TOP,anchor=W,pady=5)
398 entryKey.pack(side=TOP,anchor=W)
399 #frameKeySets
400 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
401 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
402 radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
403 radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
404 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
405 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
406 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000407 return frame
408
409 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000410 #tkVars
411 self.runType=IntVar()
412 self.winWidth=StringVar()
413 self.winHeight=StringVar()
414 self.extState=IntVar()
415 #widget creation
416 #body
Steven M. Gava952d0a52001-08-03 04:43:44 +0000417 frame=Frame(self.framePages,borderwidth=2,relief=SUNKEN)
Steven M. Gava230e5782001-08-07 03:28:25 +0000418 #body section frames
419 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
420 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
421 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
422 #frameRun
423 labelRunTitle=Label(frameRun,text='Run Preferences')
424 labelRunChoiceTitle=Label(frameRun,text='Run code : ')
425 radioRunInternal=Radiobutton(frameRun,variable=self.runType,
426 value=0,command=self.SetKeysType,text="in IDLE's Process")
427 radioRunSeparate=Radiobutton(frameRun,variable=self.runType,
428 value=1,command=self.SetKeysType,text='in a Separate Process')
429 #frameWinSize
430 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size')
431 buttonWinSizeSet=Button(frameWinSize,text='Set to current window size')
432 labelWinWidthTitle=Label(frameWinSize,text='Width')
433 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
434 width=3)
435 labelWinHeightTitle=Label(frameWinSize,text='Height')
436 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
437 width=3)
438 #frameExt
439 frameExtList=Frame(frameExt)
440 frameExtSet=Frame(frameExt)
441 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
442 labelExtListTitle=Label(frameExtList,text='Extension')
443 scrollExtList=Scrollbar(frameExtList)
444 listExt=Listbox(frameExtList,height=5)
445 labelExtSetTitle=Label(frameExtSet,text='Settings')
446 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
447 value=1,text="enable")
448 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
449 value=0,text="disable")
450 self.extState.set(1)
451 buttonExtConfig=Button(frameExtSet,text='Configure')
452
453 #widget packing
454 #body
455 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
456 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
457 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
458 #frameRun
459 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
460 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
461 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
462 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
463 #frameWinSize
464 labelWinSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
465 buttonWinSizeSet.pack(side=LEFT,anchor=W,padx=5,pady=5)
466 labelWinWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
467 entryWinWidth.pack(side=LEFT,anchor=W,padx=5,pady=5)
468 labelWinHeightTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
469 entryWinHeight.pack(side=LEFT,anchor=W,padx=5,pady=5)
470 #frameExt
471 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
472 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
473 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
474 labelExtListTitle.pack(side=TOP,anchor=W)
475 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
476 listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
477 labelExtSetTitle.pack(side=TOP,anchor=W)
478 radioEnableExt.pack(side=TOP,anchor=W)
479 radioDisableExt.pack(side=TOP,anchor=W)
480 buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
481
Steven M. Gava952d0a52001-08-03 04:43:44 +0000482 return frame
483
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000484if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000485 #test the dialog
486 root=Tk()
487 Button(root,text='Dialog',
488 command=lambda:ConfigDialog(root,'Settings',None)).pack()
489 root.mainloop()