blob: 5b3c47d44c01ff4161326452c4eb59f2745c8ae7 [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. Gavac11ccf32001-09-24 09:43:17 +000013from configHandler import idleConf
Steven M. Gava60fc7072001-08-04 13:58:22 +000014
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. Gavac11ccf32001-09-24 09:43:17 +000027 #self.LoadConfig()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000028
Steven M. Gavad721c482001-07-31 10:46:53 +000029 self.CreateWidgets()
30 self.resizable(height=FALSE,width=FALSE)
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000031 self.ChangePage()
Steven M. Gavad721c482001-07-31 10:46:53 +000032 self.transient(parent)
33 self.grab_set()
34 self.protocol("WM_DELETE_WINDOW", self.Cancel)
35 self.parent = parent
36 self.framePages.focus_set()
37 #key bindings for this dialog
Steven M. Gavad721c482001-07-31 10:46:53 +000038 self.bind('<Escape>',self.CancelBinding) #dismiss dialog, no save
Steven M. Gavac01e30f2001-08-11 15:48:13 +000039 self.bind('<Alt-a>',self.ApplyBinding) #apply changes, save
Steven M. Gava952d0a52001-08-03 04:43:44 +000040 self.bind('<F1>',self.HelpBinding) #context help
Steven M. Gavad721c482001-07-31 10:46:53 +000041 self.bind('<Alt-f>',self.ChangePageBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +000042 self.bind('<Alt-h>',self.ChangePageBinding)
Steven M. Gavad721c482001-07-31 10:46:53 +000043 self.bind('<Alt-k>',self.ChangePageBinding)
44 self.bind('<Alt-g>',self.ChangePageBinding)
Steven M. Gavac11ccf32001-09-24 09:43:17 +000045 #self.LoadOptMenuHighlightTarget()
Steven M. Gavad721c482001-07-31 10:46:53 +000046 self.wait_window()
47
48 def Cancel(self):
49 self.destroy()
50
Steven M. Gavac01e30f2001-08-11 15:48:13 +000051 def Ok(self):
52 pass
53
54 def Apply(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000055 pass
56
Steven M. Gava952d0a52001-08-03 04:43:44 +000057 def Help(self):
Steven M. Gavad721c482001-07-31 10:46:53 +000058 pass
59
Steven M. Gavad721c482001-07-31 10:46:53 +000060 def CancelBinding(self,event):
61 self.Cancel()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000062
Steven M. Gavac01e30f2001-08-11 15:48:13 +000063 def OkBinding(self,event):
64 self.Ok()
65
66 def ApplyBinding(self,event):
67 self.Apply()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000068
Steven M. Gava952d0a52001-08-03 04:43:44 +000069 def HelpBinding(self,event):
70 self.Help()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000071
Steven M. Gava952d0a52001-08-03 04:43:44 +000072 def ChangePage(self):
Steven M. Gava33277c72001-08-13 04:36:58 +000073 #pop up the active 'tab' only
74 for button in self.pageButtons: button.master.config(relief=RIDGE)
75 self.pageButtons[self.pageNum.get()].master.config(relief=RAISED)
76 #switch page
Steven M. Gava952d0a52001-08-03 04:43:44 +000077 self.pages[self.pageNum.get()].lift()
Steven M. Gava230e5782001-08-07 03:28:25 +000078 self.title('Settings - '+
79 self.pageButtons[self.pageNum.get()].cget('text'))
Steven M. Gava952d0a52001-08-03 04:43:44 +000080
Steven M. Gavad721c482001-07-31 10:46:53 +000081 def ChangePageBinding(self,event):
Steven M. Gava952d0a52001-08-03 04:43:44 +000082 pageKeys=('f','h','k','g')
Steven M. Gavad721c482001-07-31 10:46:53 +000083 pos=0
84 for key in pageKeys:
85 if event.char == key:
86 self.pageNum.set(pos)
87 self.ChangePage()
88 return
89 pos=pos+1
90
Steven M. Gava952d0a52001-08-03 04:43:44 +000091 def SetThemeType(self):
92 if self.themeType.get()==0:
93 self.optMenuThemeBuiltin.config(state=NORMAL)
94 self.optMenuThemeCustom.config(state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +000095 self.buttonDeleteCustomTheme.config(state=DISABLED)
Steven M. Gava952d0a52001-08-03 04:43:44 +000096 elif self.themeType.get()==1:
97 self.optMenuThemeBuiltin.config(state=DISABLED)
98 self.optMenuThemeCustom.config(state=NORMAL)
Steven M. Gava60fc7072001-08-04 13:58:22 +000099 self.buttonDeleteCustomTheme.config(state=NORMAL)
100
101 def SetKeysType(self):
102 if self.keysType.get()==0:
103 self.optMenuKeysBuiltin.config(state=NORMAL)
104 self.optMenuKeysCustom.config(state=DISABLED)
105 self.buttonDeleteCustomKeys.config(state=DISABLED)
106 elif self.keysType.get()==1:
107 self.optMenuKeysBuiltin.config(state=DISABLED)
108 self.optMenuKeysCustom.config(state=NORMAL)
109 self.buttonDeleteCustomKeys.config(state=NORMAL)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000110
Steven M. Gava074c9d22001-08-08 01:30:38 +0000111 def GetColour(self):
112 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
113 title='Pick new colour for : '+self.highlightTarget.get(),
114 initialcolor=self.workingTestColours['Foo-Bg'])#._root()
115 if colourString: #user didn't cancel
116 self.workingTestColours['Foo-Bg']=colourString
117 self.frameColourSet.config(bg=self.workingTestColours['Foo-Bg'])
118 self.labelTestSample.config(bg=self.workingTestColours['Foo-Bg'])
119 self.frameHighlightSample.config(bg=self.workingTestColours['Foo-Bg'])
120 self.frameColourSet.update() #redraw after dialog
121 self.frameHighlightSample.update() #redraw after dialog
122 self.labelTestSample.update()
123
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000124 def SetFontSample(self,event):
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000125 self.newFont.config(size=self.fontSize.get(),weight=NORMAL,
126 family=self.listFontName.get(self.listFontName.curselection()[0]))
127
Steven M. Gavad721c482001-07-31 10:46:53 +0000128 def CreateWidgets(self):
Steven M. Gava952d0a52001-08-03 04:43:44 +0000129 self.framePages = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +0000130 frameActionButtons = Frame(self)
Steven M. Gava33277c72001-08-13 04:36:58 +0000131 framePageButtons = Frame(self.framePages)
Steven M. Gavad721c482001-07-31 10:46:53 +0000132 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +0000133 self.buttonHelp = Button(frameActionButtons,text='Help',
134 command=self.Help,takefocus=FALSE)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000135 self.buttonOk = Button(frameActionButtons,text='Ok',
136 command=self.Ok,takefocus=FALSE)
137 self.buttonApply = Button(frameActionButtons,text='Apply',
138 command=self.Apply,underline=0,takefocus=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +0000139 self.buttonCancel = Button(frameActionButtons,text='Cancel',
140 command=self.Cancel,takefocus=FALSE)
141 #page buttons
142 self.pageNum=IntVar()
143 self.pageNum.set(0)
Steven M. Gava33277c72001-08-13 04:36:58 +0000144 pageButtonNames=('Fonts/Tabs','Highlighting','Keys','General')
145 self.pageButtons=[]
146 buttonValue=0
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000147 buttonSelColour=framePageButtons.cget('bg')
Steven M. Gava33277c72001-08-13 04:36:58 +0000148 for name in pageButtonNames:
149 buttonFrame=Frame(framePageButtons,borderwidth=2,relief=RIDGE)
150 buttonFrame.pack(side=LEFT)
151 button = Radiobutton(buttonFrame,command=self.ChangePage,
152 value=buttonValue,padx=5,pady=5,takefocus=FALSE,underline=0,
153 indicatoron=FALSE,highlightthickness=0,variable=self.pageNum,
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000154 selectcolor=buttonSelColour,borderwidth=0,text=name)
Steven M. Gava33277c72001-08-13 04:36:58 +0000155 button.pack()
156 button.lift()
157 self.pageButtons.append(button)
158 buttonValue=buttonValue+1
Steven M. Gavad721c482001-07-31 10:46:53 +0000159 #pages
Steven M. Gava60fc7072001-08-04 13:58:22 +0000160 self.pages=(self.CreatePageFontTab(),
Steven M. Gava952d0a52001-08-03 04:43:44 +0000161 self.CreatePageHighlight(),
162 self.CreatePageKeys(),
163 self.CreatePageGeneral())
164
Steven M. Gavad721c482001-07-31 10:46:53 +0000165 #grid in framePages so we can overlap pages
Steven M. Gava33277c72001-08-13 04:36:58 +0000166 framePageButtons.grid(row=0,column=0,sticky=NSEW)
Steven M. Gavad721c482001-07-31 10:46:53 +0000167 for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W))
168
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000169 self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)
170 self.buttonOk.pack(side=LEFT,padx=5,pady=5)
171 self.buttonApply.pack(side=LEFT,padx=5,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +0000172 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
173 frameActionButtons.pack(side=BOTTOM)
174 self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH)
175
Steven M. Gava60fc7072001-08-04 13:58:22 +0000176 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000177 #tkVars
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000178 self.fontSize=StringVar()
179 self.spaceNum=IntVar()
180 self.tabCols=IntVar()
181 self.indentType=IntVar()
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000182 self.newFont=tkFont.Font(self,('courier',12,'normal'))
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000183 ##widget creation
184 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000185 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000186 #body section frames
187 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
188 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
189 #frameFont
190 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
191 frameFontName=Frame(frameFont)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000192 frameFontSize=Frame(frameFontName)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000193 labelFontNameTitle=Label(frameFontName,justify=LEFT,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000194 text='Font :')
195 self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,
196 exportselection=FALSE)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000197 self.listFontName.bind('<<ListboxSelect>>',self.SetFontSample)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000198 scrollFont=Scrollbar(frameFontName)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000199 self.LoadFontList()
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000200 scrollFont.config(command=self.listFontName.yview)
201 self.listFontName.config(yscrollcommand=scrollFont.set)
202 labelFontSizeTitle=Label(frameFontSize,text='Size :')
203 sizes=('10','11','12','13','14','16','18','20','22')
204 args=(frameFontSize,self.fontSize)+sizes
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000205 keyArgs={'command':self.SetFontSample}
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000206 optFontSize=apply(OptionMenu,args,keyArgs)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000207 #optFontSize.bind('<<MenuSelect>>',self.SetFontSample)
208 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1)
209 self.labelFontSample=Label(frameFontSample,
210 text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000211 justify=LEFT,font=self.newFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000212 #frameIndent
213 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
214 frameIndentType=Frame(frameIndent)
215 frameIndentSize=Frame(frameIndent)
216 labelIndentTypeTitle=Label(frameIndentType,
217 text='Choose indentation type :')
218 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
219 value=0,text='Tab key inserts spaces')
220 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
221 value=1,text='Tab key inserts tabs')
222 labelIndentSizeTitle=Label(frameIndentSize,
223 text='Choose indentation size :')
224 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
225 text='when tab key inserts spaces,\nspaces per tab')
226 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
227 orient='horizontal',tickinterval=2,from_=2,to=8)
228 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
229 text='when tab key inserts tabs,\ncolumns per tab')
230 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
231 orient='horizontal',tickinterval=2,from_=2,to=8)
232
233 #widget packing
234 #body
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000235 frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
236 frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000237 #frameFont
238 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000239 frameFontName.pack(side=TOP,padx=5,pady=5)
240 frameFontSize.pack(side=RIGHT,anchor=N,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000241 labelFontNameTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000242 self.listFontName.pack(side=LEFT,fill=Y)
243 scrollFont.pack(side=LEFT,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000244 labelFontSizeTitle.pack(side=TOP,anchor=W)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000245 optFontSize.pack(side=TOP,anchor=W,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000246 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000247 self.labelFontSample.pack(expand=TRUE,fill=BOTH)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000248 #frameIndent
249 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
250 frameIndentType.pack(side=TOP,padx=5,fill=X)
251 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
252 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
253 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
254 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
255 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
256 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
257 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
258 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
259 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000260 return frame
261
262 def CreatePageHighlight(self):
263 #tkVars
Steven M. Gava60fc7072001-08-04 13:58:22 +0000264 self.highlightTarget=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000265 self.builtinTheme=StringVar()
266 self.customTheme=StringVar()
267 self.colour=StringVar()
268 self.fontName=StringVar()
269 self.fontBold=StringVar()
270 self.fontItalic=StringVar()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000271 self.themeType=IntVar()
272 ##widget creation
273 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000274 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000275 #body section frames
276 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
277 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000278 #frameCustom
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000279 self.frameHighlightTarget=Frame(frameCustom)
280 self.frameHighlightSample=Frame(frameCustom,relief=SOLID,
281 borderwidth=1,cursor='hand2')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000282 frameSet=Frame(frameCustom)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000283 self.frameColourSet=Frame(frameSet,relief=SOLID,borderwidth=1)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000284 frameFontSet=Frame(frameSet)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000285 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000286 labelTargetTitle=Label(self.frameHighlightTarget,text='for : ')
287 self.optMenuHighlightTarget=OptionMenu(self.frameHighlightTarget,
Steven M. Gava074c9d22001-08-08 01:30:38 +0000288 self.highlightTarget,'normal text background','test target interface item 2')
Steven M. Gava074c9d22001-08-08 01:30:38 +0000289 buttonSetColour=Button(self.frameColourSet,text='Set Colour',
290 command=self.GetColour)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000291 labelFontTitle=Label(frameFontSet,text='Set Font Style')
292 checkFontBold=Checkbutton(frameFontSet,variable=self.fontBold,
293 onvalue='Bold',offvalue='',text='Bold')
294 checkFontItalic=Checkbutton(frameFontSet,variable=self.fontItalic,
295 onvalue='Italic',offvalue='',text='Italic')
Steven M. Gava074c9d22001-08-08 01:30:38 +0000296 self.labelTestSample=Label(self.frameHighlightSample,justify=LEFT,font=('courier',12,''),
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000297 text='#when finished, this\n#sample area will\n#be interactive\n'+
298 'def Ahem(foo,bar):\n '+
299 '"""'+'doc hazard'+'"""'+
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000300 '\n test=foo\n text=bar\n return')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000301 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000302 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000303 #frameTheme
304 #frameDivider=Frame(frameTheme,relief=SUNKEN,borderwidth=1,
305 # width=2,height=10)
306 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
307 labelTypeTitle=Label(frameTheme,text='Select : ')
308 radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeType,
309 value=0,command=self.SetThemeType,text='a Built-in Theme')
310 radioThemeCustom=Radiobutton(frameTheme,variable=self.themeType,
311 value=1,command=self.SetThemeType,text='a Custom Theme')
312 self.optMenuThemeBuiltin=OptionMenu(frameTheme,
313 self.builtinTheme,'test builtin junk','test builtin junk 2')
314 self.builtinTheme.set('test builtin junk')
315 self.optMenuThemeCustom=OptionMenu(frameTheme,
316 self.customTheme,'test custom junk','test custom junk 2')
317 self.customTheme.set('test custom junk')
318 self.themeType.set(0)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000319 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000320 self.SetThemeType()
Steven M. Gava952d0a52001-08-03 04:43:44 +0000321 ##widget packing
322 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000323 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
324 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000325 #frameCustom
326 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000327 self.frameHighlightTarget.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000328 self.frameHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000329 frameSet.pack(side=TOP,fill=X)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000330 self.frameColourSet.pack(side=LEFT,padx=5,pady=5,fill=BOTH)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000331 frameFontSet.pack(side=RIGHT,padx=5,pady=5,anchor=W)
332 labelTargetTitle.pack(side=LEFT,anchor=E)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000333 self.optMenuHighlightTarget.pack(side=RIGHT,anchor=W,expand=TRUE,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000334 buttonSetColour.pack(expand=TRUE,fill=BOTH,padx=10,pady=10)
335 labelFontTitle.pack(side=TOP,anchor=W)
336 checkFontBold.pack(side=LEFT,anchor=W,pady=2)
337 checkFontItalic.pack(side=RIGHT,anchor=W)
Steven M. Gava074c9d22001-08-08 01:30:38 +0000338 self.labelTestSample.pack(anchor=CENTER,expand=TRUE,fill=BOTH)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000339 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000340 #frameTheme
341 #frameDivider.pack(side=LEFT,fill=Y,padx=5,pady=5)
342 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
343 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
344 radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
345 radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
346 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
347 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000348 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000349 return frame
350
351 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000352 #tkVars
353 self.bindingTarget=StringVar()
354 self.builtinKeys=StringVar()
355 self.customKeys=StringVar()
356 self.keyChars=StringVar()
357 self.keyCtrl=StringVar()
358 self.keyAlt=StringVar()
359 self.keyShift=StringVar()
360 self.keysType=IntVar()
361 ##widget creation
362 #body frame
Steven M. Gava33277c72001-08-13 04:36:58 +0000363 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000364 #body section frames
365 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
366 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
367 #frameCustom
368 frameTarget=Frame(frameCustom)
369 frameSet=Frame(frameCustom)
370 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
371 labelTargetTitle=Label(frameTarget,text='Action')
372 scrollTarget=Scrollbar(frameTarget)
373 listTarget=Listbox(frameTarget)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000374 scrollTarget.config(command=listTarget.yview)
375 listTarget.config(yscrollcommand=scrollTarget.set)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000376 labelKeyBindTitle=Label(frameSet,text='Binding')
377 labelModifierTitle=Label(frameSet,text='Modifier:')
378 checkCtrl=Checkbutton(frameSet,text='Ctrl')
379 checkAlt=Checkbutton(frameSet,text='Alt')
380 checkShift=Checkbutton(frameSet,text='Shift')
381 labelKeyEntryTitle=Label(frameSet,text='Key:')
382 entryKey=Entry(frameSet,width=4)
383 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
384 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000385 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000386 labelTypeTitle=Label(frameKeySets,text='Select : ')
387 radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysType,
388 value=0,command=self.SetKeysType,text='a Built-in Key Set')
389 radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysType,
390 value=1,command=self.SetKeysType,text='a Custom Key Set')
391 self.optMenuKeysBuiltin=OptionMenu(frameKeySets,
392 self.builtinKeys,'test builtin junk','test builtin junk 2')
393 self.builtinKeys.set('test builtin junk')
394 self.optMenuKeysCustom=OptionMenu(frameKeySets,
395 self.customKeys,'test custom junk','test custom junk 2')
396 self.customKeys.set('test custom junk')
397 self.keysType.set(0)
398 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
399 self.SetKeysType()
400 ##widget packing
401 #body
402 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
403 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
404 #frameCustom
405 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
406 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
407 frameTarget.pack(side=LEFT,padx=5,pady=5,fill=Y)
408 frameSet.pack(side=LEFT,padx=5,pady=5,fill=Y)
409 labelTargetTitle.pack(side=TOP,anchor=W)
410 scrollTarget.pack(side=RIGHT,anchor=W,fill=Y)
411 listTarget.pack(side=TOP,anchor=W,expand=TRUE,fill=BOTH)
412 labelKeyBindTitle.pack(side=TOP,anchor=W)
413 labelModifierTitle.pack(side=TOP,anchor=W,pady=5)
414 checkCtrl.pack(side=TOP,anchor=W)
415 checkAlt.pack(side=TOP,anchor=W,pady=2)
416 checkShift.pack(side=TOP,anchor=W)
417 labelKeyEntryTitle.pack(side=TOP,anchor=W,pady=5)
418 entryKey.pack(side=TOP,anchor=W)
419 #frameKeySets
420 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
421 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
422 radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
423 radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
424 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
425 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
426 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000427 return frame
428
429 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000430 #tkVars
431 self.runType=IntVar()
432 self.winWidth=StringVar()
433 self.winHeight=StringVar()
434 self.extState=IntVar()
435 #widget creation
436 #body
Steven M. Gava33277c72001-08-13 04:36:58 +0000437 frame=Frame(self.framePages,borderwidth=2,relief=RAISED)
Steven M. Gava230e5782001-08-07 03:28:25 +0000438 #body section frames
439 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
440 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
441 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
442 #frameRun
443 labelRunTitle=Label(frameRun,text='Run Preferences')
444 labelRunChoiceTitle=Label(frameRun,text='Run code : ')
445 radioRunInternal=Radiobutton(frameRun,variable=self.runType,
446 value=0,command=self.SetKeysType,text="in IDLE's Process")
447 radioRunSeparate=Radiobutton(frameRun,variable=self.runType,
448 value=1,command=self.SetKeysType,text='in a Separate Process')
449 #frameWinSize
450 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size')
451 buttonWinSizeSet=Button(frameWinSize,text='Set to current window size')
452 labelWinWidthTitle=Label(frameWinSize,text='Width')
453 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
454 width=3)
455 labelWinHeightTitle=Label(frameWinSize,text='Height')
456 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
457 width=3)
458 #frameExt
459 frameExtList=Frame(frameExt)
460 frameExtSet=Frame(frameExt)
461 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
462 labelExtListTitle=Label(frameExtList,text='Extension')
463 scrollExtList=Scrollbar(frameExtList)
464 listExt=Listbox(frameExtList,height=5)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000465 scrollExtList.config(command=listExt.yview)
466 listExt.config(yscrollcommand=scrollExtList.set)
Steven M. Gava230e5782001-08-07 03:28:25 +0000467 labelExtSetTitle=Label(frameExtSet,text='Settings')
468 radioEnableExt=Radiobutton(frameExtSet,variable=self.extState,
469 value=1,text="enable")
470 radioDisableExt=Radiobutton(frameExtSet,variable=self.extState,
471 value=0,text="disable")
472 self.extState.set(1)
473 buttonExtConfig=Button(frameExtSet,text='Configure')
474
475 #widget packing
476 #body
477 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
478 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
479 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
480 #frameRun
481 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
482 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
483 radioRunInternal.pack(side=LEFT,anchor=W,padx=5,pady=5)
484 radioRunSeparate.pack(side=LEFT,anchor=W,padx=5,pady=5)
485 #frameWinSize
486 labelWinSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
487 buttonWinSizeSet.pack(side=LEFT,anchor=W,padx=5,pady=5)
488 labelWinWidthTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
489 entryWinWidth.pack(side=LEFT,anchor=W,padx=5,pady=5)
490 labelWinHeightTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
491 entryWinHeight.pack(side=LEFT,anchor=W,padx=5,pady=5)
492 #frameExt
493 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
494 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
495 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
496 labelExtListTitle.pack(side=TOP,anchor=W)
497 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
498 listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
499 labelExtSetTitle.pack(side=TOP,anchor=W)
500 radioEnableExt.pack(side=TOP,anchor=W)
501 radioDisableExt.pack(side=TOP,anchor=W)
502 buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
503
Steven M. Gava952d0a52001-08-03 04:43:44 +0000504 return frame
505
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000506 def LoadFontList(self):
507 fonts=list(tkFont.families(self))
508 fonts.sort()
509 for font in fonts:
510 self.listFontName.insert(END,font)
511 currentFontIndex=fonts.index('courier')
512 self.listFontName.see(currentFontIndex)
513 self.listFontName.select_set(currentFontIndex)
514 self.fontSize.set('12')
515
516 #def LoadOptionMenu(self, optMenu, optList, optVar, optVal=None,
517 # command=None):
518 def LoadOptionMenu(self, optMenu, optVar, optVal=None, command=None):
519 """
520 Load the relevant list of values into an OptionMenu and set
521 selected value if required.
522 """
523 params={'cfg':None,
524 'section':None,
525 'optList':None,
526 'optVar':None,
527 'optVal':None,
528 'command':None}
529 if optMenu == self.optMenuHighlightTarget:
530 params['cfg']=idleConf.userCfg['highlight']
531# if
532# params['section']=idleconf.userCfg['main'].GetDef('EditorWindow',
533# 'theme')
534#
535# params['optVar']=self.HighlightTarget
536# params['optList']=idleconf.defaultCfg['main'].options(params.Section)
537# else: # a default theme
538# pass
539 #params.optList=idleConf
540
541
542 #if not params.optVar.get(): #no value set yet (initial load)
543 # params.optVal=
544
545 #if params.section: #we're asking to load a list of option names
546 # optList=params.cfg
547 #elif optMenu == xx:
548 #else:
549
550 #if self.HighlightTarget.get(): #if there was a value set (reload)
551 # params.optVal=self.HighlightTarget.get()
552 #else: #no value set yet (initial load)
553 #if not params.optVar.get(): #no value set yet (initial load)
554
555 menu=optMenu['menu']
556 print menu
557 menu.delete(0,END)
558 for item in optList:
559 menu.add_command(label=item,command=command)
560 if optVal:
561 optVar.set(optVal)
562 elif optList:
563 optVar.set(optList[0])
564
565 def SaveConfigs(self):
566 pass
567
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000568if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000569 #test the dialog
570 root=Tk()
571 Button(root,text='Dialog',
572 command=lambda:ConfigDialog(root,'Settings',None)).pack()
573 root.mainloop()