1
0
Files
electrum/electrum/gui/qml/components/controls/SeedTextArea.qml
2023-03-14 12:46:00 +01:00

103 lines
3.2 KiB
QML

import QtQuick 2.15
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.0
import org.electrum 1.0
Pane {
id: root
implicitHeight: rootLayout.height
padding: 0
property alias readOnly: seedtextarea.readOnly
property alias text: seedtextarea.text
property alias placeholderText: seedtextarea.placeholderText
property var _suggestions: []
background: Rectangle {
color: "transparent"
}
ColumnLayout {
id: rootLayout
width: parent.width
spacing: 0
Flickable {
Layout.preferredWidth: parent.width
Layout.minimumHeight: fontMetrics.lineSpacing + 2*constants.paddingXXSmall + 2*constants.paddingXSmall + 2
implicitHeight: wordsLayout.height
visible: !readOnly
flickableDirection: Flickable.HorizontalFlick
contentWidth: wordsLayout.width
interactive: wordsLayout.width > width
RowLayout {
id: wordsLayout
Repeater {
model: _suggestions
Rectangle {
Layout.margins: constants.paddingXXSmall
width: suggestionLabel.width
height: suggestionLabel.height
color: constants.lighterBackground
radius: constants.paddingXXSmall
Label {
id: suggestionLabel
text: modelData
padding: constants.paddingXSmall
leftPadding: constants.paddingSmall
rightPadding: constants.paddingSmall
}
MouseArea {
anchors.fill: parent
onClicked: {
var words = seedtextarea.text.split(' ')
words.pop()
words.push(modelData)
seedtextarea.text = words.join(' ') + ' '
}
}
}
}
}
}
TextArea {
id: seedtextarea
Layout.fillWidth: true
Layout.minimumHeight: fontMetrics.height * 3 + topPadding + bottomPadding
rightPadding: constants.paddingLarge
leftPadding: constants.paddingLarge
wrapMode: TextInput.WordWrap
font.bold: true
font.pixelSize: constants.fontSizeLarge
font.family: FixedFont
inputMethodHints: Qt.ImhSensitiveData | Qt.ImhLowercaseOnly | Qt.ImhNoPredictiveText
background: Rectangle {
color: constants.darkerBackground
}
onTextChanged: {
_suggestions = bitcoin.mnemonicsFor(seedtextarea.text.split(' ').pop())
// TODO: cursorPosition only on suggestion apply
cursorPosition = text.length
}
}
}
FontMetrics {
id: fontMetrics
font: seedtextarea.font
}
Bitcoin {
id: bitcoin
}
}