Warning, /network/tokodon/src/content/ui/StatusDelegate/StatusPoll.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Carl Schwan <carl@carlschwan.eu> 0002 // SPDX-License-Identifier: LGPL-2.0-or-later 0003 0004 import QtQuick 0005 import org.kde.kirigami 2 as Kirigami 0006 import QtQuick.Controls 2 as QQC2 0007 import QtQuick.Layouts 0008 import org.kde.tokodon 0009 0010 // Polls inside of a status 0011 ColumnLayout { 0012 id: root 0013 0014 required property var index 0015 required property var poll 0016 readonly property bool showResults: poll.voted || poll.expired 0017 0018 QQC2.ButtonGroup { 0019 id: pollGroup 0020 exclusive: !root.poll.multiple 0021 } 0022 0023 Repeater { 0024 model: root.showResults ? root.poll.options : [] 0025 0026 ColumnLayout { 0027 id: votedPollDelegate 0028 0029 required property var modelData 0030 0031 RowLayout { 0032 spacing: root.poll.votesCount !== 0 ? Kirigami.Units.largeSpacing : 0 0033 QQC2.Label { 0034 text: if (modelData.votesCount === -1) { 0035 return '' 0036 } else if (root.poll.votesCount === 0) { 0037 return '' 0038 } else { 0039 return i18nc("Votes percentage", "%1%", Math.round(votedPollDelegate.modelData.votesCount / root.poll.votesCount * 100)) 0040 } 0041 Layout.alignment: Qt.AlignVCenter 0042 Layout.minimumWidth: root.poll.votesCount !== 0 ? Kirigami.Units.gridUnit * 2 : 0 0043 } 0044 0045 QQC2.Label { 0046 text: votedPollDelegate.modelData.title 0047 Layout.fillWidth: true 0048 Layout.alignment: Qt.AlignVCenter 0049 } 0050 } 0051 0052 RowLayout { 0053 QQC2.ProgressBar { 0054 from: 0 0055 to: 100 0056 value: votedPollDelegate.modelData.votesCount / root.poll.votesCount * 100 0057 Layout.maximumWidth: Kirigami.Units.gridUnit * 10 0058 Layout.minimumWidth: Kirigami.Units.gridUnit * 10 0059 Layout.alignment: Qt.AlignVCenter 0060 } 0061 0062 QQC2.Label { 0063 text: i18n("(No votes)") 0064 visible: root.poll.votesCount === 0 0065 } 0066 } 0067 } 0068 } 0069 0070 Repeater { 0071 model: !root.showResults ? poll.options : [] 0072 RowLayout { 0073 QQC2.CheckBox { 0074 visible: poll.multiple 0075 Layout.alignment: Qt.AlignVCenter 0076 QQC2.ButtonGroup.group: pollGroup 0077 property int choiceIndex: index 0078 } 0079 0080 QQC2.RadioButton { 0081 visible: !poll.multiple 0082 Layout.alignment: Qt.AlignVCenter 0083 QQC2.ButtonGroup.group: pollGroup 0084 property int choiceIndex: index 0085 } 0086 0087 QQC2.Label { 0088 text: modelData.title 0089 Layout.fillWidth: true 0090 Layout.alignment: Qt.AlignVCenter 0091 } 0092 } 0093 } 0094 0095 QQC2.Button { 0096 visible: !root.showResults 0097 text: i18n("Vote") 0098 enabled: pollGroup.checkState !== Qt.Unchecked 0099 onClicked: { 0100 let choices = []; 0101 const buttons = pollGroup.buttons; 0102 for (let i in buttons) { 0103 const button = buttons[i]; 0104 if (!button.visible) { 0105 continue; 0106 } 0107 0108 if (button.checked) { 0109 choices.push(button.choiceIndex); 0110 } 0111 } 0112 timelineModel.actionVote(timelineModel.index(root.index, 0), choices) 0113 } 0114 } 0115 }