diff --git a/components/RemoteNodeList.qml b/components/RemoteNodeList.qml
new file mode 100644
index 00000000..f8500d45
--- /dev/null
+++ b/components/RemoteNodeList.qml
@@ -0,0 +1,131 @@
+// Copyright (c) 2021, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import QtQuick 2.9
+import QtQuick.Layouts 1.1
+
+import FontAwesome 1.0
+
+import "." as MoneroComponents
+import "effects/" as MoneroEffects
+
+ColumnLayout {
+ id: remoteNodeList
+ spacing: 20
+
+ MoneroComponents.CheckBox {
+ border: false
+ checkedIcon: FontAwesome.minusCircle
+ uncheckedIcon: FontAwesome.plusCircle
+ fontAwesomeIcons: true
+ fontSize: 16
+ iconOnTheLeft: true
+ text: qsTr("Add remote node") + translationManager.emptyString
+ toggleOnClick: false
+ onClicked: remoteNodeDialog.add(remoteNodesModel.append)
+ }
+
+ ColumnLayout {
+ spacing: 0
+
+ Repeater {
+ model: remoteNodesModel
+
+ Rectangle {
+ height: 30
+ Layout.fillWidth: true
+ color: itemMouseArea.containsMouse || index === remoteNodesModel.selected ? MoneroComponents.Style.titleBarButtonHoverColor : "transparent"
+
+ Rectangle {
+ color: MoneroComponents.Style.appWindowBorderColor
+ anchors.right: parent.right
+ anchors.left: parent.left
+ anchors.top: parent.top
+ height: 1
+ visible: index > 0
+
+ MoneroEffects.ColorTransition {
+ targetObj: parent
+ blackColor: MoneroComponents.Style._b_appWindowBorderColor
+ whiteColor: MoneroComponents.Style._w_appWindowBorderColor
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.rightMargin: 80
+ color: "transparent"
+
+ MoneroComponents.TextPlain {
+ color: index === remoteNodesModel.selected ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 6
+ font.pixelSize: 16
+ text: address
+ themeTransition: false
+ }
+
+ MouseArea {
+ id: itemMouseArea
+ cursorShape: Qt.PointingHandCursor
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: remoteNodesModel.applyRemoteNode(index)
+ }
+ }
+
+ RowLayout {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 6
+ height: 30
+ spacing: 10
+
+ MoneroComponents.InlineButton {
+ buttonColor: "transparent"
+ fontFamily: FontAwesome.fontFamily
+ fontPixelSize: 18
+ text: FontAwesome.edit
+ onClicked: remoteNodeDialog.edit(remoteNodesModel.get(index), function (remoteNode) {
+ remoteNodesModel.set(index, remoteNode)
+ })
+ }
+
+ MoneroComponents.InlineButton {
+ buttonColor: "transparent"
+ fontFamily: FontAwesome.fontFamily
+ text: FontAwesome.times
+ visible: remoteNodesModel.count > 1
+ onClicked: remoteNodesModel.removeSelectNextIfNeeded(index)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/pages/settings/SettingsNode.qml b/pages/settings/SettingsNode.qml
index 6d2574c5..32ce336d 100644
--- a/pages/settings/SettingsNode.qml
+++ b/pages/settings/SettingsNode.qml
@@ -248,110 +248,16 @@ Rectangle{
}
}
- ColumnLayout {
- id: remoteNodeLayout
- anchors.margins: 0
- spacing: 20
- Layout.fillWidth: true
- Layout.topMargin: 20
+ MoneroComponents.WarningBox {
+ Layout.topMargin: 46
+ text: qsTr("To find a remote node, type 'Monero remote node' into your favorite search engine. Please ensure the node is run by a trusted third-party.") + translationManager.emptyString
visible: persistentSettings.useRemoteNode
+ }
- MoneroComponents.WarningBox {
- Layout.topMargin: 26
- Layout.bottomMargin: 6
- text: qsTr("To find a remote node, type 'Monero remote node' into your favorite search engine. Please ensure the node is run by a trusted third-party.") + translationManager.emptyString
- }
-
- MoneroComponents.CheckBox {
- border: false
- checkedIcon: FontAwesome.minusCircle
- uncheckedIcon: FontAwesome.plusCircle
- fontAwesomeIcons: true
- fontSize: 16
- iconOnTheLeft: true
- text: qsTr("Add remote node") + translationManager.emptyString
- toggleOnClick: false
- onClicked: remoteNodeDialog.add(remoteNodesModel.append)
- }
-
- ColumnLayout {
- spacing: 0
-
- Repeater {
- model: remoteNodesModel
-
- Rectangle {
- height: 30
- Layout.fillWidth: true
- color: itemMouseArea.containsMouse || index === remoteNodesModel.selected ? MoneroComponents.Style.titleBarButtonHoverColor : "transparent"
-
- Rectangle {
- color: MoneroComponents.Style.appWindowBorderColor
- anchors.right: parent.right
- anchors.left: parent.left
- anchors.top: parent.top
- height: 1
- visible: index > 0
-
- MoneroEffects.ColorTransition {
- targetObj: parent
- blackColor: MoneroComponents.Style._b_appWindowBorderColor
- whiteColor: MoneroComponents.Style._w_appWindowBorderColor
- }
- }
-
- Rectangle {
- anchors.fill: parent
- anchors.rightMargin: 80
- color: "transparent"
-
- MoneroComponents.TextPlain {
- color: index === remoteNodesModel.selected ? MoneroComponents.Style.defaultFontColor : MoneroComponents.Style.dimmedFontColor
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: 6
- font.pixelSize: 16
- text: address
- themeTransition: false
- }
-
- MouseArea {
- id: itemMouseArea
- cursorShape: Qt.PointingHandCursor
- anchors.fill: parent
- hoverEnabled: true
- onClicked: remoteNodesModel.applyRemoteNode(index)
- }
- }
-
- RowLayout {
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: 6
- height: 30
- spacing: 10
-
- MoneroComponents.InlineButton {
- buttonColor: "transparent"
- fontFamily: FontAwesome.fontFamily
- fontPixelSize: 18
- text: FontAwesome.edit
- onClicked: remoteNodeDialog.edit(remoteNodesModel.get(index), function (remoteNode) {
- remoteNodesModel.set(index, remoteNode)
- })
- }
-
- MoneroComponents.InlineButton {
- buttonColor: "transparent"
- fontFamily: FontAwesome.fontFamily
- text: FontAwesome.times
- visible: remoteNodesModel.count > 1
- onClicked: remoteNodesModel.removeSelectNextIfNeeded(index)
- }
- }
- }
- }
- }
+ MoneroComponents.RemoteNodeList {
+ Layout.fillWidth: true
+ Layout.topMargin: 26
+ visible: persistentSettings.useRemoteNode
}
ColumnLayout {
diff --git a/qml.qrc b/qml.qrc
index 4cc451cd..7dafe82f 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -9,6 +9,7 @@
components/Navbar.qml
components/NavbarItem.qml
components/RemoteNodeDialog.qml
+ components/RemoteNodeList.qml
components/SettingsListItem.qml
components/Slider.qml
components/Tooltip.qml
diff --git a/wizard/WizardDaemonSettings.qml b/wizard/WizardDaemonSettings.qml
index 98f46709..e4b37d9c 100644
--- a/wizard/WizardDaemonSettings.qml
+++ b/wizard/WizardDaemonSettings.qml
@@ -41,14 +41,7 @@ ColumnLayout {
spacing: 10
function save(){
- persistentSettings.useRemoteNode = remoteNode.checked
- const index = remoteNodesModel.appendIfNotExists({
- address: remoteNodeEdit.getAddress(),
- username: "",
- password: "",
- trusted: false,
- });
- remoteNodesModel.applyRemoteNode(index);
+ persistentSettings.useRemoteNode = remoteNode.checked;
if (bootstrapNodeEdit.daemonAddrText == "auto") {
persistentSettings.bootstrapNodeAddress = "auto";
} else {
@@ -196,18 +189,9 @@ ColumnLayout {
}
}
- ColumnLayout {
- visible: remoteNode.checked
- spacing: 0
-
- Layout.topMargin: 8
+ MoneroComponents.RemoteNodeList {
Layout.fillWidth: true
-
- MoneroComponents.RemoteNodeEdit {
- id: remoteNodeEdit
- Layout.fillWidth: true
-
- initialAddress: remoteNodesModel.currentRemoteNode().address
- }
+ Layout.topMargin: 8
+ visible: remoteNode.checked
}
}