Skip to content

Commit c03f0ab

Browse files
bpo-40468: Move IDLE helplist settings to extensions page of dialog. (GH-26593)
These are the settings that extend the help menu. Moving them shortens the dialog and will help with it being too tall for small screens. (cherry picked from commit ab36b9f)
1 parent 87f5022 commit c03f0ab

File tree

3 files changed

+190
-139
lines changed

3 files changed

+190
-139
lines changed

Lib/idlelib/configdialog.py

Lines changed: 86 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -268,27 +268,28 @@ def create_page_extensions(self):
268268
set_extension_value: Set in userCfg['extensions'].
269269
save_all_changed_extensions: Call extension page Save().
270270
"""
271-
parent = self.parent
272-
frame = Frame(self.note)
273271
self.ext_defaultCfg = idleConf.defaultCfg['extensions']
274272
self.ext_userCfg = idleConf.userCfg['extensions']
275273
self.is_int = self.register(is_int)
276274
self.load_extensions()
277275
# Create widgets - a listbox shows all available extensions, with the
278276
# controls for the extension selected in the listbox to the right.
279277
self.extension_names = StringVar(self)
280-
frame.rowconfigure(0, weight=1)
281-
frame.columnconfigure(2, weight=1)
282-
self.extension_list = Listbox(frame, listvariable=self.extension_names,
278+
frame = Frame(self.note)
279+
frame_ext = LabelFrame(frame, borderwidth=2, relief=GROOVE,
280+
text=' Feature Extensions ')
281+
frame_ext.rowconfigure(0, weight=1)
282+
frame_ext.columnconfigure(2, weight=1)
283+
self.extension_list = Listbox(frame_ext, listvariable=self.extension_names,
283284
selectmode='browse')
284285
self.extension_list.bind('<<ListboxSelect>>', self.extension_selected)
285-
scroll = Scrollbar(frame, command=self.extension_list.yview)
286+
scroll = Scrollbar(frame_ext, command=self.extension_list.yview)
286287
self.extension_list.yscrollcommand=scroll.set
287-
self.details_frame = LabelFrame(frame, width=250, height=250)
288+
self.details_frame = LabelFrame(frame_ext, width=250, height=250)
288289
self.extension_list.grid(column=0, row=0, sticky='nws')
289290
scroll.grid(column=1, row=0, sticky='ns')
290291
self.details_frame.grid(column=2, row=0, sticky='nsew', padx=[10, 0])
291-
frame.configure(padding=10)
292+
frame_ext.configure(padding=10)
292293
self.config_frame = {}
293294
self.current_extension = None
294295

@@ -304,6 +305,13 @@ def create_page_extensions(self):
304305
self.extension_list.selection_set(0)
305306
self.extension_selected(None)
306307

308+
309+
self.frame_help = HelpFrame(frame, borderwidth=2, relief=GROOVE,
310+
text=' Help Menu Extensions ')
311+
frame_ext.grid(row=0, column=0, sticky='nsew')
312+
Label(frame).grid(row=1, column=0)
313+
self.frame_help.grid(row=2, column=0, sticky='sew')
314+
307315
return frame
308316

309317
def load_extensions(self):
@@ -1854,14 +1862,6 @@ def create_page_general(self):
18541862
frame_auto_squeeze_min_lines: Frame
18551863
auto_squeeze_min_lines_title: Label
18561864
(*)auto_squeeze_min_lines_int: Entry - auto_squeeze_min_lines
1857-
frame_help: LabelFrame
1858-
frame_helplist: Frame
1859-
frame_helplist_buttons: Frame
1860-
(*)button_helplist_edit
1861-
(*)button_helplist_add
1862-
(*)button_helplist_remove
1863-
(*)helplist: ListBox
1864-
scroll_helplist: Scrollbar
18651865
"""
18661866
# Integer values need StringVar because int('') raises.
18671867
self.startup_edit = tracers.add(
@@ -1902,8 +1902,6 @@ def create_page_general(self):
19021902
text=' Editor Preferences')
19031903
frame_shell = LabelFrame(self, borderwidth=2, relief=GROOVE,
19041904
text=' Shell Preferences')
1905-
frame_help = LabelFrame(self, borderwidth=2, relief=GROOVE,
1906-
text=' Additional Help Sources ')
19071905
# Frame_window.
19081906
frame_run = Frame(frame_window, borderwidth=0)
19091907
startup_title = Label(frame_run, text='At Startup')
@@ -1999,32 +1997,11 @@ def create_page_general(self):
19991997
validatecommand=self.digits_only, validate='key',
20001998
)
20011999

