165 lines
5.8 KiB
QML
165 lines
5.8 KiB
QML
|
import QtQuick as Quick
|
||
|
import QtQuick.Layouts
|
||
|
import QtQuick.Controls as Controls
|
||
|
import QtQuick.Window
|
||
|
import Fluent
|
||
|
|
||
|
|
||
|
Popup {
|
||
|
id: control
|
||
|
property string title: ""
|
||
|
property string message: ""
|
||
|
property string neutralText: qsTr("Close")
|
||
|
property string negativeText: qsTr("Cancel")
|
||
|
property string positiveText: qsTr("OK")
|
||
|
property int messageTextFormart: Text.AutoText
|
||
|
property int delayTime: 100
|
||
|
property int buttonFlags: FluContentDialogType.NegativeButton | FluContentDialogType.PositiveButton
|
||
|
property var contentDelegate: Component{
|
||
|
Item{
|
||
|
}
|
||
|
}
|
||
|
property var onNeutralClickListener
|
||
|
property var onNegativeClickListener
|
||
|
property var onPositiveClickListener
|
||
|
signal neutralClicked
|
||
|
signal negativeClicked
|
||
|
signal positiveClicked
|
||
|
implicitWidth: 400
|
||
|
implicitHeight: layout_content.height
|
||
|
focus: true
|
||
|
Component{
|
||
|
id:com_message
|
||
|
Flickable{
|
||
|
id:sroll_message
|
||
|
contentHeight: text_message.height
|
||
|
contentWidth: width
|
||
|
clip: true
|
||
|
boundsBehavior:Flickable.StopAtBounds
|
||
|
width: parent.width
|
||
|
height: message === "" ? 0 : Math.min(text_message.height,300)
|
||
|
Controls.ScrollBar.vertical: ScrollBar {}
|
||
|
Text{
|
||
|
id:text_message
|
||
|
font: TextStyle.Body
|
||
|
wrapMode: Text.WrapAnywhere
|
||
|
text:message
|
||
|
width: parent.width
|
||
|
topPadding: 4
|
||
|
leftPadding: 20
|
||
|
rightPadding: 20
|
||
|
bottomPadding: 4
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Rectangle {
|
||
|
id:layout_content
|
||
|
width: parent.width
|
||
|
height: layout_column.childrenRect.height
|
||
|
color: 'transparent'
|
||
|
radius:5
|
||
|
ColumnLayout{
|
||
|
id:layout_column
|
||
|
width: parent.width
|
||
|
Text{
|
||
|
id:text_title
|
||
|
font: TextStyle.Title
|
||
|
text:title
|
||
|
topPadding: 20
|
||
|
leftPadding: 20
|
||
|
rightPadding: 20
|
||
|
wrapMode: Text.WrapAnywhere
|
||
|
}
|
||
|
Loader{
|
||
|
sourceComponent: com_message
|
||
|
Layout.fillWidth: true
|
||
|
Layout.preferredHeight: status===Loader.Ready ? item.height : 0
|
||
|
}
|
||
|
Loader{
|
||
|
sourceComponent:control.visible ? control.contentDelegate : undefined
|
||
|
Layout.fillWidth: true
|
||
|
onStatusChanged: {
|
||
|
if(status===Loader.Ready){
|
||
|
Layout.preferredHeight = item.implicitHeight
|
||
|
}else{
|
||
|
Layout.preferredHeight = 0
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Rectangle{
|
||
|
id:layout_actions
|
||
|
Layout.fillWidth: true
|
||
|
Layout.preferredHeight: 60
|
||
|
radius: 5
|
||
|
color: Theme.dark ? Qt.rgba(32/255,32/255,32/255,1) : Qt.rgba(243/255,243/255,243/255,1)
|
||
|
RowLayout{
|
||
|
anchors
|
||
|
{
|
||
|
centerIn: parent
|
||
|
margins: spacing
|
||
|
fill: parent
|
||
|
}
|
||
|
spacing: 10
|
||
|
Item{
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
Button{
|
||
|
id:neutral_btn
|
||
|
visible: control.buttonFlags&ContentDialogType.NeutralButton
|
||
|
text: neutralText
|
||
|
width: parent.width
|
||
|
anchors.centerIn: parent
|
||
|
onClicked: {
|
||
|
if(control.onNeutralClickListener){
|
||
|
control.onNeutralClickListener()
|
||
|
}else{
|
||
|
neutralClicked()
|
||
|
control.close()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Item{
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
Button{
|
||
|
id:negative_btn
|
||
|
visible: control.buttonFlags&ContentDialogType.NegativeButton
|
||
|
width: parent.width
|
||
|
anchors.centerIn: parent
|
||
|
text: negativeText
|
||
|
onClicked: {
|
||
|
if(control.onNegativeClickListener){
|
||
|
control.onNegativeClickListener()
|
||
|
}else{
|
||
|
negativeClicked()
|
||
|
control.close()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Item{
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: true
|
||
|
FilledButton{
|
||
|
id:positive_btn
|
||
|
visible: control.buttonFlags&ContentDialogType.PositiveButton
|
||
|
text: positiveText
|
||
|
width: parent.width
|
||
|
anchors.centerIn: parent
|
||
|
onClicked: {
|
||
|
if(control.onPositiveClickListener){
|
||
|
control.onPositiveClickListener()
|
||
|
}else{
|
||
|
positiveClicked()
|
||
|
control.close()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|