aboutsummaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2021-04-06 11:35:23 -0500
committerluigi1111 <luigi1111w@gmail.com>2021-04-06 11:35:23 -0500
commit183585653f70e6ca66a043c42fdd825f1899c1c4 (patch)
tree7ade514c4de7e118b1208c3df6264fa6a16232e7 /components
parentba7eeb12c506d67703cc57752167470567dae74f (diff)
parent6bc96270469294d6ddfedf16ff166c49079491be (diff)
downloadmonzero-gui-183585653f70e6ca66a043c42fdd825f1899c1c4.tar.gz
monzero-gui-183585653f70e6ca66a043c42fdd825f1899c1c4.tar.xz
monzero-gui-183585653f70e6ca66a043c42fdd825f1899c1c4.zip
Merge pull request #3373
6bc9627 SettingsNode: implement multiple remote nodes support (xiphon)
Diffstat (limited to 'components')
-rw-r--r--components/Dialog.qml66
-rw-r--r--components/RemoteNodeDialog.qml153
2 files changed, 219 insertions, 0 deletions
diff --git a/components/Dialog.qml b/components/Dialog.qml
new file mode 100644
index 00000000..7853788f
--- /dev/null
+++ b/components/Dialog.qml
@@ -0,0 +1,66 @@
+// 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.Controls 2.2
+import QtQuick.Layouts 1.1
+
+import "." as MoneroComponents
+
+Popup {
+ id: dialog
+
+ default property alias content: mainLayout.children
+ property alias title: header.text
+
+ background: Rectangle {
+ border.color: MoneroComponents.Style.blackTheme ? Qt.rgba(255, 255, 255, 0.25) : Qt.rgba(0, 0, 0, 0.25)
+ border.width: 1
+ color: MoneroComponents.Style.blackTheme ? "black" : "white"
+ radius: 10
+ }
+ closePolicy: Popup.CloseOnEscape
+ focus: true
+ padding: 20
+ x: (appWindow.width - width) / 2
+ y: (appWindow.height - height) / 2
+
+ ColumnLayout {
+ id: mainLayout
+ spacing: dialog.padding
+
+ Text {
+ id: header
+ color: MoneroComponents.Style.defaultFontColor
+ font.bold: true
+ font.family: MoneroComponents.Style.fontRegular.name
+ font.pixelSize: 18
+ visible: text != ""
+ }
+ }
+}
diff --git a/components/RemoteNodeDialog.qml b/components/RemoteNodeDialog.qml
new file mode 100644
index 00000000..30383d44
--- /dev/null
+++ b/components/RemoteNodeDialog.qml
@@ -0,0 +1,153 @@
+// 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.Controls 2.2
+import QtQuick.Layouts 1.1
+
+import "." as MoneroComponents
+
+MoneroComponents.Dialog {
+ id: root
+ title: (editMode ? qsTr("Edit remote node") : qsTr("Add remote node")) + translationManager.emptyString
+
+ property var callbackOnSuccess: null
+ property bool editMode: false
+ property bool success: false
+
+ onActiveFocusChanged: activeFocus && remoteNodeAddress.forceActiveFocus()
+
+ function add(callbackOnSuccess) {
+ root.editMode = false;
+ root.callbackOnSuccess = callbackOnSuccess;
+
+ open();
+ }
+
+ function edit(remoteNode, callbackOnSuccess) {
+ const hostPort = remoteNode.address.match(/^(.*?)(?:\:?(\d*))$/);
+ if (hostPort) {
+ remoteNodeAddress.daemonAddrText = hostPort[1];
+ remoteNodeAddress.daemonPortText = hostPort[2];
+ }
+ daemonUsername.text = remoteNode.username;
+ daemonPassword.text = remoteNode.password;
+ setTrustedDaemonCheckBox.checked = remoteNode.trusted;
+ root.callbackOnSuccess = callbackOnSuccess;
+ root.editMode = true;
+
+ open();
+ }
+
+ onClosed: {
+ if (root.success && callbackOnSuccess) {
+ callbackOnSuccess({
+ address: remoteNodeAddress.getAddress(),
+ username: daemonUsername.text,
+ password: daemonPassword.text,
+ trusted: setTrustedDaemonCheckBox.checked,
+ });
+ }
+
+ remoteNodeAddress.daemonAddrText = "";
+ remoteNodeAddress.daemonPortText = "";
+ daemonUsername.text = "";
+ daemonPassword.text = "";
+ setTrustedDaemonCheckBox.checked = false;
+ root.success = false;
+ }
+
+ MoneroComponents.RemoteNodeEdit {
+ id: remoteNodeAddress
+ Layout.fillWidth: true
+ placeholderFontSize: 15
+
+ daemonAddrLabelText: qsTr("Address") + translationManager.emptyString
+ daemonPortLabelText: qsTr("Port") + translationManager.emptyString
+ }
+
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: 32
+
+ MoneroComponents.LineEdit {
+ id: daemonUsername
+ Layout.fillWidth: true
+ Layout.minimumWidth: 220
+ labelText: qsTr("Daemon username") + translationManager.emptyString
+ placeholderText: qsTr("(optional)") + translationManager.emptyString
+ placeholderFontSize: 15
+ labelFontSize: 14
+ fontSize: 15
+ }
+
+ MoneroComponents.LineEdit {
+ id: daemonPassword
+ Layout.fillWidth: true
+ Layout.minimumWidth: 220
+ labelText: qsTr("Daemon password") + translationManager.emptyString
+ placeholderText: qsTr("Password") + translationManager.emptyString
+ password: true
+ placeholderFontSize: 15
+ labelFontSize: 14
+ fontSize: 15
+ }
+ }
+
+ MoneroComponents.CheckBox {
+ id: setTrustedDaemonCheckBox
+ activeFocusOnTab: true
+ text: qsTr("Mark as Trusted Daemon") + translationManager.emptyString
+ }
+
+ RowLayout {
+ Layout.alignment: Qt.AlignRight
+ spacing: parent.spacing
+
+ MoneroComponents.StandardButton {
+ activeFocusOnTab: true
+ fontBold: false
+ primary: false
+ text: qsTr("Cancel") + translationManager.emptyString
+
+ onClicked: root.close()
+ }
+
+ MoneroComponents.StandardButton {
+ activeFocusOnTab: true
+ fontBold: false
+ enabled: remoteNodeAddress.getAddress() != ""
+ text: qsTr("Ok") + translationManager.emptyString
+
+ onClicked: {
+ root.success = true;
+ root.close();
+ }
+ }
+ }
+}