diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 79a6fc2473..9dcb95c1f8 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -367,6 +367,7 @@ QML_RES_QML = \
qml/controls/NavButton.qml \
qml/controls/PageIndicator.qml \
qml/controls/NavigationBar.qml \
+ qml/controls/NavigationBar2.qml \
qml/controls/OptionButton.qml \
qml/controls/OptionSwitch.qml \
qml/controls/OutlineButton.qml \
diff --git a/src/qml/bitcoin_qml.qrc b/src/qml/bitcoin_qml.qrc
index 497df101d8..591615b1ca 100644
--- a/src/qml/bitcoin_qml.qrc
+++ b/src/qml/bitcoin_qml.qrc
@@ -28,6 +28,7 @@
controls/NavButton.qml
controls/PageIndicator.qml
controls/NavigationBar.qml
+ controls/NavigationBar2.qml
controls/OptionButton.qml
controls/OptionSwitch.qml
controls/OutlineButton.qml
diff --git a/src/qml/controls/NavigationBar2.qml b/src/qml/controls/NavigationBar2.qml
new file mode 100644
index 0000000000..53b963c601
--- /dev/null
+++ b/src/qml/controls/NavigationBar2.qml
@@ -0,0 +1,64 @@
+// Copyright (c) 2023 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
+
+Pane {
+ property alias leftItem: left_section.contentItem
+ property alias centerItem: center_section.contentItem
+ property alias rightItem: right_section.contentItem
+
+ background: null
+ padding: 4
+ contentItem: RowLayout {
+ Div {
+ id: left_div
+ Layout.preferredWidth: Math.floor(Math.max(left_div.implicitWidth, right_div.implicitWidth))
+ contentItem: RowLayout {
+ Section {
+ id: left_section
+ }
+ Spacer {
+ }
+ }
+ }
+ Section {
+ id: center_section
+ }
+ Div {
+ id: right_div
+ Layout.preferredWidth: Math.floor(Math.max(left_div.implicitWidth, right_div.implicitWidth))
+ contentItem: RowLayout {
+ Spacer {
+ }
+ Section {
+ id: right_section
+ }
+ }
+ }
+ }
+
+ component Div: Pane {
+ Layout.alignment: Qt.AlignCenter
+ Layout.fillWidth: true
+ Layout.minimumWidth: implicitWidth
+ background: null
+ padding: 0
+ }
+
+ component Section: Pane {
+ Layout.alignment: Qt.AlignCenter
+ Layout.minimumWidth: implicitWidth
+ background: null
+ padding: 0
+ }
+
+ component Spacer: Item {
+ Layout.alignment: Qt.AlignCenter
+ Layout.fillWidth: true
+ height: 1
+ }
+}
diff --git a/src/qml/pages/main.qml b/src/qml/pages/main.qml
index 99f84fe35c..581e9b42b4 100644
--- a/src/qml/pages/main.qml
+++ b/src/qml/pages/main.qml
@@ -82,22 +82,13 @@ ApplicationWindow {
interactive: false
orientation: Qt.Vertical
NodeRunner {
- navRightDetail: NavButton {
- iconSource: "image://images/gear"
- iconHeight: 24
- iconWidth: 24
- onClicked: node_swipe.incrementCurrentIndex()
+ onSettingsClicked: {
+ node_swipe.incrementCurrentIndex()
}
}
NodeSettings {
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: "Settings"
- }
- navRightDetail: NavButton {
- text: qsTr("Done")
- onClicked: node_swipe.decrementCurrentIndex()
+ onDoneClicked: {
+ node_swipe.decrementCurrentIndex()
}
}
}
diff --git a/src/qml/pages/node/NodeRunner.qml b/src/qml/pages/node/NodeRunner.qml
index dfea71e27c..2372983e21 100644
--- a/src/qml/pages/node/NodeRunner.qml
+++ b/src/qml/pages/node/NodeRunner.qml
@@ -9,11 +9,17 @@ import "../../controls"
import "../../components"
Page {
+ signal settingsClicked
+ id: root
background: null
clip: true
- property alias navRightDetail: navbar.rightDetail
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ rightItem: NavButton {
+ iconSource: "image://images/gear"
+ iconHeight: 24
+ iconWidth: 24
+ onClicked: root.settingsClicked()
+ }
}
Component.onCompleted: nodeModel.startNodeInitializionThread();
diff --git a/src/qml/pages/node/NodeSettings.qml b/src/qml/pages/node/NodeSettings.qml
index bdf10c4cb7..87a5f5de4b 100644
--- a/src/qml/pages/node/NodeSettings.qml
+++ b/src/qml/pages/node/NodeSettings.qml
@@ -10,28 +10,32 @@ import "../../components"
import "../settings"
Item {
- id: nodeSettings
- property alias navMiddleDetail: nodeSettingsView.navMiddleDetail
- property alias navRightDetail: nodeSettingsView.navRightDetail
+ signal doneClicked
+
+ id: root
StackView {
id: nodeSettingsView
- property alias navMiddleDetail: node_settings.navMiddleDetail
- property alias navRightDetail: node_settings.navRightDetail
anchors.fill: parent
initialItem: Page {
id: node_settings
- property alias navMiddleDetail: navbar.middleDetail
- property alias navRightDetail: navbar.rightDetail
background: null
implicitWidth: 450
leftPadding: 20
rightPadding: 20
topPadding: 30
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: "Settings"
+ }
+ rightItem: NavButton {
+ text: qsTr("Done")
+ onClicked: root.doneClicked()
+ }
}
ColumnLayout {
spacing: 4
@@ -138,17 +142,8 @@ Item {
Component {
id: display_page
SettingsDisplay {
- navLeftDetail: NavButton {
- iconSource: "image://images/caret-left"
- text: qsTr("Back")
- onClicked: {
- nodeSettingsView.pop()
- }
- }
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: qsTr("Display settings")
+ onBackClicked: {
+ nodeSettingsView.pop()
}
}
}
@@ -191,18 +186,9 @@ Item {
Component {
id: peers_page
Peers {
- navLeftDetail: NavButton {
- iconSource: "image://images/caret-left"
- text: qsTr("Back")
- onClicked: {
- nodeSettingsView.pop()
- peerTableModel.stopAutoRefresh();
- }
- }
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: qsTr("Peers")
+ onBackClicked: {
+ nodeSettingsView.pop()
+ peerTableModel.stopAutoRefresh();
}
}
}
diff --git a/src/qml/pages/node/Peers.qml b/src/qml/pages/node/Peers.qml
index 2dca9afa42..bd666f0d5f 100644
--- a/src/qml/pages/node/Peers.qml
+++ b/src/qml/pages/node/Peers.qml
@@ -9,12 +9,22 @@ import "../../controls"
import "../../components"
Page {
+ signal backClicked
+
+ id: root
background: null
- property alias navLeftDetail: navbar.leftDetail
- property alias navMiddleDetail: navbar.middleDetail
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ leftItem: NavButton {
+ iconSource: "image://images/caret-left"
+ text: qsTr("Back")
+ onClicked: root.backClicked()
+ }
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: qsTr("Peers")
+ }
}
ListView {
diff --git a/src/qml/pages/settings/SettingsBlockClockDisplayMode.qml b/src/qml/pages/settings/SettingsBlockClockDisplayMode.qml
index 25196d1336..49c3badfc0 100644
--- a/src/qml/pages/settings/SettingsBlockClockDisplayMode.qml
+++ b/src/qml/pages/settings/SettingsBlockClockDisplayMode.qml
@@ -9,17 +9,26 @@ import "../../controls"
import "../../components"
Page {
- property alias navLeftDetail: navbar.leftDetail
- property alias navMiddleDetail: navbar.middleDetail
+ signal backClicked
+ id: root
background: null
implicitWidth: 450
leftPadding: 20
rightPadding: 20
topPadding: 30
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ leftItem: NavButton {
+ iconSource: "image://images/caret-left"
+ text: qsTr("Back")
+ onClicked: root.backClicked()
+ }
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: qsTr("Block clock display mode")
+ }
}
BlockClockDisplayMode {
width: Math.min(parent.width, 450)
diff --git a/src/qml/pages/settings/SettingsConnection.qml b/src/qml/pages/settings/SettingsConnection.qml
index 71c9c57a9b..9ff9094f11 100644
--- a/src/qml/pages/settings/SettingsConnection.qml
+++ b/src/qml/pages/settings/SettingsConnection.qml
@@ -34,17 +34,8 @@ Item {
detailItem: ConnectionSettings {}
}
SettingsProxy {
- navLeftDetail: NavButton {
- iconSource: "image://images/caret-left"
- text: qsTr("Back")
- onClicked: {
- connectionSwipe.decrementCurrentIndex()
- }
- }
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: qsTr("Proxy Settings")
+ onBackClicked: {
+ connectionSwipe.decrementCurrentIndex()
}
}
}
diff --git a/src/qml/pages/settings/SettingsDisplay.qml b/src/qml/pages/settings/SettingsDisplay.qml
index 97455a51bd..fc95b55e05 100644
--- a/src/qml/pages/settings/SettingsDisplay.qml
+++ b/src/qml/pages/settings/SettingsDisplay.qml
@@ -9,28 +9,33 @@ import "../../controls"
import "../../components"
Item {
- property alias navLeftDetail: displaySettingsView.navLeftDetail
- property alias navMiddleDetail: displaySettingsView.navMiddleDetail
+ signal backClicked
+
+ id: root
+
StackView {
id: displaySettingsView
- property alias navLeftDetail: displaySettings.navLeftDetail
- property alias navMiddleDetail: displaySettings.navMiddleDetail
- property bool newcompilebool: false
anchors.fill: parent
-
initialItem: Page {
id: displaySettings
- property alias navLeftDetail: navbar.leftDetail
- property alias navMiddleDetail: navbar.middleDetail
background: null
implicitWidth: 450
leftPadding: 20
rightPadding: 20
topPadding: 30
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ leftItem: NavButton {
+ iconSource: "image://images/caret-left"
+ text: qsTr("Back")
+ onClicked: root.backClicked()
+ }
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: qsTr("Display settings")
+ }
}
ColumnLayout {
spacing: 4
@@ -65,34 +70,16 @@ Item {
Component {
id: theme_page
SettingsTheme {
- navLeftDetail: NavButton {
- iconSource: "image://images/caret-left"
- text: qsTr("Back")
- onClicked: {
- nodeSettingsView.pop()
- }
- }
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: qsTr("Theme")
+ onBackClicked: {
+ nodeSettingsView.pop()
}
}
}
Component {
id: blockclocksize_page
SettingsBlockClockDisplayMode {
- navLeftDetail: NavButton {
- iconSource: "image://images/caret-left"
- text: qsTr("Back")
- onClicked: {
- nodeSettingsView.pop()
- }
- }
- navMiddleDetail: Header {
- headerBold: true
- headerSize: 18
- header: qsTr("Block clock display mode")
+ onBackClicked: {
+ nodeSettingsView.pop()
}
}
}
diff --git a/src/qml/pages/settings/SettingsProxy.qml b/src/qml/pages/settings/SettingsProxy.qml
index 1f31e1524d..ce8a906f10 100644
--- a/src/qml/pages/settings/SettingsProxy.qml
+++ b/src/qml/pages/settings/SettingsProxy.qml
@@ -9,9 +9,9 @@ import "../../controls"
import "../../components"
Page {
- id: proxy_settings
- property alias navLeftDetail: navbar.leftDetail
- property alias navMiddleDetail: navbar.middleDetail
+ signal backClicked
+
+ id: root
background: null
implicitWidth: 450
@@ -19,8 +19,17 @@ Page {
rightPadding: 20
topPadding: 30
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ leftItem: NavButton {
+ iconSource: "image://images/caret-left"
+ text: qsTr("Back")
+ onClicked: root.backClicked()
+ }
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: qsTr("Proxy Settings")
+ }
}
ProxySettings {
width: Math.min(parent.width, 450)
diff --git a/src/qml/pages/settings/SettingsTheme.qml b/src/qml/pages/settings/SettingsTheme.qml
index 1a885c5315..a65cd31881 100644
--- a/src/qml/pages/settings/SettingsTheme.qml
+++ b/src/qml/pages/settings/SettingsTheme.qml
@@ -9,17 +9,26 @@ import "../../controls"
import "../../components"
Page {
- property alias navLeftDetail: navbar.leftDetail
- property alias navMiddleDetail: navbar.middleDetail
+ signal backClicked
+ id: root
background: null
implicitWidth: 450
leftPadding: 20
rightPadding: 20
topPadding: 30
- header: NavigationBar {
- id: navbar
+ header: NavigationBar2 {
+ leftItem: NavButton {
+ iconSource: "image://images/caret-left"
+ text: qsTr("Back")
+ onClicked: root.backClicked()
+ }
+ centerItem: Header {
+ headerBold: true
+ headerSize: 18
+ header: qsTr("Theme")
+ }
}
ThemeSettings {
width: Math.min(parent.width, 450)