diff --git a/pages/Transfer.qml b/pages/Transfer.qml index 2647dbaf..ae6ab7fa 100644 --- a/pages/Transfer.qml +++ b/pages/Transfer.qml @@ -29,6 +29,7 @@ import QtQuick 2.0 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.2 +import moneroComponents.Clipboard 1.0 import moneroComponents.PendingTransaction 1.0 import moneroComponents.Wallet 1.0 import "../components" @@ -45,13 +46,7 @@ Rectangle { property string startLinkText: qsTr(" (Start daemon)") + translationManager.emptyString property bool showAdvanced: false - Image { - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - height: panel.height - source: "../images/leftPanelBg.jpg" - } + Clipboard { id: clipboard } function scaleValueToMixinCount(scaleValue) { var scaleToMixinCount = [6,7,8,9,10,11,12,13,14,16,18,20,22,25]; @@ -118,36 +113,22 @@ Rectangle { ColumnLayout { id: pageRoot - anchors.top: parent.top + anchors.margins: (isMobile)? 17 : 40 + anchors.topMargin: 40 * scaleRatio + anchors.left: parent.left + anchors.top: parent.top anchors.right: parent.right - anchors.margins: 17 * scaleRatio - spacing: 0 - RowLayout{ - Layout.fillWidth: true - Layout.bottomMargin: 20 - height: 150 - - Text { - id: panelHeader - font.family: Style.fontMedium.name - font.pixelSize: 32 * scaleRatio - color: "#FFFFFF" - text: "Send" - height: 150 - } - } + spacing: 20 * scaleRatio GridLayout { columns: (isMobile)? 1 : 2 Layout.fillWidth: true + columnSpacing: 48 + ColumnLayout { Layout.fillWidth: true - Label { - id: amountLabel - text: qsTr("Amount") + translationManager.emptyString - } RowLayout { Layout.fillWidth: true @@ -159,6 +140,7 @@ Rectangle { id: amountLine Layout.fillWidth: true inlineIcon: true + labelText: qsTr("Amount") + translationManager.emptyString placeholderText: qsTr("") + translationManager.emptyString width: 100 inlineButtonText: qsTr("All") + translationManager.emptyString @@ -186,20 +168,7 @@ Rectangle { // ListElement { column1: qsTr("LOW") + translationManager.emptyString ; column2: ""; priority: PendingTransaction.Priority_Low } // For translations to work, the strings need to be listed in // the file components/StandardDropdown.qml too. -<<<<<<< HEAD - -======= - // Priorities before v5 - ListModel { - id: priorityModel - - ListElement { column1: qsTr("Low (x1 fee)") ; column2: ""; priority: PendingTransaction.Priority_Low } - ListElement { column1: qsTr("Medium (x20 fee)") ; column2: ""; priority: PendingTransaction.Priority_Medium } - ListElement { column1: qsTr("High (x166 fee)") ; column2: ""; priority: PendingTransaction.Priority_High } - } - ->>>>>>> InlineButton development // Priorites after v5 ListModel { id: priorityModelV5 @@ -209,7 +178,6 @@ Rectangle { ListElement { column1: qsTr("Normal (x1 fee)") ; column2: ""; priority: 2 } ListElement { column1: qsTr("Fast (x5 fee)") ; column2: ""; priority: 3 } ListElement { column1: qsTr("Fastest (x41.5 fee)") ; column2: ""; priority: 4 } - } StandardDropdown { @@ -217,53 +185,81 @@ Rectangle { id: priorityDropdown shadowReleasedColor: "#FF4304" shadowPressedColor: "#B32D00" - releasedColor: "black" - pressedColor: "#404040" + releasedColor: "#363636" + pressedColor: "#202020" } } // Make sure dropdown is on top z: parent.z + 1 } - ColumnLayout { + // recipient address input + RowLayout { + id: addressLineRow Layout.fillWidth: true - Label { - id: addressLabel - textFormat: Text.RichText -<<<<<<< HEAD - text: "" + - qsTr("Address") + - " ( " + - qsTr("Paste in or select from Address book") + - " )" + - translationManager.emptyString -======= - text: qsTr("\ - Address ( Paste in or select from Address book )") - + translationManager.emptyString ->>>>>>> InlineButton development - onLinkActivated: appWindow.showPageRequest("AddressBook") - Layout.fillWidth: true - } - // recipient address input - RowLayout { - id: addressLineRow - Layout.fillWidth: true + ColumnLayout { + Rectangle{ + id: inputLabelRect + color: "transparent" + Layout.fillWidth: true + height: inputLabel.height + 10 - StandardButton { - id: qrfinderButton - text: qsTr("QR Code") + translationManager.emptyString - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - visible : appWindow.qrScannerEnabled - enabled : visible - width: visible ? 60 * scaleRatio : 0 - onClicked: { - cameraUi.state = "Capture" - cameraUi.qrcode_decoded.connect(updateFromQrCode) + Text { + id: inputLabel + anchors.top: parent.top + anchors.left: parent.left + font.family: Style.fontRegular.name + font.pixelSize: 16 * scaleRatio + font.bold: labelFontBold + textFormat: Text.RichText + color: "white" + onLinkActivated: { appWindow.showPageRequest("AddressBook") } + text: qsTr("\ + Address ( Address book )") + + translationManager.emptyString + } + + Rectangle{ + id: copyButton + color: "#808080" + radius: 3 + height: 20 + width: copyButtonText.width + 8 + anchors.right: parent.right + visible: addressLine.text !== "" + + Text { + id: copyButtonText + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + font.family: Style.fontRegular.name + font.pixelSize: 12 + font.bold: true + text: qsTr("Copy") + translationManager.emptyString + color: "black" + } + + MouseArea { + cursorShape: Qt.PointingHandCursor + anchors.fill: parent + hoverEnabled: true + onClicked: { + if (addressLine.text.length > 0) { + console.log(addressLine.text + " copied to clipboard"); + clipboard.setText(addressLine.text); + appWindow.showStatusMessage(qsTr("Address copied to clipboard"), 3); + } + } + onEntered: { + copyButton.color = "#707070"; + copyButtonText.opacity = 0.8; + } + onExited: { + copyButtonText.opacity = 1.0; + copyButton.color = "#808080"; + } + } } } LineEdit { @@ -292,55 +288,98 @@ Rectangle { addressLine.cursorPosition = 0 oa_message(qsTr("Address found, but the DNSSEC signatures could not be verified, so this address may be spoofed")) } else { - oa_message(qsTr("No valid address found at this OpenAlias address, but the DNSSEC signatures could not be verified, so this may be spoofed")) + oa_message(qsTr("No address found")) } - } else { - oa_message(qsTr("Internal error")) - } - } else { - oa_message(qsTr("Internal error")) } - } else { - oa_message(qsTr("No address found")) + onEntered: { + resolveButton.color = "#707070"; + resolveButtonText.opacity = 0.8; + } + onExited: { + resolveButtonText.opacity = 1.0; + resolveButton.color = "#808080"; + } } } - // validator: RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g } + } + + InputMulti { +// validator: RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g } + id: addressLine + readOnly: false + anchors.top: inputLabelRect.bottom + placeholderText: "4..." + Layout.fillWidth: true + + Rectangle { + color: "transparent" + border.width: 1 + border.color: { + if(addressLine.error && addressLine.text !== ""){ + return Qt.rgba(255, 0, 0, 0.45); + } else if(addressLine.activeFocus){ + return Qt.rgba(255, 255, 255, 0.35); + } else { + return Qt.rgba(255, 255, 255, 0.25); + } + } + radius: 4 + anchors.fill: parent + } } } - Label { - id: paymentIdLabel - text: qsTr("Payment ID ( Optional )") + translationManager.emptyString + StandardButton { + id: qrfinderButton + text: qsTr("QR Code") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + visible : appWindow.qrScannerEnabled + enabled : visible + width: visible ? 60 * scaleRatio : 0 + onClicked: { + cameraUi.state = "Capture" + cameraUi.qrcode_decoded.connect(updateFromQrCode) + } } + } + RowLayout { // payment id input LineEdit { id: paymentIdLine + labelText: qsTr("Payment ID ( Optional )") + translationManager.emptyString placeholderText: qsTr("16 or 64 hexadecimal characters") + translationManager.emptyString Layout.fillWidth: true } + } - Label { - text: qsTr("Description ( Optional )") - + translationManager.emptyString - } - + RowLayout { LineEdit { id: descriptionLine + labelText: qsTr("Description ( Optional )") + translationManager.emptyString placeholderText: qsTr("Saved to local wallet history") + translationManager.emptyString Layout.fillWidth: true } + } + RowLayout { StandardButton { id: sendButton Layout.bottomMargin: 17 * scaleRatio Layout.topMargin: 17 * scaleRatio text: qsTr("Send") + translationManager.emptyString +<<<<<<< HEAD shadowReleasedColor: "#FF4304" shadowPressedColor: "#B32D00" releasedColor: "#FF6C3C" pressedColor: "#FF4304" enabled : !appWindow.viewOnly && pageRoot.checkInformation(amountLine.text, addressLine.text, paymentIdLine.text, appWindow.persistentSettings.nettype) +======= + enabled : !appWindow.viewOnly && pageRoot.checkInformation(amountLine.text, addressLine.text, paymentIdLine.text, appWindow.persistentSettings.testnet) +>>>>>>> Transfer page QML development onClicked: { console.log("Transfer: paymentClicked") var priority = priorityModelV5.get(priorityDropdown.currentIndex).priority @@ -390,7 +429,7 @@ Rectangle { anchors.leftMargin: 17 * scaleRatio anchors.topMargin: 17 * scaleRatio anchors.bottomMargin: 17 * scaleRatio - spacing: 10 * scaleRatio + spacing: 20 * scaleRatio enabled: !viewOnly || pageRoot.enabled RowLayout { @@ -433,8 +472,6 @@ Rectangle { } } - - PrivacyLevel { visible: persistentSettings.transferShowAdvanced && !isMobile id: privacyLevelItem