Redesign settings with reusable form design system - #872
Conversation
There was a problem hiding this comment.
GUI: qrc:/qml/controls/TextFieldRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/controls/TextFieldRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/controls/ValueRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/controls/LinkRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/controls/LinkRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/pages/settings/SettingsDesignSystem.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/pages/settings/SettingsDesignSystem.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/pages/settings/SettingsDesignSystem.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:42Z GUI: qrc:/qml/pages/settings/SettingsDesignSystem.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:54Z GUI: qrc:/qml/controls/TextFieldRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:54Z GUI: qrc:/qml/controls/ValueRow.qml: Cannot instantiate bound component outside its creation context
2026-08-20T22:43:54Z GUI: qrc:/qml/controls/ValueRow.qml: Cannot instantiate bound component outside its creation context from
Getting these errors in the new settings pages. I think its related to the Loaders in the FormRow. My suggestion is to remove the Loaders and use a different container and I think it should force constructing the pages in a way where this wont happen. This might be 6.4 specific too (ubuntu 24.04).
0262899 to
19c4c50
Compare
|
CI is happy now |
19c4c50 to
60f6f5c
Compare
60f6f5c to
e229df1
Compare
Introduce reusable SettingsPage, PageHeading, and FormSection controls. These provide constrained scrollable page content, consistent heading typography, and card-style sections with optional headers and footers. They are not wired into existing settings screens yet.
Add generic form, list, link, value, and textfield rows for settings screens. The controls provide consistent typography, dividers, disclosure indicators, disabled states, and composable leading, trailing, and body content. They are not wired into settings pages just yet.
Add PopupPicker, a compact control that composes a DropdownButton, ContextMenu, and ContextMenuPicker. The control displays the current selection and manages opening, selecting, and closing the menu. It is intended for composition as the trailing control of a FormRow rather than as a settings row itself. Extend ContextMenuPicker with optional leading icons and icon-aware layout for richer selection choices.
Update context-menu surfaces and hover states to use the revised neutral palette. Improve segmented-picker contrast in light mode and standardize disclosure indicators to the compact settings-row size.
Rework the design-system page to use SettingsPage, FormSection, and the generic row controls. Add representative examples for switches, pickers, navigation, values, links, inline text fields, and supporting content. Cover the shared form components and their composition with QML tests.
Add a settings sidebar and a container that lazily creates and preserves a navigation stack for each visited section.
Add a second Settings tab alongside the existing settings interface so the redesign can be reviewed while pages are migrated incrementally. Lazily create the redesigned settings view on first use and retain it across top-level tab switches to preserve its navigation state.
Populate the sidebar-based settings view with redesigned Wallet, External signer, Display, Window behavior, Storage, Connection, Network traffic, Mempool information, and About pages. Integrate Debug log into the same constrained page container. Compose the pages from the shared settings controls while preserving existing models, validation, actions, and nested navigation flows. Wire wallet-related actions back to the desktop wallet view. Suspend Network Traffic and Debug Log activity while their cached pages are hidden. Add QML coverage for section navigation, stack preservation, page layout, picker mappings, proxy draft handling, lifecycle behavior, and top-level destination creation.
Add a prominent Settings heading and organize sidebar destinations under Wallet, General, Network, and Advanced group labels.
Delete unused legacy settings pages and tests, update navigation and resource wiring, and migrate functional coverage to Settings v2.
Move the redesigned settings pages into the main settings directory and remove the settingsv2 prefix from QML object names and test selectors.
e229df1 to
776029d
Compare
| target: typeof walletController !== "undefined" ? walletController : null | ||
|
|
||
| function onSelectedWalletChanged() { | ||
| if (root.selectedSectionId === "wallet" && pageContainer.depth > 1) root.selectSection("wallet", true) |
There was a problem hiding this comment.
Open “Set password” for an unencrypted wallet, switch to Display, select an encrypted wallet, then return to Wallet. The cached password page retains updating: false while its wallet binding changes, so it attempts encryption instead of a password change. Unloading the wallet while another section is selected also leaves the subpage open. Reset the cached wallet stack independently of the selected section, and add regression coverage for switching and unloading wallets while that stack is hidden.
There was a problem hiding this comment.
Good catch. Should be fixed now.
Reset the wallet section stack when the selected wallet changes or is unloaded, even when another settings section is visible. This prevents cached wallet subpages from retaining state belonging to the previous wallet. Add regression coverage for switching and unloading wallets while the wallet settings stack is hidden.
johnny9
left a comment
There was a problem hiding this comment.
ACK bd137af
The reported regression is fixed: switching or unloading wallets pops cached wallet subpages without changing the selected settings section. Both added regression tests and the original reproduction checks pass.
Summary
The legacy settings pages evolved through several different layout systems, producing inconsistent widths, typography, spacing, navigation patterns, and information hierarchy. This redesign intends to consolidate them in to one coherent, reusable system.
Implementation details
FormSection,FormRow,ValueRow,LinkRow,TextFieldRow, andPopupPickerprovide consistent layout and interaction behavior.SettingsViewowns the fixed sidebar, destination definitions, visibility rules, and selected section.SettingsPageContainerlazily creates a navigation stack for each visited section and preserves nested navigation when switching sections.SettingsPagestandardizes page headings, scrolling, horizontal padding, and readable content widths.Preview
Settingsv2.mp4