Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 23 additions & 12 deletions qml/bitcoin_qml.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
<file>components/BitcoinAmountDisplayField.qml</file>
<file>components/BitcoinAmountInputField.qml</file>
<file>components/BlockClock.qml</file>
<file>components/BlockClockDisplayMode.qml</file>
<file>components/BlockCounter.qml</file>
<file>components/ConnectionOptions.qml</file>
<file>components/ConnectionSettings.qml</file>
Expand All @@ -33,12 +32,14 @@
<file>components/OptionPopup.qml</file>
<file>components/PeersIndicator.qml</file>
<file>components/ProxySettings.qml</file>
<file>components/SettingsPageContainer.qml</file>
<file>components/SettingsRestartNotice.qml</file>
<file>components/SettingsSidebar.qml</file>
<file>components/SettingsView.qml</file>
<file>components/StorageLocations.qml</file>
<file>components/Separator.qml</file>
<file>components/StorageOptions.qml</file>
<file>components/StorageSettings.qml</file>
<file>components/ThemeSettings.qml</file>
<file>components/ToastBanner.qml</file>
<file>components/ToastPopup.qml</file>
<file>components/TotalBytesIndicator.qml</file>
Expand All @@ -50,7 +51,6 @@
<file>components/LabeledValueField.qml</file>
<file>components/MultipleRecipientsSummary.qml</file>
<file>components/SingleRecipientSummary.qml</file>
<file>components/WalletSettings.qml</file>
<file>components/WalletMigrationPopup.qml</file>
<file>components/WalletPassphrasePopup.qml</file>
<file>controls/AddWalletButton.qml</file>
Expand All @@ -68,11 +68,15 @@
<file>controls/EditableKeyValueRow.qml</file>
<file>controls/ExternalLink.qml</file>
<file>controls/FocusBorder.qml</file>
<file>controls/FormRow.qml</file>
<file>controls/FormSection.qml</file>
<file>controls/Header.qml</file>
<file>controls/Icon.qml</file>
<file>controls/IconButton.qml</file>
<file>controls/InformationPage.qml</file>
<file>controls/KeyValueRow.qml</file>
<file>controls/LinkRow.qml</file>
<file>controls/ListRow.qml</file>
<file>controls/LabeledTextInput.qml</file>
<file>controls/LabeledCoinControlButton.qml</file>
<file>controls/NavButton.qml</file>
Expand All @@ -83,7 +87,9 @@
<file>controls/OptionSwitch.qml</file>
<file>controls/OutlineButton.qml</file>
<file>controls/PageIndicator.qml</file>
<file>controls/PageHeading.qml</file>
<file>controls/PageStack.qml</file>
<file>controls/PopupPicker.qml</file>
<file>controls/ProgressIndicator.qml</file>
<file>controls/ProxyLocationInput.qml</file>
<file>controls/QRImage.qml</file>
Expand All @@ -93,23 +99,24 @@
<file>controls/SegmentedPicker.qml</file>
<file>controls/Setting.qml</file>
<file>controls/SettingsHeader.qml</file>
<file>controls/SettingsPage.qml</file>
<file>controls/Skeleton.qml</file>
<file>controls/SpinningIndicator.qml</file>
<file>controls/TextButton.qml</file>
<file>controls/TextFieldRow.qml</file>
<file>controls/Theme.qml</file>
<file>controls/ToggleButton.qml</file>
<file>controls/utils.js</file>
<file>controls/ValueInput.qml</file>
<file>controls/ValueRow.qml</file>
<file>controls/WalletTypeListItem.qml</file>
<file>pages/initerrormessage.qml</file>
<file>pages/MainWindow.qml</file>
<file>pages/preinit.qml</file>
<file>pages/node/BannedPeers.qml</file>
<file>pages/node/CommandConsole.qml</file>
<file>pages/node/NetworkTraffic.qml</file>
<file>pages/node/MempoolInformationSettings.qml</file>
<file>pages/node/NodeRunner.qml</file>
<file>pages/node/NodeSettings.qml</file>
<file>pages/node/Peers.qml</file>
<file>pages/node/PeerDetails.qml</file>
<file>pages/node/Shutdown.qml</file>
Expand All @@ -121,19 +128,24 @@
<file>pages/onboarding/OnboardingStrengthen.qml</file>
<file>pages/onboarding/OnboardingWizard.qml</file>
<file>pages/settings/SettingsAbout.qml</file>
<file>pages/settings/SettingsDisplayUnit.qml</file>
<file>pages/settings/SettingsLanguage.qml</file>
<file>pages/settings/SettingsWindowBehavior.qml</file>
<file>pages/settings/SettingsBlockClockDisplayMode.qml</file>
<file>pages/settings/SettingsConnection.qml</file>
<file>pages/settings/SettingsDebugLog.qml</file>
<file>pages/settings/SettingsDesignSystem.qml</file>
<file>pages/settings/SettingsDeveloper.qml</file>
<file>pages/settings/SettingsDisplay.qml</file>
<file>pages/settings/SettingsProxy.qml</file>
<file>pages/settings/SettingsWallet.qml</file>
<file>pages/settings/SettingsStorage.qml</file>
<file>pages/settings/SettingsTheme.qml</file>
<file>pages/settings/AboutSettingsPage.qml</file>
<file>pages/settings/ConnectionSettingsPage.qml</file>
<file>pages/settings/DisplaySettingsPage.qml</file>
<file>pages/settings/ExternalSignerSettingsPage.qml</file>
<file>pages/settings/MempoolSettingsPage.qml</file>
<file>pages/settings/NetworkTrafficSettingsPage.qml</file>
<file>pages/settings/ProxySettingsPage.qml</file>
<file>pages/settings/RpcConsoleSettingsPage.qml</file>
<file>pages/settings/StorageSettingsPage.qml</file>
<file>pages/settings/WalletSectionPage.qml</file>
<file>pages/settings/WindowBehaviorSettingsPage.qml</file>
<file>pages/wallet/Activity.qml</file>
<file>pages/wallet/ActivityDetails.qml</file>
<file>pages/wallet/ActivityTransactionVisuals.qml</file>
Expand Down Expand Up @@ -163,7 +175,6 @@
<file>pages/wallet/SignVerifyMessage.qml</file>
<file>pages/wallet/WalletBadge.qml</file>
<file>pages/wallet/WalletPasswordSettings.qml</file>
<file>pages/wallet/WalletSettings.qml</file>
<file>pages/wallet/WalletSelect.qml</file>
</qresource>
<qresource prefix="/icons">
Expand Down
41 changes: 0 additions & 41 deletions qml/components/BlockClockDisplayMode.qml

