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
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.
60f6f5c to
e229df1
Compare
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