blob: a45188b79b6e69ca766464b094facc66431bdeb5 [file] [log] [blame]
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00001"""
2configuration dialog
3"""
4from Tkinter import *
Steven M. Gavac01e30f2001-08-11 15:48:13 +00005import tkMessageBox, tkColorChooser, tkFont
Steven M. Gavafacfc092002-01-19 00:29:54 +00006import string
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00007
Steven M. Gavac11ccf32001-09-24 09:43:17 +00008from configHandler import idleConf
Steven M. Gava485f7b62001-10-26 06:47:09 +00009from dynOptionMenuWidget import DynOptionMenu
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000010from tabpage import TabPageSet
Steven M. Gavafacfc092002-01-19 00:29:54 +000011from keybindingDialog import GetKeysDialog
Steven M. Gava60fc7072001-08-04 13:58:22 +000012
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000013class ConfigDialog(Toplevel):
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000014 """
Steven M. Gavad721c482001-07-31 10:46:53 +000015 configuration dialog for idle
16 """
Steven M. Gava3b55a892001-11-21 05:56:26 +000017 def __init__(self,parent,title):
Steven M. Gavad721c482001-07-31 10:46:53 +000018 Toplevel.__init__(self, parent)
19 self.configure(borderwidth=5)
20 self.geometry("+%d+%d" % (parent.winfo_rootx()+20,
21 parent.winfo_rooty()+30))
Steven M. Gava9dd16b32001-11-03 14:54:25 +000022 #Theme Elements. Each theme element key is it's display name.
23 #The first value of the tuple is the sample area tag name.
24 #The second value is the display name list sort index.
25 #The third value indicates whether the element can have a foreground
26 #or background colour or both.
Steven M. Gavaad4f5322002-01-03 12:05:17 +000027 self.themeElements={'Normal Text':('normal','00'),
28 'Python Keywords':('keyword','01'),
29 'Python Definitions':('definition','02'),
30 'Python Comments':('comment','03'),
31 'Python Strings':('string','04'),
32 'Selected Text':('hilite','05'),
33 'Found Text':('hit','06'),
34 'Cursor':('cursor','07'),
35 'Error Text':('error','08'),
36 'Shell Normal Text':('console','09'),
37 'Shell Stdout Text':('stdout','10'),
38 'Shell Stderr Text':('stderr','11')}
Steven M. Gavad721c482001-07-31 10:46:53 +000039 self.CreateWidgets()
40 self.resizable(height=FALSE,width=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +000041 self.transient(parent)
42 self.grab_set()
43 self.protocol("WM_DELETE_WINDOW", self.Cancel)
44 self.parent = parent
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000045 self.tabPages.focus_set()
Steven M. Gavad721c482001-07-31 10:46:53 +000046 #key bindings for this dialog
Steven M. Gavad721c482001-07-31 10:46:53 +000047 self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
Steven M. Gavac01e30f2001-08-11 15:48:13 +000048 self.bind('<Alt-a>',self.ApplyBinding) #apply changes, save
Steven M. Gava952d0a52001-08-03 04:43:44 +000049 self.bind('<F1>',self.HelpBinding) #context help
Steven M. Gava429a86a2001-10-23 10:42:12 +000050 self.LoadConfigs()
Steven M. Gavad721c482001-07-31 10:46:53 +000051 self.wait_window()
52
53 def Cancel(self):
54 self.destroy()
55
Steven M. Gavac01e30f2001-08-11 15:48:13 +000056 def Ok(self):
57 pass
58
59 def Apply(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000060 pass
61
Steven M. Gava952d0a52001-08-03 04:43:44 +000062 def Help(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000063 pass
64
Steven M. Gavad721c482001-07-31 10:46:53 +000065 def CancelBinding(self,event):
66 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000067
Steven M. Gavac01e30f2001-08-11 15:48:13 +000068 def OkBinding(self,event):
69 self.Ok()
70
71 def ApplyBinding(self,event):
72 self.Apply()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000073
Steven M. Gava952d0a52001-08-03 04:43:44 +000074 def HelpBinding(self,event):
75 self.Help()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000076
Steven M. Gava952d0a52001-08-03 04:43:44 +000077 def SetThemeType(self):
Steven M. Gavad0342cd2001-11-04 11:53:10 +000078 if self.themeIsBuiltin.get():
Steven M. Gava952d0a52001-08-03 04:43:44 +000079 self.optMenuThemeBuiltin.config(state=NORMAL)
80 self.optMenuThemeCustom.config(state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +000081 self.buttonDeleteCustomTheme.config(state=DISABLED)
Steven M. Gava9dd16b32001-11-03 14:54:25 +000082 else:
Steven M. Gava952d0a52001-08-03 04:43:44 +000083 self.optMenuThemeBuiltin.config(state=DISABLED)
84 self.optMenuThemeCustom.config(state=NORMAL)
Steven M. Gava60fc7072001-08-04 13:58:22 +000085 self.buttonDeleteCustomTheme.config(state=NORMAL)
86
87 def SetKeysType(self):
Steven M. Gavad0342cd2001-11-04 11:53:10 +000088 if self.keysAreDefault.get():
Steven M. Gava60fc7072001-08-04 13:58:22 +000089 self.optMenuKeysBuiltin.config(state=NORMAL)
90 self.optMenuKeysCustom.config(state=DISABLED)
91 self.buttonDeleteCustomKeys.config(state=DISABLED)
Steven M. Gavad0342cd2001-11-04 11:53:10 +000092 else:
Steven M. Gava60fc7072001-08-04 13:58:22 +000093 self.optMenuKeysBuiltin.config(state=DISABLED)
94 self.optMenuKeysCustom.config(state=NORMAL)
95 self.buttonDeleteCustomKeys.config(state=NORMAL)
Steven M. Gava952d0a52001-08-03 04:43:44 +000096
Steven M. Gava074c9d22001-08-08 01:30:38 +000097 def GetColour(self):
Steven M. Gava9dd16b32001-11-03 14:54:25 +000098 target=self.highlightTarget.get()
Steven M. Gava074c9d22001-08-08 01:30:38 +000099 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000100 title='Pick new colour for : '+target,
101 initialcolor=self.frameColourSet.cget('bg'))
Steven M. Gava074c9d22001-08-08 01:30:38 +0000102 if colourString: #user didn't cancel
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000103 self.frameColourSet.config(bg=colourString)#set sample
104 if self.fgHilite.get(): plane='foreground'
105 else: plane='background'
106 apply(self.textHighlightSample.tag_config,
107 (self.themeElements[target][0],),{plane:colourString})
108
Steven M. Gava429a86a2001-10-23 10:42:12 +0000109 def SetFontSampleBinding(self,event):
110 self.SetFontSample()
111
112 def SetFontSample(self):
113 self.editFont.config(size=self.fontSize.get(),weight=NORMAL,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000114 family=self.listFontName.get(self.listFontName.curselection()[0]))
Steven M. Gava41a85322001-10-29 08:05:34 +0000115
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000116 def SetHighlightTargetBinding(self,*args):
Steven M. Gava7c017862001-10-29 11:19:46 +0000117 self.SetHighlightTarget()
Steven M. Gava41a85322001-10-29 08:05:34 +0000118
Steven M. Gava7c017862001-10-29 11:19:46 +0000119 def SetHighlightTarget(self):
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000120 if self.highlightTarget.get()=='Cursor': #bg not possible
Steven M. Gava7c017862001-10-29 11:19:46 +0000121 self.radioFg.config(state=DISABLED)
122 self.radioBg.config(state=DISABLED)
123 self.fgHilite.set(1)
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000124 else: #both fg and bg can be set
Steven M. Gava0cae01c2002-01-04 07:53:06 +0000125 self.radioFg.config(state=NORMAL)
126 self.radioBg.config(state=NORMAL)
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000127 self.fgHilite.set(1)
Steven M. Gava3b55a892001-11-21 05:56:26 +0000128 self.SetColourSample()
129
130 def SetColourSampleBinding(self,*args):
131 self.SetColourSample()
132
133 def SetColourSample(self):
134 #set the colour smaple area
135 tag=self.themeElements[self.highlightTarget.get()][0]
136 if self.fgHilite.get(): plane='foreground'
137 else: plane='background'
138 colour=self.textHighlightSample.tag_cget(tag,plane)
139 self.frameColourSet.config(bg=colour)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000140
Steven M. Gavad721c482001-07-31 10:46:53 +0000141 def CreateWidgets(self):
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000142 self.tabPages = TabPageSet(self,
143 pageNames=['Fonts/Tabs','Highlighting','Keys','General'])
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000144 self.tabPages.ChangePage()#activates default (first) page
Steven M. Gavad721c482001-07-31 10:46:53 +0000145 frameActionButtons = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000146 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000147 self.buttonHelp = Button(frameActionButtons,text='Help',
148 command=self.Help,takefocus=FALSE)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000149 self.buttonOk = Button(frameActionButtons,text='Ok',
150 command=self.Ok,takefocus=FALSE)
151 self.buttonApply = Button(frameActionButtons,text='Apply',
152 command=self.Apply,underline=0,takefocus=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +0000153 self.buttonCancel = Button(frameActionButtons,text='Cancel',
154 command=self.Cancel,takefocus=FALSE)
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000155 self.CreatePageFontTab()
156 self.CreatePageHighlight()
157 self.CreatePageKeys()
158 self.CreatePageGeneral()
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000159 self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)
160 self.buttonOk.pack(side=LEFT,padx=5,pady=5)
161 self.buttonApply.pack(side=LEFT,padx=5,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000162 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
163 frameActionButtons.pack(side=BOTTOM)
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000164 self.tabPages.pack(side=TOP,expand=TRUE,fill=BOTH)
165
Steven M. Gavad721c482001-07-31 10:46:53 +0000166
Steven M. Gava60fc7072001-08-04 13:58:22 +0000167 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000168 #tkVars
Steven M. Gava3b55a892001-11-21 05:56:26 +0000169 self.fontSize=StringVar(self)
170 self.fontBold=StringVar(self)
171 self.spaceNum=IntVar(self)
172 self.tabCols=IntVar(self)
173 self.indentType=IntVar(self)
Steven M. Gava429a86a2001-10-23 10:42:12 +0000174 self.editFont=tkFont.Font(self,('courier',12,'normal'))
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000175 ##widget creation
176 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000177 frame=self.tabPages.pages['Fonts/Tabs']['page']
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000178 #body section frames
179 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
180 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
181 #frameFont
182 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
183 frameFontName=Frame(frameFont)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000184 frameFontParam=Frame(frameFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000185 labelFontNameTitle=Label(frameFontName,justify=LEFT,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000186 text='Font :')
187 self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,
188 exportselection=FALSE)
Steven M. Gava429a86a2001-10-23 10:42:12 +0000189 self.listFontName.bind('<<ListboxSelect>>',self.SetFontSampleBinding)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000190 scrollFont=Scrollbar(frameFontName)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000191 scrollFont.config(command=self.listFontName.yview)
192 self.listFontName.config(yscrollcommand=scrollFont.set)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000193 labelFontSizeTitle=Label(frameFontParam,text='Size :')
194 self.optMenuFontSize=DynOptionMenu(frameFontParam,self.fontSize,None,
Steven M. Gava485f7b62001-10-26 06:47:09 +0000195 command=self.SetFontSampleBinding)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000196 checkFontBold=Checkbutton(frameFontParam,variable=self.fontBold,
197 onvalue='Bold',offvalue='',text='Bold')
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000198 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1)
199 self.labelFontSample=Label(frameFontSample,
200 text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000201 justify=LEFT,font=self.editFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000202 #frameIndent
203 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
204 frameIndentType=Frame(frameIndent)
205 frameIndentSize=Frame(frameIndent)
206 labelIndentTypeTitle=Label(frameIndentType,
207 text='Choose indentation type :')
208 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
Steven M. Gava429a86a2001-10-23 10:42:12 +0000209 value=1,text='Tab key inserts spaces')
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000210 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
Steven M. Gava429a86a2001-10-23 10:42:12 +0000211 value=0,text='Tab key inserts tabs')
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000212 labelIndentSizeTitle=Label(frameIndentSize,
213 text='Choose indentation size :')
214 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
215 text='when tab key inserts spaces,\nspaces per tab')
216 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
217 orient='horizontal',tickinterval=2,from_=2,to=8)
218 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
219 text='when tab key inserts tabs,\ncolumns per tab')
220 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
221 orient='horizontal',tickinterval=2,from_=2,to=8)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000222 #widget packing
223 #body
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000224 frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
225 frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000226 #frameFont
227 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000228 frameFontName.pack(side=TOP,padx=5,pady=5,fill=X)
229 frameFontParam.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000230 labelFontNameTitle.pack(side=TOP,anchor=W)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000231 self.listFontName.pack(side=LEFT,expand=TRUE,fill=X)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000232 scrollFont.pack(side=LEFT,fill=Y)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000233 labelFontSizeTitle.pack(side=LEFT,anchor=W)
234 self.optMenuFontSize.pack(side=LEFT,anchor=W)
235 checkFontBold.pack(side=LEFT,anchor=W,padx=20)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000236 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000237 self.labelFontSample.pack(expand=TRUE,fill=BOTH)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000238 #frameIndent
239 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
240 frameIndentType.pack(side=TOP,padx=5,fill=X)
241 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
242 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
243 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
244 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
245 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
246 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
247 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
248 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
249 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000250 return frame
251
252 def CreatePageHighlight(self):
Steven M. Gava3b55a892001-11-21 05:56:26 +0000253 self.builtinTheme=StringVar(self)
254 self.customTheme=StringVar(self)
255 self.fgHilite=IntVar(self)
256 self.colour=StringVar(self)
257 self.fontName=StringVar(self)
258 self.themeIsBuiltin=IntVar(self)
259 self.highlightTarget=StringVar(self)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000260 self.highlightTarget.trace_variable('w',self.SetHighlightTargetBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000261 ##widget creation
262 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000263 frame=self.tabPages.pages['Highlighting']['page']
Steven M. Gava952d0a52001-08-03 04:43:44 +0000264 #body section frames
265 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
266 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000267 #frameCustom
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000268 self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,
269 font=('courier',12,''),cursor='hand2',width=10,height=10,
270 takefocus=FALSE,highlightthickness=0)
271 text=self.textHighlightSample
272 text.bind('<Double-Button-1>',lambda e: 'break')
273 text.bind('<B1-Motion>',lambda e: 'break')
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000274 textAndTags=(('#you can click in here','comment'),('\n','normal'),
275 ('#to choose items','comment'),('\n','normal'),('def','keyword'),
276 (' ','normal'),('func','definition'),('(param):','normal'),
277 ('\n ','normal'),('"""string"""','string'),('\n var0 = ','normal'),
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000278 ("'string'",'string'),('\n var1 = ','normal'),("'selected'",'hilite'),
279 ('\n var2 = ','normal'),("'found'",'hit'),('\n\n','normal'),
Steven M. Gava99300612001-11-04 07:03:08 +0000280 (' error ','error'),(' ','normal'),('cursor |','cursor'),
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000281 ('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'),
282 (' ','normal'),('stderr','stderr'),('\n','normal'))
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000283 for txTa in textAndTags:
284 text.insert(END,txTa[0],txTa[1])
285 for element in self.themeElements.keys():
286 text.tag_bind(self.themeElements[element][0],'<ButtonPress-1>',
287 lambda event,elem=element: event.widget.winfo_toplevel()
288 .highlightTarget.set(elem))
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000289 text.config(state=DISABLED)
290 self.frameColourSet=Frame(frameCustom,relief=SOLID,borderwidth=1)
Steven M. Gava7c017862001-10-29 11:19:46 +0000291 frameFgBg=Frame(frameCustom)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000292 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000293 buttonSetColour=Button(self.frameColourSet,text='Choose Colour for :',
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000294 command=self.GetColour,highlightthickness=0)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000295 self.optMenuHighlightTarget=DynOptionMenu(self.frameColourSet,
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000296 self.highlightTarget,None,highlightthickness=0)#,command=self.SetHighlightTargetBinding
Steven M. Gava7c017862001-10-29 11:19:46 +0000297 self.radioFg=Radiobutton(frameFgBg,variable=self.fgHilite,
Steven M. Gava3b55a892001-11-21 05:56:26 +0000298 value=1,text='Foreground',command=self.SetColourSampleBinding)
Steven M. Gava7c017862001-10-29 11:19:46 +0000299 self.radioBg=Radiobutton(frameFgBg,variable=self.fgHilite,
Steven M. Gava3b55a892001-11-21 05:56:26 +0000300 value=0,text='Background',command=self.SetColourSampleBinding)
Steven M. Gava7c017862001-10-29 11:19:46 +0000301 self.fgHilite.set(1)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000302 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000303 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000304 #frameTheme
Steven M. Gava952d0a52001-08-03 04:43:44 +0000305 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
306 labelTypeTitle=Label(frameTheme,text='Select : ')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000307 self.radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeIsBuiltin,
308 value=1,command=self.SetThemeType,text='a Built-in Theme')
309 self.radioThemeCustom=Radiobutton(frameTheme,variable=self.themeIsBuiltin,
310 value=0,command=self.SetThemeType,text='a Custom Theme')
Steven M. Gava41a85322001-10-29 08:05:34 +0000311 self.optMenuThemeBuiltin=DynOptionMenu(frameTheme,
Steven M. Gava7c017862001-10-29 11:19:46 +0000312 self.builtinTheme,None,command=None)
Steven M. Gava41a85322001-10-29 08:05:34 +0000313 self.optMenuThemeCustom=DynOptionMenu(frameTheme,
Steven M. Gava7c017862001-10-29 11:19:46 +0000314 self.customTheme,None,command=None)
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 ##widget packing
317 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000318 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
319 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000320 #frameCustom
321 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000322 self.frameColourSet.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=X)
Steven M. Gava7c017862001-10-29 11:19:46 +0000323 frameFgBg.pack(side=TOP,padx=5,pady=0)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000324 self.textHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,
325 fill=BOTH)
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000326 buttonSetColour.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=4)
327 self.optMenuHighlightTarget.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=3)
Steven M. Gava7c017862001-10-29 11:19:46 +0000328 self.radioFg.pack(side=LEFT,anchor=E)
329 self.radioBg.pack(side=RIGHT,anchor=W)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000330 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000331 #frameTheme
Steven M. Gava952d0a52001-08-03 04:43:44 +0000332 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
333 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gava41a85322001-10-29 08:05:34 +0000334 self.radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
335 self.radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000336 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
337 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000338 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000339 return frame
340
341 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000342 #tkVars
Steven M. Gava3b55a892001-11-21 05:56:26 +0000343 self.bindingTarget=StringVar(self)
344 self.builtinKeys=StringVar(self)
345 self.customKeys=StringVar(self)
346 self.keyChars=StringVar(self)
347 self.keyCtrl=StringVar(self)
348 self.keyAlt=StringVar(self)
349 self.keyShift=StringVar(self)
350 self.keysAreDefault=IntVar(self)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000351 ##widget creation
352 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000353 frame=self.tabPages.pages['Keys']['page']
Steven M. Gava60fc7072001-08-04 13:58:22 +0000354 #body section frames
355 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
356 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
357 #frameCustom
358 frameTarget=Frame(frameCustom)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000359 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
Steven M. Gavafacfc092002-01-19 00:29:54 +0000360 labelTargetTitle=Label(frameTarget,text='Action - Key(s)')
361 scrollTargetY=Scrollbar(frameTarget)
362 scrollTargetX=Scrollbar(frameTarget,orient=HORIZONTAL)
363 self.listBindings=Listbox(frameTarget)
364 scrollTargetY.config(command=self.listBindings.yview)
365 scrollTargetX.config(command=self.listBindings.xview)
366 self.listBindings.config(yscrollcommand=scrollTargetY.set)
367 self.listBindings.config(xscrollcommand=scrollTargetX.set)
368 buttonNewKeys=Button(frameCustom,text='Get New Keys for Selection',
369 command=self.GetNewKeys)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000370 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
371 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000372 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000373 labelTypeTitle=Label(frameKeySets,text='Select : ')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000374 self.radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysAreDefault,
375 value=1,command=self.SetKeysType,text='a Built-in Key Set')
376 self.radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysAreDefault,
377 value=0,command=self.SetKeysType,text='a Custom Key Set')
Steven M. Gava41a85322001-10-29 08:05:34 +0000378 self.optMenuKeysBuiltin=DynOptionMenu(frameKeySets,
379 self.builtinKeys,None,command=None)
380 self.optMenuKeysCustom=DynOptionMenu(frameKeySets,
381 self.customKeys,None,command=None)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000382 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000383 ##widget packing
384 #body
385 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
386 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
387 #frameCustom
388 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
389 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gavafacfc092002-01-19 00:29:54 +0000390 buttonNewKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
391 frameTarget.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
392 #frame target
393 frameTarget.columnconfigure(0,weight=1)
394 frameTarget.rowconfigure(1,weight=1)
395 labelTargetTitle.grid(row=0,column=0,columnspan=2,sticky=W)
396 self.listBindings.grid(row=1,column=0,sticky=NSEW)
397 scrollTargetY.grid(row=1,column=1,sticky=NS)
398 scrollTargetX.grid(row=2,column=0,sticky=EW)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000399 #frameKeySets
400 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
401 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gava41a85322001-10-29 08:05:34 +0000402 self.radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
403 self.radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000404 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
Steven M. Gava3b55a892001-11-21 05:56:26 +0000411 self.runType=IntVar(self)
412 self.winWidth=StringVar(self)
413 self.winHeight=StringVar(self)
414 self.extState=IntVar(self)
Steven M. Gava230e5782001-08-07 03:28:25 +0000415 #widget creation
416 #body
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000417 frame=self.tabPages.pages['General']['page']
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')
Steven M. Gava230e5782001-08-07 03:28:25 +0000431 labelWinWidthTitle=Label(frameWinSize,text='Width')
432 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
433 width=3)
434 labelWinHeightTitle=Label(frameWinSize,text='Height')
435 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
436 width=3)
437 #frameExt
438 frameExtList=Frame(frameExt)
439 frameExtSet=Frame(frameExt)
440 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
441 labelExtListTitle=Label(frameExtList,text='Extension')
442 scrollExtList=Scrollbar(frameExtList)
443 listExt=Listbox(frameExtList,height=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000444 scrollExtList.config(command=listExt.yview)
445 listExt.config(yscrollcommand=scrollExtList.set)
Steven M. Gava230e5782001-08-07 03:28:25 +0000446 labelExtSetTitle=Label(frameExtSet,text='Settings')
447 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
448 value=1,text="enable")
449 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
450 value=0,text="disable")
451 self.extState.set(1)
452 buttonExtConfig=Button(frameExtSet,text='Configure')
453
454 #widget packing
455 #body
456 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
457 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
458 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
459 #frameRun
460 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
461 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
462 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
463 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
464 #frameWinSize
Steven M. Gavafacfc092002-01-19 00:29:54 +0000465 labelWinSizeTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
466 entryWinHeight.pack(side=RIGHT,anchor=E,padx=10,pady=5)
467 labelWinHeightTitle.pack(side=RIGHT,anchor=E,pady=5)
468 entryWinWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5)
469 labelWinWidthTitle.pack(side=RIGHT,anchor=E,pady=5)
Steven M. Gava230e5782001-08-07 03:28:25 +0000470 #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. Gava9dd16b32001-11-03 14:54:25 +0000484 def PaintThemeSample(self):
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000485 if self.themeIsBuiltin.get(): #a default theme
Steven M. Gava99300612001-11-04 07:03:08 +0000486 theme=self.builtinTheme.get()
487 else: #a user theme
488 theme=self.customTheme.get()
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000489 for element in self.themeElements.keys():
490 colours=idleConf.GetHighlight(theme, self.themeElements[element][0])
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000491 if element=='Cursor': #cursor sample needs special painting
492 colours['background']=idleConf.GetHighlight(theme,
Steven M. Gava0cae01c2002-01-04 07:53:06 +0000493 'normal', fgBg='bg')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000494 apply(self.textHighlightSample.tag_config,
495 (self.themeElements[element][0],),colours)
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000496
Steven M. Gava429a86a2001-10-23 10:42:12 +0000497 def LoadFontCfg(self):
498 ##base editor font selection list
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000499 fonts=list(tkFont.families(self))
500 fonts.sort()
501 for font in fonts:
502 self.listFontName.insert(END,font)
Steven M. Gava485f7b62001-10-26 06:47:09 +0000503 configuredFont=idleConf.GetOption('main','EditorWindow','font',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000504 default='courier')
505 if configuredFont in fonts:
506 currentFontIndex=fonts.index(configuredFont)
507 self.listFontName.see(currentFontIndex)
508 self.listFontName.select_set(currentFontIndex)
509 ##font size dropdown
Steven M. Gava485f7b62001-10-26 06:47:09 +0000510 fontSize=idleConf.GetOption('main','EditorWindow','font-size',default='12')
511 self.optMenuFontSize.SetMenu(('10','11','12','13','14',
512 '16','18','20','22'),fontSize )
Steven M. Gava429a86a2001-10-23 10:42:12 +0000513 ##font sample
514 self.SetFontSample()
515
516 def LoadTabCfg(self):
517 ##indent type radibuttons
Steven M. Gava485f7b62001-10-26 06:47:09 +0000518 spaceIndent=idleConf.GetOption('main','Indent','use-spaces',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000519 default=1,type='bool')
520 self.indentType.set(spaceIndent)
521 ##indent sizes
Steven M. Gava485f7b62001-10-26 06:47:09 +0000522 spaceNum=idleConf.GetOption('main','Indent','num-spaces',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000523 default=4,type='int')
Steven M. Gava485f7b62001-10-26 06:47:09 +0000524 tabCols=idleConf.GetOption('main','Indent','tab-cols',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000525 default=4,type='int')
526 self.spaceNum.set(spaceNum)
527 self.tabCols.set(tabCols)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000528
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000529 def LoadThemeCfg(self):
Steven M. Gava41a85322001-10-29 08:05:34 +0000530 ##current theme type radiobutton
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000531 self.themeIsBuiltin.set(idleConf.GetOption('main','Theme','default',
532 type='int',default=1))
Steven M. Gava41a85322001-10-29 08:05:34 +0000533 ##currently set theme
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000534 currentOption=idleConf.CurrentTheme()
Steven M. Gava7c017862001-10-29 11:19:46 +0000535 ##load available theme option menus
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000536 if self.themeIsBuiltin.get(): #default theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000537 itemList=idleConf.GetSectionList('default','highlight')
538 self.optMenuThemeBuiltin.SetMenu(itemList,currentOption)
539 itemList=idleConf.GetSectionList('user','highlight')
540 if not itemList:
541 self.radioThemeCustom.config(state=DISABLED)
542 self.customTheme.set('- no custom themes -')
543 else:
544 self.optMenuThemeCustom.SetMenu(itemList,itemList[0])
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000545 else: #user theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000546 itemList=idleConf.GetSectionList('user','highlight')
547 self.optMenuThemeCustom.SetMenu(itemList,currentOption)
548 itemList=idleConf.GetSectionList('default','highlight')
549 self.optMenuThemeBuiltin.SetMenu(itemList,itemList[0])
Steven M. Gava7c017862001-10-29 11:19:46 +0000550 self.SetThemeType()
551 ##load theme element option menu
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000552 themeNames=self.themeElements.keys()
553 themeNames.sort(self.__ThemeNameIndexCompare)
554 self.optMenuHighlightTarget.SetMenu(themeNames,themeNames[0])
555 self.PaintThemeSample()
Steven M. Gava0cae01c2002-01-04 07:53:06 +0000556 self.SetHighlightTarget()
Steven M. Gava41a85322001-10-29 08:05:34 +0000557
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000558 def __ThemeNameIndexCompare(self,a,b):
559 if self.themeElements[a][1]<self.themeElements[b][1]: return -1
560 elif self.themeElements[a][1]==self.themeElements[b][1]: return 0
561 else: return 1
562
563 def LoadKeyCfg(self):
Steven M. Gava41a85322001-10-29 08:05:34 +0000564 ##current keys type radiobutton
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000565 self.keysAreDefault.set(idleConf.GetOption('main','Keys','default',
566 type='int',default=1))
Steven M. Gava41a85322001-10-29 08:05:34 +0000567 ##currently set keys
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000568 currentOption=idleConf.CurrentKeys()
Steven M. Gava7c017862001-10-29 11:19:46 +0000569 ##load available keyset option menus
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000570 if self.keysAreDefault.get(): #default theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000571 itemList=idleConf.GetSectionList('default','keys')
572 self.optMenuKeysBuiltin.SetMenu(itemList,currentOption)
573 itemList=idleConf.GetSectionList('user','keys')
574 if not itemList:
575 self.radioKeysCustom.config(state=DISABLED)
576 self.customKeys.set('- no custom keys -')
577 else:
578 self.optMenuKeysCustom.SetMenu(itemList,itemList[0])
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000579 else: #user theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000580 itemList=idleConf.GetSectionList('user','keys')
581 self.optMenuKeysCustom.SetMenu(itemList,currentOption)
582 itemList=idleConf.GetSectionList('default','keys')
583 self.optMenuKeysBuiltin.SetMenu(itemList,itemList[0])
584 self.SetKeysType()
Steven M. Gavafacfc092002-01-19 00:29:54 +0000585 ##load keyset element list
586 keySet=idleConf.GetKeys(currentOption)
587 bindNames=keySet.keys()
588 bindNames.sort()
589 for bindName in bindNames:
590 key=string.join(keySet[bindName]) #make key(s) into a string
591 bindName=bindName[2:-2] #trim off the angle brackets
592 self.listBindings.insert(END, bindName+' - '+key)
593
594 def GetNewKeys(self):
595 listIndex=self.listBindings.index(ANCHOR)
596 binding=self.listBindings.get(listIndex)
597 bindName=binding.split()[0] #first part, up to first space
598 newKeys=GetKeysDialog(self,'Get New Keys',bindName)
599 print newKeys.result
600 if newKeys.result: #new keys were specified
601 self.listBindings.delete(listIndex)
602 self.listBindings.insert(listIndex,bindName+' - '+newKeys.result)
603 self.listBindings.select_set(listIndex)
604
605 def LoadGeneralCfg(self):
606 #initial window size
607 self.winWidth.set(idleConf.GetOption('main','EditorWindow','width'))
608 self.winHeight.set(idleConf.GetOption('main','EditorWindow','height'))
609
Steven M. Gava41a85322001-10-29 08:05:34 +0000610
Steven M. Gava429a86a2001-10-23 10:42:12 +0000611 def LoadConfigs(self):
612 """
613 load configuration from default and user config files and populate
614 the widgets on the config dialog pages.
615 """
616 ### fonts / tabs page
617 self.LoadFontCfg()
618 self.LoadTabCfg()
619 ### highlighting page
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000620 self.LoadThemeCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000621 ### keys page
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000622 self.LoadKeyCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000623 ### help page
624 ### general page
Steven M. Gavafacfc092002-01-19 00:29:54 +0000625 self.LoadGeneralCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000626
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000627 def SaveConfigs(self):
Steven M. Gava429a86a2001-10-23 10:42:12 +0000628 """
629 save configuration changes to user config files.
630 """
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000631 pass
632
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000633if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000634 #test the dialog
635 root=Tk()
636 Button(root,text='Dialog',
Steven M. Gava3b55a892001-11-21 05:56:26 +0000637 command=lambda:ConfigDialog(root,'Settings')).pack()
Steven M. Gavad721c482001-07-31 10:46:53 +0000638 root.mainloop()