Warning, /plasma/plasma-desktop/applets/trash/package/contents/ui/main.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2013 Heena Mahour <heena393@gmail.com>
0003 SPDX-FileCopyrightText: 2015, 2016 Kai Uwe Broulik <kde@privat.broulik.de>
0004 SPDX-FileCopyrightText: 2023 Nate Graham <nate@kde.org>
0005
0006 SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 import QtQuick 2.15
0009 import QtQuick.Layouts 1.1
0010
0011 import org.kde.plasma.plasmoid 2.0
0012 import org.kde.plasma.core as PlasmaCore
0013 import org.kde.plasma.extras as PlasmaExtras
0014 import org.kde.draganddrop 2.0 as DragDrop
0015 import org.kde.plasma.private.trash 1.0 as TrashPrivate
0016 import org.kde.kirigami 2.20 as Kirigami
0017
0018 import org.kde.kcmutils as KCM
0019 import org.kde.config as KConfig
0020
0021 PlasmoidItem {
0022 id: root
0023
0024 readonly property bool inPanel: (Plasmoid.location === PlasmaCore.Types.TopEdge
0025 || Plasmoid.location === PlasmaCore.Types.RightEdge
0026 || Plasmoid.location === PlasmaCore.Types.BottomEdge
0027 || Plasmoid.location === PlasmaCore.Types.LeftEdge)
0028 readonly property bool hasContents: dirModel.count > 0
0029
0030 property bool containsAcceptableDrag: false
0031
0032 Plasmoid.title: i18nc("@title the name of the Trash widget", "Trash")
0033 toolTipSubText: hasContents
0034 ? i18ncp("@info:status The trash contains this many items in it", "One item", "%1 items", dirModel.count)
0035 : i18nc("@info:status The trash is empty", "Empty")
0036
0037 Plasmoid.backgroundHints: PlasmaCore.Types.NoBackground
0038 Plasmoid.icon: {
0039 let iconName = (hasContents ? "user-trash-full" : "user-trash");
0040
0041 if (inPanel) {
0042 return iconName += "-symbolic";
0043 }
0044
0045 return iconName;
0046 }
0047
0048 Plasmoid.onActivated: Qt.openUrlExternally("trash:/")
0049
0050 Keys.onPressed: {
0051 switch (event.key) {
0052 case Qt.Key_Space:
0053 case Qt.Key_Enter:
0054 case Qt.Key_Return:
0055 case Qt.Key_Select:
0056 Plasmoid.activated();
0057 break;
0058 }
0059 }
0060 Accessible.name: Plasmoid.title
0061 Accessible.description: toolTipSubText
0062 Accessible.role: Accessible.Button
0063
0064 TrashPrivate.DirModel {
0065 id: dirModel
0066 url: "trash:/"
0067 }
0068
0069 Plasmoid.contextualActions: [
0070 PlasmaCore.Action {
0071 text: i18nc("@action:inmenu Open the trash", "Open")
0072 icon.name: "document-open-symbolic"
0073 onTriggered: Plasmoid.activated()
0074 },
0075 PlasmaCore.Action {
0076 text: i18nc("@action:inmenu Empty the trash", "Empty")
0077 icon.name: "trash-empty-symbolic"
0078 enabled: hasContents
0079 onTriggered: TrashPrivate.Trash.emptyTrash()
0080 },
0081 PlasmaCore.Action {
0082 text: i18nc("@action:inmenu", "Trash Settingsā¦")
0083 icon.name: "configure-symbolic"
0084 visible: KConfig.KAuthorized.authorizeControlModule("kcm_trash")
0085 onTriggered: KCM.KCMLauncher.open("kcm_trash")
0086 }
0087 ]
0088
0089 Component.onCompleted: {
0090 Plasmoid.removeInternalAction("configure");
0091 }
0092
0093 // Only exists because the default CompactRepresentation doesn't:
0094 // - allow defining a custom drop handler
0095 // - expose the ability to show text below or beside the icon
0096 // TODO remove once it gains those features
0097 preferredRepresentation: fullRepresentation
0098 fullRepresentation: MouseArea {
0099 id: mouseArea
0100
0101 activeFocusOnTab: true
0102 hoverEnabled: true
0103
0104 onClicked: Plasmoid.activated()
0105
0106 DragDrop.DropArea {
0107 anchors.fill: parent
0108 preventStealing: true
0109 onDragEnter: root.containsAcceptableDrag = TrashPrivate.Trash.trashableUrls(event.mimeData.urls).length > 0
0110 onDragLeave: root.containsAcceptableDrag = false
0111
0112 onDrop: {
0113 root.containsAcceptableDrag = false
0114
0115 var trashableUrls = TrashPrivate.Trash.trashableUrls(event.mimeData.urls)
0116 if (trashableUrls.length > 0) {
0117 TrashPrivate.Trash.trashUrls(trashableUrls)
0118 event.accept(Qt.MoveAction)
0119 } else {
0120 event.accept(Qt.IgnoreAction) // prevent Plasma from spawning an applet
0121 }
0122 }
0123 }
0124
0125 Kirigami.Icon {
0126 source: Plasmoid.icon
0127 anchors {
0128 left: parent.left
0129 right: parent.right
0130 top: parent.top
0131 bottom: root.inPanel ? parent.bottom: text.top
0132 }
0133 active: mouseArea.containsMouse || root.containsAcceptableDrag
0134 }
0135
0136 PlasmaExtras.ShadowedLabel {
0137 id: text
0138 anchors {
0139 horizontalCenter: parent.horizontalCenter
0140 bottom: parent.bottom
0141 }
0142 width: Math.round(text.implicitWidth + Kirigami.Units.smallSpacing) // make sure label is not blurry
0143 text: Plasmoid.title + "\n" + root.toolTipSubText
0144 horizontalAlignment: Text.AlignHCenter
0145 visible: !root.inPanel
0146 }
0147
0148 PlasmaCore.ToolTipArea {
0149 anchors.fill: parent
0150 mainText: Plasmoid.title
0151 subText: root.toolTipSubText
0152 }
0153 }
0154 }