Warning, /frameworks/knewstuff/src/qtquick/qml/private/EntryCommentDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003
0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006
0007 /**
0008 * @brief A card based delegate for showing a comment from a KNewStuffQuick::QuickCommentsModel
0009 */
0010
0011 import QtQuick 2.11
0012 import QtQuick.Controls 2.11 as QtControls
0013 import QtQuick.Layouts 1.11 as QtLayouts
0014
0015 import org.kde.kirigami 2.7 as Kirigami
0016
0017 import org.kde.newstuff 1.62 as NewStuff
0018
0019 QtLayouts.RowLayout {
0020 id: component
0021
0022 /**
0023 * The KNSQuick Engine object which handles all our content
0024 */
0025 property QtObject engine
0026
0027 /**
0028 * The username of the author of whatever the comment is attached to
0029 */
0030 property string entryAuthorId
0031 /**
0032 * The provider ID as supplied by the entry the comment is attached to
0033 */
0034 property string entryProviderId
0035
0036 /**
0037 * The username of the comment's author
0038 */
0039 property string author
0040 /**
0041 * The OCS score, an integer from 1 to 100. It will be interpreted
0042 * as a 5 star rating, with half star support (0-10)
0043 */
0044 property int score
0045 /**
0046 * The title or subject line for the comment
0047 */
0048 property string title
0049 /**
0050 * The actual text of the comment
0051 */
0052 property alias reviewText: reviewLabel.text
0053 /**
0054 * The depth of the comment (in essence, how many parents the comment has)
0055 */
0056 property int depth
0057
0058 spacing: 0
0059
0060 property QtObject commentAuthor: NewStuff.Author {
0061 engine: component.engine
0062 providerId: component.entryProviderId
0063 username: component.author
0064 }
0065
0066 anchors {
0067 left: parent.left
0068 right: parent.right
0069 leftMargin: Kirigami.Units.largeSpacing
0070 rightMargin: Kirigami.Units.largeSpacing
0071 }
0072
0073 Repeater {
0074 model: component.depth
0075 delegate: Rectangle {
0076 QtLayouts.Layout.fillHeight: true
0077 QtLayouts.Layout.minimumWidth: Kirigami.Units.largeSpacing
0078 QtLayouts.Layout.maximumWidth: Kirigami.Units.largeSpacing
0079 color: Qt.tint(Kirigami.Theme.textColor, Qt.rgba(Kirigami.Theme.backgroundColor.r, Kirigami.Theme.backgroundColor.g, Kirigami.Theme.backgroundColor.b, 0.8))
0080 Rectangle {
0081 anchors {
0082 top: parent.top
0083 bottom: parent.bottom
0084 left: parent.left
0085 }
0086 width: 1
0087 color: Kirigami.Theme.backgroundColor
0088 }
0089 }
0090 }
0091
0092 QtLayouts.ColumnLayout {
0093 Item {
0094 visible: component.depth === 0
0095 QtLayouts.Layout.fillWidth: true
0096 QtLayouts.Layout.minimumHeight: Kirigami.Units.largeSpacing
0097 QtLayouts.Layout.maximumHeight: Kirigami.Units.largeSpacing
0098 }
0099
0100 Kirigami.Separator {
0101 QtLayouts.Layout.fillWidth: true
0102 }
0103
0104 QtLayouts.RowLayout {
0105 visible: (component.title !== "" || component.score !== 0)
0106 QtLayouts.Layout.fillWidth: true
0107 QtLayouts.Layout.leftMargin: Kirigami.Units.largeSpacing
0108 Kirigami.Heading {
0109 id: titleLabel
0110 text: ((component.title === "") ? i18ndc("knewstuff6", "Placeholder title for when a comment has no subject, but does have a rating", "<i>(no title)</i>") : component.title)
0111 level: 4
0112 QtLayouts.Layout.fillWidth: true
0113 }
0114 Rating {
0115 id: ratingStars
0116 rating: component.score
0117 reverseLayout: true
0118 }
0119 Item {
0120 QtLayouts.Layout.minimumWidth: Kirigami.Units.largeSpacing
0121 QtLayouts.Layout.maximumWidth: Kirigami.Units.largeSpacing
0122 }
0123 }
0124
0125 QtControls.Label {
0126 id: reviewLabel
0127 QtLayouts.Layout.fillWidth: true
0128 QtLayouts.Layout.leftMargin: Kirigami.Units.largeSpacing
0129 QtLayouts.Layout.rightMargin: Kirigami.Units.largeSpacing
0130 wrapMode: Text.Wrap
0131 }
0132
0133 QtLayouts.RowLayout {
0134 QtLayouts.Layout.fillWidth: true
0135 Item {
0136 QtLayouts.Layout.fillWidth: true
0137 }
0138 Kirigami.UrlButton {
0139 id: authorLabel
0140 visible: (url !== "")
0141 url: (component.commentAuthor.homepage === "") ? component.commentAuthor.profilepage : component.commentAuthor.homepage
0142 text: (component.author === component.entryAuthorId) ? i18ndc("knewstuff6", "The author label in case the comment was written by the author of the content entry the comment is attached to", "%1 <i>(author)</i>", component.commentAuthor.name) : component.commentAuthor.name
0143 }
0144 QtControls.Label {
0145 visible: !authorLabel.visible
0146 text: authorLabel.text
0147 }
0148 Image {
0149 id: authorIcon
0150 QtLayouts.Layout.maximumWidth: height
0151 QtLayouts.Layout.minimumWidth: height
0152 QtLayouts.Layout.preferredHeight: Kirigami.Units.iconSizes.medium
0153 fillMode: Image.PreserveAspectFit
0154 source: component.commentAuthor.avatarUrl
0155 Kirigami.Icon {
0156 anchors.fill: parent;
0157 source: "user"
0158 visible: opacity > 0
0159 opacity: authorIcon.status == Image.Ready ? 0 : 1
0160 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.shortDuration; } }
0161 }
0162 }
0163 Item {
0164 QtLayouts.Layout.minimumWidth: Kirigami.Units.largeSpacing
0165 QtLayouts.Layout.maximumWidth: Kirigami.Units.largeSpacing
0166 }
0167 }
0168 Item {
0169 QtLayouts.Layout.fillWidth: true
0170 QtLayouts.Layout.minimumHeight: Kirigami.Units.largeSpacing
0171 QtLayouts.Layout.maximumHeight: Kirigami.Units.largeSpacing
0172 }
0173
0174 }
0175 }