@@ -58,6 +58,7 @@ def __init__(self,parent,title):
5858 #self.bind('<Alt-a>',self.Apply) #apply changes, save
5959 #self.bind('<F1>',self.Help) #context help
6060 self .LoadConfigs ()
61+ self .AttachVarCallbacks () #avoid callbacks during LoadConfigs
6162 self .wait_window ()
6263
6364 def CreateWidgets (self ):
@@ -88,10 +89,11 @@ def CreateWidgets(self):
8889 def CreatePageFontTab (self ):
8990 #tkVars
9091 self .fontSize = StringVar (self )
91- self .fontBold = StringVar (self )
92+ self .fontBold = BooleanVar (self )
93+ self .fontName = StringVar (self )
9294 self .spaceNum = IntVar (self )
9395 self .tabCols = IntVar (self )
94- self .indentType = IntVar (self )
96+ self .indentBySpaces = BooleanVar (self )
9597 self .editFont = tkFont .Font (self ,('courier' ,12 ,'normal' ))
9698 ##widget creation
9799 #body frame
@@ -107,15 +109,15 @@ def CreatePageFontTab(self):
107109 text = 'Font :' )
108110 self .listFontName = Listbox (frameFontName ,height = 5 ,takefocus = FALSE ,
109111 exportselection = FALSE )
110- self .listFontName .bind ('<<ListboxSelect>> ' ,self .SetFontSampleBinding )
112+ self .listFontName .bind ('<ButtonRelease-1> ' ,self .OnListFontButtonRelease )
111113 scrollFont = Scrollbar (frameFontName )
112114 scrollFont .config (command = self .listFontName .yview )
113115 self .listFontName .config (yscrollcommand = scrollFont .set )
114116 labelFontSizeTitle = Label (frameFontParam ,text = 'Size :' )
115117 self .optMenuFontSize = DynOptionMenu (frameFontParam ,self .fontSize ,None ,
116- command = self .SetFontSampleBinding )
118+ command = self .SetFontSample )
117119 checkFontBold = Checkbutton (frameFontParam ,variable = self .fontBold ,
118- onvalue = 'Bold' ,offvalue = '' ,text = 'Bold' )
120+ onvalue = 1 ,offvalue = 0 ,text = 'Bold' , command = self . SetFontSample )
119121 frameFontSample = Frame (frameFont ,relief = SOLID ,borderwidth = 1 )
120122 self .labelFontSample = Label (frameFontSample ,
121123 text = 'AaBbCcDdEe\n FfGgHhIiJjK\n 1234567890\n #:+=(){}[]' ,
@@ -126,9 +128,9 @@ def CreatePageFontTab(self):
126128 frameIndentSize = Frame (frameIndent )
127129 labelIndentTypeTitle = Label (frameIndentType ,
128130 text = 'Choose indentation type :' )
129- radioUseSpaces = Radiobutton (frameIndentType ,variable = self .indentType ,
131+ radioUseSpaces = Radiobutton (frameIndentType ,variable = self .indentBySpaces ,
130132 value = 1 ,text = 'Tab key inserts spaces' )
131- radioUseTabs = Radiobutton (frameIndentType ,variable = self .indentType ,
133+ radioUseTabs = Radiobutton (frameIndentType ,variable = self .indentBySpaces ,
132134 value = 0 ,text = 'Tab key inserts tabs' )
133135 labelIndentSizeTitle = Label (frameIndentSize ,
134136 text = 'Choose indentation size :' )
@@ -173,12 +175,11 @@ def CreatePageFontTab(self):
173175 def CreatePageHighlight (self ):
174176 self .builtinTheme = StringVar (self )
175177 self .customTheme = StringVar (self )
176- self .fgHilite = IntVar (self )
178+ self .fgHilite = BooleanVar (self )
177179 self .colour = StringVar (self )
178180 self .fontName = StringVar (self )
179- self .themeIsBuiltin = IntVar (self )
181+ self .themeIsBuiltin = BooleanVar (self )
180182 self .highlightTarget = StringVar (self )
181- self .highlightTarget .trace_variable ('w' ,self .SetHighlightTargetBinding )
182183 ##widget creation
183184 #body frame
184185 frame = self .tabPages .pages ['Highlighting' ]['page' ]
@@ -264,11 +265,8 @@ def CreatePageKeys(self):
264265 self .bindingTarget = StringVar (self )
265266 self .builtinKeys = StringVar (self )
266267 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 )
268+ self .keysAreDefault = BooleanVar (self )
269+ self .keyBinding = StringVar (self )
272270 ##widget creation
273271 #body frame
274272 frame = self .tabPages .pages ['Keys' ]['page' ]
@@ -330,10 +328,10 @@ def CreatePageKeys(self):
330328
331329 def CreatePageGeneral (self ):
332330 #tkVars
333- self .runType = IntVar (self )
334331 self .winWidth = StringVar (self )
335332 self .winHeight = StringVar (self )
336333 self .startupEdit = IntVar (self )
334+ self .extEnabled = IntVar (self )
337335 #widget creation
338336 #body
339337 frame = self .tabPages .pages ['General' ]['page' ]
@@ -368,9 +366,9 @@ def CreatePageGeneral(self):
368366 self .listExt .config (yscrollcommand = scrollExtList .set )
369367 self .listExt .bind ('<ButtonRelease-1>' ,self .ExtensionSelected )
370368 labelExtSetTitle = Label (frameExtSet ,text = 'Settings' )
371- self .radioEnableExt = Radiobutton (frameExtSet ,variable = self .startupEdit ,
369+ self .radioEnableExt = Radiobutton (frameExtSet ,variable = self .extEnabled ,
372370 value = 1 ,text = "enabled" ,state = DISABLED )
373- self .radioDisableExt = Radiobutton (frameExtSet ,variable = self .startupEdit ,
371+ self .radioDisableExt = Radiobutton (frameExtSet ,variable = self .extEnabled ,
374372 value = 0 ,text = "disabled" ,state = DISABLED )
375373 self .buttonExtConfig = Button (frameExtSet ,text = 'Configure' ,state = DISABLED )
376374 #widget packing
@@ -402,6 +400,73 @@ def CreatePageGeneral(self):
402400 self .buttonExtConfig .pack (side = TOP ,anchor = W ,pady = 5 )
403401 return frame
404402
403+ def AttachVarCallbacks (self ):
404+ self .fontSize .trace_variable ('w' ,self .VarChanged_fontSize )
405+ self .fontName .trace_variable ('w' ,self .VarChanged_fontName )
406+ self .fontBold .trace_variable ('w' ,self .VarChanged_fontBold )
407+ self .spaceNum .trace_variable ('w' ,self .VarChanged_spaceNum )
408+ self .tabCols .trace_variable ('w' ,self .VarChanged_tabCols )
409+ self .indentBySpaces .trace_variable ('w' ,self .VarChanged_indentBySpaces )
410+ self .colour .trace_variable ('w' ,self .VarChanged_colour )
411+ self .keyBinding .trace_variable ('w' ,self .VarChanged_keyBinding )
412+ self .winWidth .trace_variable ('w' ,self .VarChanged_winWidth )
413+ self .winHeight .trace_variable ('w' ,self .VarChanged_winHeight )
414+ self .startupEdit .trace_variable ('w' ,self .VarChanged_startupEdit )
415+ self .extEnabled .trace_variable ('w' ,self .VarChanged_extEnabled )
416+
417+ def VarChanged_fontSize (self ,* params ):
418+ value = self .fontSize .get ()
419+ self .AddChangedItem ('main' ,'EditorWindow' ,'font-size' ,value )
420+ print 'fontSize:' ,value
421+
422+ def VarChanged_fontName (self ,* params ):
423+ value = self .fontName .get ()
424+ self .AddChangedItem ('main' ,'EditorWindow' ,'font' ,value )
425+ print 'fontName:' ,value
426+
427+ def VarChanged_fontBold (self ,* params ):
428+ value = self .fontBold .get ()
429+ self .AddChangedItem ('main' ,'EditorWindow' ,'font-bold' ,value )
430+ print 'fontBold:' ,value
431+
432+ def VarChanged_indentBySpaces (self ,* params ):
433+ value = self .indentBySpaces .get ()
434+ self .AddChangedItem ('main' ,'Indent' ,'use-spaces' ,value )
435+ print 'indentBySpaces:' ,value
436+
437+ def VarChanged_spaceNum (self ,* params ):
438+ value = self .spaceNum .get ()
439+ self .AddChangedItem ('main' ,'Indent' ,'num-spaces' ,value )
440+ print 'spaceNum:' ,value
441+
442+ def VarChanged_tabCols (self ,* params ):
443+ value = self .tabCols .get ()
444+ self .AddChangedItem ('main' ,'Indent' ,'tab-cols' ,value )
445+ print 'tabCols:' ,value
446+
447+ def VarChanged_colour (self ,* params ):
448+ print params
449+
450+ def VarChanged_keyBinding (self ,* params ):
451+ print params
452+
453+ def VarChanged_winWidth (self ,* params ):
454+ print params
455+
456+ def VarChanged_winHeight (self ,* params ):
457+ print params
458+
459+ def VarChanged_startupEdit (self ,* params ):
460+ print params
461+
462+ def VarChanged_extEnabled (self ,* params ):
463+ print params
464+
465+ def AddChangedItem (self ,type ,section ,item ,value ):
466+ if not self .changedItems [type ].has_key (section ):
467+ self .changedItems [type ][section ]= {}
468+ self .changedItems [type ][section ][item ]= value
469+
405470 def GetDefaultItems (self ):
406471 dItems = {'main' :{},'highlight' :{},'keys' :{},'extensions' :{}}
407472 for configType in dItems .keys ():
@@ -440,18 +505,25 @@ def GetColour(self):
440505 title = 'Pick new colour for : ' + target ,
441506 initialcolor = self .frameColourSet .cget ('bg' ))
442507 if colourString : #user didn't cancel
508+ self .colour .set (colourString )
443509 self .frameColourSet .config (bg = colourString )#set sample
444510 if self .fgHilite .get (): plane = 'foreground'
445511 else : plane = 'background'
446512 apply (self .textHighlightSample .tag_config ,
447513 (self .themeElements [target ][0 ],),{plane :colourString })
448514
449- def SetFontSampleBinding (self ,event ):
515+ def OnListFontButtonRelease (self ,event ):
516+ self .fontName .set (self .listFontName .get (ANCHOR ))
450517 self .SetFontSample ()
451518
452- def SetFontSample (self ):
453- self .editFont .config (size = self .fontSize .get (),weight = NORMAL ,
454- family = self .listFontName .get (self .listFontName .curselection ()[0 ]))
519+ def SetFontSample (self ,event = None ):
520+ fontName = self .fontName .get ()
521+ if self .fontBold .get ():
522+ fontWeight = tkFont .BOLD
523+ else :
524+ fontWeight = tkFont .NORMAL
525+ self .editFont .config (size = self .fontSize .get (),
526+ weight = fontWeight ,family = fontName )
455527
456528 def SetHighlightTargetBinding (self ,* args ):
457529 self .SetHighlightTarget ()
@@ -499,22 +571,28 @@ def LoadFontCfg(self):
499571 self .listFontName .insert (END ,font )
500572 configuredFont = idleConf .GetOption ('main' ,'EditorWindow' ,'font' ,
501573 default = 'courier' )
574+ self .fontName .set (configuredFont )
502575 if configuredFont in fonts :
503576 currentFontIndex = fonts .index (configuredFont )
504577 self .listFontName .see (currentFontIndex )
505578 self .listFontName .select_set (currentFontIndex )
579+ self .listFontName .select_anchor (currentFontIndex )
506580 ##font size dropdown
507- fontSize = idleConf .GetOption ('main' ,'EditorWindow' ,'font-size' ,default = '12' )
581+ fontSize = idleConf .GetOption ('main' ,'EditorWindow' ,'font-size' ,
582+ default = '12' )
508583 self .optMenuFontSize .SetMenu (('10' ,'11' ,'12' ,'13' ,'14' ,
509584 '16' ,'18' ,'20' ,'22' ),fontSize )
585+ ##fontWeight
586+ self .fontBold .set (idleConf .GetOption ('main' ,'EditorWindow' ,
587+ 'font-bold' ,default = 0 ,type = 'bool' ))
510588 ##font sample
511589 self .SetFontSample ()
512590
513591 def LoadTabCfg (self ):
514592 ##indent type radibuttons
515593 spaceIndent = idleConf .GetOption ('main' ,'Indent' ,'use-spaces' ,
516594 default = 1 ,type = 'bool' )
517- self .indentType .set (spaceIndent )
595+ self .indentBySpaces .set (spaceIndent )
518596 ##indent sizes
519597 spaceNum = idleConf .GetOption ('main' ,'Indent' ,'num-spaces' ,
520598 default = 4 ,type = 'int' )
@@ -526,7 +604,7 @@ def LoadTabCfg(self):
526604 def LoadThemeCfg (self ):
527605 ##current theme type radiobutton
528606 self .themeIsBuiltin .set (idleConf .GetOption ('main' ,'Theme' ,'default' ,
529- type = 'int ' ,default = 1 ))
607+ type = 'bool ' ,default = 1 ))
530608 ##currently set theme
531609 currentOption = idleConf .CurrentTheme ()
532610 ##load available theme option menus
@@ -560,7 +638,7 @@ def __ThemeNameIndexCompare(self,a,b):
560638 def LoadKeyCfg (self ):
561639 ##current keys type radiobutton
562640 self .keysAreDefault .set (idleConf .GetOption ('main' ,'Keys' ,'default' ,
563- type = 'int ' ,default = 1 ))
641+ type = 'bool ' ,default = 1 ))
564642 ##currently set keys
565643 currentOption = idleConf .CurrentKeys ()
566644 ##load available keyset option menus
@@ -597,6 +675,7 @@ def GetNewKeys(self):
597675 if newKeys .result : #new keys were specified
598676 self .listBindings .delete (listIndex )
599677 self .listBindings .insert (listIndex ,bindName + ' - ' + newKeys .result )
678+ self .keyBinding .set (newKeys .result )
600679 self .listBindings .select_set (listIndex )
601680
602681 def KeyBindingSelected (self ,event ):
@@ -618,7 +697,7 @@ def ExtensionSelected(self,event):
618697 self .radioDisableExt .config (state = NORMAL )
619698 self .buttonExtConfig .config (state = NORMAL )
620699 extn = self .listExt .get (ANCHOR )
621- self .extState .set (idleConf .GetOption ('extensions' ,extn ,'enable' ,
700+ self .extEnabled .set (idleConf .GetOption ('extensions' ,extn ,'enable' ,
622701 default = 1 ,type = 'bool' ))
623702
624703 def LoadConfigs (self ):
@@ -652,9 +731,6 @@ def SaveConfigs(self):
652731 print configType , section , item , value
653732 print self .changedItems
654733
655- def AddChangedItem (self ,type ,section ,item ,value ):
656- self .changedItems [type ][section ][item ]= value
657-
658734 def Cancel (self ):
659735 self .destroy ()
660736
0 commit comments