2002-
# frame_help.
2003-
frame_helplist = Frame(frame_help)
2004-
frame_helplist_buttons = Frame(frame_helplist)
2005-
self.helplist = Listbox(
2006-
frame_helplist, height=5, takefocus=True,
2007-
exportselection=FALSE)
2008-
scroll_helplist = Scrollbar(frame_helplist)
2009-
scroll_helplist['command'] = self.helplist.yview
2010-
self.helplist['yscrollcommand'] = scroll_helplist.set
2011-
self.helplist.bind('<ButtonRelease-1>', self.help_source_selected)
2012-
self.button_helplist_edit = Button(
2013-
frame_helplist_buttons, text='Edit', state='disabled',
2014-
width=8, command=self.helplist_item_edit)
2015-
self.button_helplist_add = Button(
2016-
frame_helplist_buttons, text='Add',
2017-
width=8, command=self.helplist_item_add)
2018-
self.button_helplist_remove = Button(
2019-
frame_helplist_buttons, text='Remove', state='disabled',
2020-
width=8, command=self.helplist_item_remove)
2021-
20222000
# Pack widgets:
20232001
# Body.
20242002
frame_window.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
20252003
frame_editor.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
20262004
frame_shell.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
2027-
frame_help.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
20282005
# frame_run.
20292006
frame_run.pack(side=TOP, padx=5, pady=0, fill=X)
20302007
startup_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
@@ -2077,17 +2054,12 @@ def create_page_general(self):
20772054
auto_squeeze_min_lines_title.pack(side=LEFT, anchor=W, padx=5, pady=5)
20782055
self.auto_squeeze_min_lines_int.pack(side=TOP, padx=5, pady=5)
20792056

2080-
# frame_help.
2081-
frame_helplist_buttons.pack(side=RIGHT, padx=5, pady=5, fill=Y)
2082-
frame_helplist.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
2083-
scroll_helplist.pack(side=RIGHT, anchor=W, fill=Y)
2084-
self.helplist.pack(side=LEFT, anchor=E, expand=TRUE, fill=BOTH)
2085-
self.button_helplist_edit.pack(side=TOP, anchor=W, pady=5)
2086-
self.button_helplist_add.pack(side=TOP, anchor=W)
2087-
self.button_helplist_remove.pack(side=TOP, anchor=W, pady=5)
2088-
20892057
def load_general_cfg(self):
20902058
"Load current configuration settings for the general options."
2059+
self.load_windows_cfg()
2060+
self.load_shelled_cfg()
2061+
2062+
def load_windows_cfg(self):
20912063
# Set variables for all windows.
20922064
self.startup_edit.set(idleConf.GetOption(
20932065
'main', 'General', 'editor-on-startup', type='bool'))
@@ -2106,6 +2078,7 @@ def load_general_cfg(self):
21062078
self.paren_bell.set(idleConf.GetOption(
21072079
'extensions', 'ParenMatch', 'bell'))
21082080

2081+
def load_shelled_cfg(self):
21092082
# Set variables for editor windows.
21102083
self.autosave.set(idleConf.GetOption(
21112084
'main', 'General', 'autosave', default=0, type='bool'))
@@ -2120,12 +2093,63 @@ def load_general_cfg(self):
21202093
self.auto_squeeze_min_lines.set(idleConf.GetOption(
21212094
'main', 'PyShell', 'auto-squeeze-min-lines', type='int'))
21222095

