linphone-desktop/Linphone/view/Control/Popup/Dialog/Dialog.qml
2024-10-18 17:54:41 +02:00

154 lines
4.2 KiB
QML

import QtQuick
import QtQuick.Controls.Basic as Control
import QtQuick.Effects
import QtQuick.Layouts
import Linphone
Popup {
id: mainItem
modal: true
anchors.centerIn: parent
closePolicy: Control.Popup.NoAutoClose
leftPadding: title.length === 0 ? 10 * DefaultStyle.dp : 33 * DefaultStyle.dp
rightPadding: title.length === 0 ? 10 * DefaultStyle.dp : 33 * DefaultStyle.dp
topPadding: title.length === 0 ? 10 * DefaultStyle.dp : 37 * DefaultStyle.dp
bottomPadding: title.length === 0 ? 10 * DefaultStyle.dp : 37 * DefaultStyle.dp
underlineColor: DefaultStyle.main1_500_main
radius: title.length === 0 ? 16 * DefaultStyle.dp : 0
property string title
property string text
property string details
property string firstButtonText: firstButtonAccept ? qsTr("Oui") : qsTr("Annuler")
property string secondButtonText: secondButtonAccept ? qsTr("Confirmer") : qsTr("Non")
property alias content: contentLayout.data
property alias buttons: buttonsLayout.data
property alias firstButton: firstButtonId
property alias secondButton: secondButtonId
property bool firstButtonAccept: true
property bool secondButtonAccept: false
signal accepted()
signal rejected()
contentItem: FocusScope {
implicitWidth: child.implicitWidth
implicitHeight: child.implicitHeight
onVisibleChanged: {
if(visible) forceActiveFocus()
}
Keys.onPressed: (event) => {
if(visible && event.key == Qt.Key_Escape){
mainItem.close()
event.accepted = true
}
}
ColumnLayout {
id: child
anchors.fill: parent
spacing: 15 * DefaultStyle.dp
Text{
id: titleText
Layout.fillWidth: true
visible: text.length != 0
text: mainItem.title
color: DefaultStyle.main1_500_main
font {
pixelSize: 22 * DefaultStyle.dp
weight: 800 * DefaultStyle.dp
}
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignLeft
}
Rectangle{
Layout.fillWidth: true
Layout.preferredHeight: 1
color: DefaultStyle.main2_400
visible: titleText.visible
}
Text {
id: defaultText
visible: text.length != 0
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
text: mainItem.text
font {
pixelSize: 14 * DefaultStyle.dp
weight: 400 * DefaultStyle.dp
}
wrapMode: Text.Wrap
horizontalAlignment: titleText.visible ? Text.AlignLeft : Text.AlignHCenter
}
Text {
id: detailsText
visible: text.length != 0
Layout.fillWidth: true
//Layout.preferredWidth: 278 * DefaultStyle.dp
Layout.alignment: Qt.AlignCenter
text: mainItem.details
font {
pixelSize: 13 * DefaultStyle.dp
weight: 400 * DefaultStyle.dp
italic: true
}
wrapMode: Text.Wrap
horizontalAlignment: Text.AlignHCenter
}
ColumnLayout {
id: contentLayout
Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: false
}
RowLayout {
id: buttonsLayout
Layout.alignment: Qt.AlignBottom | ( titleText.visible ? Qt.AlignRight : Qt.AlignHCenter)
spacing: titleText.visible ? 20 * DefaultStyle.dp : 10 * DefaultStyle.dp
// Default buttons only visible if no other children
// have been set
Button {
id:firstButtonId
visible: mainItem.buttons.length === 2
text: mainItem.firstButtonText
leftPadding: 20 * DefaultStyle.dp
rightPadding: 20 * DefaultStyle.dp
topPadding: 11 * DefaultStyle.dp
bottomPadding: 11 * DefaultStyle.dp
inversedColors: !mainItem.firstButtonAccept
focus: !firstButtonAccept
onClicked: {
if(firstButtonAccept)
mainItem.accepted()
else
mainItem.rejected()
mainItem.close()
}
KeyNavigation.left: secondButtonId
KeyNavigation.right: secondButtonId
}
Button {
id: secondButtonId
visible: mainItem.buttons.length === 2
text: mainItem.secondButtonText
leftPadding: 20 * DefaultStyle.dp
rightPadding: 20 * DefaultStyle.dp
topPadding: 11 * DefaultStyle.dp
bottomPadding: 11 * DefaultStyle.dp
focus: !secondButtonAccept
onClicked: {
if(secondButtonAccept)
mainItem.accepted()
else
mainItem.rejected()
mainItem.close()
}
KeyNavigation.left: firstButtonId
KeyNavigation.right: firstButtonId
}
}
}
}
}