mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-22 20:40:18 +00:00
b3f8af8e06
Qml code referring to the old code base commented out, but not deleted, due to easier refactoring the rest of the app.
236 lines
8.0 KiB
QML
236 lines
8.0 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Popups 0.1
|
|
|
|
import utils 1.0
|
|
|
|
import "../panels"
|
|
import "../controls"
|
|
|
|
Item {
|
|
id: inputBox
|
|
|
|
property alias textField: inputValue
|
|
property alias inputLabel: inputLabel
|
|
|
|
property string placeholderText: "My placeholder"
|
|
property string placeholderTextColor: Style.current.secondaryText
|
|
property alias text: inputValue.text
|
|
property alias maxLength: inputValue.maximumLength
|
|
property string validationError: ""
|
|
property alias validationErrorAlignment: validationErrorText.horizontalAlignment
|
|
property int validationErrorTopMargin: 1
|
|
property color validationErrorColor: Style.current.danger
|
|
property string label: ""
|
|
readonly property bool hasLabel: label !== ""
|
|
property color bgColor: Style.current.inputBackground
|
|
property url icon: ""
|
|
property int iconHeight: 24
|
|
property int iconWidth: 24
|
|
property bool copyToClipboard: false
|
|
property string textToCopy
|
|
property bool pasteFromClipboard: false
|
|
property bool readOnly: false
|
|
property bool keepHeight: false // determine whether validationError should affect item's height
|
|
|
|
readonly property bool hasIcon: icon.toString() !== ""
|
|
readonly property var forceActiveFocus: function () {
|
|
inputValue.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
readonly property int labelMargin: 7
|
|
property int customHeight: 44
|
|
property int fontPixelSize: 15
|
|
property alias validator: inputValue.validator
|
|
signal editingFinished(string inputValue)
|
|
signal textEdited(string inputValue)
|
|
|
|
implicitHeight: inputRectangle.height +
|
|
(hasLabel ? inputLabel.height + labelMargin : 0) +
|
|
(!keepHeight &&!!validationError ? (validationErrorText.height + validationErrorTopMargin) : 0)
|
|
height: implicitHeight
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
|
|
function resetInternal() {
|
|
inputValue.text = ""
|
|
validationError = ""
|
|
}
|
|
|
|
StyledText {
|
|
id: inputLabel
|
|
text: inputBox.label
|
|
font.weight: Font.Medium
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 0
|
|
font.pixelSize: 13
|
|
color: Style.current.textColor
|
|
}
|
|
|
|
Item {
|
|
id: inputField
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
height: customHeight
|
|
anchors.top: inputBox.hasLabel ? inputLabel.bottom : parent.top
|
|
anchors.topMargin: inputBox.hasLabel ? inputBox.labelMargin : 0
|
|
|
|
StyledTextField {
|
|
id: inputValue
|
|
visible: !inputBox.isTextArea && !inputBox.isSelect
|
|
placeholderText: inputBox.placeholderText
|
|
placeholderTextColor: inputBox.placeholderTextColor
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 0
|
|
anchors.bottom: parent.bottom
|
|
anchors.bottomMargin: 0
|
|
anchors.right: clipboardButtonLoader.active ? clipboardButtonLoader.left : parent.right
|
|
anchors.rightMargin: parent.rightMargin
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
leftPadding: inputBox.hasIcon ? iconWidth + 20 : Style.current.padding
|
|
selectByMouse: true
|
|
font.pixelSize: fontPixelSize
|
|
readOnly: inputBox.readOnly
|
|
background: Rectangle {
|
|
id: inputRectangle
|
|
anchors.fill: parent
|
|
color: bgColor
|
|
radius: Style.current.radius
|
|
border.width: (!!validationError || inputValue.focus) ? 1 : 0
|
|
border.color: {
|
|
if (!!validationError) {
|
|
return validationErrorColor
|
|
}
|
|
if (!inputBox.readOnly && inputValue.focus) {
|
|
return Style.current.inputBorderFocus
|
|
}
|
|
return Style.current.transparent
|
|
}
|
|
}
|
|
onEditingFinished: inputBox.editingFinished(inputBox.text)
|
|
onTextEdited: inputBox.textEdited(inputBox.text)
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.RightButton | Qt.LeftButton
|
|
onClicked: {
|
|
if((mouse.button === Qt.RightButton) && inputValue.canPaste) {
|
|
rightClickContextMenu.popup()
|
|
}
|
|
else {
|
|
inputValue.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SVGImage {
|
|
id: iconImg
|
|
sourceSize.height: iconHeight
|
|
sourceSize.width: iconWidth
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Style.current.smallPadding
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
fillMode: Image.PreserveAspectFit
|
|
source: inputBox.icon
|
|
}
|
|
|
|
Loader {
|
|
id: clipboardButtonLoader
|
|
active: inputBox.copyToClipboard || inputBox.pasteFromClipboard
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 8
|
|
sourceComponent: Component {
|
|
Item {
|
|
width: copyBtn.width
|
|
height: copyBtn.height
|
|
|
|
Timer {
|
|
id: timer
|
|
}
|
|
|
|
StatusButton {
|
|
property bool copied: false
|
|
id: copyBtn
|
|
text: {
|
|
if (copied) {
|
|
return inputBox.copyToClipboard ?
|
|
//% "Copied"
|
|
qsTrId("sharing-copied-to-clipboard") :
|
|
//% "Pasted"
|
|
qsTrId("pasted")
|
|
}
|
|
return inputBox.copyToClipboard ?
|
|
//% "Copy"
|
|
qsTrId("copy-to-clipboard") :
|
|
//% "Paste"
|
|
qsTrId("paste")
|
|
|
|
}
|
|
height: 28
|
|
font.pixelSize: 12
|
|
size: StatusBaseButton.Size.Small
|
|
onClicked: {
|
|
// Not Refactored Yet
|
|
// if (inputBox.copyToClipboard) {
|
|
// chatsModel.copyToClipboard(inputBox.textToCopy ? inputBox.textToCopy : inputValue.text)
|
|
// } else {
|
|
// if (inputValue.canPaste) {
|
|
// inputValue.paste()
|
|
// }
|
|
// }
|
|
|
|
// copyBtn.copied = true
|
|
// timer.setTimeout(function() {
|
|
// copyBtn.copied = false
|
|
// }, 2000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TextEdit {
|
|
visible: !!validationError
|
|
id: validationErrorText
|
|
text: validationError
|
|
anchors.top: inputField.bottom
|
|
anchors.topMargin: validationErrorTopMargin
|
|
anchors.right: inputField.right
|
|
selectByMouse: true
|
|
readOnly: true
|
|
font.pixelSize: 12
|
|
height: 16
|
|
color: validationErrorColor
|
|
wrapMode: TextEdit.Wrap
|
|
}
|
|
|
|
StatusPopupMenu {
|
|
id: rightClickContextMenu
|
|
|
|
StatusMenuItem {
|
|
enabled: inputValue.canPaste
|
|
text: qsTrId("Paste")
|
|
onTriggered: {
|
|
inputValue.paste()
|
|
}
|
|
}
|
|
|
|
onClosed: {
|
|
inputValue.forceActiveFocus(Qt.MouseFocusReason)
|
|
}
|
|
}
|
|
}
|
|
|
|
/*##^##
|
|
Designer {
|
|
D{i:0;formeditorColor:"#c0c0c0";formeditorZoom:1.25}
|
|
}
|
|
##^##*/
|