2123-
# Set additional help sources.
2124-
self.user_helplist = idleConf.GetAllExtraHelpSourcesList()
2125-
self.helplist.delete(0, 'end')
2126-
for help_item in self.user_helplist:
2127-
self.helplist.insert(END, help_item[0])
2128-
self.set_add_delete_state()
2096+
2097+
class HelpFrame(LabelFrame):
2098+
2099+
def __init__(self, master, **cfg):
2100+
super().__init__(master, **cfg)
2101+
self.create_frame_help()
2102+
self.load_helplist()
2103+
2104+
def create_frame_help(self):
2105+
"""Create LabelFrame for additional help menu sources.
2106+
2107+
load_helplist loads list user_helplist with
2108+
name, position pairs and copies names to listbox helplist.
2109+
Clicking a name invokes help_source selected. Clicking
2110+
button_helplist_name invokes helplist_item_name, which also
2111+
changes user_helplist. These functions all call
2112+
set_add_delete_state. All but load call update_help_changes to
2113+
rewrite changes['main']['HelpFiles'].
2114+
2115+
Widgets for HelpFrame(LabelFrame): (*) widgets bound to self
2116+
frame_helplist: Frame
2117+
(*)helplist: ListBox
2118+
scroll_helplist: Scrollbar
2119+
frame_buttons: Frame
2120+
(*)button_helplist_edit
2121+
(*)button_helplist_add
2122+
(*)button_helplist_remove
2123+
"""
2124+
# self = frame_help in dialog (until ExtPage class).
2125+
frame_helplist = Frame(self)
2126+
self.helplist = Listbox(
2127+
frame_helplist, height=5, takefocus=True,
2128+
exportselection=FALSE)
2129+
scroll_helplist = Scrollbar(frame_helplist)
2130+
scroll_helplist['command'] = self.helplist.yview
2131+
self.helplist['yscrollcommand'] = scroll_helplist.set
2132+
self.helplist.bind('<ButtonRelease-1>', self.help_source_selected)
2133+
2134+
frame_buttons = Frame(self)
2135+
self.button_helplist_edit = Button(
2136+
frame_buttons, text='Edit', state='disabled',
2137+
width=8, command=self.helplist_item_edit)
2138+
self.button_helplist_add = Button(
2139+
frame_buttons, text='Add',
2140+
width=8, command=self.helplist_item_add)
2141+
self.button_helplist_remove = Button(
2142+
frame_buttons, text='Remove', state='disabled',
2143+
width=8, command=self.helplist_item_remove)
2144+
2145+
# Pack frame_help.
2146+
frame_helplist.pack(side=LEFT, padx=5, pady=5, expand=TRUE, fill=BOTH)
2147+
self.helplist.pack(side=LEFT, anchor=E, expand=TRUE, fill=BOTH)
2148+
scroll_helplist.pack(side=RIGHT, anchor=W, fill=Y)
2149+
frame_buttons.pack(side=RIGHT, padx=5, pady=5, fill=Y)
2150+
self.button_helplist_edit.pack(side=TOP, anchor=W, pady=5)
2151+
self.button_helplist_add.pack(side=TOP, anchor=W)
2152+
self.button_helplist_remove.pack(side=TOP, anchor=W, pady=5)
21292153

21302154
def help_source_selected(self, event):
21312155
"Handle event for selecting additional help."
@@ -2195,6 +2219,14 @@ def update_help_changes(self):
21952219
'main', 'HelpFiles', str(num),
21962220
';'.join(self.user_helplist[num-1][:2]))
21972221

2222+
def load_helplist(self):
2223+
# Set additional help sources.
2224+
self.user_helplist = idleConf.GetAllExtraHelpSourcesList()
2225+
self.helplist.delete(0, 'end')
2226+
for help_item in self.user_helplist:
2227+
self.helplist.insert(END, help_item[0])
2228+
self.set_add_delete_state()
2229+
21982230

21992231
class VarTrace:
22002232
"""Maintain Tk variables trace state."""

0 commit comments

Comments
 (0)