Split message content into its own module

This is laying some groundwork for the rich text chatbar.
This commit is contained in:
James Graham
2025-06-29 12:43:48 +01:00
parent a1447ebd6f
commit f6e8491bf1
117 changed files with 122 additions and 104 deletions

View File

@@ -0,0 +1,147 @@
// SPDX-FileCopyrightText: 2024 James Graham <james.h.graham@protonmail.com>
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
import QtQuick
import QtQuick.Layouts
import Qt.labs.qmlmodels
import org.kde.kirigami as Kirigami
import org.kde.neochat
/**
* @brief Select a message component based on a MessageComponentType.
*/
DelegateChooser {
id: root
/**
* @brief The reply has been clicked.
*/
signal replyClicked()
role: "componentType"
DelegateChoice {
roleValue: MessageComponentType.Author
delegate: ReplyAuthorComponent {}
}
DelegateChoice {
roleValue: MessageComponentType.Text
delegate: TextComponent {
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: root.replyClicked()
}
}
}
DelegateChoice {
roleValue: MessageComponentType.Image
delegate: ImageComponent {
contentMaxHeight: Kirigami.Units.gridUnit * 5
}
}
DelegateChoice {
roleValue: MessageComponentType.Video
delegate: MimeComponent {
required property var mediaInfo
mimeIconSource: mediaInfo.mimeIcon
size: mediaInfo.size
duration: mediaInfo.duration
label: mediaInfo.filename
}
}
DelegateChoice {
roleValue: MessageComponentType.Code
delegate: CodeComponent {
Layout.maximumHeight: Kirigami.Units.gridUnit * 5
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: root.replyClicked()
}
}
}
DelegateChoice {
roleValue: MessageComponentType.Quote
delegate: QuoteComponent {
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: root.replyClicked()
}
}
}
DelegateChoice {
roleValue: MessageComponentType.Audio
delegate: MimeComponent {
required property string display
required property var mediaInfo
mimeIconSource: mediaInfo.mimeIcon
size: mediaInfo.size
duration: mediaInfo.duration
label: mediaInfo.filename
}
}
DelegateChoice {
roleValue: MessageComponentType.File
delegate: MimeComponent {
required property string display
required property var mediaInfo
mimeIconSource: mediaInfo.mimeIcon
size: mediaInfo.size
label: mediaInfo.filename
}
}
DelegateChoice {
roleValue: MessageComponentType.Poll
delegate: PollComponent {}
}
DelegateChoice {
roleValue: MessageComponentType.Location
delegate: MimeComponent {
mimeIconSource: "mark-location"
label: display
}
}
DelegateChoice {
roleValue: MessageComponentType.LiveLocation
delegate: MimeComponent {
mimeIconSource: "mark-location"
label: display
}
}
DelegateChoice {
roleValue: MessageComponentType.Encrypted
delegate: EncryptedComponent {}
}
DelegateChoice {
roleValue: MessageComponentType.Loading
delegate: LoadComponent {}
}
DelegateChoice {
roleValue: MessageComponentType.Other
delegate: Item {}
}
}