import DeltaChat 1.0 import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Dialogs 1.3 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.12 as Kirigami Pane { id: root required property DcContext context required property var chatId required property var chat property var attachFileUrl: "" property bool isContactBlocked: false property bool canSend: root.chat && root.chat.canSend property bool isContactRequest: root.chat && root.chat.isContactRequest readonly property string vChatUrl: root.context.getConfig("webrtc_instance") function createMessage() { let DC_MSG_TEXT = 10; let DC_MSG_FILE = 60; if (attachFileUrl.length > 0) { var msg = root.context.newMessage(DC_MSG_FILE); msg.setFile(attachFileUrl); } else { var msg = root.context.newMessage(DC_MSG_TEXT); } msg.setText(messageField.text); return msg; } padding: 0 FileDialog { id: attachFileDialog title: "Attach" folder: shortcuts.home onAccepted: { var url = attachFileDialog.fileUrl.toString(); if (url.startsWith("file://")) { attachFileUrl = url.substring(7); console.log("Attaching " + attachFileUrl); } } } RowLayout { width: parent.width Button { id: attachButton action: Action { shortcut: "Ctrl+O" onTriggered: { if (attachButton.enabled) { root.focus = true; attachButton.focus = true; attachButton.clicked(); } } } visible: root.canSend text: attachFileUrl.length > 0 ? qsTr("Detach") : qsTr("Attach") hoverEnabled: true ToolTip.visible: hovered ToolTip.text: attachFileUrl.length > 0 ? "Ctrl+O
Attached file is " + attachFileUrl + "" : "Ctrl+O" Layout.alignment: Qt.AlignBottom icon.name: "mail-attachment" onClicked: { if (attachFileUrl.length > 0) attachFileUrl = ""; else attachFileDialog.open(); } } TextArea { id: messageField visible: root.canSend Layout.fillWidth: true placeholderText: qsTr("Message") wrapMode: TextArea.Wrap selectByMouse: true Keys.onReturnPressed: { if (event.key === Qt.Key_Return) { if (event.modifiers & (Qt.ControlModifier | Qt.ShiftModifier)){ messageField.append(""); } else { if(sendButton.enabled){ sendButton.clicked(); dcAccounts.startIo(); event.accepted = true; } } } } Component.onCompleted: { let draft = root.context.getDraft(chatId); if (draft) messageField.text = draft.text; } Connections { function onEditingFinished() { let msg = root.createMessage(); root.context.setDraft(chatId, msg); } } } Button { id: sendVChatUrl enabled: vChatUrl.length > 0 ? true : false visible: root.canSend hoverEnabled: true ToolTip.visible: hovered ToolTip.text: "Send videochat invitation" text: "📞" Layout.preferredWidth: attachButton.width / 2 Layout.alignment: Qt.AlignBottom font.pixelSize: 20 onClicked: { if(vChatUrl.length > 0) root.context.sendVChatInv(chatId); } } Button { id: sendButton hoverEnabled: true ToolTip.visible: hovered ToolTip.text: "Press Enter" visible: root.canSend Layout.alignment: Qt.AlignBottom icon.name: "document-send" text: qsTr("Send") enabled: messageField.length > 0 | attachFileUrl.length > 0 onClicked: { let msg = root.createMessage(); root.context.sendMessage(root.chatId, msg); attachFileUrl = ""; messageField.text = ""; root.context.setDraft(chatId, null); messageField.forceActiveFocus(); } } Button { id: acceptCBtn Layout.alignment: Qt.AlignBottom Layout.fillWidth: true text: "Accept" onClicked: { root.context.acceptChat(root.chatId); root.isContactBlocked = 0; } visible: root.isContactRequest icon.name: "call-start" } Button { id: blockCBtn Layout.alignment: Qt.AlignBottom Layout.fillWidth: true text: "Block" onClicked: { root.context.blockChat(root.chatId) updateChatlist(); acceptCBtn.visible = false; blockCBtn.visible = false; root.isContactBlocked = true; } visible: root.isContactRequest icon.name: "call-stop" } TextEdit { selectByMouse: true readOnly: true text: "This contact has been blocked.
You can see who you've blocked
in 'Settings' > 'View blocked users'" font.bold: true textFormat: TextEdit.RichText visible: root.isContactBlocked Layout.preferredWidth: root.width Layout.maximumWidth: root.width horizontalAlignment: TextEdit.AlignHCenter padding: Kirigami.Units.largeSpacing } } Component.onCompleted : { messageField.forceActiveFocus(); } }