Rework the appearance of poll delegate

![image](/uploads/510e995e15d76ce0566b126a6917a963/image.png){width=541 height=269}
This commit is contained in:
James Graham
2025-03-28 09:05:39 +00:00
parent 8180f111d0
commit fadb5725e0
5 changed files with 129 additions and 21 deletions

View File

@@ -3,10 +3,11 @@
// SPDX-License-Identifier: GPL-2.0-or-later
import QtQuick
import QtQuick.Controls
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.kirigamiaddons.delegates as Delegates
import org.kde.kirigamiaddons.formcard as FormCard
import Quotient
@@ -34,50 +35,100 @@ ColumnLayout {
Layout.fillWidth: true
Layout.maximumWidth: Message.maxContentWidth
Layout.minimumWidth: Message.maxContentWidth
spacing: 0
Label {
id: questionLabel
text: root.pollHandler.question
wrapMode: Text.Wrap
RowLayout {
Layout.fillWidth: true
visible: text.length > 0
}
Kirigami.Icon {
implicitWidth: Kirigami.Units.iconSizes.smallMedium
implicitHeight: implicitWidth
source: "amarok_playcount"
}
QQC2.Label {
id: questionLabel
Layout.fillWidth: true
topPadding: Kirigami.Units.largeSpacing
bottomPadding: Kirigami.Units.largeSpacing
text: root.pollHandler.question
wrapMode: Text.Wrap
visible: text.length > 0
}
}
Repeater {
model: root.pollHandler.answerModel
delegate: FormCard.FormCheckDelegate {
delegate: Delegates.RoundedItemDelegate {
id: answerDelegate
required property string id
required property string answerText
required property int count
required property bool localChoice
required property bool isWinner
Layout.fillWidth: true
Layout.leftMargin: -Kirigami.Units.largeSpacing - Kirigami.Units.smallSpacing
Layout.rightMargin: -Kirigami.Units.largeSpacing - Kirigami.Units.smallSpacing
checked: answerDelegate.localChoice
onClicked: root.pollHandler.sendPollAnswer(root.eventId, answerDelegate.id)
enabled: !root.pollHandler.hasEnded
highlighted: false
onClicked: {
if (root.pollHandler.hasEnded) {
return;
}
root.pollHandler.sendPollAnswer(root.eventId, answerDelegate.id);
}
text: answerDelegate.answerText
topPadding: Kirigami.Units.smallSpacing
bottomPadding: Kirigami.Units.smallSpacing
trailing: Label {
visible: root.pollHandler.kind == PollKind.Disclosed || pollHandler.hasEnded
Layout.preferredWidth: contentWidth
text: answerDelegate.count
contentItem: ColumnLayout {
Layout.fillWidth: true
RowLayout {
Layout.fillWidth: true
QQC2.CheckBox {
enabled: !root.pollHandler.hasEnded
checked: answerDelegate.localChoice
onClicked: answerDelegate.clicked()
}
QQC2.Label {
Layout.fillWidth: true
text: answerDelegate.answerText
}
Kirigami.Icon {
implicitWidth: Kirigami.Units.iconSizes.small
implicitHeight: implicitWidth
visible: answerDelegate.isWinner
source: "favorite-favorited"
}
QQC2.Label {
visible: root.pollHandler.kind == PollKind.Disclosed || pollHandler.hasEnded
horizontalAlignment: Text.AlignRight
text: i18np("%1 Vote", "%1 Votes", answerDelegate.count)
}
}
QQC2.ProgressBar {
id: voteProgress
Layout.fillWidth: true
to: root.pollHandler.totalCount
value: root.pollHandler.kind == PollKind.Disclosed || pollHandler.hasEnded ? answerDelegate.count : 0
}
}
}
}
Label {
visible: root.pollHandler.kind == "org.matrix.msc3381.poll.disclosed" || root.pollHandler.hasEnded
text: i18np("Based on votes by %1 user", "Based on votes by %1 users", root.pollHandler.answerCount) + (root.pollHandler.hasEnded ? (" " + i18nc("as in 'this vote has ended'", "(Ended)")) : "")
QQC2.Label {
visible: root.pollHandler.kind == PollKind.Disclosed || root.pollHandler.hasEnded
text: i18np("Based on votes by %1 user", "Based on votes by %1 users", root.pollHandler.totalCount) + (root.pollHandler.hasEnded ? (" " + i18nc("as in 'this vote has ended'", "(Ended)")) : "")
font.pointSize: questionLabel.font.pointSize * 0.8
}
}