blob: ec978362568b1a3c726336fb19fdb06e9497e39e [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. Gava5f28e8f2002-01-21 06:38:21 +000039 #changedItems. When any config item is changed in this dialog, an entry
40 #should be made in the relevant section (config type) of this
41 #dictionary. The key should be the config file section name and the
42 #value a dictionary, whose key:value pairs are item=value pairs for
43 #that config file section.
44 self.changedItems={'main':{},'highlight':{},'keys':{},'extensions':{}}
45 #defaultItems. This dictionary is loaded with the values from the
46 #default config files. It is used for comparison with self.changedItems
47 #to decide which changed items actually need saving.
48 self.defaultItems=self.GetDefaultItems()
Steven M. Gavad721c482001-07-31 10:46:53 +000049 self.CreateWidgets()
50 self.resizable(height=FALSE,width=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +000051 self.transient(parent)
52 self.grab_set()
53 self.protocol("WM_DELETE_WINDOW", self.Cancel)
54 self.parent = parent
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000055 self.tabPages.focus_set()
Steven M. Gavad721c482001-07-31 10:46:53 +000056 #key bindings for this dialog
Steven M. Gava5f28e8f2002-01-21 06:38:21 +000057 #self.bind('<Escape>',self.Cancel) #dismiss dialog, no save
58 #self.bind('<Alt-a>',self.Apply) #apply changes, save
59 #self.bind('<F1>',self.Help) #context help
Steven M. Gava429a86a2001-10-23 10:42:12 +000060 self.LoadConfigs()
Steven M. Gavad721c482001-07-31 10:46:53 +000061 self.wait_window()
62
Steven M. Gavad721c482001-07-31 10:46:53 +000063 def CreateWidgets(self):
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000064 self.tabPages = TabPageSet(self,
65 pageNames=['Fonts/Tabs','Highlighting','Keys','General'])
Steven M. Gavaad4f5322002-01-03 12:05:17 +000066 self.tabPages.ChangePage()#activates default (first) page
Steven M. Gavad721c482001-07-31 10:46:53 +000067 frameActionButtons = Frame(self)
Steven M. Gavad721c482001-07-31 10:46:53 +000068 #action buttons
Steven M. Gava952d0a52001-08-03 04:43:44 +000069 self.buttonHelp = Button(frameActionButtons,text='Help',
70 command=self.Help,takefocus=FALSE)
Steven M. Gavac01e30f2001-08-11 15:48:13 +000071 self.buttonOk = Button(frameActionButtons,text='Ok',
72 command=self.Ok,takefocus=FALSE)
73 self.buttonApply = Button(frameActionButtons,text='Apply',
Steven M. Gava5f28e8f2002-01-21 06:38:21 +000074 command=self.Apply,takefocus=FALSE)
Steven M. Gavad721c482001-07-31 10:46:53 +000075 self.buttonCancel = Button(frameActionButtons,text='Cancel',
76 command=self.Cancel,takefocus=FALSE)
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000077 self.CreatePageFontTab()
78 self.CreatePageHighlight()
79 self.CreatePageKeys()
80 self.CreatePageGeneral()
Steven M. Gavac01e30f2001-08-11 15:48:13 +000081 self.buttonHelp.pack(side=RIGHT,padx=5,pady=5)
82 self.buttonOk.pack(side=LEFT,padx=5,pady=5)
83 self.buttonApply.pack(side=LEFT,padx=5,pady=5)
Steven M. Gavad721c482001-07-31 10:46:53 +000084 self.buttonCancel.pack(side=LEFT,padx=5,pady=5)
85 frameActionButtons.pack(side=BOTTOM)
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000086 self.tabPages.pack(side=TOP,expand=TRUE,fill=BOTH)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +000087
Steven M. Gava60fc7072001-08-04 13:58:22 +000088 def CreatePageFontTab(self):
Steven M. Gavaf213ccb2001-08-05 08:00:28 +000089 #tkVars
Steven M. Gava3b55a892001-11-21 05:56:26 +000090 self.fontSize=StringVar(self)
91 self.fontBold=StringVar(self)
92 self.spaceNum=IntVar(self)
93 self.tabCols=IntVar(self)
94 self.indentType=IntVar(self)
Steven M. Gava429a86a2001-10-23 10:42:12 +000095 self.editFont=tkFont.Font(self,('courier',12,'normal'))
Steven M. Gavaf213ccb2001-08-05 08:00:28 +000096 ##widget creation
97 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +000098 frame=self.tabPages.pages['Fonts/Tabs']['page']
Steven M. Gavaf213ccb2001-08-05 08:00:28 +000099 #body section frames
100 frameFont=Frame(frame,borderwidth=2,relief=GROOVE)
101 frameIndent=Frame(frame,borderwidth=2,relief=GROOVE)
102 #frameFont
103 labelFontTitle=Label(frameFont,text='Set Base Editor Font')
104 frameFontName=Frame(frameFont)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000105 frameFontParam=Frame(frameFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000106 labelFontNameTitle=Label(frameFontName,justify=LEFT,
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000107 text='Font :')
108 self.listFontName=Listbox(frameFontName,height=5,takefocus=FALSE,
109 exportselection=FALSE)
Steven M. Gava429a86a2001-10-23 10:42:12 +0000110 self.listFontName.bind('<<ListboxSelect>>',self.SetFontSampleBinding)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000111 scrollFont=Scrollbar(frameFontName)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000112 scrollFont.config(command=self.listFontName.yview)
113 self.listFontName.config(yscrollcommand=scrollFont.set)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000114 labelFontSizeTitle=Label(frameFontParam,text='Size :')
115 self.optMenuFontSize=DynOptionMenu(frameFontParam,self.fontSize,None,
Steven M. Gava485f7b62001-10-26 06:47:09 +0000116 command=self.SetFontSampleBinding)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000117 checkFontBold=Checkbutton(frameFontParam,variable=self.fontBold,
118 onvalue='Bold',offvalue='',text='Bold')
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000119 frameFontSample=Frame(frameFont,relief=SOLID,borderwidth=1)
120 self.labelFontSample=Label(frameFontSample,
121 text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000122 justify=LEFT,font=self.editFont)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000123 #frameIndent
124 labelIndentTitle=Label(frameIndent,text='Set Indentation Defaults')
125 frameIndentType=Frame(frameIndent)
126 frameIndentSize=Frame(frameIndent)
127 labelIndentTypeTitle=Label(frameIndentType,
128 text='Choose indentation type :')
129 radioUseSpaces=Radiobutton(frameIndentType,variable=self.indentType,
Steven M. Gava429a86a2001-10-23 10:42:12 +0000130 value=1,text='Tab key inserts spaces')
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000131 radioUseTabs=Radiobutton(frameIndentType,variable=self.indentType,
Steven M. Gava429a86a2001-10-23 10:42:12 +0000132 value=0,text='Tab key inserts tabs')
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000133 labelIndentSizeTitle=Label(frameIndentSize,
134 text='Choose indentation size :')
135 labelSpaceNumTitle=Label(frameIndentSize,justify=LEFT,
136 text='when tab key inserts spaces,\nspaces per tab')
137 self.scaleSpaceNum=Scale(frameIndentSize,variable=self.spaceNum,
138 orient='horizontal',tickinterval=2,from_=2,to=8)
139 labeltabColsTitle=Label(frameIndentSize,justify=LEFT,
140 text='when tab key inserts tabs,\ncolumns per tab')
141 self.scaleTabCols=Scale(frameIndentSize,variable=self.tabCols,
142 orient='horizontal',tickinterval=2,from_=2,to=8)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000143 #widget packing
144 #body
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000145 frameFont.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
146 frameIndent.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000147 #frameFont
148 labelFontTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000149 frameFontName.pack(side=TOP,padx=5,pady=5,fill=X)
150 frameFontParam.pack(side=TOP,padx=5,pady=5,fill=X)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000151 labelFontNameTitle.pack(side=TOP,anchor=W)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000152 self.listFontName.pack(side=LEFT,expand=TRUE,fill=X)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000153 scrollFont.pack(side=LEFT,fill=Y)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000154 labelFontSizeTitle.pack(side=LEFT,anchor=W)
155 self.optMenuFontSize.pack(side=LEFT,anchor=W)
156 checkFontBold.pack(side=LEFT,anchor=W,padx=20)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000157 frameFontSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
Steven M. Gavac01e30f2001-08-11 15:48:13 +0000158 self.labelFontSample.pack(expand=TRUE,fill=BOTH)
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000159 #frameIndent
160 labelIndentTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
161 frameIndentType.pack(side=TOP,padx=5,fill=X)
162 frameIndentSize.pack(side=TOP,padx=5,pady=5,fill=BOTH)
163 labelIndentTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
164 radioUseSpaces.pack(side=TOP,anchor=W,padx=5)
165 radioUseTabs.pack(side=TOP,anchor=W,padx=5)
166 labelIndentSizeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
167 labelSpaceNumTitle.pack(side=TOP,anchor=W,padx=5)
168 self.scaleSpaceNum.pack(side=TOP,padx=5,fill=X)
169 labeltabColsTitle.pack(side=TOP,anchor=W,padx=5)
170 self.scaleTabCols.pack(side=TOP,padx=5,fill=X)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000171 return frame
172
173 def CreatePageHighlight(self):
Steven M. Gava3b55a892001-11-21 05:56:26 +0000174 self.builtinTheme=StringVar(self)
175 self.customTheme=StringVar(self)
176 self.fgHilite=IntVar(self)
177 self.colour=StringVar(self)
178 self.fontName=StringVar(self)
179 self.themeIsBuiltin=IntVar(self)
180 self.highlightTarget=StringVar(self)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000181 self.highlightTarget.trace_variable('w',self.SetHighlightTargetBinding)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000182 ##widget creation
183 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000184 frame=self.tabPages.pages['Highlighting']['page']
Steven M. Gava952d0a52001-08-03 04:43:44 +0000185 #body section frames
186 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
187 frameTheme=Frame(frame,borderwidth=2,relief=GROOVE)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000188 #frameCustom
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000189 self.textHighlightSample=Text(frameCustom,relief=SOLID,borderwidth=1,
190 font=('courier',12,''),cursor='hand2',width=10,height=10,
191 takefocus=FALSE,highlightthickness=0)
192 text=self.textHighlightSample
193 text.bind('<Double-Button-1>',lambda e: 'break')
194 text.bind('<B1-Motion>',lambda e: 'break')
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000195 textAndTags=(('#you can click in here','comment'),('\n','normal'),
196 ('#to choose items','comment'),('\n','normal'),('def','keyword'),
197 (' ','normal'),('func','definition'),('(param):','normal'),
198 ('\n ','normal'),('"""string"""','string'),('\n var0 = ','normal'),
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000199 ("'string'",'string'),('\n var1 = ','normal'),("'selected'",'hilite'),
200 ('\n var2 = ','normal'),("'found'",'hit'),('\n\n','normal'),
Steven M. Gava99300612001-11-04 07:03:08 +0000201 (' error ','error'),(' ','normal'),('cursor |','cursor'),
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000202 ('\n ','normal'),('shell','console'),(' ','normal'),('stdout','stdout'),
203 (' ','normal'),('stderr','stderr'),('\n','normal'))
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000204 for txTa in textAndTags:
205 text.insert(END,txTa[0],txTa[1])
206 for element in self.themeElements.keys():
207 text.tag_bind(self.themeElements[element][0],'<ButtonPress-1>',
208 lambda event,elem=element: event.widget.winfo_toplevel()
209 .highlightTarget.set(elem))
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000210 text.config(state=DISABLED)
211 self.frameColourSet=Frame(frameCustom,relief=SOLID,borderwidth=1)
Steven M. Gava7c017862001-10-29 11:19:46 +0000212 frameFgBg=Frame(frameCustom)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000213 labelCustomTitle=Label(frameCustom,text='Set Custom Highlighting')
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000214 buttonSetColour=Button(self.frameColourSet,text='Choose Colour for :',
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000215 command=self.GetColour,highlightthickness=0)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000216 self.optMenuHighlightTarget=DynOptionMenu(self.frameColourSet,
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000217 self.highlightTarget,None,highlightthickness=0)#,command=self.SetHighlightTargetBinding
Steven M. Gava7c017862001-10-29 11:19:46 +0000218 self.radioFg=Radiobutton(frameFgBg,variable=self.fgHilite,
Steven M. Gava3b55a892001-11-21 05:56:26 +0000219 value=1,text='Foreground',command=self.SetColourSampleBinding)
Steven M. Gava7c017862001-10-29 11:19:46 +0000220 self.radioBg=Radiobutton(frameFgBg,variable=self.fgHilite,
Steven M. Gava3b55a892001-11-21 05:56:26 +0000221 value=0,text='Background',command=self.SetColourSampleBinding)
Steven M. Gava7c017862001-10-29 11:19:46 +0000222 self.fgHilite.set(1)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000223 buttonSaveCustomTheme=Button(frameCustom,
Steven M. Gava952d0a52001-08-03 04:43:44 +0000224 text='Save as a Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000225 #frameTheme
Steven M. Gava952d0a52001-08-03 04:43:44 +0000226 labelThemeTitle=Label(frameTheme,text='Select a Highlighting Theme')
227 labelTypeTitle=Label(frameTheme,text='Select : ')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000228 self.radioThemeBuiltin=Radiobutton(frameTheme,variable=self.themeIsBuiltin,
229 value=1,command=self.SetThemeType,text='a Built-in Theme')
230 self.radioThemeCustom=Radiobutton(frameTheme,variable=self.themeIsBuiltin,
231 value=0,command=self.SetThemeType,text='a Custom Theme')
Steven M. Gava41a85322001-10-29 08:05:34 +0000232 self.optMenuThemeBuiltin=DynOptionMenu(frameTheme,
Steven M. Gava7c017862001-10-29 11:19:46 +0000233 self.builtinTheme,None,command=None)
Steven M. Gava41a85322001-10-29 08:05:34 +0000234 self.optMenuThemeCustom=DynOptionMenu(frameTheme,
Steven M. Gava7c017862001-10-29 11:19:46 +0000235 self.customTheme,None,command=None)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000236 self.buttonDeleteCustomTheme=Button(frameTheme,text='Delete Custom Theme')
Steven M. Gava952d0a52001-08-03 04:43:44 +0000237 ##widget packing
238 #body
Steven M. Gava60fc7072001-08-04 13:58:22 +0000239 frameCustom.pack(side=LEFT,padx=5,pady=10,expand=TRUE,fill=BOTH)
240 frameTheme.pack(side=LEFT,padx=5,pady=10,fill=Y)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000241 #frameCustom
242 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000243 self.frameColourSet.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=X)
Steven M. Gava7c017862001-10-29 11:19:46 +0000244 frameFgBg.pack(side=TOP,padx=5,pady=0)
Steven M. Gavae16d94b2001-11-03 05:07:28 +0000245 self.textHighlightSample.pack(side=TOP,padx=5,pady=5,expand=TRUE,
246 fill=BOTH)
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000247 buttonSetColour.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=4)
248 self.optMenuHighlightTarget.pack(side=TOP,expand=TRUE,fill=X,padx=8,pady=3)
Steven M. Gava7c017862001-10-29 11:19:46 +0000249 self.radioFg.pack(side=LEFT,anchor=E)
250 self.radioBg.pack(side=RIGHT,anchor=W)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000251 buttonSaveCustomTheme.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000252 #frameTheme
Steven M. Gava952d0a52001-08-03 04:43:44 +0000253 labelThemeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
254 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gava41a85322001-10-29 08:05:34 +0000255 self.radioThemeBuiltin.pack(side=TOP,anchor=W,padx=5)
256 self.radioThemeCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000257 self.optMenuThemeBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
258 self.optMenuThemeCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000259 self.buttonDeleteCustomTheme.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000260 return frame
261
262 def CreatePageKeys(self):
Steven M. Gava60fc7072001-08-04 13:58:22 +0000263 #tkVars
Steven M. Gava3b55a892001-11-21 05:56:26 +0000264 self.bindingTarget=StringVar(self)
265 self.builtinKeys=StringVar(self)
266 self.customKeys=StringVar(self)
267 self.keyChars=StringVar(self)
268 self.keyCtrl=StringVar(self)
269 self.keyAlt=StringVar(self)
270 self.keyShift=StringVar(self)
271 self.keysAreDefault=IntVar(self)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000272 ##widget creation
273 #body frame
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000274 frame=self.tabPages.pages['Keys']['page']
Steven M. Gava60fc7072001-08-04 13:58:22 +0000275 #body section frames
276 frameCustom=Frame(frame,borderwidth=2,relief=GROOVE)
277 frameKeySets=Frame(frame,borderwidth=2,relief=GROOVE)
278 #frameCustom
279 frameTarget=Frame(frameCustom)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000280 labelCustomTitle=Label(frameCustom,text='Set Custom Key Bindings')
Steven M. Gavafacfc092002-01-19 00:29:54 +0000281 labelTargetTitle=Label(frameTarget,text='Action - Key(s)')
282 scrollTargetY=Scrollbar(frameTarget)
283 scrollTargetX=Scrollbar(frameTarget,orient=HORIZONTAL)
284 self.listBindings=Listbox(frameTarget)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000285 self.listBindings.bind('<ButtonRelease-1>',self.KeyBindingSelected)
Steven M. Gavafacfc092002-01-19 00:29:54 +0000286 scrollTargetY.config(command=self.listBindings.yview)
287 scrollTargetX.config(command=self.listBindings.xview)
288 self.listBindings.config(yscrollcommand=scrollTargetY.set)
289 self.listBindings.config(xscrollcommand=scrollTargetX.set)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000290 self.buttonNewKeys=Button(frameCustom,text='Get New Keys for Selection',
291 command=self.GetNewKeys,state=DISABLED)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000292 buttonSaveCustomKeys=Button(frameCustom,text='Save as a Custom Key Set')
293 #frameKeySets
Steven M. Gavaf213ccb2001-08-05 08:00:28 +0000294 labelKeysTitle=Label(frameKeySets,text='Select a Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000295 labelTypeTitle=Label(frameKeySets,text='Select : ')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000296 self.radioKeysBuiltin=Radiobutton(frameKeySets,variable=self.keysAreDefault,
297 value=1,command=self.SetKeysType,text='a Built-in Key Set')
298 self.radioKeysCustom=Radiobutton(frameKeySets,variable=self.keysAreDefault,
299 value=0,command=self.SetKeysType,text='a Custom Key Set')
Steven M. Gava41a85322001-10-29 08:05:34 +0000300 self.optMenuKeysBuiltin=DynOptionMenu(frameKeySets,
301 self.builtinKeys,None,command=None)
302 self.optMenuKeysCustom=DynOptionMenu(frameKeySets,
303 self.customKeys,None,command=None)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000304 self.buttonDeleteCustomKeys=Button(frameKeySets,text='Delete Custom Key Set')
Steven M. Gava60fc7072001-08-04 13:58:22 +0000305 ##widget packing
306 #body
307 frameCustom.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
308 frameKeySets.pack(side=LEFT,padx=5,pady=5,fill=Y)
309 #frameCustom
310 labelCustomTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
311 buttonSaveCustomKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000312 self.buttonNewKeys.pack(side=BOTTOM,fill=X,padx=5,pady=5)
Steven M. Gavafacfc092002-01-19 00:29:54 +0000313 frameTarget.pack(side=LEFT,padx=5,pady=5,expand=TRUE,fill=BOTH)
314 #frame target
315 frameTarget.columnconfigure(0,weight=1)
316 frameTarget.rowconfigure(1,weight=1)
317 labelTargetTitle.grid(row=0,column=0,columnspan=2,sticky=W)
318 self.listBindings.grid(row=1,column=0,sticky=NSEW)
319 scrollTargetY.grid(row=1,column=1,sticky=NS)
320 scrollTargetX.grid(row=2,column=0,sticky=EW)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000321 #frameKeySets
322 labelKeysTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
323 labelTypeTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
Steven M. Gava41a85322001-10-29 08:05:34 +0000324 self.radioKeysBuiltin.pack(side=TOP,anchor=W,padx=5)
325 self.radioKeysCustom.pack(side=TOP,anchor=W,padx=5,pady=2)
Steven M. Gava60fc7072001-08-04 13:58:22 +0000326 self.optMenuKeysBuiltin.pack(side=TOP,fill=X,padx=5,pady=5)
327 self.optMenuKeysCustom.pack(side=TOP,fill=X,anchor=W,padx=5,pady=5)
328 self.buttonDeleteCustomKeys.pack(side=TOP,fill=X,padx=5,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000329 return frame
330
331 def CreatePageGeneral(self):
Steven M. Gava230e5782001-08-07 03:28:25 +0000332 #tkVars
Steven M. Gava3b55a892001-11-21 05:56:26 +0000333 self.runType=IntVar(self)
334 self.winWidth=StringVar(self)
335 self.winHeight=StringVar(self)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000336 self.startupEdit=IntVar(self)
Steven M. Gava230e5782001-08-07 03:28:25 +0000337 #widget creation
338 #body
Steven M. Gava2d4e03b2001-12-05 07:54:07 +0000339 frame=self.tabPages.pages['General']['page']
Steven M. Gava230e5782001-08-07 03:28:25 +0000340 #body section frames
341 frameRun=Frame(frame,borderwidth=2,relief=GROOVE)
342 frameWinSize=Frame(frame,borderwidth=2,relief=GROOVE)
343 frameExt=Frame(frame,borderwidth=2,relief=GROOVE)
344 #frameRun
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000345 labelRunTitle=Label(frameRun,text='Startup Preferences')
346 labelRunChoiceTitle=Label(frameRun,text='On startup : ')
347 radioStartupEdit=Radiobutton(frameRun,variable=self.startupEdit,
348 value=1,command=self.SetKeysType,text="open Edit Window")
349 radioStartupShell=Radiobutton(frameRun,variable=self.startupEdit,
350 value=0,command=self.SetKeysType,text='open Shell Window')
Steven M. Gava230e5782001-08-07 03:28:25 +0000351 #frameWinSize
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000352 labelWinSizeTitle=Label(frameWinSize,text='Initial Window Size'+
353 ' (in characters)')
Steven M. Gava230e5782001-08-07 03:28:25 +0000354 labelWinWidthTitle=Label(frameWinSize,text='Width')
355 entryWinWidth=Entry(frameWinSize,textvariable=self.winWidth,
356 width=3)
357 labelWinHeightTitle=Label(frameWinSize,text='Height')
358 entryWinHeight=Entry(frameWinSize,textvariable=self.winHeight,
359 width=3)
360 #frameExt
361 frameExtList=Frame(frameExt)
362 frameExtSet=Frame(frameExt)
363 labelExtTitle=Label(frameExt,text='Configure IDLE Extensions')
364 labelExtListTitle=Label(frameExtList,text='Extension')
365 scrollExtList=Scrollbar(frameExtList)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000366 self.listExt=Listbox(frameExtList,height=5)
367 scrollExtList.config(command=self.listExt.yview)
368 self.listExt.config(yscrollcommand=scrollExtList.set)
369 self.listExt.bind('<ButtonRelease-1>',self.ExtensionSelected)
Steven M. Gava230e5782001-08-07 03:28:25 +0000370 labelExtSetTitle=Label(frameExtSet,text='Settings')
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000371 self.radioEnableExt=Radiobutton(frameExtSet,variable=self.startupEdit,
372 value=1,text="enabled",state=DISABLED)
373 self.radioDisableExt=Radiobutton(frameExtSet,variable=self.startupEdit,
374 value=0,text="disabled",state=DISABLED)
375 self.buttonExtConfig=Button(frameExtSet,text='Configure',state=DISABLED)
Steven M. Gava230e5782001-08-07 03:28:25 +0000376 #widget packing
377 #body
378 frameRun.pack(side=TOP,padx=5,pady=5,fill=X)
379 frameWinSize.pack(side=TOP,padx=5,pady=5,fill=X)
380 frameExt.pack(side=TOP,padx=5,pady=5,expand=TRUE,fill=BOTH)
381 #frameRun
382 labelRunTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
383 labelRunChoiceTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000384 radioStartupEdit.pack(side=LEFT,anchor=W,padx=5,pady=5)
385 radioStartupShell.pack(side=LEFT,anchor=W,padx=5,pady=5)
Steven M. Gava230e5782001-08-07 03:28:25 +0000386 #frameWinSize
Steven M. Gavafacfc092002-01-19 00:29:54 +0000387 labelWinSizeTitle.pack(side=LEFT,anchor=W,padx=5,pady=5)
388 entryWinHeight.pack(side=RIGHT,anchor=E,padx=10,pady=5)
389 labelWinHeightTitle.pack(side=RIGHT,anchor=E,pady=5)
390 entryWinWidth.pack(side=RIGHT,anchor=E,padx=10,pady=5)
391 labelWinWidthTitle.pack(side=RIGHT,anchor=E,pady=5)
Steven M. Gava230e5782001-08-07 03:28:25 +0000392 #frameExt
393 labelExtTitle.pack(side=TOP,anchor=W,padx=5,pady=5)
394 frameExtSet.pack(side=RIGHT,padx=5,pady=5,fill=Y)
395 frameExtList.pack(side=RIGHT,padx=5,pady=5,expand=TRUE,fill=BOTH)
396 labelExtListTitle.pack(side=TOP,anchor=W)
397 scrollExtList.pack(side=RIGHT,anchor=W,fill=Y)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000398 self.listExt.pack(side=LEFT,anchor=E,expand=TRUE,fill=BOTH)
Steven M. Gava230e5782001-08-07 03:28:25 +0000399 labelExtSetTitle.pack(side=TOP,anchor=W)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000400 self.radioEnableExt.pack(side=TOP,anchor=W)
401 self.radioDisableExt.pack(side=TOP,anchor=W)
402 self.buttonExtConfig.pack(side=TOP,anchor=W,pady=5)
Steven M. Gava952d0a52001-08-03 04:43:44 +0000403 return frame
404
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000405 def GetDefaultItems(self):
406 dItems={'main':{},'highlight':{},'keys':{},'extensions':{}}
407 for configType in dItems.keys():
408 sections=idleConf.GetSectionList('default',configType)
409 for section in sections:
410 dItems[configType][section]={}
411 options=idleConf.defaultCfg[configType].GetOptionList(section)
412 for option in options:
413 dItems[configType][section][option]=(
414 idleConf.defaultCfg[configType].Get(section,option))
415 return dItems
416
417 def SetThemeType(self):
418 if self.themeIsBuiltin.get():
419 self.optMenuThemeBuiltin.config(state=NORMAL)
420 self.optMenuThemeCustom.config(state=DISABLED)
421 self.buttonDeleteCustomTheme.config(state=DISABLED)
422 else:
423 self.optMenuThemeBuiltin.config(state=DISABLED)
424 self.optMenuThemeCustom.config(state=NORMAL)
425 self.buttonDeleteCustomTheme.config(state=NORMAL)
426
427 def SetKeysType(self):
428 if self.keysAreDefault.get():
429 self.optMenuKeysBuiltin.config(state=NORMAL)
430 self.optMenuKeysCustom.config(state=DISABLED)
431 self.buttonDeleteCustomKeys.config(state=DISABLED)
432 else:
433 self.optMenuKeysBuiltin.config(state=DISABLED)
434 self.optMenuKeysCustom.config(state=NORMAL)
435 self.buttonDeleteCustomKeys.config(state=NORMAL)
436
437 def GetColour(self):
438 target=self.highlightTarget.get()
439 rgbTuplet, colourString = tkColorChooser.askcolor(parent=self,
440 title='Pick new colour for : '+target,
441 initialcolor=self.frameColourSet.cget('bg'))
442 if colourString: #user didn't cancel
443 self.frameColourSet.config(bg=colourString)#set sample
444 if self.fgHilite.get(): plane='foreground'
445 else: plane='background'
446 apply(self.textHighlightSample.tag_config,
447 (self.themeElements[target][0],),{plane:colourString})
448
449 def SetFontSampleBinding(self,event):
450 self.SetFontSample()
451
452 def SetFontSample(self):
453 self.editFont.config(size=self.fontSize.get(),weight=NORMAL,
454 family=self.listFontName.get(self.listFontName.curselection()[0]))
455
456 def SetHighlightTargetBinding(self,*args):
457 self.SetHighlightTarget()
458
459 def SetHighlightTarget(self):
460 if self.highlightTarget.get()=='Cursor': #bg not possible
461 self.radioFg.config(state=DISABLED)
462 self.radioBg.config(state=DISABLED)
463 self.fgHilite.set(1)
464 else: #both fg and bg can be set
465 self.radioFg.config(state=NORMAL)
466 self.radioBg.config(state=NORMAL)
467 self.fgHilite.set(1)
468 self.SetColourSample()
469
470 def SetColourSampleBinding(self,*args):
471 self.SetColourSample()
472
473 def SetColourSample(self):
474 #set the colour smaple area
475 tag=self.themeElements[self.highlightTarget.get()][0]
476 if self.fgHilite.get(): plane='foreground'
477 else: plane='background'
478 colour=self.textHighlightSample.tag_cget(tag,plane)
479 self.frameColourSet.config(bg=colour)
480
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000481 def PaintThemeSample(self):
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000482 if self.themeIsBuiltin.get(): #a default theme
Steven M. Gava99300612001-11-04 07:03:08 +0000483 theme=self.builtinTheme.get()
484 else: #a user theme
485 theme=self.customTheme.get()
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000486 for element in self.themeElements.keys():
487 colours=idleConf.GetHighlight(theme, self.themeElements[element][0])
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000488 if element=='Cursor': #cursor sample needs special painting
489 colours['background']=idleConf.GetHighlight(theme,
Steven M. Gava0cae01c2002-01-04 07:53:06 +0000490 'normal', fgBg='bg')
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000491 apply(self.textHighlightSample.tag_config,
492 (self.themeElements[element][0],),colours)
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000493
Steven M. Gava429a86a2001-10-23 10:42:12 +0000494 def LoadFontCfg(self):
495 ##base editor font selection list
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000496 fonts=list(tkFont.families(self))
497 fonts.sort()
498 for font in fonts:
499 self.listFontName.insert(END,font)
Steven M. Gava485f7b62001-10-26 06:47:09 +0000500 configuredFont=idleConf.GetOption('main','EditorWindow','font',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000501 default='courier')
502 if configuredFont in fonts:
503 currentFontIndex=fonts.index(configuredFont)
504 self.listFontName.see(currentFontIndex)
505 self.listFontName.select_set(currentFontIndex)
506 ##font size dropdown
Steven M. Gava485f7b62001-10-26 06:47:09 +0000507 fontSize=idleConf.GetOption('main','EditorWindow','font-size',default='12')
508 self.optMenuFontSize.SetMenu(('10','11','12','13','14',
509 '16','18','20','22'),fontSize )
Steven M. Gava429a86a2001-10-23 10:42:12 +0000510 ##font sample
511 self.SetFontSample()
512
513 def LoadTabCfg(self):
514 ##indent type radibuttons
Steven M. Gava485f7b62001-10-26 06:47:09 +0000515 spaceIndent=idleConf.GetOption('main','Indent','use-spaces',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000516 default=1,type='bool')
517 self.indentType.set(spaceIndent)
518 ##indent sizes
Steven M. Gava485f7b62001-10-26 06:47:09 +0000519 spaceNum=idleConf.GetOption('main','Indent','num-spaces',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000520 default=4,type='int')
Steven M. Gava485f7b62001-10-26 06:47:09 +0000521 tabCols=idleConf.GetOption('main','Indent','tab-cols',
Steven M. Gava429a86a2001-10-23 10:42:12 +0000522 default=4,type='int')
523 self.spaceNum.set(spaceNum)
524 self.tabCols.set(tabCols)
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000525
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000526 def LoadThemeCfg(self):
Steven M. Gava41a85322001-10-29 08:05:34 +0000527 ##current theme type radiobutton
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000528 self.themeIsBuiltin.set(idleConf.GetOption('main','Theme','default',
529 type='int',default=1))
Steven M. Gava41a85322001-10-29 08:05:34 +0000530 ##currently set theme
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000531 currentOption=idleConf.CurrentTheme()
Steven M. Gava7c017862001-10-29 11:19:46 +0000532 ##load available theme option menus
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000533 if self.themeIsBuiltin.get(): #default theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000534 itemList=idleConf.GetSectionList('default','highlight')
535 self.optMenuThemeBuiltin.SetMenu(itemList,currentOption)
536 itemList=idleConf.GetSectionList('user','highlight')
537 if not itemList:
538 self.radioThemeCustom.config(state=DISABLED)
539 self.customTheme.set('- no custom themes -')
540 else:
541 self.optMenuThemeCustom.SetMenu(itemList,itemList[0])
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000542 else: #user theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000543 itemList=idleConf.GetSectionList('user','highlight')
544 self.optMenuThemeCustom.SetMenu(itemList,currentOption)
545 itemList=idleConf.GetSectionList('default','highlight')
546 self.optMenuThemeBuiltin.SetMenu(itemList,itemList[0])
Steven M. Gava7c017862001-10-29 11:19:46 +0000547 self.SetThemeType()
548 ##load theme element option menu
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000549 themeNames=self.themeElements.keys()
550 themeNames.sort(self.__ThemeNameIndexCompare)
551 self.optMenuHighlightTarget.SetMenu(themeNames,themeNames[0])
552 self.PaintThemeSample()
Steven M. Gava0cae01c2002-01-04 07:53:06 +0000553 self.SetHighlightTarget()
Steven M. Gava41a85322001-10-29 08:05:34 +0000554
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000555 def __ThemeNameIndexCompare(self,a,b):
556 if self.themeElements[a][1]<self.themeElements[b][1]: return -1
557 elif self.themeElements[a][1]==self.themeElements[b][1]: return 0
558 else: return 1
559
560 def LoadKeyCfg(self):
Steven M. Gava41a85322001-10-29 08:05:34 +0000561 ##current keys type radiobutton
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000562 self.keysAreDefault.set(idleConf.GetOption('main','Keys','default',
563 type='int',default=1))
Steven M. Gava41a85322001-10-29 08:05:34 +0000564 ##currently set keys
Steven M. Gavaad4f5322002-01-03 12:05:17 +0000565 currentOption=idleConf.CurrentKeys()
Steven M. Gava7c017862001-10-29 11:19:46 +0000566 ##load available keyset option menus
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000567 if self.keysAreDefault.get(): #default theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000568 itemList=idleConf.GetSectionList('default','keys')
569 self.optMenuKeysBuiltin.SetMenu(itemList,currentOption)
570 itemList=idleConf.GetSectionList('user','keys')
571 if not itemList:
572 self.radioKeysCustom.config(state=DISABLED)
573 self.customKeys.set('- no custom keys -')
574 else:
575 self.optMenuKeysCustom.SetMenu(itemList,itemList[0])
Steven M. Gavad0342cd2001-11-04 11:53:10 +0000576 else: #user theme selected
Steven M. Gava41a85322001-10-29 08:05:34 +0000577 itemList=idleConf.GetSectionList('user','keys')
578 self.optMenuKeysCustom.SetMenu(itemList,currentOption)
579 itemList=idleConf.GetSectionList('default','keys')
580 self.optMenuKeysBuiltin.SetMenu(itemList,itemList[0])
581 self.SetKeysType()
Steven M. Gavafacfc092002-01-19 00:29:54 +0000582 ##load keyset element list
Steven M. Gavac628a062002-01-19 10:33:21 +0000583 keySet=idleConf.GetCurrentKeySet()
Steven M. Gavafacfc092002-01-19 00:29:54 +0000584 bindNames=keySet.keys()
585 bindNames.sort()
586 for bindName in bindNames:
587 key=string.join(keySet[bindName]) #make key(s) into a string
588 bindName=bindName[2:-2] #trim off the angle brackets
589 self.listBindings.insert(END, bindName+' - '+key)
590
591 def GetNewKeys(self):
592 listIndex=self.listBindings.index(ANCHOR)
593 binding=self.listBindings.get(listIndex)
594 bindName=binding.split()[0] #first part, up to first space
Steven M. Gavac628a062002-01-19 10:33:21 +0000595 currentKeySequences=idleConf.GetCurrentKeySet().values()
Steven M. Gava68d73362002-01-19 01:30:56 +0000596 newKeys=GetKeysDialog(self,'Get New Keys',bindName,currentKeySequences)
Steven M. Gavafacfc092002-01-19 00:29:54 +0000597 if newKeys.result: #new keys were specified
598 self.listBindings.delete(listIndex)
599 self.listBindings.insert(listIndex,bindName+' - '+newKeys.result)
600 self.listBindings.select_set(listIndex)
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000601
602 def KeyBindingSelected(self,event):
603 self.buttonNewKeys.config(state=NORMAL)
604
Steven M. Gavafacfc092002-01-19 00:29:54 +0000605 def LoadGeneralCfg(self):
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000606 #startup state
607 self.startupEdit.set(idleConf.GetOption('main','General',
608 'editor-on-startup',default=1,type='bool'))
Steven M. Gavafacfc092002-01-19 00:29:54 +0000609 #initial window size
610 self.winWidth.set(idleConf.GetOption('main','EditorWindow','width'))
611 self.winHeight.set(idleConf.GetOption('main','EditorWindow','height'))
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000612 #extensions
613 extns=idleConf.GetExtensions(activeOnly=0)
614 apply(self.listExt.insert,(END,)+tuple(extns))
615
616 def ExtensionSelected(self,event):
617 self.radioEnableExt.config(state=NORMAL)
618 self.radioDisableExt.config(state=NORMAL)
619 self.buttonExtConfig.config(state=NORMAL)
620 extn=self.listExt.get(ANCHOR)
621 self.extState.set(idleConf.GetOption('extensions',extn,'enable',
622 default=1,type='bool'))
623
Steven M. Gava429a86a2001-10-23 10:42:12 +0000624 def LoadConfigs(self):
625 """
626 load configuration from default and user config files and populate
627 the widgets on the config dialog pages.
628 """
629 ### fonts / tabs page
630 self.LoadFontCfg()
631 self.LoadTabCfg()
632 ### highlighting page
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000633 self.LoadThemeCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000634 ### keys page
Steven M. Gava9dd16b32001-11-03 14:54:25 +0000635 self.LoadKeyCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000636 ### help page
637 ### general page
Steven M. Gavafacfc092002-01-19 00:29:54 +0000638 self.LoadGeneralCfg()
Steven M. Gava429a86a2001-10-23 10:42:12 +0000639
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000640 def SaveConfigs(self):
Steven M. Gava429a86a2001-10-23 10:42:12 +0000641 """
642 save configuration changes to user config files.
643 """
Steven M. Gava5f28e8f2002-01-21 06:38:21 +0000644 #DEBUG
645 print self.defaultItems
646 print self.changedItems
647 for configType in self.changedItems.keys():
648 for section in self.changedItems[configType].keys():
649 for item in self.changedItems[configType][section].keys():
650 #DEBUG
651 value=self.changedItems[configType][section][item]
652 print configType, section, item, value
653 print self.changedItems
654
655 def AddChangedItem(self,type,section,item,value):
656 self.changedItems[type][section][item]=value
657
658 def Cancel(self):
659 self.destroy()
660
661 def Ok(self):
662 self.Apply()
663 self.destroy()
664
665 def Apply(self):
666 self.SaveConfigs()
667
668 def Help(self):
Steven M. Gavac11ccf32001-09-24 09:43:17 +0000669 pass
670
Steven M. Gava44d3d1a2001-07-31 06:59:02 +0000671if __name__ == '__main__':
Steven M. Gavad721c482001-07-31 10:46:53 +0000672 #test the dialog
673 root=Tk()
674 Button(root,text='Dialog',
Steven M. Gava3b55a892001-11-21 05:56:26 +0000675 command=lambda:ConfigDialog(root,'Settings')).pack()
Steven M. Gavad721c482001-07-31 10:46:53 +0000676 root.mainloop()