moment/harmonyqml/components/chat/SendBox.qml

74 lines
2.2 KiB
QML
Raw Normal View History

2019-03-22 14:28:14 +11:00
import QtQuick 2.7
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.4
import "../base" as Base
2019-03-22 14:28:14 +11:00
2019-04-29 01:01:38 +10:00
Base.HGlassRectangle {
2019-03-22 14:28:14 +11:00
function setFocus() { textArea.forceActiveFocus() }
id: root
2019-03-22 14:28:14 +11:00
Layout.fillWidth: true
2019-03-26 09:29:46 +11:00
Layout.minimumHeight: 32
Layout.preferredHeight: textArea.implicitHeight
2019-03-22 14:28:14 +11:00
// parent.height / 2 causes binding loop?
Layout.maximumHeight: pageStack.height / 2
2019-04-29 01:01:38 +10:00
color: Base.HStyle.chat.sendBox.background
2019-03-22 14:28:14 +11:00
RowLayout {
anchors.fill: parent
spacing: 0
Base.HAvatar {
id: avatar
name: Backend.getUserDisplayName(chatPage.userId)
2019-04-29 01:32:02 +10:00
dimension: root.Layout.minimumHeight
2019-03-22 14:28:14 +11:00
}
ScrollView {
Layout.fillHeight: true
Layout.fillWidth: true
id: sendBoxScrollView
clip: true
TextArea {
property string typedText: text
2019-03-22 14:28:14 +11:00
id: textArea
placeholderText: qsTr("Type a message...")
wrapMode: TextEdit.Wrap
selectByMouse: true
2019-04-22 00:44:04 +10:00
readOnly: ! visible
2019-03-22 14:28:14 +11:00
font.family: "Roboto"
font.pixelSize: 16
focus: true
function setTyping(typing) {
Backend.clientManager.clients[chatPage.userId]
.setTypingState(chatPage.roomId, typing)
}
onTypedTextChanged: setTyping(Boolean(text))
onEditingFinished: setTyping(false) // when lost focus
2019-03-22 14:28:14 +11:00
Keys.onReturnPressed: {
event.accepted = true
if (event.modifiers & Qt.ShiftModifier ||
event.modifiers & Qt.ControlModifier ||
event.modifiers & Qt.AltModifier) {
textArea.insert(textArea.cursorPosition, "\n")
return
}
2019-03-28 10:24:28 +11:00
if (textArea.text === "") { return }
Backend.clientManager.clients[chatPage.userId]
.sendMarkdown(chatPage.roomId, textArea.text)
2019-03-22 14:28:14 +11:00
textArea.clear()
}
2019-03-22 14:28:14 +11:00
Keys.onEnterPressed: Keys.onReturnPressed(event) // numpad enter
}
}
}
}