30
30
31
31
changes = ConfigChanges ()
32
32
33
+
33
34
class ConfigDialog (Toplevel ):
34
35
"""Config dialog for IDLE.
35
36
"""
@@ -75,13 +76,15 @@ def __init__(self, parent, title='', _htest=False, _utest=False):
75
76
# self.bind('<Alt-a>', self.Apply) #apply changes, save
76
77
# self.bind('<F1>', self.Help) #context help
77
78
self .load_configs ()
78
- self .attach_var_callbacks () # Avoid callbacks during load_configs.
79
+ # Avoid callbacks during load_configs.
80
+ tracers .attach ()
79
81
80
82
if not _utest :
81
83
self .grab_set ()
82
84
self .wm_deiconify ()
83
85
self .wait_window ()
84
86
87
+
85
88
def create_widgets (self ):
86
89
"""Create and place widgets for tabbed dialog.
87
90
@@ -96,7 +99,6 @@ def create_widgets(self):
96
99
create_page_extensions
97
100
create_action_buttons
98
101
load_configs: Load pages except for extensions.
99
- attach_var_callbacks
100
102
remove_var_callbacks
101
103
activate_config_changes: Tell editors to reload.
102
104
"""
@@ -131,37 +133,9 @@ def load_configs(self):
131
133
self .load_general_cfg ()
132
134
# note: extension page handled separately
133
135
134
- def attach_var_callbacks (self ):
135
- "Attach callbacks to variables that can be changed."
136
- self .font_size .trace_add ('write' , self .var_changed_font )
137
- self .font_name .trace_add ('write' , self .var_changed_font )
138
- self .font_bold .trace_add ('write' , self .var_changed_font )
139
- self .space_num .trace_add ('write' , self .var_changed_space_num )
140
- self .color .trace_add ('write' , self .var_changed_color )
141
- self .builtin_theme .trace_add ('write' , self .var_changed_builtin_theme )
142
- self .custom_theme .trace_add ('write' , self .var_changed_custom_theme )
143
- self .is_builtin_theme .trace_add ('write' , self .var_changed_is_builtin_theme )
144
- self .highlight_target .trace_add ('write' , self .var_changed_highlight_target )
145
- self .keybinding .trace_add ('write' , self .var_changed_keybinding )
146
- self .builtin_keys .trace_add ('write' , self .var_changed_builtin_keys )
147
- self .custom_keys .trace_add ('write' , self .var_changed_custom_keys )
148
- self .are_keys_builtin .trace_add ('write' , self .var_changed_are_keys_builtin )
149
- self .win_width .trace_add ('write' , self .var_changed_win_width )
150
- self .win_height .trace_add ('write' , self .var_changed_win_height )
151
- self .startup_edit .trace_add ('write' , self .var_changed_startup_edit )
152
- self .autosave .trace_add ('write' , self .var_changed_autosave )
153
-
154
136
def remove_var_callbacks (self ):
155
137
"Remove callbacks to prevent memory leaks."
156
- for var in (
157
- self .font_size , self .font_name , self .font_bold ,
158
- self .space_num , self .color , self .builtin_theme ,
159
- self .custom_theme , self .is_builtin_theme , self .highlight_target ,
160
- self .keybinding , self .builtin_keys , self .custom_keys ,
161
- self .are_keys_builtin , self .win_width , self .win_height ,
162
- self .startup_edit , self .autosave ,):
163
- var .trace_remove ('write' , var .trace_info ()[0 ][1 ])
164
-
138
+ tracers .detach ()
165
139
166
140
def create_action_buttons (self ):
167
141
"""Return frame of action buttons for dialog.
@@ -273,7 +247,7 @@ def create_page_font_tab(self):
273
247
274
248
Tabs: Enable users to change spaces entered for indent tabs.
275
249
Changing indent_scale value with the mouse sets Var space_num,
276
- which invokes var_changed_space_num, which adds an entry to
250
+ which invokes the default callback to add an entry to
277
251
changes. Load_tab_cfg initializes space_num to default.
278
252
279
253
Widget Structure: (*) widgets bound to self
@@ -294,10 +268,10 @@ def create_page_font_tab(self):
294
268
(*)indent_scale: Scale - space_num
295
269
"""
296
270
parent = self .parent
297
- self .font_name = StringVar (parent )
298
- self .font_size = StringVar (parent )
299
- self .font_bold = BooleanVar (parent )
300
- self .space_num = IntVar (parent )
271
+ self .font_name = tracers . add ( StringVar (parent ), self . var_changed_font )
272
+ self .font_size = tracers . add ( StringVar (parent ), self . var_changed_font )
273
+ self .font_bold = tracers . add ( BooleanVar (parent ), self . var_changed_font )
274
+ self .space_num = tracers . add ( IntVar (parent ), ( 'main' , 'Indent' , 'num-spaces' ) )
301
275
302
276
# Create widgets:
303
277
# body and body section frames.
@@ -443,12 +417,6 @@ def load_tab_cfg(self):
443
417
'main' , 'Indent' , 'num-spaces' , default = 4 , type = 'int' )
444
418
self .space_num .set (space_num )
445
419
446
- def var_changed_space_num (self , * params ):
447
- "Store change to indentation size."
448
- value = self .space_num .get ()
449
- changes .add_option ('main' , 'Indent' , 'num-spaces' , value )
450
-
451
-
452
420
def create_page_highlight (self ):
453
421
"""Return frame of widgets for Highlighting tab.
454
422
@@ -518,12 +486,17 @@ def create_page_highlight(self):
518
486
'Shell Stderr Text' : ('stderr' , '13' ),
519
487
}
520
488
parent = self .parent
521
- self .builtin_theme = StringVar (parent )
522
- self .custom_theme = StringVar (parent )
489
+ self .builtin_theme = tracers .add (
490
+ StringVar (parent ), self .var_changed_builtin_theme )
491
+ self .custom_theme = tracers .add (
492
+ StringVar (parent ), self .var_changed_custom_theme )
523
493
self .fg_bg_toggle = BooleanVar (parent )
524
- self .color = StringVar (parent )
525
- self .is_builtin_theme = BooleanVar (parent )
526
- self .highlight_target = StringVar (parent )
494
+ self .color = tracers .add (
495
+ StringVar (parent ), self .var_changed_color )
496
+ self .is_builtin_theme = tracers .add (
497
+ BooleanVar (parent ), self .var_changed_is_builtin_theme )
498
+ self .highlight_target = tracers .add (
499
+ StringVar (parent ), self .var_changed_highlight_target )
527
500
528
501
##widget creation
529
502
#body frame
@@ -1062,10 +1035,14 @@ def create_page_keys(self):
1062
1035
button_save_custom_keys: Button
1063
1036
"""
1064
1037
parent = self .parent
1065
- self .builtin_keys = StringVar (parent )
1066
- self .custom_keys = StringVar (parent )
1067
- self .are_keys_builtin = BooleanVar (parent )
1068
- self .keybinding = StringVar (parent )
1038
+ self .builtin_keys = tracers .add (
1039
+ StringVar (parent ), self .var_changed_builtin_keys )
1040
+ self .custom_keys = tracers .add (
1041
+ StringVar (parent ), self .var_changed_custom_keys )
1042
+ self .are_keys_builtin = tracers .add (
1043
+ BooleanVar (parent ), self .var_changed_are_keys_builtin )
1044
+ self .keybinding = tracers .add (
1045
+ StringVar (parent ), self .var_changed_keybinding )
1069
1046
1070
1047
##widget creation
1071
1048
#body frame
@@ -1169,9 +1146,6 @@ def load_key_cfg(self):
1169
1146
keyset_name = idleConf .CurrentKeys ()
1170
1147
self .load_keys_list (keyset_name )
1171
1148
1172
-
1173
-
1174
-
1175
1149
def var_changed_builtin_keys (self , * params ):
1176
1150
"Process selection of builtin key set."
1177
1151
old_keys = (
@@ -1434,7 +1408,7 @@ def create_page_general(self):
1434
1408
set var startup_edit. Radiobuttons save_ask_on and save_auto_on
1435
1409
set var autosave. Entry boxes win_width_int and win_height_int
1436
1410
set var win_width and win_height. Setting var_name invokes the
1437
- var_changed_var_name callback that adds option to changes.
1411
+ default callback that adds option to changes.
1438
1412
1439
1413
Helplist: load_general_cfg loads list user_helplist with
1440
1414
name, position pairs and copies names to listbox helplist.
@@ -1470,10 +1444,14 @@ def create_page_general(self):
1470
1444
scroll_helplist: Scrollbar
1471
1445
"""
1472
1446
parent = self .parent
1473
- self .startup_edit = IntVar (parent )
1474
- self .autosave = IntVar (parent )
1475
- self .win_width = StringVar (parent )
1476
- self .win_height = StringVar (parent )
1447
+ self .startup_edit = tracers .add (
1448
+ IntVar (parent ), ('main' , 'General' , 'editor-on-startup' ))
1449
+ self .autosave = tracers .add (
1450
+ IntVar (parent ), ('main' , 'General' , 'autosave' ))
1451
+ self .win_width = tracers .add (
1452
+ StringVar (parent ), ('main' , 'EditorWindow' , 'width' ))
1453
+ self .win_height = tracers .add (
1454
+ StringVar (parent ), ('main' , 'EditorWindow' , 'height' ))
1477
1455
1478
1456
# Create widgets:
1479
1457
# body.
@@ -1873,9 +1851,9 @@ def add(self, var, callback):
1873
1851
1874
1852
Args:
1875
1853
var: Tk variable instance.
1876
- callback: Function to be used as a callback or
1877
- a tuple with IdleConf values for default
1878
- callback.
1854
+ callback: Either function name to be used as a callback
1855
+ or a tuple with IdleConf config-type, section, and
1856
+ option names used in the default callback.
1879
1857
1880
1858
Return:
1881
1859
Tk variable instance.
@@ -1908,6 +1886,8 @@ def detach(self):
1908
1886
self .untraced .append ((var , callback ))
1909
1887
1910
1888
1889
+ tracers = VarTrace ()
1890
+
1911
1891
help_common = '''\
1912
1892
When you click either the Apply or Ok buttons, settings in this
1913
1893
dialog that are different from IDLE's default are saved in
0 commit comments