/* * Copyright (C) 2020 by Savoir-faire Linux * Author: Sébastien Blin * Author: Mingrui Zhang * * 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.14 import QtQuick.Controls 2.14 import QtQuick.Layouts 1.14 import QtQuick.Controls.Universal 2.12 import QtQml 2.14 import net.jami.Models 1.0 import "../../commoncomponents" Rectangle { id: root /* * ButtonCounts here is to make sure that flow layout margin is calculated correctly, * since no other methods can make buttons at the layout center. */ property int buttonPreferredSize: 24 property var isMaster: true property var isSip: false signal chatButtonClicked signal addToConferenceButtonClicked function updateMaster() { root.isMaster = CallAdapter.isCurrentMaster() addToConferenceButton.visible = !root.isSip && root.isMaster } function setButtonStatus(isPaused, isAudioOnly, isAudioMuted, isVideoMuted, isRecording, isSIP, isConferenceCall) { root.isMaster = CallAdapter.isCurrentMaster() root.isSip = isSIP noVideoButton.visible = !isAudioOnly addToConferenceButton.visible = !isSIP && isMaster transferCallButton.visible = isSIP sipInputPanelButton.visible = isSIP noMicButton.checked = isAudioMuted noVideoButton.checked = isVideoMuted } color: "transparent" z: 2 RowLayout { id: callOverlayButtonGroup spacing: 8 height: 56 anchors.fill: parent Item { Layout.preferredWidth: { // 6 is the number of button // If ~ 500px, go into wide mode (callOverlayButtonGroup.width < buttonPreferredSize * 12 - callOverlayButtonGroup.spacing * 6 + 300)? 0 : callOverlayButtonGroup.width / 2 - buttonPreferredSize * 3 - callOverlayButtonGroup.spacing } } HoverableButton { id: noMicButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 backgroundColor: Qt.rgba(0, 0, 0, 0.75) onEnterColor: Qt.rgba(0, 0, 0, 0.6) onPressColor: Qt.rgba(0, 0, 0, 0.5) onReleaseColor: Qt.rgba(0, 0, 0, 0.6) onExitColor: Qt.rgba(0, 0, 0, 0.75) buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize baseImage: "qrc:/images/icons/ic_mic_white_24dp.png" checkedImage: "qrc:/images/icons/ic_mic_off_white_24dp.png" baseColor: "white" checkedColor: JamiTheme.declineButtonPressedRed radius: 30 toolTipText: !checked ? qsTr("Press to mute the call") : qsTr("Press to unmute the call") onClicked: { CallAdapter.muteThisCallToggle() } } HoverableButton { id: hangUpButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 backgroundColor: JamiTheme.declineButtonRed onEnterColor: JamiTheme.declineButtonHoverRed onPressColor: JamiTheme.declineButtonPressedRed onReleaseColor: JamiTheme.declineButtonHoverRed onExitColor: JamiTheme.declineButtonRed buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize source: "qrc:/images/icons/ic_call_end_white_24px.svg" color: "white" radius: 30 toolTipText: qsTr("Press to hang up the call") onClicked: { CallAdapter.hangUpThisCall() } } HoverableButton { id: noVideoButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 backgroundColor: Qt.rgba(0, 0, 0, 0.75) onEnterColor: Qt.rgba(0, 0, 0, 0.6) onPressColor: Qt.rgba(0, 0, 0, 0.5) onReleaseColor: Qt.rgba(0, 0, 0, 0.6) onExitColor: Qt.rgba(0, 0, 0, 0.75) buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize baseImage: "qrc:/images/icons/ic_videocam_white.png" checkedImage: "qrc:/images/icons/ic_videocam_off_white_24dp.png" baseColor: "white" checkedColor: JamiTheme.declineButtonPressedRed radius: 30 toolTipText: !checked ? qsTr("Press to pause the call") : qsTr("Press to resume the call") onClicked: { CallAdapter.videoPauseThisCallToggle() } } Item { Layout.fillWidth: true } HoverableButton { id: addToConferenceButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 visible: !isMaster backgroundColor: Qt.rgba(0, 0, 0, 0.75) onEnterColor: Qt.rgba(0, 0, 0, 0.6) onPressColor: Qt.rgba(0, 0, 0, 0.5) onReleaseColor: Qt.rgba(0, 0, 0, 0.6) onExitColor: Qt.rgba(0, 0, 0, 0.75) buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize color: "white" source: "qrc:/images/icons/ic_group_add_white_24dp.png" radius: 30 toolTipText: qsTr("Press to add more contact into conference call") onClicked: { root.addToConferenceButtonClicked() } } HoverableButton { id: chatButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 backgroundColor: Qt.rgba(0, 0, 0, 0.75) onEnterColor: Qt.rgba(0, 0, 0, 0.6) onPressColor: Qt.rgba(0, 0, 0, 0.5) onReleaseColor: Qt.rgba(0, 0, 0, 0.6) onExitColor: Qt.rgba(0, 0, 0, 0.75) buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize color: "white" source: "qrc:/images/icons/ic_chat_white_24dp.png" radius: 30 toolTipText: qsTr("Press to toggle open the chatview") onClicked: { root.chatButtonClicked() } } HoverableButton { id: optionsButton Layout.preferredWidth: buttonPreferredSize * 2 Layout.preferredHeight: buttonPreferredSize * 2 backgroundColor: Qt.rgba(0, 0, 0, 0.75) onEnterColor: Qt.rgba(0, 0, 0, 0.6) onPressColor: Qt.rgba(0, 0, 0, 0.5) onReleaseColor: Qt.rgba(0, 0, 0, 0.6) onExitColor: Qt.rgba(0, 0, 0, 0.75) buttonImageHeight: buttonPreferredSize buttonImageWidth: buttonPreferredSize source: "qrc:/images/icons/more_vert-24px.svg" radius: 30 toolTipText: qsTr("Press to open chat options") onClicked: { var rectPos = mapToItem(callStackViewWindow, optionsButton.x, optionsButton.y) callViewContextMenu.activate() callViewContextMenu.x = rectPos.x + optionsButton.width/2 - callViewContextMenu.width/2 callViewContextMenu.y = rectPos.y - 12 - callViewContextMenu.height } } Item { Layout.preferredWidth: 8 } } }