diff --git a/components/ContextMenu.qml b/components/ContextMenu.qml index a4ca3209..efbd38ab 100644 --- a/components/ContextMenu.qml +++ b/components/ContextMenu.qml @@ -5,14 +5,21 @@ import FontAwesome 1.0 import "../components" as MoneroComponents MouseArea { + signal cut() + signal copy() signal paste() + signal remove() + signal selectAll() id: root acceptedButtons: Qt.RightButton anchors.fill: parent onClicked: { - if (mouse.button === Qt.RightButton) + if (mouse.button === Qt.RightButton) { + root.parent.persistentSelection = true; contextMenu.open() + root.parent.cursorVisible = true; + } } Menu { @@ -22,19 +29,50 @@ MouseArea { border.color: MoneroComponents.Style.buttonBackgroundColorDisabledHover border.width: 1 radius: 2 - color: MoneroComponents.Style.buttonBackgroundColorDisabled + color: MoneroComponents.Style.blackTheme ? MoneroComponents.Style.buttonBackgroundColorDisabled : "#E5E5E5" } padding: 1 - width: 100 + width: 110 x: root.mouseX y: root.mouseY + onClosed: { + if (!root.parent.activeFocus) { + root.parent.cursorVisible = false; + } + root.parent.persistentSelection = false; + root.parent.forceActiveFocus() + } + + MoneroComponents.ContextMenuItem { + enabled: root.parent.selectedText != "" && !root.parent.readOnly + onTriggered: root.cut() + text: qsTr("Cut") + translationManager.emptyString + } + + MoneroComponents.ContextMenuItem { + enabled: root.parent.selectedText != "" + onTriggered: root.copy() + text: qsTr("Copy") + translationManager.emptyString + } + MoneroComponents.ContextMenuItem { enabled: root.parent.canPaste === true - glyphIcon: FontAwesome.paste onTriggered: root.paste() text: qsTr("Paste") + translationManager.emptyString } + + MoneroComponents.ContextMenuItem { + enabled: root.parent.selectedText != "" && !root.parent.readOnly + onTriggered: root.remove() + text: qsTr("Delete") + translationManager.emptyString + } + + MoneroComponents.ContextMenuItem { + enabled: root.parent.text != "" + onTriggered: root.selectAll() + text: qsTr("Select All") + translationManager.emptyString + } } } diff --git a/components/ContextMenuItem.qml b/components/ContextMenuItem.qml index de2d54ad..c4e0f395 100644 --- a/components/ContextMenuItem.qml +++ b/components/ContextMenuItem.qml @@ -13,21 +13,31 @@ MenuItem { background: Rectangle { color: MoneroComponents.Style.buttonBackgroundColorDisabledHover - opacity: mouse.containsMouse ? 1 : 0 + opacity: 0 MouseArea { id: mouse anchors.fill: parent hoverEnabled: true - onClicked: menuItem.triggered() - visible: menuItem.enabled + onEntered: { + parent.opacity = 1; + } + onExited: { + parent.opacity = 0; + } + onClicked: { + if (menuItem.enabled) { + menuItem.triggered(); + parent.opacity = 0; + } + } } } contentItem: RowLayout { anchors.fill: parent - anchors.leftMargin: 10 + anchors.leftMargin: 20 anchors.rightMargin: 10 opacity: menuItem.enabled ? 1 : 0.4 spacing: 8 @@ -42,7 +52,7 @@ MenuItem { } Text { - color: MoneroComponents.Style.buttonTextColor + color: MoneroComponents.Style.blackTheme ? MoneroComponents.Style.buttonTextColor : MoneroComponents.Style.defaultFontColor font.family: MoneroComponents.Style.fontRegular.name font.pixelSize: 14 Layout.fillWidth: true diff --git a/components/Input.qml b/components/Input.qml index 33601d88..b33a821e 100644 --- a/components/Input.qml +++ b/components/Input.qml @@ -48,9 +48,16 @@ TextField { MoneroComponents.ContextMenu { cursorShape: Qt.IBeamCursor + onCut: textField.cut(); + onCopy: textField.copy(); onPaste: { - textField.clear(); + var previoustextFieldLength = textField.length + var previousCursorPosition = textField.cursorPosition; textField.paste(); + textField.forceActiveFocus() + textField.cursorPosition = previousCursorPosition + (textField.length - previoustextFieldLength); } + onRemove: textField.remove(selectionStart, selectionEnd); + onSelectAll: textField.selectAll(); } } diff --git a/components/InputMulti.qml b/components/InputMulti.qml index ddbd5552..5d530b1d 100644 --- a/components/InputMulti.qml +++ b/components/InputMulti.qml @@ -71,9 +71,16 @@ TextArea { MoneroComponents.ContextMenu { cursorShape: Qt.IBeamCursor + onCut: textArea.cut(); + onCopy: textArea.copy(); onPaste: { - textArea.clear(); + var previoustextFieldLength = textArea.length + var previousCursorPosition = textArea.cursorPosition; textArea.paste(); + textArea.forceActiveFocus() + textArea.cursorPosition = previousCursorPosition + (textArea.length - previoustextFieldLength); } + onRemove: textArea.remove(selectionStart, selectionEnd); + onSelectAll: textArea.selectAll(); } }