mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-09-10 12:03:18 +02:00
callviewcontextmenu: cleanup
Change-Id: I76f77f7e5f7eb3e2c46e01f9cdd51b2d40af7739 GitLab: #975
This commit is contained in:
parent
5df521eb70
commit
ad7d8e136f
5 changed files with 133 additions and 190 deletions
13
resources/icons/informations_black_24dp.svg
Normal file
13
resources/icons/informations_black_24dp.svg
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<g id="noun-about-3359358" transform="translate(-188.36 -188.36)">
|
||||
<path id="Path_14" d="M200.4,190.4c-5.5,0-10,4.5-10,10s4.5,10,10,10s10-4.5,10-10C210.4,194.8,205.9,190.4,200.4,190.4z
|
||||
M200.4,208.5c-4.5,0-8.2-3.7-8.2-8.2s3.7-8.2,8.2-8.2c4.5,0,8.2,3.7,8.2,8.2C208.5,204.9,204.9,208.5,200.4,208.5L200.4,208.5z"/>
|
||||
<path id="Path_15" d="M200.4,197.7c-0.5,0-0.9,0.4-0.9,0.9c0,0,0,0,0,0v7.7c0,0.5,0.4,0.9,0.9,0.9s0.9-0.4,0.9-0.9l0,0v-7.7
|
||||
C201.3,198.1,200.9,197.7,200.4,197.7C200.4,197.7,200.4,197.7,200.4,197.7z"/>
|
||||
<path id="Path_16" d="M201.3,195.3c0,0.5-0.4,0.9-0.9,0.9c-0.5,0-0.9-0.4-0.9-0.9c0-0.5,0.4-0.9,0.9-0.9l0,0
|
||||
C200.9,194.4,201.3,194.8,201.3,195.3"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1,022 B |
19
resources/icons/screenshot_black_24dp.svg
Normal file
19
resources/icons/screenshot_black_24dp.svg
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M2.9,9.1c0.5,0,0.9-0.4,0.9-0.9V4.2c0-0.2,0.2-0.3,0.3-0.3h3.9c0.5,0,1-0.4,1-0.9S8.6,2,8.1,2H4.2C3,2,2,3,2,4.2v3.9
|
||||
C2,8.6,2.4,9.1,2.9,9.1z"/>
|
||||
<path d="M21.1,14.9c-0.5,0-0.9,0.4-0.9,0.9v3.9c0,0.2-0.2,0.3-0.3,0.3h-3.9c-0.5,0-0.9,0.4-0.9,0.9c0,0.5,0.4,1,0.9,1h3.9
|
||||
c1.2,0,2.2-1,2.2-2.2v-3.9C22,15.4,21.6,14.9,21.1,14.9z"/>
|
||||
<path d="M8.1,20.1H4.2c-0.2,0-0.3-0.2-0.3-0.3v-3.9c0-0.5-0.4-1-1-1c-0.5,0-0.9,0.4-0.9,1v3.9C2,21,3,22,4.2,22h3.9
|
||||
c0.5,0,1-0.4,1-1C9.1,20.5,8.6,20.1,8.1,20.1z"/>
|
||||
<path d="M15.9,3.9h3.9c0.2,0,0.3,0.2,0.3,0.3v3.9c0,0.5,0.4,0.9,0.9,0.9S22,8.6,22,8.1V4.2C22,3,21,2,19.8,2h-3.9
|
||||
c-0.5,0-0.9,0.4-0.9,0.9S15.4,3.9,15.9,3.9z"/>
|
||||
<path d="M16.8,12c0-1.3-0.5-2.5-1.4-3.4c-0.9-0.9-2.1-1.4-3.4-1.4c0,0,0,0,0,0c-1.3,0-2.5,0.5-3.4,1.4C7.7,9.5,7.2,10.7,7.2,12
|
||||
c0,2.7,2.2,4.8,4.8,4.8c0,0,0,0,0,0C14.7,16.8,16.8,14.7,16.8,12z M12,9.1C12,9.1,12,9.1,12,9.1c1.6,0,2.9,1.3,2.9,2.9
|
||||
c0,0.8-0.3,1.5-0.9,2.1c-0.5,0.5-1.3,0.9-2.1,0.9c0,0,0,0,0,0c-1.6,0-2.9-1.3-2.9-2.9c0-0.8,0.3-1.5,0.9-2.1
|
||||
C10.5,9.4,11.2,9.1,12,9.1z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -56,12 +56,12 @@ Item {
|
|||
hoveredOverlaySinkId,
|
||||
hoveredOverVideoMuted)
|
||||
{
|
||||
callViewContextMenu.x = x
|
||||
callViewContextMenu.y = y
|
||||
callViewContextMenu.x = root.width - x >= callViewContextMenu.width ? x : root.width - callViewContextMenu.width
|
||||
callViewContextMenu.y = root.height - y >= callViewContextMenu.height ? y : root.height - callViewContextMenu.height
|
||||
callViewContextMenu.hoveredOverlayUri = hoveredOverlayUri
|
||||
callViewContextMenu.hoveredOverlaySinkId = hoveredOverlaySinkId
|
||||
callViewContextMenu.hoveredOverVideoMuted = hoveredOverVideoMuted
|
||||
callViewContextMenu.openMenu()
|
||||
callViewContextMenu.open()
|
||||
}
|
||||
|
||||
DropArea {
|
||||
|
@ -178,18 +178,14 @@ Item {
|
|||
CallViewContextMenu {
|
||||
id: callViewContextMenu
|
||||
|
||||
onTransferCallButtonClicked: openContactPicker(ContactList.TRANSFER)
|
||||
onPluginItemClicked: openPluginsMenu()
|
||||
onScreenshotTaken: {
|
||||
toastManager.instantiateToast();
|
||||
}
|
||||
onRecordCallClicked: CallAdapter.recordThisCallToggle()
|
||||
onOpenSelectionWindow: {
|
||||
SelectScreenWindowCreation.presentSelectScreenWindow(
|
||||
appWindow, windowSelection)
|
||||
}
|
||||
onScreenshotButtonHoveredChanged: {
|
||||
participantsLayer.screenshotButtonHovered = screenshotButtonHovered
|
||||
}
|
||||
}
|
||||
onVisibleChanged: {
|
||||
callViewContextMenu.close()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import net.jami.Models 1.1
|
||||
import net.jami.Adapters 1.1
|
||||
|
@ -28,206 +30,119 @@ import "../../commoncomponents"
|
|||
import "../../commoncomponents/contextmenu"
|
||||
import "../js/screenrubberbandcreation.js" as ScreenRubberBandCreation
|
||||
|
||||
ContextMenuAutoLoader {
|
||||
Popup {
|
||||
id: root
|
||||
|
||||
property bool windowSelection: false
|
||||
|
||||
signal pluginItemClicked
|
||||
signal transferCallButtonClicked
|
||||
signal recordCallClicked
|
||||
signal openSelectionWindow
|
||||
signal screenshotTaken
|
||||
property bool screenshotButtonHovered: screenShot.itemHovered
|
||||
property bool screenshotButtonHovered: false
|
||||
|
||||
property string hoveredOverlayUri: ""
|
||||
property string hoveredOverlaySinkId: ""
|
||||
property bool hoveredOverVideoMuted: true
|
||||
|
||||
property list<GeneralMenuItem> menuItems: [
|
||||
GeneralMenuItem {
|
||||
id: resumePauseCall
|
||||
property var listModel: ListModel {
|
||||
id: actionsModel
|
||||
}
|
||||
|
||||
canTrigger: CurrentCall.isSIP
|
||||
itemName: CurrentCall.isPaused ?
|
||||
JamiStrings.resumeCall :
|
||||
JamiStrings.pauseCall
|
||||
iconSource: CurrentCall.isPaused ?
|
||||
JamiResources.play_circle_outline_24dp_svg :
|
||||
JamiResources.pause_circle_outline_24dp_svg
|
||||
onClicked: {
|
||||
CallAdapter.holdThisCallToggle()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: inputPanelSIP
|
||||
onAboutToShow: {
|
||||
actionsModel.clear()
|
||||
actionsModel.append({"Top": true})
|
||||
if (hoveredOverlayUri !== "" && hoveredOverVideoMuted === false)
|
||||
actionsModel.append({"Name": JamiStrings.tileScreenshot,
|
||||
"IconSource" : JamiResources.screenshot_black_24dp_svg})
|
||||
actionsModel.append({"Name": JamiStrings.advancedInformation,
|
||||
"IconSource": JamiResources.informations_black_24dp_svg})
|
||||
actionsModel.append({"Bottom": true})
|
||||
itemListView.implicitHeight = 20 + 45 * (actionsModel.count - 2)
|
||||
}
|
||||
|
||||
canTrigger: CurrentCall.isSIP
|
||||
itemName: JamiStrings.sipInputPanel
|
||||
iconSource: JamiResources.ic_keypad_svg
|
||||
onClicked: {
|
||||
sipInputPanel.open()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: callTransfer
|
||||
onAboutToHide: {
|
||||
screenshotButtonHovered = false
|
||||
hoveredOverlayUri = ""
|
||||
hoveredOverlaySinkId = ""
|
||||
hoveredOverVideoMuted = true
|
||||
actionsModel.clear()
|
||||
}
|
||||
|
||||
canTrigger: CurrentCall.isSIP
|
||||
itemName: JamiStrings.transferCall
|
||||
iconSource: JamiResources.phone_forwarded_24dp_svg
|
||||
addMenuSeparatorAfter: CurrentCall.isSIP
|
||||
onClicked: {
|
||||
root.transferCallButtonClicked()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: localRecord
|
||||
background: Rectangle {
|
||||
color: "transparent"
|
||||
}
|
||||
|
||||
itemName: CurrentCall.isRecordingLocally ?
|
||||
JamiStrings.stopRec :
|
||||
JamiStrings.startRec
|
||||
iconSource: JamiResources.fiber_manual_record_24dp_svg
|
||||
iconColor: JamiTheme.recordIconColor
|
||||
onClicked: {
|
||||
root.recordCallClicked()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: fullScreen
|
||||
contentItem: Rectangle {
|
||||
id: container
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
color: "#c4272727"
|
||||
radius: 4
|
||||
|
||||
itemName: layoutManager.isCallFullscreen ?
|
||||
JamiStrings.exitFullScreen :
|
||||
JamiStrings.viewFullScreen
|
||||
iconSource: layoutManager.isCallFullscreen ?
|
||||
JamiResources.close_fullscreen_24dp_svg :
|
||||
JamiResources.open_in_full_24dp_svg
|
||||
onClicked: {
|
||||
callStackView.toggleFullScreen()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: stopSharing
|
||||
ColumnLayout {
|
||||
anchors.topMargin: 8
|
||||
anchors.bottomMargin: 8
|
||||
ListView {
|
||||
id: itemListView
|
||||
|
||||
canTrigger: CurrentCall.isSharing
|
||||
&& !CurrentCall.isSIP
|
||||
&& !CurrentCall.isVideoMuted
|
||||
itemName: JamiStrings.stopSharing
|
||||
iconSource: JamiResources.share_stop_black_24dp_svg
|
||||
iconColor: JamiTheme.redColor
|
||||
onClicked: AvAdapter.stopSharing(CurrentCall.sharingSource)
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: shareScreen
|
||||
orientation: ListView.Vertical
|
||||
implicitWidth: 200
|
||||
implicitHeight: 100
|
||||
interactive: false
|
||||
|
||||
canTrigger: CurrentAccount.videoEnabled_Video
|
||||
&& AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY
|
||||
&& !CurrentCall.isSIP
|
||||
itemName: JamiStrings.shareScreen
|
||||
iconSource: JamiResources.laptop_black_24dp_svg
|
||||
onClicked: {
|
||||
if (Qt.application.screens.length === 1) {
|
||||
AvAdapter.shareEntireScreen(0)
|
||||
} else {
|
||||
windowSelection = false
|
||||
openSelectionWindow()
|
||||
}
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: shareWindow
|
||||
model: actionsModel
|
||||
delegate: ItemDelegate {
|
||||
id: menuItem
|
||||
|
||||
canTrigger: CurrentAccount.videoEnabled_Video
|
||||
&& AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY
|
||||
&& !CurrentCall.isSIP
|
||||
itemName: JamiStrings.shareWindow
|
||||
iconSource: JamiResources.window_black_24dp_svg
|
||||
onClicked: {
|
||||
AvAdapter.getListWindows()
|
||||
if (AvAdapter.windowsNames.length >= 1) {
|
||||
windowSelection = true
|
||||
openSelectionWindow()
|
||||
}
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: shareScreenArea
|
||||
width: 200
|
||||
height: Top || Bottom ? 10 : 45
|
||||
|
||||
canTrigger: CurrentAccount.videoEnabled_Video
|
||||
&& AvAdapter.currentRenderingDeviceType !== Video.DeviceType.DISPLAY
|
||||
&& !CurrentCall.isSIP
|
||||
&& Qt.platform.os.toString() !== "windows" // temporarily disable for windows
|
||||
itemName: JamiStrings.shareScreenArea
|
||||
iconSource: JamiResources.share_area_black_24dp_svg
|
||||
onClicked: {
|
||||
if (Qt.platform.os !== "windows") {
|
||||
AvAdapter.shareScreenArea(0, 0, 0, 0)
|
||||
} else {
|
||||
ScreenRubberBandCreation.createScreenRubberBandWindowObject()
|
||||
ScreenRubberBandCreation.showScreenRubberBandWindow()
|
||||
}
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: shareFile
|
||||
background: Rectangle {
|
||||
visible: !Top && !Bottom
|
||||
anchors.fill: parent
|
||||
color: menuItem.down ? "#c4aaaaaa" : menuItem.hovered ? "#c4777777" : "transparent"
|
||||
}
|
||||
|
||||
canTrigger: CurrentAccount.videoEnabled_Video
|
||||
&& !CurrentCall.isSIP
|
||||
itemName: JamiStrings.shareFile
|
||||
iconSource: JamiResources.file_black_24dp_svg
|
||||
onClicked: {
|
||||
jamiFileDialog.open()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: viewPlugin
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
visible: !Top && !Bottom
|
||||
ResponsiveImage {
|
||||
Layout.leftMargin: JamiTheme.preferredMarginSize
|
||||
source: IconSource
|
||||
color: "white"
|
||||
width: 20
|
||||
height: 20
|
||||
}
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: Name
|
||||
elide: Text.ElideRight
|
||||
font.pointSize: JamiTheme.participantFontSize
|
||||
color: "white"
|
||||
}
|
||||
}
|
||||
|
||||
canTrigger: PluginAdapter.isEnabled &&
|
||||
PluginAdapter.callMediaHandlersListCount
|
||||
itemName: JamiStrings.viewPlugin
|
||||
iconSource: JamiResources.extension_24dp_svg
|
||||
onClicked: {
|
||||
root.pluginItemClicked()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: advancedInformation
|
||||
onClicked: {
|
||||
switch(Name) {
|
||||
case JamiStrings.advancedInformation:
|
||||
CallAdapter.startTimerInformation()
|
||||
callInformationOverlay.open()
|
||||
break
|
||||
case JamiStrings.tileScreenshot:
|
||||
if (CallAdapter.takeScreenshot(videoProvider.captureRawVideoFrame(hoveredOverlaySinkId),
|
||||
UtilsAdapter.getDirScreenshot())) {
|
||||
screenshotTaken()
|
||||
}
|
||||
break
|
||||
}
|
||||
root.close()
|
||||
}
|
||||
|
||||
canTrigger: true
|
||||
itemName: JamiStrings.advancedInformation
|
||||
iconSource: JamiResources.settings_24dp_svg
|
||||
|
||||
onClicked: {
|
||||
CallAdapter.startTimerInformation();
|
||||
callInformationOverlay.open()
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: screenShot
|
||||
|
||||
canTrigger: hoveredOverlayUri !== "" && hoveredOverVideoMuted === false
|
||||
itemName: JamiStrings.tileScreenshot
|
||||
iconSource: JamiResources.baseline_camera_alt_24dp_svg
|
||||
|
||||
MaterialToolTip {
|
||||
id: tooltip
|
||||
|
||||
parent: screenShot
|
||||
visible: screenShot.itemHovered
|
||||
delay: Qt.styleHints.mousePressAndHoldInterval
|
||||
property bool isMe: CurrentAccount.uri === hoveredOverlayUri
|
||||
text: isMe ? JamiStrings.me
|
||||
: UtilsAdapter.getBestNameForUri(CurrentAccount.id, hoveredOverlayUri)
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
if (CallAdapter.takeScreenshot(videoProvider.captureRawVideoFrame(hoveredOverlaySinkId),
|
||||
UtilsAdapter.getDirScreenshot())) {
|
||||
screenshotTaken()
|
||||
onHoveredChanged: {
|
||||
if (Name === JamiStrings.tileScreenshot) {
|
||||
screenshotButtonHovered = hovered
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
Component.onCompleted: menuItemsToLoad = menuItems
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ Item {
|
|||
|
||||
Rectangle {
|
||||
z: -1
|
||||
border.color: JamiTheme.buttonTintedBlue
|
||||
border.color: voiceActive ? JamiTheme.buttonTintedBlue : "yellow"
|
||||
border.width: 2
|
||||
color: "transparent"
|
||||
radius: 10
|
||||
|
|
Loading…
Add table
Reference in a new issue