linphone-desktop/Linphone/view/Control/Form/Settings/ScreencastSettings.qml
Gaelle Braud 0a3d9cf8c9 UI fixes :
RichText fixes #LINQT-2460 #LINQT-2464

remove double back button chat infos #LINQT-2471

hide chat history button if call log does not have one #LINQT-2467

Cancel reply to when switching chat #LINQT-2407

fix typo
2026-03-12 12:31:26 +01:00

187 lines
No EOL
6.2 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick
import QtQuick.Layouts
import QtQuick.Effects
import QtQuick.Controls.Basic as Control
import Linphone
import UtilsCpp 1.0
import 'qrc:/qt/qml/Linphone/view/Style/buttonStyle.js' as ButtonStyle
import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
ColumnLayout {
id: mainItem
property CallGui call
property ConferenceGui conference: call.core.conference
property var desc: call.core.videoSourceDescriptor
property bool isLocalScreenSharing : conference?.core.isLocalScreenSharing || false
property bool screenSharingAvailable: !!conference && (!conference.core.isScreenSharingEnabled || isLocalScreenSharing)
spacing: Utils.getSizeWithScreenRatio(12)
onIsLocalScreenSharingChanged: {if(isLocalScreenSharing) mainItem.call.core.videoSourceDescriptor = mainItem.desc }
Text {
Layout.fillWidth: true
//: "Veuillez choisir lécran ou la fenêtre que vous souihaitez partager au autres participants"
text: qsTr("screencast_settings_choose_window_text")
font.pixelSize: Utils.getSizeWithScreenRatio(14)
color: DefaultStyle.main2_500_main
}
TabBar {
Layout.fillWidth: true
id: bar
spacing: Utils.getSizeWithScreenRatio(40)
pixelSize: Utils.getSizeWithScreenRatio(16)
//: "Ecran entier"
model: [qsTr("screencast_settings_all_screen_label"),
//: "Fenêtre"
qsTr("screencast_settings_one_window_label")]
}
component ScreenPreviewLayout: Control.Control {
id: screenPreview
signal clicked()
property var screenSource
property int screenIndex
property bool selected: false
property bool displayScreen: true
property real horizontalMargin: 0
leftPadding: Utils.getSizeWithScreenRatio(18)
rightPadding: Utils.getSizeWithScreenRatio(18)
topPadding: Utils.getSizeWithScreenRatio(13)
bottomPadding: Utils.getSizeWithScreenRatio(13)
background: Rectangle {
anchors.fill: parent
anchors.leftMargin: screenPreview.horizontalMargin
anchors.rightMargin: screenPreview.horizontalMargin
color: screenPreview.selected ? DefaultStyle.main2_100 : DefaultStyle.grey_0
border.width: Utils.getSizeWithScreenRatio(2)
border.color: screenPreview.selected ? DefaultStyle.main2_400 : DefaultStyle.main2_200
radius: Utils.getSizeWithScreenRatio(10)
MouseArea {
anchors.fill: parent
onClicked: {
screenPreview.clicked()
}
}
}
contentItem: ColumnLayout {
spacing: 0
Item{
Layout.fillWidth: true
Layout.fillHeight: true
Image {
anchors.centerIn: parent
//Layout.preferredHeight: Utils.getSizeWithScreenRatio(170)
source: $modelData?.windowId ? "image://window/"+ $modelData.windowId : "image://screen/"+ $modelData.screenIndex
sourceSize.width: parent.width
sourceSize.height: parent.height
cache: false
}
}
RowLayout{
Layout.topMargin: Utils.getSizeWithScreenRatio(6)
spacing: Utils.getSizeWithScreenRatio(5)
Image{
Layout.preferredHeight: Utils.getSizeWithScreenRatio(15)
Layout.preferredWidth: Utils.getSizeWithScreenRatio(15)
visible: !!$modelData?.windowId
source: visible ? "image://window_icon/"+ $modelData.windowId : ''
sourceSize.width: width
sourceSize.height: height
cache: false
}
Text {
Layout.fillWidth: true
//: "Ecran %1"
text: !!$modelData?.windowId ? $modelData.name : qsTr("screencast_settings_screen").arg(screenIndex+1)
horizontalAlignment: Text.AlignHCenter
font.pixelSize: Utils.getSizeWithScreenRatio(displayScreen ? 14 : 10)
elide: Text.ElideRight
maximumLineCount: 1
}
}
}
}
StackLayout {
id: stacklayout
currentIndex: bar.currentIndex
ListView{
id: screensLayout
spacing: Utils.getSizeWithScreenRatio(16)
clip: true
Layout.fillWidth: true
height: visible ? contentHeight : 0
currentIndex: -1
model: ScreenProxy{
id: screensList
mode: ScreenList.SCREENS
}
onVisibleChanged: {
if(visible) screensList.update()
else currentIndex = -1
}
delegate: ScreenPreviewLayout {
horizontalMargin: Utils.getSizeWithScreenRatio(28 - 20 ) // 20 coming from CallsWindow panel
width: screensLayout.width
height: Utils.getSizeWithScreenRatio(219)
screenIndex: index
onClicked: {//screensLayout.selectedIndex = index
screensLayout.currentIndex = index
mainItem.desc.core.screenSharingIndex = index
if( mainItem.conference.core.isLocalScreenSharing)
mainItem.call.core.videoSourceDescriptor = mainItem.desc
}
selected: mainItem.desc.core.screenSharingIndex === index
}
}
GridView{
id: windowsLayout
//property int selectedIndex
Layout.preferredHeight: visible ? contentHeight : 0
Layout.fillWidth: true
model: ScreenProxy{
id: windowsList
mode: ScreenList.WINDOWS
}
currentIndex: -1
onVisibleChanged: {
if(visible) windowsList.update()
else currentIndex = -1
}
cellWidth: width / 2
cellHeight: Utils.getSizeWithScreenRatio(112 + 15)
clip: true
delegate: Item {
width: windowsLayout.cellWidth
height: windowsLayout.cellHeight
ScreenPreviewLayout {
anchors.fill: parent
anchors.margins: Utils.getSizeWithScreenRatio(7)
displayScreen: false
screenIndex: index
onClicked: {
windowsLayout.currentIndex = index
mainItem.desc.core.windowId = $modelData.windowId
if( mainItem.conference.core.isLocalScreenSharing)
mainItem.call.core.videoSourceDescriptor = mainItem.desc
}
selected: mainItem.desc.core.windowId == $modelData.windowId
}
}
}
}
BigButton {
Layout.preferredHeight: height
height: implicitHeight
visible: mainItem.screenSharingAvailable
enabled: mainItem.isLocalScreenSharing || windowsLayout.currentIndex !== -1 || screensLayout.currentIndex !== -1
text: mainItem.conference && mainItem.conference.core.isLocalScreenSharing
//: "Stop
? qsTr("stop")
//: "Partager"
: qsTr("share")
onClicked: {
mainItem.conference.core.lToggleScreenSharing()
}
style: ButtonStyle.main
}
}