Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c112cd8

Browse files
author
Steven M. Gava
committed
further work on config saving
1 parent 796720b commit c112cd8

2 files changed

Lines changed: 107 additions & 30 deletions

File tree

Lib/idlelib/config-main.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ width= 80
5151
height= 30
5252
font= courier
5353
font-size= 12
54+
font-bold= 0
5455

5556
[Indent]
5657
use-spaces= 1

Lib/idlelib/configDialog.py

Lines changed: 106 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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\nFfGgHhIiJjK\n1234567890\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

Comments
 (0)