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)