2020-06-17 19:18:31 +00:00
|
|
|
import QtQuick 2.13
|
|
|
|
import QtQuick.Controls 2.13
|
|
|
|
import QtQuick.Layouts 1.13
|
2020-06-30 20:01:37 +00:00
|
|
|
import QtMultimedia 5.13
|
2020-07-20 17:04:33 +00:00
|
|
|
import QtQuick.Dialogs 1.0
|
2020-06-24 03:23:49 +00:00
|
|
|
import "../components"
|
2020-05-27 23:06:41 +00:00
|
|
|
import "../../../../shared"
|
|
|
|
import "../../../../imports"
|
|
|
|
|
|
|
|
Rectangle {
|
2020-07-09 19:10:28 +00:00
|
|
|
id: rectangle
|
2020-07-14 11:40:58 +00:00
|
|
|
property alias textInput: txtData
|
2020-05-27 23:06:41 +00:00
|
|
|
border.width: 0
|
2020-07-09 19:10:28 +00:00
|
|
|
height: 52
|
2020-07-13 18:45:54 +00:00
|
|
|
color: Style.current.transparent
|
2020-05-27 23:06:41 +00:00
|
|
|
|
2020-07-02 18:49:02 +00:00
|
|
|
visible: chatsModel.activeChannel.chatType !== Constants.chatTypePrivateGroupChat || chatsModel.activeChannel.isMember(profileModel.profile.pubKey)
|
2020-06-15 17:41:19 +00:00
|
|
|
|
2020-09-02 18:18:16 +00:00
|
|
|
property bool emojiEvent: false;
|
|
|
|
|
2020-07-10 19:02:57 +00:00
|
|
|
Audio {
|
|
|
|
id: sendMessageSound
|
|
|
|
source: "../../../../sounds/send_message.wav"
|
2020-08-19 19:56:41 +00:00
|
|
|
volume: 0.2
|
2020-07-10 19:02:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function interpretMessage(msg) {
|
|
|
|
if (msg === "/shrug") {
|
|
|
|
return "¯\\\\\\_(ツ)\\_/¯"
|
|
|
|
}
|
|
|
|
if (msg === "/tableflip") {
|
|
|
|
return "(╯°□°)╯︵ ┻━┻"
|
|
|
|
}
|
|
|
|
|
|
|
|
return msg
|
|
|
|
}
|
|
|
|
|
2020-08-03 14:01:47 +00:00
|
|
|
function sendMsg(event){
|
|
|
|
if(chatColumn.isImage){
|
|
|
|
chatsModel.sendImage(sendImageArea.image);
|
|
|
|
}
|
|
|
|
var msg = chatsModel.plainText(Emoji.deparse(txtData.text).trim()).trim()
|
|
|
|
if(msg.length > 0){
|
|
|
|
msg = interpretMessage(msg)
|
|
|
|
chatsModel.sendMessage(msg, chatColumn.isReply ? SelectedMessage.messageId : "", Utils.isOnlyEmoji(msg) ? Constants.emojiType : Constants.messageType);
|
|
|
|
txtData.text = "";
|
|
|
|
if(event) event.accepted = true
|
|
|
|
sendMessageSound.stop()
|
|
|
|
Qt.callLater(sendMessageSound.play);
|
|
|
|
}
|
|
|
|
chatColumn.hideExtendedArea();
|
|
|
|
}
|
2020-07-14 11:40:58 +00:00
|
|
|
|
2020-08-03 14:01:47 +00:00
|
|
|
function onEnter(event){
|
2020-07-02 18:49:02 +00:00
|
|
|
if (event.modifiers === Qt.NoModifier && (event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
|
2020-08-03 14:01:47 +00:00
|
|
|
sendMsg(event);
|
2020-06-25 02:01:13 +00:00
|
|
|
}
|
2020-09-02 18:18:16 +00:00
|
|
|
|
|
|
|
emojiEvent = emojiHandler(emojiEvent, event);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function emojiHandler(emojiEvent, event) {
|
|
|
|
|
|
|
|
var msg = chatsModel.plainText(Emoji.deparse(txtData.text).trim());
|
|
|
|
|
|
|
|
if (emojiEvent == false && event.key == Qt.Key_Colon) {
|
|
|
|
if (isSpace(msg.charAt(msg.length - 1)) == true) {
|
|
|
|
console.log('emoji event');
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
} else if (emojiEvent == true && isKeyValid(event.key) == true) {
|
|
|
|
console.log('popup');
|
|
|
|
return true;
|
|
|
|
} else if (emojiEvent == true && event.key == Qt.Key_Colon) {
|
|
|
|
var index = msg.indexOf(':', 0);
|
|
|
|
txtData.remove(index - 1, txtData.length);
|
|
|
|
txtData.insert(txtData.length, " EMOJI");
|
|
|
|
|
|
|
|
if (event) event.accepted = true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
} else if (emojiEvent == true && isKeyValid(event.key) == false) {
|
|
|
|
console.log('emoji event stopped');
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isKeyValid(key) {
|
|
|
|
if (isKeyAlpha(key) == true || isKeyDigit(key) == true || key == Qt.Key_Underscore || key == Qt.Key_Shift)
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isSpace(c) {
|
|
|
|
if (c == ' ' || c == '\t' || c == '\n' || c == '\r')
|
|
|
|
return true
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
function isKeyAlpha(key) {
|
|
|
|
if (key >= Qt.Key_A && key <= Qt.Key_Z)
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isKeyDigit(key) {
|
|
|
|
if (key >= Qt.Key_0 && key <= Qt.Key_9)
|
|
|
|
return true;
|
|
|
|
return false;
|
2020-06-25 02:01:13 +00:00
|
|
|
}
|
|
|
|
|
2020-07-20 17:04:33 +00:00
|
|
|
FileDialog {
|
|
|
|
id: imageDialog
|
2020-08-26 15:52:26 +00:00
|
|
|
//% "Please choose an image"
|
|
|
|
title: qsTrId("please-choose-an-image")
|
2020-07-20 17:04:33 +00:00
|
|
|
folder: shortcuts.pictures
|
|
|
|
nameFilters: [
|
2020-08-26 15:52:26 +00:00
|
|
|
//% "Image files (*.jpg *.jpeg *.png)"
|
|
|
|
qsTrId("image-files----jpg---jpeg---png-")
|
2020-07-20 17:04:33 +00:00
|
|
|
]
|
|
|
|
onAccepted: {
|
|
|
|
chatColumn.showImageArea(imageDialog.fileUrls);
|
|
|
|
txtData.forceActiveFocus();
|
|
|
|
}
|
|
|
|
onRejected: {
|
|
|
|
chatColumn.hideExtendedArea();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-09 19:10:28 +00:00
|
|
|
ScrollView {
|
|
|
|
id: scrollView
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.right: sendBtns.left
|
|
|
|
anchors.rightMargin: 0
|
2020-07-31 15:25:45 +00:00
|
|
|
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
|
|
|
topPadding: Style.current.padding
|
|
|
|
|
2020-07-09 19:10:28 +00:00
|
|
|
StyledTArea {
|
2020-07-31 21:30:55 +00:00
|
|
|
textFormat: Text.RichText
|
2020-07-09 19:10:28 +00:00
|
|
|
id: txtData
|
|
|
|
text: ""
|
|
|
|
selectByMouse: true
|
2020-07-31 15:25:45 +00:00
|
|
|
wrapMode: TextArea.Wrap
|
2020-07-09 19:10:28 +00:00
|
|
|
font.pixelSize: 15
|
|
|
|
//% "Type a message..."
|
|
|
|
placeholderText: qsTrId("type-a-message")
|
|
|
|
Keys.onPressed: onEnter(event)
|
|
|
|
background: Rectangle {
|
2020-07-22 20:16:06 +00:00
|
|
|
color: Style.current.transparent
|
2020-07-02 18:49:02 +00:00
|
|
|
}
|
2020-06-24 03:23:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-09 19:10:28 +00:00
|
|
|
ChatButtons {
|
|
|
|
id: sendBtns
|
2020-07-16 06:23:00 +00:00
|
|
|
height: parent.height
|
2020-07-09 19:10:28 +00:00
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
|
|
anchors.right: parent.right
|
|
|
|
addToChat: function (text) {
|
|
|
|
txtData.insert(txtData.length, text)
|
|
|
|
}
|
2020-08-03 14:01:47 +00:00
|
|
|
onSend: function(){
|
|
|
|
sendMsg(false)
|
|
|
|
}
|
2020-07-09 19:10:28 +00:00
|
|
|
}
|
2020-05-28 19:41:31 +00:00
|
|
|
}
|
|
|
|
/*##^##
|
|
|
|
Designer {
|
2020-07-10 21:47:31 +00:00
|
|
|
D{i:0;formeditorColor:"#ffffff"}
|
2020-05-28 19:41:31 +00:00
|
|
|
}
|
|
|
|
##^##*/
|