/* * Copyright (C) 2020-2021 by Savoir-faire Linux * Author: Mingrui Zhang * Author: Trevor Tabah * Author: Andreas Traczyk * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import net.jami.Models 1.1 import net.jami.Adapters 1.1 import net.jami.Constants 1.1 import "../../commoncomponents" import "../js/pluginhandlerpickercreation.js" as PluginHandlerPickerCreation Rectangle { id: root property string headerUserAliasLabelText: "" property string headerUserUserNameLabelText: "" property bool allMessagesLoaded signal needToHideConversationInCall signal messagesCleared signal messagesLoaded function focusChatView() { chatViewFooter.textInput.forceActiveFocus() } color: JamiTheme.chatviewBgColor ColumnLayout { anchors.fill: root spacing: 0 MessageWebViewHeader { id: messageWebViewHeader Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.preferredHeight: JamiTheme.messageWebViewHeaderPreferredHeight Layout.maximumHeight: JamiTheme.messageWebViewHeaderPreferredHeight userAliasLabelText: headerUserAliasLabelText userUserNameLabelText: headerUserUserNameLabelText DropArea { anchors.fill: parent onDropped: chatViewFooter.setFilePathsToSend(drop.urls) } onBackClicked: { mainView.showWelcomeView() } onNeedToHideConversationInCall: { root.needToHideConversationInCall() } onPluginSelector: { // Create plugin handler picker - PLUGINS PluginHandlerPickerCreation.createPluginHandlerPickerObjects( root, false) PluginHandlerPickerCreation.calculateCurrentGeo(root.width / 2, root.height / 2) PluginHandlerPickerCreation.openPluginHandlerPicker() } } StackLayout { id: chatViewStack Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.maximumWidth: JamiTheme.chatViewMaximumWidth Layout.fillHeight: true Layout.topMargin: JamiTheme.chatViewHairLineSize Layout.bottomMargin: JamiTheme.chatViewHairLineSize currentIndex: CurrentConversation.isRequest || CurrentConversation.needsSyncing Loader { active: CurrentConversation.id !== "" sourceComponent: MessageListView { DropArea { anchors.fill: parent onDropped: chatViewFooter.setFilePathsToSend(drop.urls) } } } InvitationView { id: invitationView Layout.fillWidth: true Layout.fillHeight: true } } ReadOnlyFooter { visible: CurrentConversation.readOnly Layout.fillWidth: true } ChatViewFooter { id: chatViewFooter visible: { if (CurrentConversation.needsSyncing || CurrentConversation.readOnly) return false else if (CurrentConversation.isSwarm && CurrentConversation.isRequest) return false return true } Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.preferredHeight: implicitHeight Layout.maximumHeight: JamiTheme.chatViewFooterMaximumHeight DropArea { anchors.fill: parent onDropped: chatViewFooter.setFilePathsToSend(drop.urls) } } } }