diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index c32b022ee8..f65fd164a0 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -343,6 +343,8 @@ QML_RES_QML = \ qml/controls/ValueInput.qml \ qml/pages/initerrormessage.qml \ qml/pages/main.qml \ + qml/pages/node/NodeRunner.qml \ + qml/pages/node/NodeSettings.qml \ qml/pages/onboarding/OnboardingBlockclock.qml \ qml/pages/onboarding/OnboardingConnection.qml \ qml/pages/onboarding/OnboardingCover.qml \ diff --git a/src/qml/bitcoin_qml.qrc b/src/qml/bitcoin_qml.qrc index 28e716d544..86a5afe6da 100644 --- a/src/qml/bitcoin_qml.qrc +++ b/src/qml/bitcoin_qml.qrc @@ -26,6 +26,8 @@ controls/ValueInput.qml pages/initerrormessage.qml pages/main.qml + pages/node/NodeRunner.qml + pages/node/NodeSettings.qml pages/onboarding/OnboardingBlockclock.qml pages/onboarding/OnboardingConnection.qml pages/onboarding/OnboardingCover.qml diff --git a/src/qml/components/AboutOptions.qml b/src/qml/components/AboutOptions.qml index 5408d68e51..ec512bf9b2 100644 --- a/src/qml/components/AboutOptions.qml +++ b/src/qml/components/AboutOptions.qml @@ -56,7 +56,7 @@ ColumnLayout { icon.width: 18 background: null onClicked: { - introductions.incrementCurrentIndex() + aboutSwipe.incrementCurrentIndex() } } } diff --git a/src/qml/pages/main.qml b/src/qml/pages/main.qml index 008782cf0a..c37825370a 100644 --- a/src/qml/pages/main.qml +++ b/src/qml/pages/main.qml @@ -8,6 +8,7 @@ import QtQuick.Layouts 1.15 import "../components" import "../controls" import "./onboarding" +import "./node" ApplicationWindow { id: appWindow @@ -44,30 +45,29 @@ ApplicationWindow { Component { id: node - Page { + SwipeView { + id: node_swipe anchors.fill: parent - background: null - ColumnLayout { - width: 600 - spacing: 0 - anchors.centerIn: parent - Component.onCompleted: nodeModel.startNodeInitializionThread(); - Image { - Layout.alignment: Qt.AlignCenter - source: "image://images/app" - sourceSize.width: 64 - sourceSize.height: 64 + interactive: false + orientation: Qt.Vertical + NodeRunner { + navRightDetail: NavButton { + iconSource: "image://images/gear" + iconHeight: 24 + onClicked: node_swipe.incrementCurrentIndex() } - BlockCounter { - Layout.alignment: Qt.AlignCenter - blockHeight: nodeModel.blockTipHeight + } + NodeSettings { + navMiddleDetail: Header { + bold: true + headerSize: 18 + header: "Settings" } - ProgressIndicator { - width: 200 - Layout.alignment: Qt.AlignCenter - progress: nodeModel.verificationProgress + navRightDetail: NavButton { + text: qsTr("Done") + onClicked: node_swipe.decrementCurrentIndex() } } - } + } } } diff --git a/src/qml/pages/node/NodeRunner.qml b/src/qml/pages/node/NodeRunner.qml new file mode 100644 index 0000000000..161289dc29 --- /dev/null +++ b/src/qml/pages/node/NodeRunner.qml @@ -0,0 +1,43 @@ +// Copyright (c) 2022 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 QtQuick.Layouts 1.15 +import "../../controls" +import "../../components" + +Page { + background: null + clip: true + property alias navRightDetail: navbar.rightDetail + header: NavigationBar { + id: navbar + } + ColumnLayout { + spacing: 0 + anchors.fill: parent + ColumnLayout { + width: 600 + spacing: 0 + anchors.centerIn: parent + Component.onCompleted: nodeModel.startNodeInitializionThread(); + Image { + Layout.alignment: Qt.AlignCenter + source: "image://images/app" + sourceSize.width: 64 + sourceSize.height: 64 + } + BlockCounter { + Layout.alignment: Qt.AlignCenter + blockHeight: nodeModel.blockTipHeight + } + ProgressIndicator { + width: 200 + Layout.alignment: Qt.AlignCenter + progress: nodeModel.verificationProgress + } + } + } +} diff --git a/src/qml/pages/node/NodeSettings.qml b/src/qml/pages/node/NodeSettings.qml new file mode 100644 index 0000000000..445c8ac2af --- /dev/null +++ b/src/qml/pages/node/NodeSettings.qml @@ -0,0 +1,120 @@ +// Copyright (c) 2022 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 QtQuick.Layouts 1.15 +import "../../controls" +import "../../components" +import "../settings" + +Item { + id: nodeSettings + property alias navMiddleDetail: nodeSettingsView.navMiddleDetail + property alias navRightDetail: nodeSettingsView.navRightDetail + StackView { + id: nodeSettingsView + property alias navMiddleDetail: node_settings.navMiddleDetail + property alias navRightDetail: node_settings.navRightDetail + initialItem: Page { + id: node_settings + property alias navMiddleDetail: navbar.middleDetail + property alias navRightDetail: navbar.rightDetail + background: null + header: NavigationBar { + id: navbar + } + ColumnLayout { + spacing: 0 + width: parent.width + ColumnLayout { + spacing: 20 + Layout.maximumWidth: 450 + Layout.topMargin: 30 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Layout.alignment: Qt.AlignCenter + Setting { + Layout.fillWidth: true + header: qsTr("Dark Mode") + actionItem: OptionSwitch { + checked: Theme.dark + onToggled: Theme.toggleDark() + } + } + Setting { + Layout.fillWidth: true + header: qsTr("About") + actionItem: NavButton { + iconSource: "image://images/caret-right" + background: null + onClicked: { + nodeSettingsView.push(about_page) + } + } + } + Setting { + Layout.fillWidth: true + header: qsTr("Storage") + actionItem: NavButton { + iconSource: "image://images/caret-right" + background: null + onClicked: { + nodeSettingsView.push(storage_page) + } + } + } + Setting { + Layout.fillWidth: true + header: qsTr("Connection") + actionItem: NavButton { + iconSource: "image://images/caret-right" + background: null + onClicked: { + nodeSettingsView.push(connection_page) + } + } + } + } + } + } + anchors.fill: parent + } + Component { + id: about_page + SettingsAbout { + navLeftDetail: NavButton { + iconSource: "image://images/caret-left" + text: qsTr("Back") + onClicked: { + nodeSettingsView.pop() + } + } + } + } + Component { + id: storage_page + SettingsStorage { + navLeftDetail: NavButton { + iconSource: "image://images/caret-left" + text: qsTr("Back") + onClicked: { + nodeSettingsView.pop() + } + } + } + } + Component { + id: connection_page + SettingsConnection { + navLeftDetail: NavButton { + iconSource: "image://images/caret-left" + text: qsTr("Back") + onClicked: { + nodeSettingsView.pop() + } + } + } + } +} diff --git a/src/qml/pages/onboarding/OnboardingCover.qml b/src/qml/pages/onboarding/OnboardingCover.qml index 759638f97e..8e4312ad9c 100644 --- a/src/qml/pages/onboarding/OnboardingCover.qml +++ b/src/qml/pages/onboarding/OnboardingCover.qml @@ -52,14 +52,5 @@ Page { } } } - SettingsDeveloper { - navLeftDetail: NavButton { - iconSource: "image://images/caret-left" - text: qsTr("Back") - onClicked: { - introductions.decrementCurrentIndex() - } - } - } } } diff --git a/src/qml/pages/settings/SettingsAbout.qml b/src/qml/pages/settings/SettingsAbout.qml index 4f74b2c88d..d6f9e98199 100644 --- a/src/qml/pages/settings/SettingsAbout.qml +++ b/src/qml/pages/settings/SettingsAbout.qml @@ -8,19 +8,40 @@ import QtQuick.Layouts 1.15 import "../../controls" import "../../components" -InformationPage { - bannerActive: false - bold: true - headerText: qsTr("About") - headerMargin: 0 - description: qsTr("Bitcoin Core is an open source project.\nIf you find it useful, please contribute.\n\n This is experimental software.") - descriptionMargin: 20 - detailActive: true - detailItem: ColumnLayout { - spacing: 0 - AboutOptions { - Layout.maximumWidth: 450 - Layout.alignment: Qt.AlignCenter +Item { + property alias navLeftDetail: aboutSwipe.navLeftDetail + SwipeView { + id: aboutSwipe + property alias navLeftDetail: about_settings.navLeftDetail + anchors.fill: parent + interactive: false + orientation: Qt.Horizontal + InformationPage { + id: about_settings + bannerActive: false + bannerMargin: 0 + bold: true + headerText: qsTr("About") + headerMargin: 0 + description: qsTr("Bitcoin Core is an open source project.\nIf you find it useful, please contribute.\n\n This is experimental software.") + descriptionMargin: 20 + detailActive: true + detailItem: ColumnLayout { + spacing: 0 + AboutOptions { + Layout.maximumWidth: 450 + Layout.alignment: Qt.AlignCenter + } + } + } + SettingsDeveloper { + navLeftDetail: NavButton { + iconSource: "image://images/caret-left" + text: qsTr("Back") + onClicked: { + aboutSwipe.decrementCurrentIndex() + } + } } } }