mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-10 22:36:24 +00:00
33a77ab761
Fixes #2419 Makes it so the private key is elided by default so you can see it all from the get-go. If you focus the field, the key will "unfurl" and you can copy it manually. Otherwise. the Copy button will always copy the whole key
193 lines
6.7 KiB
QML
193 lines
6.7 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import "../imports"
|
|
import "../shared/status"
|
|
import "."
|
|
|
|
Item {
|
|
property alias textField: inputValue
|
|
property string placeholderText: "My placeholder"
|
|
property string placeholderTextColor: Style.current.secondaryText
|
|
property alias text: inputValue.text
|
|
property string validationError: ""
|
|
property alias validationErrorAlignment: validationErrorText.horizontalAlignment
|
|
property int validationErrorTopMargin: 1
|
|
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
|
|
|
|
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)
|
|
|
|
id: inputBox
|
|
implicitHeight: inputRectangle.height + (hasLabel ? inputLabel.height + labelMargin : 0) + (!!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
|
|
}
|
|
|
|
Rectangle {
|
|
id: inputRectangle
|
|
height: customHeight
|
|
color: bgColor
|
|
radius: Style.current.radius
|
|
anchors.top: inputBox.hasLabel ? inputLabel.bottom : parent.top
|
|
anchors.topMargin: inputBox.hasLabel ? inputBox.labelMargin : 0
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
border.width: (!!validationError || inputValue.focus) ? 1 : 0
|
|
border.color: {
|
|
if (!!validationError) {
|
|
return Style.current.danger
|
|
}
|
|
if (!inputBox.readOnly && inputValue.focus) {
|
|
return Style.current.inputBorderFocus
|
|
}
|
|
return Style.current.transparent
|
|
}
|
|
|
|
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 {
|
|
color: Style.current.transparent
|
|
}
|
|
onEditingFinished: inputBox.editingFinished(inputBox.text)
|
|
onTextEdited: inputBox.textEdited(inputBox.text)
|
|
}
|
|
|
|
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
|
|
borderColor: Style.current.blue
|
|
showBorder: true
|
|
onClicked: {
|
|
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: inputRectangle.bottom
|
|
anchors.topMargin: validationErrorTopMargin
|
|
selectByMouse: true
|
|
readOnly: true
|
|
font.pixelSize: 12
|
|
height: 16
|
|
color: Style.current.danger
|
|
width: inputRectangle.width
|
|
wrapMode: TextEdit.Wrap
|
|
}
|
|
}
|
|
|
|
/*##^##
|
|
Designer {
|
|
D{i:0;formeditorColor:"#c0c0c0";formeditorZoom:1.25}
|
|
}
|
|
##^##*/
|