blob: 4fb90e9cca1b9aff2b33c52e2c3c9724ec9879ff [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):
Steven M. Gava33277c72001-08-13 04:36:58 +000086 #pop up the active 'tab' only
87 for button in self.pageButtons: button.master.config(relief=RIDGE)
88 self.pageButtons[self.pageNum.get()].master.config(relief=RAISED)
89 #switch page
Steven M. Gava952d0a52001-08-03 04:43:44 +000090 self.pages[self.pageNum.get()].lift()
Steven M. Gava230e5782001-08-07 03:28:25 +000091 self.title('Settings - '+
92 self.pageButtons[self.pageNum.get()].cget('text'))
Steven M. Gava952d0a52001-08-03 04:43:44 +000093
Steven M. Gavad721c482001-07-31 10:46:53 +000094 def ChangePageBinding(self,event):
Steven M. Gava952d0a52001-08-03 04:43:44 +000095 pageKeys=('f','h','k','g')
Steven M. Gavad721c482001-07-31 10:46:53 +000096 pos=0
97 for key in pageKeys:
98 if event.char == key:
99 self.pageNum.set(pos)
100 self.ChangePage()
101 return
102 pos=pos+1
103
Steven M. Gava952d0a52001-08-03 04:43:44 +0000104 def SetThemeType(self):
105 if self.themeType.get()==0:
106 self.optMenuThemeBuiltin.config(state=NORMAL)
107 self.optMenuThemeCustom.config(state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000108 self.buttonDeleteCustomTheme.config(state=DISABLED)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000109 elif self.themeType.get()==1:
110 self.optMenuThemeBuiltin.config(state=DISABLED)
111 self.optMenuThemeCustom.config(state=NORMAL)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000112 self.buttonDeleteCustomTheme.config(state=NORMAL)
113
114 def SetKeysType(self):
115 if self.keysType.get()==0:
116 self.optMenuKeysBuiltin.config(state=NORMAL)
117 self.optMenuKeysCustom.config(state=DISABLED)
118 self.buttonDeleteCustomKeys.config(state=DISABLED)
119 elif self.keysType.get()==1:
120 self.optMenuKeysBuiltin.config(state=DISABLED)
121 self.optMenuKeysCustom.config(state=NORMAL)
122 self.buttonDeleteCustomKeys.config(state=NORMAL)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000123
Steven M. Gava074c9d22001-08-08 01:30:38 +0000124 def GetColour(self):
125 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
126 title='Pick new colour for : '+self.highlightTarget.get(),
127 initialcolor=self.workingTestColours['Foo-Bg'])#._root()
128 if colourString: #user didn't cancel
129 self.workingTestColours['Foo-Bg']=colourString
130 self.frameColourSet.config(bg=self.workingTestColours['Foo-Bg'])
131 self.labelTestSample.config(bg=self.workingTestColours['Foo-Bg'])
132 self.frameHighlightSample.config(bg=self.workingTestColours['Foo-Bg'])
133 self.frameColourSet.update() #redraw after dialog
134 self.frameHighlightSample.update() #redraw after dialog
135 self.labelTestSample.update()
136
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000137 def __LoadFontList(self):
138 fonts=list(tkFont.families(self))
139 fonts.sort()
140 for font in fonts:
141 self.listFontName.insert(END,font)
142 currentFontIndex=fonts.index('courier')
143 self.listFontName.see(currentFontIndex)
144 self.listFontName.select_set(currentFontIndex)
145 self.fontSize.set('12')
146
147 def __SetFontSample(self,event):
148 self.newFont.config(size=self.fontSize.get(),weight=NORMAL,
149 family=self.listFontName.get(self.listFontName.curselection()[0]))
150
Steven M. Gavad721c482001-07-31 10:46:53 +0000151 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +0000152 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000153 frameActionButtons = Frame(self)
Steven M. Gava33277c72001-08-13 04:36:58 +0000154 framePageButtons = Frame(self.framePages)
Steven M. Gavad721c482001-07-31 10:46:53 +0000155 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000156 self.buttonHelp = Button(frameActionButtons,text='Help',
157 command=self.Help,takefocus=FALSE)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000158 self.buttonOk = Button(frameActionButtons,text='Ok',
159 command=self.Ok,takefocus=FALSE)
160 self.buttonApply = Button(frameActionButtons,text='Apply',
161 command=self.Apply,underline=0,takefocus=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +0000162 self.buttonCancel = Button(frameActionButtons,text='Cancel',
163 command=self.Cancel,takefocus=FALSE)
164 #page buttons
165 self.pageNum=IntVar()
166 self.pageNum.set(0)
Steven M. Gava33277c72001-08-13 04:36:58 +0000167 pageButtonNames=('Fonts/Tabs','Highlighting','Keys','General')
168 self.pageButtons=[]
169 buttonValue=0
170 for name in pageButtonNames:
171 buttonFrame=Frame(framePageButtons,borderwidth=2,relief=RIDGE)
172 buttonFrame.pack(side=LEFT)
173 button = Radiobutton(buttonFrame,command=self.ChangePage,
174 value=buttonValue,padx=5,pady=5,takefocus=FALSE,underline=0,
175 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
176 selectcolor=self.bg,borderwidth=0,text=name)
177 button.pack()
178 button.lift()
179 self.pageButtons.append(button)
180 buttonValue=buttonValue+1
Steven M. Gavad721c482001-07-31 10:46:53 +0000181 #pages
Steven M. Gava60fc7072001-08-04 13:58:22 +0000182 self.pages=(self.CreatePageFontTab(),
Steven M. Gava952d0a52001-08-03 04:43:44 +0000183 self.CreatePageHighlight(),
184 self.CreatePageKeys(),
185 self.CreatePageGeneral())
186
Steven M. Gavad721c482001-07-31 10:46:53 +0000187 #grid in framePages so we can overlap pages
Steven M. Gava33277c72001-08-13 04:36:58 +0000188 framePageButtons.grid(row=0,column=0,sticky=NSEW)
Steven M. Gavad721c482001-07-31 10:46:53 +0000189 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
190
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000191 self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)
192 self.buttonOk.pack(side=LEFT,padx=5,pady=5)
193 self.buttonApply.pack(side=LEFT,padx=5,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000194 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
195 frameActionButtons.pack(side=BOTTOM)
196 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
197
Steven M. Gava60fc7072001-08-04 13:58:22 +0000198 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000199 #tkVars
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000200 self.fontSize=StringVar()
201 self.spaceNum=IntVar()
202 self.tabCols=IntVar()
203 self.indentType=IntVar()
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000204 self.newFont=tkFont.Font(self,('courier',12,'normal'))
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000205 ##widget creation
206 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000207 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000208 #body section frames
209 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
210 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
211 #frameFont
212 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
213 frameFontName=Frame(frameFont)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000214 frameFontSize=Frame(frameFontName)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000215 labelFontNameTitle=Label(frameFontName,justify=LEFT,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000216 text='Font :')
217 self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,
218 exportselection=FALSE)
219 self.listFontName.bind('<<ListboxSelect>>',self.__SetFontSample)
220 scrollFont=Scrollbar(frameFontName)
221 self.__LoadFontList()
222 scrollFont.config(command=self.listFontName.yview)
223 self.listFontName.config(yscrollcommand=scrollFont.set)
224 labelFontSizeTitle=Label(frameFontSize,text='Size :')
225 sizes=('10','11','12','13','14','16','18','20','22')
226 args=(frameFontSize,self.fontSize)+sizes
227 keyArgs={'command':self.__SetFontSample}
228 optFontSize=apply(OptionMenu,args,keyArgs)
229 #optFontSize.bind('<<MenuSelect>>',self.__SetFontSample)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000230 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1,
231 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000232 self.labelFontSample=Label(frameFontSample,bg=self.workingTestColours['Foo-Bg'],
233 fg='#000000',text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
234 justify=LEFT,font=self.newFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000235 #frameIndent
236 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
237 frameIndentType=Frame(frameIndent)
238 frameIndentSize=Frame(frameIndent)
239 labelIndentTypeTitle=Label(frameIndentType,
240 text='Choose indentation type :')
241 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
242 value=0,text='Tab key inserts spaces')
243 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
244 value=1,text='Tab key inserts tabs')
245 labelIndentSizeTitle=Label(frameIndentSize,
246 text='Choose indentation size :')
247 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
248 text='when tab key inserts spaces,\nspaces per tab')
249 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
250 orient='horizontal',tickinterval=2,from_=2,to=8)
251 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
252 text='when tab key inserts tabs,\ncolumns per tab')
253 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
254 orient='horizontal',tickinterval=2,from_=2,to=8)
255
256 #widget packing
257 #body
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000258 frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
259 frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000260 #frameFont
261 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000262 frameFontName.pack(side=TOP,padx=5,pady=5)
263 frameFontSize.pack(side=RIGHT,anchor=N,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000264 labelFontNameTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000265 self.listFontName.pack(side=LEFT,fill=Y)
266 scrollFont.pack(side=LEFT,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000267 labelFontSizeTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000268 optFontSize.pack(side=TOP,anchor=W,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000269 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000270 self.labelFontSample.pack(expand=TRUE,fill=BOTH)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000271 #frameIndent
272 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
273 frameIndentType.pack(side=TOP,padx=5,fill=X)
274 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
275 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
276 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
277 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
278 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
279 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
280 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
281 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
282 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000283 return frame
284
285 def CreatePageHighlight(self):
286 #tkVars
Steven M. Gava60fc7072001-08-04 13:58:22 +0000287 self.highlightTarget=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000288 self.builtinTheme=StringVar()
289 self.customTheme=StringVar()
290 self.colour=StringVar()
291 self.fontName=StringVar()
292 self.fontBold=StringVar()
293 self.fontItalic=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000294 self.themeType=IntVar()
295 ##widget creation
296 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000297 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000298 #body section frames
299 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
300 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000301 #frameCustom
302 frameTarget=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000303 self.frameHighlightSample=Frame(frameCustom,relief=SOLID,borderwidth=1,
304 bg=self.workingTestColours['Foo-Bg'],cursor='hand2')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000305 frameSet=Frame(frameCustom)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000306 self.frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1,
Steven M. Gava60fc7072001-08-04 13:58:22 +0000307 bg=self.workingTestColours['Foo-Bg'])
Steven M. Gava952d0a52001-08-03 04:43:44 +0000308 frameFontSet=Frame(frameSet)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000309 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
310 labelTargetTitle=Label(frameTarget,text='for : ')
311 optMenuTarget=OptionMenu(frameTarget,
Steven M. Gava074c9d22001-08-08 01:30:38 +0000312 self.highlightTarget,'normal text background','test target interface item 2')
313 self.highlightTarget.set('normal text background')
314 buttonSetColour=Button(self.frameColourSet,text='Set Colour',
315 command=self.GetColour)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000316 labelFontTitle=Label(frameFontSet,text='Set Font Style')
317 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
318 onvalue='Bold',offvalue='',text='Bold')
319 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
320 onvalue='Italic',offvalue='',text='Italic')
Steven M. Gava074c9d22001-08-08 01:30:38 +0000321 self.labelTestSample=Label(self.frameHighlightSample,justify=LEFT,font=('courier',12,''),
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000322 text='#when finished, this\n#sample area will\n#be interactive\n'+
323 'def Ahem(foo,bar):\n '+
324 '"""'+'doc hazard'+'"""'+
325 '\n test=foo\n text=bar\n return',
Steven M. Gava60fc7072001-08-04 13:58:22 +0000326 bg=self.workingTestColours['Foo-Bg'])
327 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000328 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000329 #frameTheme
330 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
331 # width=2,height=10)
332 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
333 labelTypeTitle=Label(frameTheme,text='Select : ')
334 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
335 value=0,command=self.SetThemeType,text='a Built-in Theme')
336 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
337 value=1,command=self.SetThemeType,text='a Custom Theme')
338 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
339 self.builtinTheme,'test builtin junk','test builtin junk 2')
340 self.builtinTheme.set('test builtin junk')
341 self.optMenuThemeCustom=OptionMenu(frameTheme,
342 self.customTheme,'test custom junk','test custom junk 2')
343 self.customTheme.set('test custom junk')
344 self.themeType.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000345 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000346 self.SetThemeType()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000347 ##widget packing
348 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000349 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
350 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000351 #frameCustom
352 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000353 frameTarget.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000354 self.frameHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000355 frameSet.pack(side=TOP,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000356 self.frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000357 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
358 labelTargetTitle.pack(side=LEFT,anchor=E)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000359 optMenuTarget.pack(side=RIGHT,anchor=W,expand=TRUE,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000360 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
361 labelFontTitle.pack(side=TOP,anchor=W)
362 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
363 checkFontItalic.pack(side=RIGHT,anchor=W)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000364 self.labelTestSample.pack(anchor=CENTER,expand=TRUE,fill=BOTH)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000365 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000366 #frameTheme
367 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
368 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
369 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
370 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
371 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
372 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
373 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000374 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000375 return frame
376
377 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000378 #tkVars
379 self.bindingTarget=StringVar()
380 self.builtinKeys=StringVar()
381 self.customKeys=StringVar()
382 self.keyChars=StringVar()
383 self.keyCtrl=StringVar()
384 self.keyAlt=StringVar()
385 self.keyShift=StringVar()
386 self.keysType=IntVar()
387 ##widget creation
388 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000389 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000390 #body section frames
391 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
392 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
393 #frameCustom
394 frameTarget=Frame(frameCustom)
395 frameSet=Frame(frameCustom)
396 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
397 labelTargetTitle=Label(frameTarget,text='Action')
398 scrollTarget=Scrollbar(frameTarget)
399 listTarget=Listbox(frameTarget)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000400 scrollTarget.config(command=listTarget.yview)
401 listTarget.config(yscrollcommand=scrollTarget.set)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000402 labelKeyBindTitle=Label(frameSet,text='Binding')
403 labelModifierTitle=Label(frameSet,text='Modifier:')
404 checkCtrl=Checkbutton(frameSet,text='Ctrl')
405 checkAlt=Checkbutton(frameSet,text='Alt')
406 checkShift=Checkbutton(frameSet,text='Shift')
407 labelKeyEntryTitle=Label(frameSet,text='Key:')
408 entryKey=Entry(frameSet,width=4)
409 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
410 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000411 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000412 labelTypeTitle=Label(frameKeySets,text='Select : ')
413 radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysType,
414 value=0,command=self.SetKeysType,text='a Built-in Key Set')
415 radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysType,
416 value=1,command=self.SetKeysType,text='a Custom Key Set')
417 self.optMenuKeysBuiltin=OptionMenu(frameKeySets,
418 self.builtinKeys,'test builtin junk','test builtin junk 2')
419 self.builtinKeys.set('test builtin junk')
420 self.optMenuKeysCustom=OptionMenu(frameKeySets,
421 self.customKeys,'test custom junk','test custom junk 2')
422 self.customKeys.set('test custom junk')
423 self.keysType.set(0)
424 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
425 self.SetKeysType()
426 ##widget packing
427 #body
428 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
429 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
430 #frameCustom
431 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
432 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
433 frameTarget.pack(side=LEFT,padx=5,pady=5,fill=Y)
434 frameSet.pack(side=LEFT,padx=5,pady=5,fill=Y)
435 labelTargetTitle.pack(side=TOP,anchor=W)
436 scrollTarget.pack(side=RIGHT,anchor=W,fill=Y)
437 listTarget.pack(side=TOP,anchor=W,expand=TRUE,fill=BOTH)
438 labelKeyBindTitle.pack(side=TOP,anchor=W)
439 labelModifierTitle.pack(side=TOP,anchor=W,pady=5)
440 checkCtrl.pack(side=TOP,anchor=W)
441 checkAlt.pack(side=TOP,anchor=W,pady=2)
442 checkShift.pack(side=TOP,anchor=W)
443 labelKeyEntryTitle.pack(side=TOP,anchor=W,pady=5)
444 entryKey.pack(side=TOP,anchor=W)
445 #frameKeySets
446 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
447 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
448 radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
449 radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
450 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
451 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
452 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000453 return frame
454
455 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000456 #tkVars
457 self.runType=IntVar()
458 self.winWidth=StringVar()
459 self.winHeight=StringVar()
460 self.extState=IntVar()
461 #widget creation
462 #body
Steven M. Gava33277c72001-08-13 04:36:58 +0000463 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava230e5782001-08-07 03:28:25 +0000464 #body section frames
465 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
466 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
467 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
468 #frameRun
469 labelRunTitle=Label(frameRun,text='Run Preferences')
470 labelRunChoiceTitle=Label(frameRun,text='Run code : ')
471 radioRunInternal=Radiobutton(frameRun,variable=self.runType,
472 value=0,command=self.SetKeysType,text="in IDLE's Process")
473 radioRunSeparate=Radiobutton(frameRun,variable=self.runType,
474 value=1,command=self.SetKeysType,text='in a Separate Process')
475 #frameWinSize
476 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size')
477 buttonWinSizeSet=Button(frameWinSize,text='Set to current window size')
478 labelWinWidthTitle=Label(frameWinSize,text='Width')
479 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
480 width=3)
481 labelWinHeightTitle=Label(frameWinSize,text='Height')
482 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
483 width=3)
484 #frameExt
485 frameExtList=Frame(frameExt)
486 frameExtSet=Frame(frameExt)
487 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
488 labelExtListTitle=Label(frameExtList,text='Extension')
489 scrollExtList=Scrollbar(frameExtList)
490 listExt=Listbox(frameExtList,height=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000491 scrollExtList.config(command=listExt.yview)
492 listExt.config(yscrollcommand=scrollExtList.set)
Steven M. Gava230e5782001-08-07 03:28:25 +0000493 labelExtSetTitle=Label(frameExtSet,text='Settings')
494 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
495 value=1,text="enable")
496 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
497 value=0,text="disable")
498 self.extState.set(1)
499 buttonExtConfig=Button(frameExtSet,text='Configure')
500
501 #widget packing
502 #body
503 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
504 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
505 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
506 #frameRun
507 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
508 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
509 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
510 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
511 #frameWinSize
512 labelWinSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
513 buttonWinSizeSet.pack(side=LEFT,anchor=W,padx=5,pady=5)
514 labelWinWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
515 entryWinWidth.pack(side=LEFT,anchor=W,padx=5,pady=5)
516 labelWinHeightTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
517 entryWinHeight.pack(side=LEFT,anchor=W,padx=5,pady=5)
518 #frameExt
519 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
520 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
521 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
522 labelExtListTitle.pack(side=TOP,anchor=W)
523 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
524 listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
525 labelExtSetTitle.pack(side=TOP,anchor=W)
526 radioEnableExt.pack(side=TOP,anchor=W)
527 radioDisableExt.pack(side=TOP,anchor=W)
528 buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
529
Steven M. Gava952d0a52001-08-03 04:43:44 +0000530 return frame
531
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000532if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000533 #test the dialog
534 root=Tk()
535 Button(root,text='Dialog',
536 command=lambda:ConfigDialog(root,'Settings',None)).pack()
537 root.mainloop()