From 30f87a101956a881d8137cfe9280ca92b4b7d36e Mon Sep 17 00:00:00 2001 From: Jaquee Date: Mon, 27 Feb 2017 22:05:28 +0100 Subject: [PATCH] Transfer: hide advanced options --- main.qml | 1 + pages/Transfer.qml | 605 +++++++++++++++++++++++---------------------- 2 files changed, 309 insertions(+), 297 deletions(-) diff --git a/main.qml b/main.qml index fe1a8036..19564504 100644 --- a/main.qml +++ b/main.qml @@ -829,6 +829,7 @@ ApplicationWindow { property string logCategories: "" property string daemonUsername: "" property string daemonPassword: "" + property bool transferShowAdvanced: false } // Information dialog diff --git a/pages/Transfer.qml b/pages/Transfer.qml index 8d187cc7..72e1012f 100644 --- a/pages/Transfer.qml +++ b/pages/Transfer.qml @@ -42,6 +42,7 @@ Rectangle { color: "#F0EEEE" property string startLinkText: " (Start daemon)" + property bool showAdvanced: false function scaleValueToMixinCount(scaleValue) { var scaleToMixinCount = [4,5,6,7,8,9,10,11,12,13,14,15,20,25]; @@ -111,328 +112,293 @@ Rectangle { anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right - height:550 - Label { - id: amountLabel - anchors.left: parent.left - anchors.top: parent.top - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 17 - text: qsTr("Amount") + translationManager.emptyString - fontSize: 14 - } + height: 400 - Label { - id: transactionPriority - anchors.top: parent.top - anchors.topMargin: 17 - fontSize: 14 - x: (parent.width - 17) / 2 + 17 - text: qsTr("Transaction priority") + translationManager.emptyString - } + Label { + id: amountLabel + anchors.left: parent.left + anchors.top: parent.top + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 17 + text: qsTr("Amount") + translationManager.emptyString + fontSize: 14 + } - Row { - id: amountRow - anchors.top: amountLabel.bottom - anchors.topMargin: 5 - anchors.left: parent.left - anchors.leftMargin: 7 - width: (parent.width - 17) / 2 + 10 - Item { - width: 37 - height: 37 + Label { + id: transactionPriority + anchors.top: parent.top + anchors.topMargin: 17 + fontSize: 14 + x: (parent.width - 17) / 2 + 17 + text: qsTr("Transaction priority") + translationManager.emptyString + } - Image { - anchors.centerIn: parent - source: "../images/moneroIcon.png" - } - } - // Amount input - LineEdit { - id: amountLine - placeholderText: qsTr("") + translationManager.emptyString - width: parent.width - 37 - 17 - 60 - validator: DoubleValidator { - bottom: 0.0 - top: 18446744.073709551615 - decimals: 12 - notation: DoubleValidator.StandardNotation - locale: "C" - } - } - StandardButton { - id: amountAllButton - //anchors.left: amountLine.right - //anchors.top: amountLine.top - //anchors.bottom: amountLine.bottom - width: 60 - text: qsTr("All") + translationManager.emptyString - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - enabled : true - onClicked: amountLine.text = "(all)" - } - } + Row { + id: amountRow + anchors.top: amountLabel.bottom + anchors.topMargin: 5 + anchors.left: parent.left + anchors.leftMargin: 7 + width: (parent.width - 17) / 2 + 10 + Item { + width: 37 + height: 37 - ListModel { - id: priorityModel - // ListElement: cannot use script for property value, so - // code like this wont work: - // ListElement { column1: qsTr("Low") + translationManager.emptyString ; column2: ""; priority: PendingTransaction.Priority_Low } + Image { + anchors.centerIn: parent + source: "../images/moneroIcon.png" + } + } + // Amount input + LineEdit { + id: amountLine + placeholderText: qsTr("") + translationManager.emptyString + width: parent.width - 37 - 17 - 60 + validator: DoubleValidator { + bottom: 0.0 + top: 18446744.073709551615 + decimals: 12 + notation: DoubleValidator.StandardNotation + locale: "C" + } + } - 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 } - } - - StandardDropdown { - id: priorityDropdown - anchors.top: transactionPriority.bottom - anchors.right: parent.right - anchors.rightMargin: 17 - anchors.topMargin: 5 - anchors.left: transactionPriority.left - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - dataModel: priorityModel - z: 1 - } + StandardButton { + id: amountAllButton + //anchors.left: amountLine.right + //anchors.top: amountLine.top + //anchors.bottom: amountLine.bottom + width: 60 + text: qsTr("all") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + enabled : true + onClicked: amountLine.text = "(all)" + } + } - Label { - id: privacyLabel - anchors.left: parent.left - anchors.right: parent.right - anchors.top: amountRow.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 30 - fontSize: 14 - text: "" - } + ListModel { + id: priorityModel + // ListElement: cannot use script for property value, so + // code like this wont work: + // ListElement { column1: qsTr("LOW") + translationManager.emptyString ; column2: ""; priority: PendingTransaction.Priority_Low } - PrivacyLevel { - id: privacyLevelItem - anchors.left: parent.left - anchors.right: parent.right - anchors.top: privacyLabel.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 5 - onFillLevelChanged: updateMixin() - } + 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 } + } + StandardDropdown { + id: priorityDropdown + anchors.top: transactionPriority.bottom + anchors.right: parent.right + anchors.rightMargin: 17 + anchors.topMargin: 5 + anchors.left: transactionPriority.left + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + dataModel: priorityModel + z: 1 + } - Label { - id: costLabel - anchors.right: parent.right - anchors.top: amountRow.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 30 - fontSize: 14 - text: qsTr("Transaction cost") - } + Label { + id: addressLabel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: amountRow.bottom + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 30 + fontSize: 14 + textFormat: Text.RichText + text: qsTr("\ + Address ( Paste in or select from Address book )") + + translationManager.emptyString + onLinkActivated: appWindow.showPageRequest("AddressBook") + } + // recipient address input + RowLayout { + id: addressLineRow + anchors.left: parent.left + anchors.right: parent.right + anchors.top: addressLabel.bottom - Label { - id: addressLabel - anchors.left: parent.left - anchors.right: parent.right - anchors.top: privacyLevelItem.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 30 - fontSize: 14 - textFormat: Text.RichText - text: qsTr("\ - Address ( Paste in or select from Address book )") - + translationManager.emptyString + StandardButton { + id: qrfinderButton + anchors.left: parent.left + anchors.leftMargin: 17 + anchors.topMargin: 5 + text: qsTr("QR Code") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + visible : appWindow.qrScannerEnabled + enabled : visible + width: visible ? 60 : 0 + onClicked: { + cameraUi.state = "Capture" + cameraUi.qrcode_decoded.connect(updateFromQrCode) + } + } + LineEdit { + id: addressLine + anchors.left: qrfinderButton.right + anchors.right: resolveButton.left + //anchors.leftMargin: 17 + anchors.topMargin: 5 + placeholderText: "4..." + // validator: RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g } + } - onLinkActivated: appWindow.showPageRequest("AddressBook") - } - // recipient address input - RowLayout { - id: addressLineRow - anchors.left: parent.left - anchors.right: parent.right - anchors.top: addressLabel.bottom - - StandardButton { - id: qrfinderButton - anchors.left: parent.left - anchors.leftMargin: 17 - anchors.topMargin: 5 - text: qsTr("QRCODE") + translationManager.emptyString - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - visible : appWindow.qrScannerEnabled - enabled : visible - width: visible ? 60 : 0 - onClicked: { - cameraUi.state = "Capture" - cameraUi.qrcode_decoded.connect(updateFromQrCode) - } - } - LineEdit { - id: addressLine - anchors.left: qrfinderButton.right - anchors.right: resolveButton.left - //anchors.leftMargin: 17 - anchors.topMargin: 5 - placeholderText: "4..." - // validator: RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g } - } - - StandardButton { - id: resolveButton - anchors.right: parent.right - anchors.leftMargin: 17 - anchors.topMargin: 17 - anchors.rightMargin: 17 - width: 60 - text: qsTr("Resolve") + translationManager.emptyString - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - enabled : isValidOpenAliasAddress(addressLine.text) - onClicked: { - var result = walletManager.resolveOpenAlias(addressLine.text) - if (result) { - var parts = result.split("|") - if (parts.length == 2) { - var address_ok = walletManager.addressValid(parts[1], appWindow.persistentSettings.testnet) - if (parts[0] === "true") { - if (address_ok) { - addressLine.text = parts[1] - addressLine.cursorPosition = 0 - } - else - oa_message(qsTr("No valid address found at this OpenAlias address")) - } else if (parts[0] === "false") { - if (address_ok) { - addressLine.text = parts[1] - addressLine.cursorPosition = 0 - oa_message(qsTr("Address found, but the DNSSEC signatures could not be verified, so this address may be spoofed")) + StandardButton { + id: resolveButton + anchors.right: parent.right + anchors.leftMargin: 17 + anchors.topMargin: 17 + anchors.rightMargin: 17 + width: 60 + text: qsTr("Resolve") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + enabled : isValidOpenAliasAddress(addressLine.text) + onClicked: { + var result = walletManager.resolveOpenAlias(addressLine.text) + if (result) { + var parts = result.split("|") + if (parts.length == 2) { + var address_ok = walletManager.addressValid(parts[1], appWindow.persistentSettings.testnet) + if (parts[0] === "true") { + if (address_ok) { + addressLine.text = parts[1] + addressLine.cursorPosition = 0 + } + else + oa_message(qsTr("No valid address found at this OpenAlias address")) + } else if (parts[0] === "false") { + if (address_ok) { + addressLine.text = parts[1] + 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")) + } } 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("Internal error")) } } else { oa_message(qsTr("Internal error")) } } else { - oa_message(qsTr("Internal error")) + oa_message(qsTr("No address found")) } - } else { - oa_message(qsTr("No address found")) - } - } - } - } + } + } + } - Label { - id: paymentIdLabel - anchors.left: parent.left - anchors.right: parent.right - anchors.top: addressLineRow.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 17 - fontSize: 14 - text: qsTr("Payment ID ( Optional )") + translationManager.emptyString - } + Label { + id: paymentIdLabel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: addressLineRow.bottom + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 17 + fontSize: 14 + text: qsTr("Payment ID ( Optional )") + translationManager.emptyString + } - // payment id input - LineEdit { - id: paymentIdLine - anchors.left: parent.left - anchors.right: parent.right - anchors.top: paymentIdLabel.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 5 - placeholderText: qsTr("16 or 64 hexadecimal characters") + translationManager.emptyString - // validator: DoubleValidator { top: 0.0 } - } + // payment id input + LineEdit { + id: paymentIdLine + anchors.left: parent.left + anchors.right: parent.right + anchors.top: paymentIdLabel.bottom + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 5 + placeholderText: qsTr("16 or 64 hexadecimal characters") + translationManager.emptyString + // validator: DoubleValidator { top: 0.0 } + } - Label { - id: descriptionLabel - anchors.left: parent.left - anchors.right: parent.right - anchors.top: paymentIdLine.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 17 - fontSize: 14 - text: qsTr("Description ( Optional )") - + translationManager.emptyString - } + Label { + id: descriptionLabel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: paymentIdLine.bottom + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 17 + fontSize: 14 + text: qsTr("Description ( Optional )") + + translationManager.emptyString + } - LineEdit { - id: descriptionLine - anchors.left: parent.left - anchors.right: parent.right - anchors.top: descriptionLabel.bottom - anchors.leftMargin: 17 - anchors.rightMargin: 17 - anchors.topMargin: 5 - placeholderText: qsTr("Saved to local wallet history") + translationManager.emptyString - } + LineEdit { + id: descriptionLine + anchors.left: parent.left + anchors.right: parent.right + anchors.top: descriptionLabel.bottom + anchors.leftMargin: 17 + anchors.rightMargin: 17 + anchors.topMargin: 5 + placeholderText: qsTr("Saved to local wallet history") + translationManager.emptyString + } - function checkInformation(amount, address, payment_id, testnet) { - address = address.trim() - payment_id = payment_id.trim() + function checkInformation(amount, address, payment_id, testnet) { + address = address.trim() + payment_id = payment_id.trim() - var amount_ok = amount.length > 0 - var address_ok = walletManager.addressValid(address, testnet) - var payment_id_ok = payment_id.length == 0 || walletManager.paymentIdValid(payment_id) - var ipid = walletManager.paymentIdFromAddress(address, testnet) - if (ipid.length > 0 && payment_id.length > 0) - payment_id_ok = false + var amount_ok = amount.length > 0 + var address_ok = walletManager.addressValid(address, testnet) + var payment_id_ok = payment_id.length == 0 || walletManager.paymentIdValid(payment_id) + var ipid = walletManager.paymentIdFromAddress(address, testnet) + if (ipid.length > 0 && payment_id.length > 0) + payment_id_ok = false - addressLine.error = !address_ok - amountLine.error = !amount_ok - paymentIdLine.error = !payment_id_ok + addressLine.error = !address_ok + amountLine.error = !amount_ok + paymentIdLine.error = !payment_id_ok - return amount_ok && address_ok && payment_id_ok - } + return amount_ok && address_ok && payment_id_ok + } - StandardButton { - id: sendButton - anchors.left: parent.left - anchors.top: descriptionLine.bottom - anchors.leftMargin: 17 - anchors.topMargin: 17 - width: 60 - text: qsTr("Send") + translationManager.emptyString - shadowReleasedColor: "#FF4304" - shadowPressedColor: "#B32D00" - releasedColor: "#FF6C3C" - pressedColor: "#FF4304" - enabled : !appWindow.viewOnly && pageRoot.checkInformation(amountLine.text, addressLine.text, paymentIdLine.text, appWindow.persistentSettings.testnet) - onClicked: { - console.log("Transfer: paymentClicked") - var priority = priorityModel.get(priorityDropdown.currentIndex).priority - console.log("priority: " + priority) - console.log("amount: " + amountLine.text) - addressLine.text = addressLine.text.trim() - paymentIdLine.text = paymentIdLine.text.trim() - root.paymentClicked(addressLine.text, paymentIdLine.text, amountLine.text, scaleValueToMixinCount(privacyLevelItem.fillLevel), - priority, descriptionLine.text) - - } - } + StandardButton { + id: sendButton + anchors.left: parent.left + anchors.top: descriptionLine.bottom + anchors.leftMargin: 17 + anchors.topMargin: 17 + width: 60 + text: qsTr("Send") + translationManager.emptyString + shadowReleasedColor: "#FF4304" + shadowPressedColor: "#B32D00" + releasedColor: "#FF6C3C" + pressedColor: "#FF4304" + enabled : !appWindow.viewOnly && pageRoot.checkInformation(amountLine.text, addressLine.text, paymentIdLine.text, appWindow.persistentSettings.testnet) + onClicked: { + console.log("Transfer: paymentClicked") + var priority = priorityModel.get(priorityDropdown.currentIndex).priority + console.log("priority: " + priority) + console.log("amount: " + amountLine.text) + addressLine.text = addressLine.text.trim() + paymentIdLine.text = paymentIdLine.text.trim() + root.paymentClicked(addressLine.text, paymentIdLine.text, amountLine.text, scaleValueToMixinCount(privacyLevelItem.fillLevel), + priority, descriptionLine.text) + } + } } // pageRoot Rectangle { @@ -452,23 +418,68 @@ Rectangle { enabled: !viewOnly || pageRoot.enabled RowLayout { - Label { - id: manageWalletLabel - Layout.fillWidth: true - color: "#4A4949" - text: qsTr("Advanced") + translationManager.emptyString - fontSize: 16 - Layout.topMargin: 20 +// Label { +// id: manageWalletLabel +// Layout.fillWidth: true +// color: "#4A4949" +// text: qsTr("Advanced options") + translationManager.emptyString +// fontSize: 16 +// Layout.topMargin: 20 +// } + + CheckBox { + id: showAdvancedCheckbox + checked: persistentSettings.transferShowAdvanced + onClicked: { + persistentSettings.transferShowAdvanced = !persistentSettings.transferShowAdvanced + } + text: qsTr("Show advanced options") + translationManager.emptyString + checkedIcon: "../images/checkedVioletIcon.png" + uncheckedIcon: "../images/uncheckedIcon.png" } } Rectangle { + visible: persistentSettings.transferShowAdvanced Layout.fillWidth: true height: 1 color: "#DEDEDE" + Layout.bottomMargin: 30 } + RowLayout { + visible: persistentSettings.transferShowAdvanced + anchors.left: parent.left + anchors.right: parent.right + Label { + id: privacyLabel + fontSize: 14 + text: "" + } + + Label { + id: costLabel + fontSize: 14 + text: qsTr("Transaction cost") + anchors.right: parent.right + } + } + + + + PrivacyLevel { + visible: persistentSettings.transferShowAdvanced + id: privacyLevelItem + anchors.left: parent.left + anchors.right: parent.right + onFillLevelChanged: updateMixin() + } + + + RowLayout { + visible: persistentSettings.transferShowAdvanced + Layout.topMargin: 50 StandardButton { id: sweepUnmixableButton text: qsTr("Sweep Unmixable") + translationManager.emptyString