Warning, /multimedia/audiotube/src/contents/ui/ListHeader.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Mathis BrĂ¼chert <mbb@kaidan.im>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004
0005 import QtQuick 2.15
0006 import QtQuick.Effects
0007
0008 import org.kde.kirigami 2.14 as Kirigami
0009 import org.kde.kirigami.delegates as KirigamiDelegates
0010 import org.kde.kirigamiaddons.components 1.0 as Components
0011
0012 import QtQuick.Controls 2.14 as Controls
0013 import QtQuick.Layouts 1.3
0014
0015 import org.kde.ytmusic 1.0
0016
0017
0018 Item {
0019 id:root
0020 required property string imageSourceURL
0021 property bool rounded : false
0022 required property string title
0023 property string subtitle
0024 property list<Kirigami.Action> visibleActions
0025 property list<Kirigami.Action> overflowActions
0026
0027 height: root.width > 500 ? 200 : 400
0028
0029 Item {
0030 anchors.fill: parent
0031
0032 Image {
0033 scale: 1.8
0034 anchors.fill: parent
0035 asynchronous: true
0036
0037 source: imageSourceURL
0038 fillMode: Image.PreserveAspectCrop
0039
0040 sourceSize.width: 512
0041 sourceSize.height: 512
0042 }
0043
0044 layer.enabled: true
0045 layer.effect: MultiEffect {
0046 brightness: -0.25
0047 saturation: 0.5
0048
0049 blurEnabled: true
0050 autoPaddingEnabled: false
0051 blur: 1.0
0052 blurMax: 40
0053 blurMultiplier: 3.0
0054 }
0055 }
0056 Rectangle {
0057 anchors.fill: parent
0058 gradient: Gradient{
0059 GradientStop { position: -1.0; color: "transparent" }
0060 GradientStop { position: 1.0; color: Kirigami.Theme.backgroundColor }
0061
0062 }
0063 }
0064 GridLayout {
0065 width: parent.width
0066
0067 flow: root.width > 500?GridLayout.LeftToRight:GridLayout.TopToBottom
0068 Kirigami.ShadowedRectangle {
0069 Layout.alignment: Qt.AlignHCenter
0070 color: Kirigami.Theme.backgroundColor
0071 Layout.margins: 30
0072 width: 150
0073 height: width
0074 radius: rounded ? 100 : 10
0075 shadow.size: 15
0076 shadow.xOffset: 5
0077 shadow.yOffset: 5
0078 shadow.color: Qt.rgba(0, 0, 0, 0.2)
0079
0080 RoundedImage {
0081 source: imageSourceURL
0082 height: parent.height
0083 width: height
0084 radius: rounded ? 100 : 10
0085 }
0086 }
0087 ColumnLayout {
0088 Layout.leftMargin: 30
0089 Layout.rightMargin: 30
0090 Layout.fillWidth: true
0091
0092
0093 Controls.Label {
0094 horizontalAlignment: (root.width <= 500)? Qt.AlignHCenter: Qt.AlignLeft
0095 Layout.fillWidth: true
0096 text: title
0097 font.bold: true
0098 font.pixelSize: 22
0099 elide: Qt.ElideRight
0100
0101 }
0102 Controls.Label {
0103 horizontalAlignment: (root.width <= 500)? Qt.AlignHCenter: Qt.AlignLeft
0104 Layout.fillWidth: true
0105 text: subtitle
0106 elide: Qt.ElideRight
0107
0108 }
0109 RowLayout {
0110 visible: root.visibleActions.length>0
0111 Layout.topMargin: 30
0112
0113 Repeater {
0114 model: root.visibleActions
0115 delegate: Controls.RoundButton{
0116 required property var modelData
0117 Layout.fillWidth: root.width <= 500
0118 leftPadding: 20
0119 rightPadding: 20
0120 icon.name: modelData.icon.name
0121 text:modelData.text
0122 onClicked: modelData.triggered()
0123 visible: modelData.visible
0124 }
0125 }
0126 Controls.Menu {
0127 id: overflowMenu
0128 Instantiator {
0129 model: root.overflowActions
0130 onObjectAdded: (index, object) => overflowMenu.insertItem(index, object)
0131 onObjectRemoved: (index, object) => overflowMenu.removeItem(object)
0132 delegate: Controls.MenuItem {
0133 required property var modelData
0134 icon.name: modelData.icon.name
0135 text: modelData.text
0136 onTriggered: modelData.triggered()
0137 }
0138 }
0139 }
0140
0141 Components.BottomDrawer {
0142 id: overflowDrawer
0143
0144 parent: applicationWindow().overlay
0145
0146 drawerContentItem: ColumnLayout {
0147 Repeater {
0148 model: root.overflowActions
0149 delegate: KirigamiDelegates.SubtitleDelegate{
0150 required property var modelData
0151 text: modelData.text
0152 icon.name: modelData.icon.name
0153 onClicked: {
0154 modelData.triggered()
0155 overflowDrawer.close()
0156 overflowDrawer.interactive = false
0157
0158 }
0159 }
0160 }
0161 Item{
0162 Layout.fillHeight: true
0163 }
0164
0165 }
0166 }
0167 Controls.RoundButton {
0168 onClicked: if (Kirigami.Settings.isMobile) {
0169 overflowDrawer.open()
0170 overflowDrawer.interactive = true
0171 } else {
0172 overflowMenu.popup()
0173 }
0174 visible: root.overflowActions.length > 0
0175 icon.name: "overflow-menu"
0176 }
0177 }
0178 }
0179 }
0180 }