Spectral/qml/component/MessageDelegate.qml

73 lines
2.4 KiB
QML
Raw Normal View History

2018-07-12 01:44:41 +00:00
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.2
2018-08-05 16:53:22 +00:00
import Matrique 0.1
2018-07-09 14:00:27 +00:00
Item {
2018-07-10 04:18:21 +00:00
id: messageDelegate
2018-07-20 04:14:02 +00:00
readonly property bool darkTheme: Material.theme == Material.Dark
readonly property color background: darkTheme ? "#242424" : "lightgrey"
2018-07-09 14:00:27 +00:00
readonly property bool sentByMe: author === currentRoom.localUser
readonly property bool isState: eventType === "state" || eventType === "emote"
readonly property bool isMessage: eventType === "message" || eventType === "notice"
readonly property bool isFile: eventType === "video" || eventType === "audio" || eventType === "file" || eventType === "image"
2018-08-05 16:53:22 +00:00
visible: marks !== EventStatus.Hidden
2018-07-20 04:14:02 +00:00
z: -5
2018-07-10 04:18:21 +00:00
width: delegateLoader.width
height: delegateLoader.height
2018-07-09 14:00:27 +00:00
anchors.right: !isState && sentByMe ? parent.right : undefined
anchors.horizontalCenter: isState ? parent.horizontalCenter : undefined
2018-07-09 14:00:27 +00:00
MouseArea {
anchors.fill: parent
2018-08-04 20:35:31 +00:00
onPressAndHold: menuComponent.createObject(this)
2018-08-04 20:35:31 +00:00
Component {
id: menuComponent
Menu {
id: messageContextMenu
MenuItem {
text: "Copy"
onTriggered: matriqueController.copyToClipboard(plainText)
}
MenuItem {
text: "Copy Source"
onTriggered: matriqueController.copyToClipboard(toolTip)
}
MenuItem {
visible: isFile
height: visible ? undefined : 0
text: "Open Externally"
onTriggered: delegateLoader.item.downloadAndOpen()
}
MenuItem {
visible: isFile
height: visible ? undefined : 0
text: "Save As"
onTriggered: delegateLoader.item.saveFileAs()
}
MenuItem {
visible: sentByMe
height: visible ? undefined : 0
text: "Redact"
onTriggered: currentRoom.redactEvent(eventId)
}
Component.onCompleted: popup()
}
}
}
2018-07-10 04:18:21 +00:00
Loader {
id: delegateLoader
source: eventType != "redaction" ? isMessage ? "MessageBubble.qml" : isState ? "StateBubble.qml" : isFile ? eventType === "image" ? "ImageBubble.qml" : "FileBubble.qml" : "" : ""
2018-07-09 14:00:27 +00:00
}
}