Skip to content

Commit 3537ef8

Browse files
committed
bpo-30853: IDLE: Convert font and general vars to use VarTrace
1 parent b166080 commit 3537ef8

File tree

2 files changed

+20
-29
lines changed

2 files changed

+20
-29
lines changed

Lib/idlelib/configdialog.py

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ def __init__(self, parent, title='', _htest=False, _utest=False):
5151
"""
5252
Toplevel.__init__(self, parent)
5353
self.parent = parent
54+
self.tracers = VarTrace()
5455
if _htest:
5556
parent.instance_dict = {}
5657
if not _utest:
@@ -76,6 +77,7 @@ def __init__(self, parent, title='', _htest=False, _utest=False):
7677
# self.bind('<F1>', self.Help) #context help
7778
self.load_configs()
7879
self.attach_var_callbacks() # Avoid callbacks during load_configs.
80+
self.tracers.attach()
7981

8082
if not _utest:
8183
self.grab_set()
@@ -133,10 +135,6 @@ def load_configs(self):
133135

134136
def attach_var_callbacks(self):
135137
"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)
140138
self.color.trace_add('write', self.var_changed_color)
141139
self.builtin_theme.trace_add('write', self.var_changed_builtin_theme)
142140
self.custom_theme.trace_add('write', self.var_changed_custom_theme)
@@ -146,22 +144,16 @@ def attach_var_callbacks(self):
146144
self.builtin_keys.trace_add('write', self.var_changed_builtin_keys)
147145
self.custom_keys.trace_add('write', self.var_changed_custom_keys)
148146
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)
153147

154148
def remove_var_callbacks(self):
155149
"Remove callbacks to prevent memory leaks."
156150
for var in (
157-
self.font_size, self.font_name, self.font_bold,
158-
self.space_num, self.color, self.builtin_theme,
151+
self.color, self.builtin_theme,
159152
self.custom_theme, self.is_builtin_theme, self.highlight_target,
160153
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,):
154+
self.are_keys_builtin,):
163155
var.trace_remove('write', var.trace_info()[0][1])
164-
156+
self.tracers.detach()
165157

166158
def create_action_buttons(self):
167159
"""Return frame of action buttons for dialog.
@@ -273,7 +265,7 @@ def create_page_font_tab(self):
273265
274266
Tabs: Enable users to change spaces entered for indent tabs.
275267
Changing indent_scale value with the mouse sets Var space_num,
276-
which invokes var_changed_space_num, which adds an entry to
268+
which invokes the default callback to add an entry to
277269
changes. Load_tab_cfg initializes space_num to default.
278270
279271
Widget Structure: (*) widgets bound to self
@@ -294,10 +286,10 @@ def create_page_font_tab(self):
294286
(*)indent_scale: Scale - space_num
295287
"""
296288
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)
289+
self.font_name = self.tracers.add(StringVar(parent), self.var_changed_font)
290+
self.font_size = self.tracers.add(StringVar(parent), self.var_changed_font)
291+
self.font_bold = self.tracers.add(BooleanVar(parent), self.var_changed_font)
292+
self.space_num = self.tracers.add(IntVar(parent), ('main', 'Indent', 'num-spaces'))
301293

302294
# Create widgets:
303295
# body and body section frames.
@@ -443,12 +435,6 @@ def load_tab_cfg(self):
443435
'main', 'Indent', 'num-spaces', default=4, type='int')
444436
self.space_num.set(space_num)
445437

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-
452438
def create_page_highlight(self):
453439
"""Return frame of widgets for Highlighting tab.
454440
@@ -1434,7 +1420,7 @@ def create_page_general(self):
14341420
set var startup_edit. Radiobuttons save_ask_on and save_auto_on
14351421
set var autosave. Entry boxes win_width_int and win_height_int
14361422
set var win_width and win_height. Setting var_name invokes the
1437-
var_changed_var_name callback that adds option to changes.
1423+
default callback that adds option to changes.
14381424
14391425
Helplist: load_general_cfg loads list user_helplist with
14401426
name, position pairs and copies names to listbox helplist.
@@ -1470,10 +1456,14 @@ def create_page_general(self):
14701456
scroll_helplist: Scrollbar
14711457
"""
14721458
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)
1459+
self.startup_edit = self.tracers.add(
1460+
IntVar(parent), ('main', 'General', 'editor-on-startup'))
1461+
self.autosave = self.tracers.add(
1462+
IntVar(parent), ('main', 'General', 'autosave'))
1463+
self.win_width = self.tracers.add(
1464+
StringVar(parent), ('main', 'EditorWindow', 'width'))
1465+
self.win_height = self.tracers.add(
1466+
StringVar(parent), ('main', 'EditorWindow', 'height'))
14771467

14781468
# Create widgets:
14791469
# body.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add VarTrace class to configdialog.

0 commit comments

Comments
 (0)