mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-04-20 01:18:29 +00:00
Change date and time pickers into datetime popup. Upgrade date picker design. Fix time picker design to follow popup layout. Fix audio video conference URI migration in linphonerc and avoid to replace it if it already exists (same for conference URI). Remove binding loop warning on combobox. In meeting creation, format dates to system and fix combobox display.
345 lines
11 KiB
QML
345 lines
11 KiB
QML
import QtQuick 2.7
|
|
import QtQuick.Layouts 1.3
|
|
|
|
import Clipboard 1.0
|
|
import App 1.0
|
|
import Common 1.0
|
|
import Linphone 1.0
|
|
|
|
import Common.Styles 1.0
|
|
import Linphone.Styles 1.0
|
|
import TextToSpeech 1.0
|
|
import Utils 1.0
|
|
import Units 1.0
|
|
import UtilsCpp 1.0
|
|
import LinphoneEnums 1.0
|
|
|
|
import ColorsList 1.0
|
|
|
|
import 'Message.js' as Logic
|
|
import 'qrc:/ui/scripts/Utils/utils.js' as Utils
|
|
|
|
// =============================================================================
|
|
|
|
Loader{
|
|
id: mainItem
|
|
property ContentModel contentModel
|
|
property ConferenceInfoModel conferenceInfoModel: contentModel ? contentModel.conferenceInfoModel : null
|
|
property int maxWidth : parent.width
|
|
property int fitHeight: active && item ? item.fitHeight + (isExpanded? 200 : 0): 0
|
|
property int fitWidth: active && item ? maxWidth/2 + ChatCalendarMessageStyle.widthMargin*2 : 0
|
|
property bool containsMouse: false
|
|
property int gotoButtonMode: -1 //-1: hide, 0:goto, 1:MoreInfo
|
|
property bool isExpanded : false
|
|
|
|
signal expandToggle()
|
|
signal conferenceUriCopied()
|
|
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
property font customFont : SettingsModel.textMessageFont
|
|
active: mainItem.conferenceInfoModel
|
|
|
|
sourceComponent: MouseArea{
|
|
id: loadedItem
|
|
property int fitHeight: layout.fitHeight + ChatCalendarMessageStyle.topMargin+ChatCalendarMessageStyle.bottomMargin
|
|
property int fitWidth: layout.fitWidth
|
|
|
|
anchors.fill: parent
|
|
anchors.leftMargin: ChatCalendarMessageStyle.widthMargin
|
|
anchors.rightMargin: ChatCalendarMessageStyle.widthMargin
|
|
anchors.topMargin: ChatCalendarMessageStyle.topMargin
|
|
anchors.bottomMargin: ChatCalendarMessageStyle.bottomMargin
|
|
|
|
clip: false
|
|
|
|
hoverEnabled: true
|
|
onClicked: mainItem.expandToggle()
|
|
onHoveredChanged: mainItem.containsMouse = loadedItem.containsMouse
|
|
|
|
ColumnLayout{
|
|
id: layout
|
|
property int fitHeight: dateRow.implicitHeight + title.implicitHeight + participantsRow.implicitHeight +expandedDescription.implicitHeight
|
|
property int fitWidth: Layout.minimumWidth
|
|
anchors.fill: parent
|
|
spacing: 0
|
|
RowLayout {
|
|
id: dateRow
|
|
Layout.fillWidth: true
|
|
//Layout.preferredWidth: parent.width // Need this because fillWidth is not enough...
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.alignment: Qt.AlignTop
|
|
Layout.topMargin: 5
|
|
spacing: 10
|
|
RowLayout {
|
|
id: scheduleRow
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.leftMargin: 5
|
|
spacing: ChatCalendarMessageStyle.schedule.spacing
|
|
Item{
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.preferredWidth: ChatCalendarMessageStyle.schedule.iconSize
|
|
clip: false
|
|
Icon{
|
|
anchors.centerIn: parent
|
|
icon: ChatCalendarMessageStyle.schedule.icon
|
|
iconSize: ChatCalendarMessageStyle.schedule.iconSize
|
|
overwriteColor: ChatCalendarMessageStyle.schedule.color
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: conferenceTime
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.minimumWidth: implicitWidth
|
|
|
|
verticalAlignment: Qt.AlignVCenter
|
|
color: ChatCalendarMessageStyle.schedule.color
|
|
elide: Text.ElideRight
|
|
font.pointSize: ChatCalendarMessageStyle.schedule.pointSize
|
|
text: Qt.formatDateTime(mainItem.conferenceInfoModel.dateTime, 'hh:mm')
|
|
+ (mainItem.conferenceInfoModel.duration > 0 ? ' (' +Utils.formatDuration(mainItem.conferenceInfoModel.duration * 60) + ')'
|
|
: '')
|
|
}
|
|
}
|
|
Text{
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.rightMargin: 15
|
|
horizontalAlignment: Qt.AlignRight
|
|
verticalAlignment: Qt.AlignVCenter
|
|
color: ChatCalendarMessageStyle.schedule.color
|
|
elide: Text.ElideRight
|
|
font.pointSize: ChatCalendarMessageStyle.schedule.pointSize
|
|
//: 'Organizer' : Label Title for the organizer.
|
|
text: qsTr('icsOrganizer') +' : ' +UtilsCpp.getDisplayName(mainItem.conferenceInfoModel.organizer)
|
|
}
|
|
}
|
|
Text{
|
|
id: title
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.alignment: Qt.AlignTop
|
|
Layout.leftMargin: 10
|
|
|
|
elide: Text.ElideRight
|
|
color: ChatCalendarMessageStyle.subject.color
|
|
font.pointSize: ChatCalendarMessageStyle.subject.pointSize
|
|
font.weight: Font.Bold
|
|
text: mainItem.conferenceInfoModel.subject
|
|
}
|
|
RowLayout {
|
|
id: participantsRow
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.minimumHeight: 4 + (mainItem.isExpanded ? expandedParticipantsList.minimumHeight : ChatCalendarMessageStyle.lineHeight)
|
|
Layout.alignment: Qt.AlignTop
|
|
Layout.leftMargin: 5
|
|
Layout.rightMargin: 10
|
|
|
|
spacing: ChatCalendarMessageStyle.participants.spacing
|
|
|
|
Item{
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.preferredWidth: ChatCalendarMessageStyle.participants.iconSize
|
|
Layout.alignment: Qt.AlignTop
|
|
clip: false
|
|
Icon{
|
|
anchors.top: parent.top
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
icon: ChatCalendarMessageStyle.participants.icon
|
|
iconSize: ChatCalendarMessageStyle.participants.iconSize
|
|
overwriteColor: ChatCalendarMessageStyle.participants.color
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: participantsList
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.topMargin: 4
|
|
Layout.alignment: Qt.AlignTop
|
|
visible: !mainItem.isExpanded
|
|
color: ChatCalendarMessageStyle.participants.color
|
|
elide: Text.ElideRight
|
|
font.pointSize: ChatCalendarMessageStyle.participants.pointSize
|
|
text: mainItem.conferenceInfoModel.displayNamesToString
|
|
}
|
|
ScrollableListView{
|
|
id: expandedParticipantsList
|
|
property int minimumHeight: Math.min( count * ChatCalendarMessageStyle.lineHeight, layout.height/(descriptionTitle.visible?3:2))
|
|
Layout.fillWidth: true
|
|
Layout.topMargin: 4
|
|
Layout.minimumHeight: minimumHeight
|
|
Layout.alignment: Qt.AlignTop
|
|
spacing: 0
|
|
visible: mainItem.isExpanded
|
|
onVisibleChanged: model= mainItem.conferenceInfoModel.getParticipants()
|
|
|
|
delegate: Row{
|
|
spacing: 5
|
|
width: expandedParticipantsList.contentWidth
|
|
height: ChatCalendarMessageStyle.lineHeight
|
|
Text{
|
|
id: displayName
|
|
height: ChatCalendarMessageStyle.lineHeight
|
|
text: modelData.displayName
|
|
color: ChatCalendarMessageStyle.participants.color
|
|
font.pointSize: ChatCalendarMessageStyle.participants.pointSize
|
|
elide: Text.ElideRight
|
|
}
|
|
Text{
|
|
height: ChatCalendarMessageStyle.lineHeight
|
|
width: expandedParticipantsList.contentWidth - displayName.width - parent.spacing // parent.width is not enough. Force width
|
|
text: '('+modelData.address+')'
|
|
color: ChatCalendarMessageStyle.participants.color
|
|
font.pointSize: ChatCalendarMessageStyle.participants.pointSize
|
|
elide: Text.ElideRight
|
|
}
|
|
}
|
|
}
|
|
Item{
|
|
Layout.preferredWidth: expandButton.iconSize
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.lineHeight
|
|
Layout.alignment: Qt.AlignTop | Qt.AlignRight
|
|
|
|
ActionButton{
|
|
id: expandButton
|
|
visible: mainItem.gotoButtonMode >= 0
|
|
anchors.centerIn: parent
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
isCustom: true
|
|
colorSet: mainItem.gotoButtonMode == 0 ? ChatCalendarMessageStyle.gotoButton : ChatCalendarMessageStyle.infoButton
|
|
iconSize: ChatCalendarMessageStyle.lineHeight
|
|
backgroundRadius: width/2
|
|
toggled: mainItem.isExpanded
|
|
onClicked: mainItem.expandToggle()
|
|
}
|
|
}
|
|
}
|
|
Item{
|
|
Layout.fillHeight: true
|
|
Layout.minimumHeight: 0
|
|
}
|
|
ColumnLayout{
|
|
id: expandedDescription
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.alignment: Qt.AlignTop
|
|
Layout.topMargin: 5
|
|
visible: mainItem.isExpanded
|
|
spacing: 0
|
|
|
|
Text{
|
|
id: descriptionTitle
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: 10
|
|
Layout.topMargin: 5
|
|
color: ChatCalendarMessageStyle.subject.color
|
|
font.pointSize: ChatCalendarMessageStyle.subject.pointSize
|
|
font.weight: Font.Bold
|
|
//: 'Description' : Title for the conference description.
|
|
text: qsTr('icsDescription')
|
|
visible: description.text != ''
|
|
}
|
|
TextAreaField{
|
|
id: description
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.leftMargin: 10
|
|
Layout.rightMargin: 10
|
|
padding: 0
|
|
color: 'transparent'
|
|
readOnly: true
|
|
textColor: ChatCalendarMessageStyle.description.color
|
|
font.pointSize: ChatCalendarMessageStyle.description.pointSize
|
|
border.width: 0
|
|
visible: description.text != ''
|
|
|
|
text: mainItem.conferenceInfoModel.description
|
|
}
|
|
Text{
|
|
id: linkTitle
|
|
Layout.fillWidth: true
|
|
Layout.leftMargin: 10
|
|
color: ChatCalendarMessageStyle.subject.color
|
|
font.pointSize: ChatCalendarMessageStyle.subject.pointSize
|
|
font.weight: Font.Bold
|
|
|
|
//: 'Conference address' : Title for the conference address.
|
|
text: qsTr('icsconferenceAddressTitle')
|
|
}
|
|
RowLayout{
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.leftMargin: 10
|
|
Layout.rightMargin: 10
|
|
spacing: 10
|
|
TextField{
|
|
id: uriField
|
|
readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredHeight: ChatCalendarMessageStyle.copyLinkButton.iconSize
|
|
textFieldStyle: TextFieldStyle.flatInverse
|
|
text: mainItem.conferenceInfoModel.uri
|
|
|
|
}
|
|
ActionButton{
|
|
isCustom: true
|
|
colorSet: ChatCalendarMessageStyle.copyLinkButton
|
|
backgroundRadius: width/2
|
|
onClicked: {
|
|
Clipboard.text = uriField.text
|
|
mainItem.conferenceUriCopied()
|
|
}
|
|
}
|
|
}
|
|
RowLayout{
|
|
Layout.fillWidth: true
|
|
Layout.topMargin: 10
|
|
Layout.rightMargin: 10
|
|
spacing: 10
|
|
Item{
|
|
Layout.fillWidth: true
|
|
}
|
|
TextButtonC{
|
|
addHeight: 20
|
|
//: 'Join' : Action button to join the conference.
|
|
text: qsTr('icsJoinButton').toUpperCase()
|
|
onClicked: CallsListModel.prepareConferenceCall(mainItem.conferenceInfoModel)
|
|
}
|
|
ActionButton{
|
|
isCustom: true
|
|
colorSet: ChatCalendarMessageStyle.editButton
|
|
backgroundRadius: width/2
|
|
visible: UtilsCpp.isMe(mainItem.conferenceInfoModel.organizer)
|
|
onClicked: {
|
|
window.detachVirtualWindow()
|
|
window.attachVirtualWindow(Utils.buildAppDialogUri('NewConference')
|
|
,{conferenceInfoModel: mainItem.conferenceInfoModel})
|
|
}
|
|
}
|
|
ActionButton{
|
|
isCustom: true
|
|
colorSet: ChatCalendarMessageStyle.deleteButton
|
|
backgroundRadius: width/2
|
|
onClicked: {
|
|
window.attachVirtualWindow(Utils.buildCommonDialogUri('ConfirmDialog'), {
|
|
//: 'Do you really want do delete this meeting?' : Warning message to confirm the deletion of a meeting.
|
|
descriptionText: qsTr('deleteConferenceInfo'),
|
|
}, function (status) {
|
|
if (status) {
|
|
mainItem.conferenceInfoModel.deleteConferenceInfo()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|