This file was deleted.

107 changes: 107 additions & 0 deletions qml/components/SettingsPageContainer.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
// Copyright (c) 2026 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

import QtQuick 2.15
import QtQuick.Controls 2.15

import "../controls"

Page {
id: root

readonly property string currentSectionId: internal.currentSectionId
readonly property int depth: internal.currentStack ? internal.currentStack.depth : 0
readonly property bool canGoBack: internal.currentStack ? internal.currentStack.canGoBack : false
readonly property var currentItem: internal.currentStack ? internal.currentStack.currentItem : null
readonly property var stack: internal.currentStack

signal sectionChanged(string sectionId)

function showSection(sectionId, page, properties) {
if (!page) {
if (internal.currentStack) internal.currentStack.visible = false
internal.currentStack = null
internal.currentSectionId = ""
root.sectionChanged("")
return null
}

if (sectionId === root.currentSectionId && internal.currentStack) {
return internal.currentStack.currentItem
}

let nextStack = internal.sectionStacks[sectionId]
if (!nextStack) {
nextStack = sectionStackComponent.createObject(stackHost, {
"sectionId": sectionId
})
if (!nextStack) return null

const nextSectionStacks = {}
for (const cachedSectionId in internal.sectionStacks) {
nextSectionStacks[cachedSectionId] = internal.sectionStacks[cachedSectionId]
}
nextSectionStacks[sectionId] = nextStack
internal.sectionStacks = nextSectionStacks
nextStack.push(page, properties || {}, StackView.Immediate)
}

if (internal.currentStack) internal.currentStack.visible = false
internal.currentStack = nextStack
internal.currentSectionId = sectionId
nextStack.visible = true
root.sectionChanged(sectionId)
return nextStack.currentItem
}

function push(page, properties) {
if (!page || !internal.currentStack) return null
return internal.currentStack.push(page, properties || {})
}

function pop() {
if (!internal.currentStack || !internal.currentStack.canGoBack) return null
return internal.currentStack.pop()
}

function clear() {
const sectionStacks = internal.sectionStacks
if (internal.currentStack) internal.currentStack.visible = false
internal.currentStack = null
internal.currentSectionId = ""
internal.sectionStacks = ({})

for (const sectionId in sectionStacks) {
sectionStacks[sectionId].clear(StackView.Immediate)
sectionStacks[sectionId].destroy()
}
root.sectionChanged("")
}

background: null
clip: true

QtObject {
id: internal
property string currentSectionId: ""
property var currentStack: null
property var sectionStacks: ({})
}

Item {
id: stackHost
anchors.fill: parent
}

Component {
id: sectionStackComponent

PageStack {
required property string sectionId
objectName: "settingsNavigationStack_" + sectionId
anchors.fill: parent
visible: false
}
}
}
Loading
Loading