/* * Copyright (C) 2020-2022 Savoir-faire Linux Inc. * 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 import QtQuick.Controls import QtQuick.Layouts 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() swarmDetailsPanel.visible = false } color: JamiTheme.chatviewBgColor ColumnLayout { anchors.fill: root spacing: 0 ChatViewHeader { id: chatViewHeader Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.preferredHeight: JamiTheme.chatViewHeaderPreferredHeight Layout.maximumHeight: JamiTheme.chatViewHeaderPreferredHeight userAliasLabelText: headerUserAliasLabelText userUserNameLabelText: headerUserUserNameLabelText DropArea { anchors.fill: parent onDropped: chatViewFooter.setFilePathsToSend(drop.urls) } onBackClicked: { mainView.showWelcomeView() } onNeedToHideConversationInCall: { root.needToHideConversationInCall() } onShowDetailsClicked: { swarmDetailsPanel.visible = !swarmDetailsPanel.visible } onPluginSelector: { // Create plugin handler picker - PLUGINS PluginHandlerPickerCreation.createPluginHandlerPickerObjects( root, false) PluginHandlerPickerCreation.calculateCurrentGeo(root.width / 2, root.height / 2) PluginHandlerPickerCreation.openPluginHandlerPicker() } } RowLayout { id: chatViewMainRow Layout.fillWidth: true Layout.fillHeight: true ColumnLayout { Layout.fillHeight: true Layout.fillWidth: true StackLayout { id: chatViewStack Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true Layout.fillHeight: true Layout.maximumWidth: JamiTheme.chatViewMaximumWidth 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) } } } SwarmDetailsPanel { id: swarmDetailsPanel visible: false Layout.fillHeight: true Layout.fillWidth: true } } } }