diff options
Diffstat (limited to 'components')
| -rw-r--r-- | components/NewPasswordDialog.qml | 287 | ||||
| -rw-r--r-- | components/PassphraseDialog.qml | 321 | ||||
| -rw-r--r-- | components/PasswordDialog.qml | 254 |
3 files changed, 212 insertions, 650 deletions
diff --git a/components/NewPasswordDialog.qml b/components/NewPasswordDialog.qml deleted file mode 100644 index 3f3c4f38..00000000 --- a/components/NewPasswordDialog.qml +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright (c) 2014-2019, 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.0 -import QtQuick.Dialogs 1.2 -import QtQuick.Layouts 1.1 -import QtQuick.Controls.Styles 1.4 -import QtQuick.Window 2.0 -import FontAwesome 1.0 - -import "../components" as MoneroComponents - -Item { - id: root - visible: false - z: parent.z + 2 - - property bool isHidden: true - property alias password: passwordInput1.text - - // same signals as Dialog has - signal accepted() - signal rejected() - signal closeCallback() - - function open() { - isHidden = true - passwordInput1.echoMode = TextInput.Password; - passwordInput2.echoMode = TextInput.Password; - inactiveOverlay.visible = true - leftPanel.enabled = false - middlePanel.enabled = false - titleBar.state = "essentials" - root.visible = true; - passwordInput1.text = ""; - passwordInput2.text = ""; - passwordInput1.focus = true - } - - function close() { - inactiveOverlay.visible = false - leftPanel.enabled = true - middlePanel.enabled = true - titleBar.state = "default" - root.visible = false; - closeCallback(); - } - - function toggleIsHidden() { - passwordInput1.echoMode = isHidden ? TextInput.Normal : TextInput.Password; - passwordInput2.echoMode = isHidden ? TextInput.Normal : TextInput.Password; - isHidden = !isHidden; - } - - // TODO: implement without hardcoding sizes - width: 480 - height: 360 - - ColumnLayout { - z: inactiveOverlay.z + 1 - id: mainLayout - spacing: 10 - anchors { fill: parent; margins: 35 } - - ColumnLayout { - id: column - - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - Layout.maximumWidth: 400 - - Label { - text: qsTr("Please enter new password") + translationManager.emptyString - Layout.fillWidth: true - - font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name - - color: MoneroComponents.Style.defaultFontColor - } - - TextField { - id : passwordInput1 - Layout.topMargin: 6 - Layout.fillWidth: true - horizontalAlignment: TextInput.AlignLeft - verticalAlignment: TextInput.AlignVCenter - font.family: MoneroComponents.Style.fontLight.name - font.pixelSize: 24 - echoMode: TextInput.Password - bottomPadding: 10 - leftPadding: 10 - topPadding: 10 - color: MoneroComponents.Style.defaultFontColor - selectionColor: MoneroComponents.Style.textSelectionColor - selectedTextColor: MoneroComponents.Style.textSelectedColor - KeyNavigation.tab: passwordInput2 - - background: Rectangle { - radius: 2 - border.color: MoneroComponents.Style.inputBorderColorInActive - border.width: 1 - color: MoneroComponents.Style.blackTheme ? "black" : "#A9FFFFFF" - - MoneroComponents.Label { - fontSize: 20 - text: isHidden ? FontAwesome.eye : FontAwesome.eyeSlash - opacity: 0.7 - fontFamily: FontAwesome.fontFamily - anchors.right: parent.right - anchors.rightMargin: 15 - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: 1 - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onClicked: { - toggleIsHidden() - } - onEntered: { - parent.opacity = 0.9 - parent.fontSize = 24 - } - onExited: { - parent.opacity = 0.7 - parent.fontSize = 20 - } - } - } - } - - Keys.onEscapePressed: { - root.close() - root.rejected() - } - } - - // padding - Rectangle { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - height: 10 - opacity: 0 - color: "black" - } - - Label { - text: qsTr("Please confirm new password") + translationManager.emptyString - Layout.fillWidth: true - - font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name - - color: MoneroComponents.Style.defaultFontColor - } - - TextField { - id : passwordInput2 - Layout.topMargin: 6 - Layout.fillWidth: true - horizontalAlignment: TextInput.AlignLeft - verticalAlignment: TextInput.AlignVCenter - font.family: MoneroComponents.Style.fontLight.name - font.pixelSize: 24 - echoMode: TextInput.Password - KeyNavigation.tab: okButton - bottomPadding: 10 - leftPadding: 10 - topPadding: 10 - color: MoneroComponents.Style.defaultFontColor - selectionColor: MoneroComponents.Style.textSelectionColor - selectedTextColor: MoneroComponents.Style.textSelectedColor - - background: Rectangle { - radius: 2 - border.color: MoneroComponents.Style.inputBorderColorInActive - border.width: 1 - color: MoneroComponents.Style.blackTheme ? "black" : "#A9FFFFFF" - - MoneroComponents.Label { - fontSize: 20 - text: isHidden ? FontAwesome.eye : FontAwesome.eyeSlash - opacity: 0.7 - fontFamily: FontAwesome.fontFamily - anchors.right: parent.right - anchors.rightMargin: 15 - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: 1 - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onClicked: { - toggleIsHidden() - } - onEntered: { - parent.opacity = 0.9 - parent.fontSize = 24 - } - onExited: { - parent.opacity = 0.7 - parent.fontSize = 20 - } - } - } - } - - Keys.onReturnPressed: { - if (passwordInput1.text === passwordInput2.text) { - root.close() - root.accepted() - } - } - Keys.onEscapePressed: { - root.close() - root.rejected() - } - } - - // padding - Rectangle { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - height: 10 - opacity: 0 - color: "black" - } - - // Ok/Cancel buttons - RowLayout { - id: buttons - spacing: 16 - Layout.topMargin: 16 - Layout.alignment: Qt.AlignRight - - MoneroComponents.StandardButton { - id: cancelButton - text: qsTr("Cancel") + translationManager.emptyString - KeyNavigation.tab: passwordInput1 - onClicked: { - root.close() - root.rejected() - } - } - MoneroComponents.StandardButton { - id: okButton - text: qsTr("Continue") + translationManager.emptyString - KeyNavigation.tab: cancelButton - enabled: passwordInput1.text === passwordInput2.text - onClicked: { - root.close() - root.accepted() - } - } - } - } - } -} diff --git a/components/PassphraseDialog.qml b/components/PassphraseDialog.qml deleted file mode 100644 index 79dd2f19..00000000 --- a/components/PassphraseDialog.qml +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright (c) 2014-2019, 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.7 -import QtQuick.Controls 2.0 -import QtQuick.Dialogs 1.2 -import QtQuick.Layouts 1.1 -import QtQuick.Controls.Styles 1.4 -import QtQuick.Window 2.0 -import FontAwesome 1.0 - -import "../components" as MoneroComponents - -Item { - id: root - visible: false - z: parent.z + 2 - - property bool isHidden: true - property alias passphrase: passphaseInput1.text - property string walletName - property string errorText - - // same signals as Dialog has - signal accepted() - signal rejected() - signal closeCallback() - - function open(walletName, errorText) { - isHidden = true - passphaseInput1.echoMode = TextInput.Password; - passphaseInput2.echoMode = TextInput.Password; - - inactiveOverlay.visible = true - - root.walletName = walletName ? walletName : "" - root.errorText = errorText ? errorText : ""; - - leftPanel.enabled = false - middlePanel.enabled = false - titleBar.state = "essentials" - - root.visible = true; - passphaseInput1.text = ""; - passphaseInput2.text = ""; - passphaseInput1.focus = true - } - - function close() { - inactiveOverlay.visible = false - leftPanel.enabled = true - middlePanel.enabled = true - titleBar.state = "default" - root.visible = false; - closeCallback(); - } - - function toggleIsHidden() { - passphaseInput1.echoMode = isHidden ? TextInput.Normal : TextInput.Password; - passphaseInput2.echoMode = isHidden ? TextInput.Normal : TextInput.Password; - isHidden = !isHidden; - } - - function showError(errorText) { - open(root.walletName, errorText); - } - - // TODO: implement without hardcoding sizes - width: 480 - height: 360 - - ColumnLayout { - z: inactiveOverlay.z + 1 - id: mainLayout - spacing: 10 - anchors { fill: parent; margins: 35 } - - ColumnLayout { - id: column - - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - Layout.maximumWidth: 400 - - Label { - text: (root.walletName.length > 0 ? qsTr("Please enter wallet device passphrase for: ") + root.walletName : qsTr("Please enter wallet device passphrase")) + translationManager.emptyString - Layout.fillWidth: true - - font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name - - color: MoneroComponents.Style.defaultFontColor - } - - Label { - text: qsTr("Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.") + translationManager.emptyString - Layout.fillWidth: true - wrapMode: Text.Wrap - - font.pixelSize: 14 - font.family: MoneroComponents.Style.fontLight.name - - color: MoneroComponents.Style.warningColor - } - - Label { - text: root.errorText - visible: root.errorText - - color: MoneroComponents.Style.errorColor - font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name - Layout.fillWidth: true - wrapMode: Text.Wrap - } - - TextField { - id : passphaseInput1 - Layout.topMargin: 6 - Layout.fillWidth: true - horizontalAlignment: TextInput.AlignLeft - verticalAlignment: TextInput.AlignVCenter - font.family: MoneroComponents.Style.fontLight.name - font.pixelSize: 24 - echoMode: TextInput.Password - bottomPadding: 10 - leftPadding: 10 - topPadding: 10 - color: MoneroComponents.Style.defaultFontColor - selectionColor: MoneroComponents.Style.textSelectionColor - selectedTextColor: MoneroComponents.Style.textSelectedColor - KeyNavigation.tab: passphaseInput2 - - background: Rectangle { - radius: 2 - border.color: MoneroComponents.Style.inputBorderColorInActive - border.width: 1 - color: MoneroComponents.Style.blackTheme ? "black" : "#A9FFFFFF" - - MoneroComponents.Label { - fontSize: 20 - text: isHidden ? FontAwesome.eye : FontAwesome.eyeSlash - opacity: 0.7 - fontFamily: FontAwesome.fontFamily - anchors.right: parent.right - anchors.rightMargin: 15 - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: 1 - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onClicked: { - toggleIsHidden() - } - onEntered: { - parent.opacity = 0.9 - parent.fontSize = 24 - } - onExited: { - parent.opacity = 0.7 - parent.fontSize = 20 - } - } - } - } - - Keys.onEscapePressed: { - root.close() - root.rejected() - } - } - - // padding - Rectangle { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - height: 10 - opacity: 0 - color: "transparent" - } - - Label { - text: qsTr("Please re-enter") + translationManager.emptyString - Layout.fillWidth: true - - font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name - - color: MoneroComponents.Style.defaultFontColor - } - - TextField { - id : passphaseInput2 - Layout.topMargin: 6 - Layout.fillWidth: true - horizontalAlignment: TextInput.AlignLeft - verticalAlignment: TextInput.AlignVCenter - font.family: MoneroComponents.Style.fontLight.name - font.pixelSize: 24 - echoMode: TextInput.Password - KeyNavigation.tab: okButton - bottomPadding: 10 - leftPadding: 10 - topPadding: 10 - color: MoneroComponents.Style.defaultFontColor - selectionColor: MoneroComponents.Style.dimmedFontColor - selectedTextColor: MoneroComponents.Style.defaultFontColor - - background: Rectangle { - radius: 2 - border.color: MoneroComponents.Style.inputBorderColorInActive - border.width: 1 - color: MoneroComponents.Style.blackTheme ? "black" : "#A9FFFFFF" - - MoneroComponents.Label { - fontSize: 20 - text: isHidden ? FontAwesome.eye : FontAwesome.eyeSlash - opacity: 0.7 - fontFamily: FontAwesome.fontFamily - anchors.right: parent.right - anchors.rightMargin: 15 - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: 1 - - MouseArea { - anchors.fill: parent - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onClicked: { - toggleIsHidden() - } - onEntered: { - parent.opacity = 0.9 - parent.fontSize = 24 - } - onExited: { - parent.opacity = 0.7 - parent.fontSize = 20 - } - } - } - } - - Keys.onReturnPressed: { - if (passphaseInput1.text === passphaseInput2.text) { - root.close() - root.accepted() - } - } - Keys.onEscapePressed: { - root.close() - root.rejected() - } - } - - // padding - Rectangle { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - height: 10 - opacity: 0 - color: "black" - } - - // Ok/Cancel buttons - RowLayout { - id: buttons - spacing: 16 - Layout.topMargin: 16 - Layout.alignment: Qt.AlignRight - - MoneroComponents.StandardButton { - id: cancelButton - text: qsTr("Cancel") + translationManager.emptyString - KeyNavigation.tab: passphaseInput1 - onClicked: { - root.close() - root.rejected() - } - } - MoneroComponents.StandardButton { - id: okButton - text: qsTr("Continue") + translationManager.emptyString - KeyNavigation.tab: cancelButton - enabled: passphaseInput1.text === passphaseInput2.text - onClicked: { - root.close() - root.accepted() - } - } - } - } - } -} diff --git a/components/PasswordDialog.qml b/components/PasswordDialog.qml index 4d1c8467..67ffce96 100644 --- a/components/PasswordDialog.qml +++ b/components/PasswordDialog.qml @@ -44,34 +44,63 @@ Item { z: parent.z + 2 property bool isHidden: true - property alias password: passwordInput.text + property alias password: passwordInput1.text property string walletName property string errorText - property bool shiftIsPressed: false - property bool isCapsLocksActive: false - property bool backspaceIsPressed: false + property bool passwordDialogMode + property bool passphraseDialogMode + property bool newPasswordDialogMode // same signals as Dialog has signal accepted() + signal acceptedNewPassword() + signal acceptedPassphrase() signal rejected() + signal rejectedNewPassword() + signal rejectedPassphrase() signal closeCallback() - function open(walletName, errorText) { + function _openInit(walletName, errorText) { isHidden = true - passwordInput.echoMode = TextInput.Password - passwordInput.text = "" - passwordInput.forceActiveFocus(); + capsLockTextLabel.visible = oshelper.isCapsLock(); + passwordInput1.echoMode = TextInput.Password + passwordInput2.echoMode = TextInput.Password + passwordInput1.text = "" + passwordInput2.text = "" + passwordInput1.forceActiveFocus(); inactiveOverlay.visible = true // draw appwindow inactive root.walletName = walletName ? walletName : "" errorTextLabel.text = errorText ? errorText : ""; leftPanel.enabled = false middlePanel.enabled = false + wizard.enabled = false titleBar.state = "essentials" root.visible = true; appWindow.hideBalanceForced = true; appWindow.updateBalance(); } + function open(walletName, errorText) { + passwordDialogMode = true; + passphraseDialogMode = false; + newPasswordDialogMode = false; + _openInit(walletName, errorText); + } + + function openPassphraseDialog() { + passwordDialogMode = false; + passphraseDialogMode = true; + newPasswordDialogMode = false; + _openInit("", ""); + } + + function openNewPasswordDialog() { + passwordDialogMode = false; + passphraseDialogMode = false; + newPasswordDialogMode = true; + _openInit("", ""); + } + function showError(errorText) { open(root.walletName, errorText); } @@ -80,6 +109,7 @@ Item { inactiveOverlay.visible = false leftPanel.enabled = true middlePanel.enabled = true + wizard.enabled = true titleBar.state = "default" root.visible = false; @@ -88,6 +118,12 @@ Item { closeCallback(); } + function toggleIsHidden() { + passwordInput1.echoMode = isHidden ? TextInput.Normal : TextInput.Password; + passwordInput2.echoMode = isHidden ? TextInput.Normal : TextInput.Password; + isHidden = !isHidden; + } + ColumnLayout { z: inactiveOverlay.z + 1 id: mainLayout @@ -102,7 +138,11 @@ Item { Layout.maximumWidth: 400 Label { - text: (root.walletName.length > 0 ? qsTr("Please enter wallet password for: ") + root.walletName : qsTr("Please enter wallet password")) + translationManager.emptyString + text: { + var device = passwordDialogMode ? qsTr("wallet password") : qsTr("wallet device passphrase"); + (root.walletName.length > 0 ? qsTr("Please enter %1 for: ").arg(device) + root.walletName : qsTr("Please enter %1").arg(device)) + translationManager.emptyString; + } + visible: !newPasswordDialogMode Layout.fillWidth: true font.pixelSize: 16 @@ -112,18 +152,40 @@ Item { } Label { + text: qsTr("Warning: passphrase entry on host is a security risk as it can be captured by malware. It is advised to prefer device-based passphrase entry.") + translationManager.emptyString + visible: passphraseDialogMode + Layout.fillWidth: true + wrapMode: Text.Wrap + + font.pixelSize: 14 + font.family: MoneroComponents.Style.fontLight.name + + color: MoneroComponents.Style.warningColor + } + + Label { id: errorTextLabel visible: root.errorText || text !== "" + color: MoneroComponents.Style.errorColor + font.pixelSize: 16 + font.family: MoneroComponents.Style.fontLight.name + Layout.fillWidth: true + wrapMode: Text.Wrap + } + Label { + id: capsLockTextLabel + visible: false color: MoneroComponents.Style.errorColor font.pixelSize: 16 - font.family: MoneroComponents.Style.fontLight.name + font.family: MoneroComponents.Style.fontLight.name Layout.fillWidth: true wrapMode: Text.Wrap + text: qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString; } TextField { - id : passwordInput + id: passwordInput1 Layout.topMargin: 6 Layout.fillWidth: true horizontalAlignment: TextInput.AlignLeft @@ -131,24 +193,20 @@ Item { font.family: MoneroComponents.Style.fontLight.name font.pixelSize: 24 echoMode: TextInput.Password - KeyNavigation.tab: okButton + KeyNavigation.tab: { + if (passwordDialogMode) { + return okButton + } else { + return passwordInput2 + } + } bottomPadding: 10 leftPadding: 10 topPadding: 10 color: MoneroComponents.Style.defaultFontColor selectionColor: MoneroComponents.Style.textSelectionColor selectedTextColor: MoneroComponents.Style.textSelectedColor - - onTextChanged: { - var letter = text[passwordInput.text.length - 1]; - isCapsLocksActive = Utils.isUpperLock(shiftIsPressed, letter); - if(isCapsLocksActive && !backspaceIsPressed){ - errorTextLabel.text = qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString; - } - else{ - errorTextLabel.text = ""; - } - } + onTextChanged: capsLockTextLabel.visible = oshelper.isCapsLock(); background: Rectangle { radius: 2 @@ -177,8 +235,7 @@ Item { cursorShape: Qt.PointingHandCursor hoverEnabled: true onClicked: { - passwordInput.echoMode = isHidden ? TextInput.Normal : TextInput.Password; - isHidden = !isHidden; + toggleIsHidden(); } onEntered: { parent.opacity = 0.9 @@ -195,30 +252,131 @@ Item { Keys.enabled: root.visible Keys.onReturnPressed: { root.close() - root.accepted() + if (passwordDialogMode) { + root.accepted() + } else if (newPasswordDialogMode) { + root.acceptedNewPassword() + } else if (passphraseDialogMode) { + root.acceptedPassphrase() + } } Keys.onEscapePressed: { root.close() - root.rejected() - } - Keys.onPressed: { - if(event.key === Qt.Key_Shift){ - shiftIsPressed = true; + if (passwordDialogMode) { + root.rejected() + } else if (newPasswordDialogMode) { + root.rejectedNewPassword() + } else if (passphraseDialogMode) { + root.rejectedPassphrase() } - if(event.key === Qt.Key_Backspace){ - backspaceIsPressed = true; + } + } + + // padding + Rectangle { + visible: !passwordDialogMode + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + height: 10 + opacity: 0 + color: "black" + } + + Label { + visible: !passwordDialogMode + text: qsTr("Please confirm new password") + translationManager.emptyString + Layout.fillWidth: true + + font.pixelSize: 16 + font.family: MoneroComponents.Style.fontLight.name + + color: MoneroComponents.Style.defaultFontColor + } + + TextField { + id: passwordInput2 + visible: !passwordDialogMode + Layout.topMargin: 6 + Layout.fillWidth: true + horizontalAlignment: TextInput.AlignLeft + verticalAlignment: TextInput.AlignVCenter + font.family: MoneroComponents.Style.fontLight.name + font.pixelSize: 24 + echoMode: TextInput.Password + KeyNavigation.tab: okButton + bottomPadding: 10 + leftPadding: 10 + topPadding: 10 + color: MoneroComponents.Style.defaultFontColor + selectionColor: MoneroComponents.Style.textSelectionColor + selectedTextColor: MoneroComponents.Style.textSelectedColor + onTextChanged: capsLockTextLabel.visible = oshelper.isCapsLock(); + + background: Rectangle { + radius: 2 + border.color: MoneroComponents.Style.inputBorderColorInActive + border.width: 1 + color: MoneroComponents.Style.blackTheme ? "black" : "#A9FFFFFF" + + MoneroComponents.Label { + fontSize: 20 + text: isHidden ? FontAwesome.eye : FontAwesome.eyeSlash + opacity: 0.7 + fontFamily: FontAwesome.fontFamily + anchors.right: parent.right + anchors.rightMargin: 15 + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: 1 + + MouseArea { + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + hoverEnabled: true + onClicked: { + toggleIsHidden() + } + onEntered: { + parent.opacity = 0.9 + parent.fontSize = 24 + } + onExited: { + parent.opacity = 0.7 + parent.fontSize = 20 + } + } } } - Keys.onReleased: { - if(event.key === Qt.Key_Shift){ - shiftIsPressed = false; + + Keys.onReturnPressed: { + if (passwordInput1.text === passwordInput2.text) { + root.close() + if (newPasswordDialogMode) { + root.acceptedNewPassword() + } else if (passphraseDialogMode) { + root.acceptedPassphrase() + } } - if(event.key === Qt.Key_Backspace){ - backspaceIsPressed =false; + } + Keys.onEscapePressed: { + root.close() + if (newPasswordDialogMode) { + root.rejectedNewPassword() + } else if (passphraseDialogMode) { + root.rejectedPassphrase() } } } + // padding + Rectangle { + visible: !passwordDialogMode + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + height: 10 + opacity: 0 + color: "black" + } + // Ok/Cancel buttons RowLayout { id: buttons @@ -230,10 +388,16 @@ Item { id: cancelButton small: true text: root.walletName.length > 0 ? qsTr("Change wallet") + translationManager.emptyString : qsTr("Cancel") + translationManager.emptyString - KeyNavigation.tab: passwordInput + KeyNavigation.tab: passwordInput1 onClicked: { root.close() - root.rejected() + if (passwordDialogMode) { + root.rejected() + } else if (newPasswordDialogMode) { + root.rejectedNewPassword() + } else if (passphraseDialogMode) { + root.rejectedPassphrase() + } } } @@ -242,13 +406,19 @@ Item { small: true text: qsTr("Continue") + translationManager.emptyString KeyNavigation.tab: cancelButton + enabled: (passwordDialogMode == true) ? true : passwordInput1.text === passwordInput2.text onClicked: { root.close() - root.accepted() + if (passwordDialogMode) { + root.accepted() + } else if (newPasswordDialogMode) { + root.acceptedNewPassword() + } else if (passphraseDialogMode) { + root.acceptedPassphrase() + } } } } - } } } |
