Warning, /multimedia/plasmatube/src/ui/components/PlaylistGridItem.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: GPL-3.0-or-later
0004
0005 import QtQuick
0006 import QtQuick.Layouts
0007 import Qt5Compat.GraphicalEffects
0008
0009 import org.kde.kirigami as Kirigami
0010
0011 BaseGridItem {
0012 id: root
0013
0014 property string title
0015 property string thumbnail
0016 property int videoCount
0017
0018 contentItem: ColumnLayout {
0019 id: column
0020 anchors.fill: parent
0021 anchors.topMargin: root.topPadding
0022 anchors.bottomMargin: root.bottomPadding
0023 anchors.leftMargin: root.leftPadding
0024 anchors.rightMargin: root.rightPadding
0025
0026 spacing: 0
0027
0028 Image {
0029 id: thumb
0030 Layout.alignment: Qt.AlignTop
0031 Layout.preferredWidth: column.width
0032 Layout.maximumWidth: column.width
0033 Layout.preferredHeight: column.width / 16 * 9
0034 Layout.maximumHeight: column.width / 16 * 9
0035 layer.enabled: true
0036 layer.effect: OpacityMask {
0037 maskSource: mask
0038 }
0039 source: thumbnail
0040 fillMode: Image.PreserveAspectCrop
0041 Rectangle {
0042 id: mask
0043 radius: 7
0044 anchors.fill: thumb
0045 visible: false
0046 }
0047
0048 PlaceholderItem {
0049 anchors.fill: parent
0050 visible: thumb.status !== Image.Ready
0051 }
0052
0053 Text {
0054 text: i18np("%1 video", "%1 videos", videoCount)
0055 color: "white"
0056 font.pointSize: Kirigami.Theme.smallFont.pointSize
0057
0058 z: 2
0059
0060 anchors.right: parent.right
0061 anchors.bottom: parent.bottom
0062 anchors.rightMargin: Kirigami.Units.smallSpacing * 2
0063 anchors.bottomMargin: Kirigami.Units.smallSpacing * 2
0064
0065 Rectangle {
0066 anchors.fill: parent
0067 anchors.topMargin: -Kirigami.Units.smallSpacing
0068 anchors.bottomMargin: -Kirigami.Units.smallSpacing
0069 anchors.leftMargin: -Kirigami.Units.smallSpacing
0070 anchors.rightMargin: -Kirigami.Units.smallSpacing
0071 z: -1
0072 color: "#90000000"
0073 radius: 2
0074 width: 60
0075 height: 15
0076 }
0077 }
0078
0079 MouseArea {
0080 id: thumbnailMouseArea
0081 anchors.fill: parent
0082 cursorShape: Qt.PointingHandCursor
0083 onClicked: (event) => root.clicked(event)
0084 }
0085 }
0086
0087 ColumnLayout {
0088 id: videoInfo
0089 Layout.fillWidth: true
0090 Layout.alignment: Qt.AlignTop
0091 Layout.topMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0092 spacing: Kirigami.Units.largeSpacing
0093
0094 Kirigami.Heading {
0095 Layout.alignment: Qt.AlignTop
0096 Layout.fillWidth: true
0097
0098 text: title
0099 level: 4
0100 maximumLineCount: 2
0101 wrapMode: Text.Wrap
0102 elide: Text.ElideRight
0103
0104 MouseArea {
0105 id: titleMouseArea
0106 anchors.fill: parent
0107 cursorShape: Qt.PointingHandCursor
0108 onClicked: root.clicked(mouse)
0109 }
0110 }
0111 }
0112
0113 Item { Layout.fillHeight: true }
0114 }
0115 }
0116