Meshroom/meshroom/ui/qml/Controls/MessageDialog.qml
2023-11-06 16:28:22 +01:00

131 lines
3.6 KiB
QML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.11
import MaterialIcons 2.2
Dialog {
id: root
property alias text: textLabel.text
property alias detailedText: detailedLabel.text
property alias helperText: helperLabel.text
property alias icon: iconLabel
property alias canCopy: copyButton.visible
property alias preset: presets.state
default property alias children: layout.children
// the content of this MessageDialog as a string
readonly property string asString: titleLabel.text + "\n\n" + text + "\n" + detailedText + "\n" + helperText + "\n"
/// Return the text content of this dialog as a simple string.
/// Used when copying the message in the system clipboard.
/// Can be overridden in components extending MessageDialog
function getAsString() {
return asString
}
x: parent.width / 2 - width / 2
y: parent.height / 2 - height / 2
modal: true
padding: 15
standardButtons: Dialog.Ok
header: Pane {
topPadding: 6
bottomPadding: 0
leftPadding: 8
rightPadding: leftPadding
background: Item {
// hidden text edit to perform copy in clipboard
TextEdit {
id: textContent
visible: false
}
}
RowLayout {
width: parent.width
// Icon
Label {
id: iconLabel
font.family: MaterialIcons.fontFamily
font.pointSize: 14
visible: text != ""
}
Label {
id: titleLabel
Layout.fillWidth: true
text: title + " - " + Qt.application.name + " " + Qt.application.version
font.bold: true
}
MaterialToolButton {
id: copyButton
text: MaterialIcons.content_copy
ToolTip.text: "Copy Message to Clipboard"
font.pointSize: 11
onClicked: {
textContent.text = getAsString()
textContent.selectAll(); textContent.copy()
}
}
}
}
ColumnLayout {
id: layout
// Text
spacing: 12
Label {
id: textLabel
font.bold: true
visible: text != ""
onLinkActivated: function(link) { Qt.openUrlExternally(link) }
}
// Detailed text
Label {
id: detailedLabel
text: text
visible: text != ""
onLinkActivated: function(link) { Qt.openUrlExternally(link) }
}
// Additional helper text
Label {
id: helperLabel
visible: text != ""
onLinkActivated: function(link) { Qt.openUrlExternally(link) }
}
}
StateGroup {
id: presets
states: [
State {
name: "Info"
PropertyChanges {
target: iconLabel
text: MaterialIcons.info
}
},
State {
name: "Warning"
PropertyChanges {
target: iconLabel
text: MaterialIcons.warning
color: "#FF9800"
}
},
State {
name: "Error"
PropertyChanges {
target: iconLabel
text: MaterialIcons.error
color: "#F44336"
}
}
]
}
}