Warning, /plasma/latte-dock/shell/package/contents/views/AppletDelegate.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2011 Marco Martin <mart@kde.org>
0003 SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de>
0004 SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
0005
0006 SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008
0009 import QtQuick 2.4
0010 import QtQuick.Layouts 1.1
0011
0012 import org.kde.plasma.components 2.0 as PlasmaComponents
0013 import org.kde.plasma.extras 2.0 as PlasmaExtras
0014 import org.kde.plasma.core 2.0 as PlasmaCore
0015 import org.kde.draganddrop 2.0
0016
0017 Item {
0018 id: delegate
0019
0020 readonly property string pluginName: model.pluginName
0021 readonly property bool pendingUninstall: pendingUninstallTimer.applets.indexOf(pluginName) > -1
0022
0023 width: list.cellWidth
0024 height: list.cellHeight
0025
0026 DragArea {
0027 anchors.fill: parent
0028 supportedActions: Qt.MoveAction | Qt.LinkAction
0029 //onDragStarted: tooltipDialog.visible = false
0030 delegateImage: decoration
0031 enabled: !delegate.pendingUninstall
0032 mimeData {
0033 source: parent
0034 }
0035 Component.onCompleted: mimeData.setData("text/x-plasmoidservicename", pluginName)
0036
0037 onDragStarted: {
0038 kwindowsystem.showingDesktop = true;
0039 main.draggingWidget = true;
0040 }
0041 onDrop: {
0042 main.draggingWidget = false;
0043 }
0044
0045 MouseArea {
0046 id: mouseArea
0047 anchors.fill: parent
0048 hoverEnabled: true
0049 onDoubleClicked: {
0050 if (!delegate.pendingUninstall) {
0051 widgetExplorer.addApplet(pluginName);
0052 latteView.extendedInterface.appletCreated(pluginName);
0053 }
0054 }
0055 onEntered: delegate.GridView.view.currentIndex = index
0056 onExited: delegate.GridView.view.currentIndex = - 1
0057 }
0058
0059 ColumnLayout {
0060 id: mainLayout
0061 spacing: units.smallSpacing
0062 anchors {
0063 left: parent.left
0064 right: parent.right
0065 //bottom: parent.bottom
0066 margins: units.smallSpacing * 2
0067 rightMargin: units.smallSpacing * 2 // don't cram the text to the border too much
0068 top: parent.top
0069 }
0070
0071 Item {
0072 id: iconContainer
0073 width: units.iconSizes.enormous
0074 height: width
0075 Layout.alignment: Qt.AlignHCenter
0076 opacity: delegate.pendingUninstall ? 0.6 : 1
0077 Behavior on opacity {
0078 OpacityAnimator {
0079 duration: units.longDuration
0080 easing.type: Easing.InOutQuad
0081 }
0082 }
0083
0084 Item {
0085 id: iconWidget
0086 anchors.fill: parent
0087 PlasmaCore.IconItem {
0088 anchors.fill: parent
0089 source: model.decoration
0090 visible: model.screenshot === ""
0091 }
0092 Image {
0093 width: units.iconSizes.enormous
0094 height: width
0095 anchors.fill: parent
0096 fillMode: Image.PreserveAspectFit
0097 source: model.screenshot
0098 }
0099 }
0100
0101 Item {
0102 id: badgeMask
0103 anchors.fill: parent
0104
0105 Rectangle {
0106 x: Math.round(-units.smallSpacing * 1.5 / 2)
0107 y: x
0108 width: runningBadge.width + Math.round(units.smallSpacing * 1.5)
0109 height: width
0110 radius: height
0111 visible: running && delegate.GridView.isCurrentItem
0112 }
0113 }
0114
0115 Rectangle {
0116 id: runningBadge
0117 width: height
0118 height: Math.round(theme.mSize(countLabel.font).height * 1.3)
0119 radius: height
0120 color: theme.highlightColor
0121 visible: running && delegate.GridView.isCurrentItem
0122 onVisibleChanged: maskShaderSource.scheduleUpdate()
0123
0124 PlasmaComponents.Label {
0125 id: countLabel
0126 anchors.fill: parent
0127 horizontalAlignment: Text.AlignHCenter
0128 verticalAlignment: Text.AlignVCenter
0129 text: running
0130 }
0131 }
0132
0133 ShaderEffect {
0134 anchors.fill: parent
0135 property var source: ShaderEffectSource {
0136 sourceItem: iconWidget
0137 hideSource: true
0138 live: false
0139 }
0140 property var mask: ShaderEffectSource {
0141 id: maskShaderSource
0142 sourceItem: badgeMask
0143 hideSource: true
0144 live: false
0145 }
0146
0147 supportsAtlasTextures: true
0148
0149 fragmentShader: "
0150 varying highp vec2 qt_TexCoord0;
0151 uniform highp float qt_Opacity;
0152 uniform lowp sampler2D source;
0153 uniform lowp sampler2D mask;
0154 void main() {
0155 gl_FragColor = texture2D(source, qt_TexCoord0.st) * (1.0 - (texture2D(mask, qt_TexCoord0.st).a)) * qt_Opacity;
0156 }
0157 "
0158 }
0159
0160 PlasmaComponents.ToolButton {
0161 id: uninstallButton
0162 anchors {
0163 top: parent.top
0164 right: parent.right
0165 }
0166 iconSource: delegate.pendingUninstall ? "edit-undo" : "edit-delete"
0167 // we don't really "undo" anything but we'll pretend to the user that we do
0168 tooltip: delegate.pendingUninstall ? i18nd("plasma_shell_org.kde.plasma.desktop", "Undo uninstall")
0169 : i18nd("plasma_shell_org.kde.plasma.desktop", "Uninstall widget")
0170 flat: false
0171 visible: model.local && delegate.GridView.isCurrentItem
0172
0173 onHoveredChanged: {
0174 if (hovered) {
0175 // hovering the uninstall button triggers onExited of the main mousearea
0176 delegate.GridView.view.currentIndex = index
0177 }
0178 }
0179
0180 onClicked: {
0181 var pending = pendingUninstallTimer.applets
0182 if (delegate.pendingUninstall) {
0183 var index = pending.indexOf(pluginName)
0184 if (index > -1) {
0185 pending.splice(index, 1)
0186 }
0187 } else {
0188 pending.push(pluginName)
0189 }
0190 pendingUninstallTimer.applets = pending
0191
0192 if (pending.length) {
0193 pendingUninstallTimer.restart()
0194 } else {
0195 pendingUninstallTimer.stop()
0196 }
0197 }
0198 }
0199 }
0200 PlasmaExtras.Heading {
0201 id: heading
0202 Layout.fillWidth: true
0203 level: 4
0204 text: model.name
0205 elide: Text.ElideRight
0206 wrapMode: Text.WordWrap
0207 maximumLineCount: 2
0208 lineHeight: 0.95
0209 horizontalAlignment: Text.AlignHCenter
0210 }
0211 PlasmaComponents.Label {
0212 Layout.fillWidth: true
0213 // otherwise causes binding loop due to the way the Plasma sets the height
0214 height: implicitHeight
0215 text: model.description
0216 font: theme.smallestFont
0217 wrapMode: Text.WordWrap
0218 elide: Text.ElideRight
0219 maximumLineCount: heading.lineCount === 1 ? 3 : 2
0220 horizontalAlignment: Text.AlignHCenter
0221 }
0222 }
0223 }
0224 }