2022-04-02 18:24:21 +05:00

157 lines
4.6 KiB
QML

/*
SPDX-FileCopyrightText: 2013 Heena Mahour <heena393@gmail.com>
SPDX-FileCopyrightText: 2015, 2016 Kai Uwe Broulik <kde@privat.broulik.de>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PC3
import org.kde.kcoreaddons 1.0 as KCoreAddons
import org.kde.kquickcontrolsaddons 2.0
import org.kde.draganddrop 2.0 as DragDrop
import org.kde.plasma.private.trash 1.0 as TrashPrivate
DragDrop.DropArea {
id: root
readonly property bool inPanel: (plasmoid.location === PlasmaCore.Types.TopEdge
|| plasmoid.location === PlasmaCore.Types.RightEdge
|| plasmoid.location === PlasmaCore.Types.BottomEdge
|| plasmoid.location === PlasmaCore.Types.LeftEdge)
property bool containsAcceptableDrag: false
Layout.minimumWidth: {
if (constrained) {
return formFactor === PlasmaCore.Types.Horizontal ? height : 1
}
return text.width
}
Layout.minimumHeight: {
if (constrained) {
return formFactor === PlasmaCore.Types.Vertical ? width : 1
}
return PlasmaCore.Units.iconSizes.small + text.height
}
Layout.maximumWidth: inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1
Layout.maximumHeight: inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1
readonly property int formFactor: plasmoid.formFactor
readonly property bool constrained: formFactor === PlasmaCore.Types.Vertical || formFactor === PlasmaCore.Types.Horizontal
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.backgroundHints: PlasmaCore.Types.NoBackground
Plasmoid.icon: (dirModel.count > 0) ? "user-trash-full": "user-trash"
Plasmoid.onActivated: action_open()
preventStealing: true
onDragEnter: containsAcceptableDrag = TrashPrivate.Trash.trashableUrls(event.mimeData.urls).length > 0
onDragLeave: containsAcceptableDrag = false
onDrop: {
containsAcceptableDrag = false
var trashableUrls = TrashPrivate.Trash.trashableUrls(event.mimeData.urls)
if (trashableUrls.length > 0) {
TrashPrivate.Trash.trashUrls(trashableUrls)
event.accept(Qt.MoveAction)
} else {
event.accept(Qt.IgnoreAction) // prevent Plasma from spawning an applet
}
}
TrashPrivate.DirModel {
id: dirModel
url: "trash:/"
}
function action_open() {
Qt.openUrlExternally("trash:/");
}
function action_empty() {
TrashPrivate.Trash.emptyTrash()
}
function action_openkcm() {
KCMShell.open("kcmtrash");
}
Component.onCompleted: {
plasmoid.removeAction("configure");
plasmoid.setAction("open", i18nc("a verb", "Open"),"document-open");
plasmoid.setAction("empty",i18nc("a verb", "Empty"),"trash-empty");
plasmoid.action("empty").enabled = Qt.binding(function() {
return dirModel.count > 0;
});
if (KCMShell.authorize("kcmtrash.desktop").length > 0) {
plasmoid.setAction("openkcm", i18n("Trash Settings…"), "configure");
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: Qt.openUrlExternally("trash:/");
}
PlasmaCore.IconItem {
id: icon
source: plasmoid.icon
anchors {
left: parent.left
right: parent.right
top: parent.top
bottom: constrained ? parent.bottom: text.top
}
active: toolTip.containsMouse || root.containsAcceptableDrag
}
DropShadow {
id: textShadow
anchors.fill: text
visible: !constrained
horizontalOffset: 1
verticalOffset: 1
radius: 4
samples: 9
spread: 0.35
color: "black"
source: constrained ? null : text
}
PC3.Label {
id: text
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
}
width: Math.round(text.implicitWidth + PlasmaCore.Units.smallSpacing) // make sure label is not blurry
text: (dirModel.count === 0) ? i18n("Trash\nEmpty") : i18np("Trash\nOne item", "Trash\n %1 items", dirModel.count)
color: "white"
horizontalAlignment: Text.AlignHCenter
visible: false // rendered by DropShadow
}
PlasmaCore.ToolTipArea {
id: toolTip
anchors.fill: parent
mainText: i18n("Trash")
subText: (dirModel.count === 0) ? i18n("Empty") : i18np("One item", "%1 items", dirModel.count)
}
}