mirror of
https://gitgud.io/wackyideas/aerothemeplasma.git
synced 2024-08-15 00:43:43 +00:00
160 lines
5.1 KiB
QML
160 lines
5.1 KiB
QML
|
/*
|
||
|
SPDX-FileCopyrightText: 2016 Marco Martin <mart@kde.org>
|
||
|
SPDX-FileCopyrightText: 2020 Konrad Materka <materka@gmail.com>
|
||
|
SPDX-FileCopyrightText: 2020 Nate Graham <nate@kde.org>
|
||
|
|
||
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
||
|
*/
|
||
|
|
||
|
import QtQuick 2.2
|
||
|
import QtQuick.Layouts 1.1
|
||
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||
|
import org.kde.plasma.components 3.0 as PlasmaComponents3
|
||
|
|
||
|
PlasmaCore.ToolTipArea {
|
||
|
id: abstractItem
|
||
|
|
||
|
height: inVisibleLayout ? visibleLayout.cellHeight : hiddenTasks.cellHeight
|
||
|
width: inVisibleLayout ? visibleLayout.cellWidth : hiddenTasks.cellWidth
|
||
|
|
||
|
property var model: itemModel
|
||
|
|
||
|
property string itemId
|
||
|
property alias text: label.text
|
||
|
property alias iconContainer: iconContainer
|
||
|
property int /*PlasmaCore.Types.ItemStatus*/ status: model.status || PlasmaCore.Types.UnknownStatus
|
||
|
property int /*PlasmaCore.Types.ItemStatus*/ effectiveStatus: model.effectiveStatus || PlasmaCore.Types.UnknownStatus
|
||
|
readonly property bool inHiddenLayout: effectiveStatus === PlasmaCore.Types.PassiveStatus
|
||
|
readonly property bool inVisibleLayout: effectiveStatus === PlasmaCore.Types.ActiveStatus
|
||
|
|
||
|
signal clicked(var mouse)
|
||
|
signal pressed(var mouse)
|
||
|
signal wheel(var wheel)
|
||
|
signal contextMenu(var mouse)
|
||
|
|
||
|
/* subclasses need to assign to this tooltip properties
|
||
|
mainText:
|
||
|
subText:
|
||
|
*/
|
||
|
|
||
|
location: {
|
||
|
if (inHiddenLayout) {
|
||
|
if (LayoutMirroring.enabled && plasmoid.location !== PlasmaCore.Types.RightEdge) {
|
||
|
return PlasmaCore.Types.LeftEdge;
|
||
|
} else if (plasmoid.location !== PlasmaCore.Types.LeftEdge) {
|
||
|
return PlasmaCore.Types.RightEdge;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return plasmoid.location;
|
||
|
}
|
||
|
|
||
|
//BEGIN CONNECTIONS
|
||
|
|
||
|
onContainsMouseChanged: {
|
||
|
if (inHiddenLayout && containsMouse) {
|
||
|
root.hiddenLayout.currentIndex = index
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//END CONNECTIONS
|
||
|
|
||
|
PulseAnimation {
|
||
|
targetItem: iconContainer
|
||
|
running: (abstractItem.status === PlasmaCore.Types.NeedsAttentionStatus ||
|
||
|
abstractItem.status === PlasmaCore.Types.RequiresAttentionStatus ) &&
|
||
|
PlasmaCore.Units.longDuration > 0
|
||
|
}
|
||
|
|
||
|
function activated() {
|
||
|
activatedAnimation.start()
|
||
|
}
|
||
|
|
||
|
SequentialAnimation {
|
||
|
id: activatedAnimation
|
||
|
loops: 1
|
||
|
|
||
|
ScaleAnimator {
|
||
|
target: iconContainer
|
||
|
from: 1
|
||
|
to: 0.5
|
||
|
duration: PlasmaCore.Units.shortDuration
|
||
|
easing.type: Easing.InQuad
|
||
|
}
|
||
|
|
||
|
ScaleAnimator {
|
||
|
target: iconContainer
|
||
|
from: 0.5
|
||
|
to: 1
|
||
|
duration: PlasmaCore.Units.shortDuration
|
||
|
easing.type: Easing.OutQuad
|
||
|
}
|
||
|
}
|
||
|
|
||
|
MouseArea {
|
||
|
anchors.fill: abstractItem
|
||
|
hoverEnabled: true
|
||
|
drag.filterChildren: true
|
||
|
acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
|
||
|
onClicked: abstractItem.clicked(mouse)
|
||
|
onPressed: {
|
||
|
abstractItem.hideImmediately()
|
||
|
abstractItem.pressed(mouse)
|
||
|
}
|
||
|
onPressAndHold: {
|
||
|
abstractItem.contextMenu(mouse)
|
||
|
}
|
||
|
onWheel: {
|
||
|
abstractItem.wheel(wheel);
|
||
|
//Don't accept the event in order to make the scrolling by mouse wheel working
|
||
|
//for the parent scrollview this icon is in.
|
||
|
wheel.accepted = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ColumnLayout {
|
||
|
anchors.fill: abstractItem
|
||
|
spacing: 0
|
||
|
|
||
|
Item {
|
||
|
id: iconContainer
|
||
|
|
||
|
property alias container: abstractItem
|
||
|
property alias inVisibleLayout: abstractItem.inVisibleLayout
|
||
|
readonly property int size: abstractItem.inVisibleLayout ? root.itemSize : PlasmaCore.Units.iconSizes.medium
|
||
|
|
||
|
Layout.alignment: Qt.Bottom | Qt.AlignHCenter
|
||
|
Layout.fillHeight: abstractItem.inHiddenLayout ? true : false
|
||
|
implicitWidth: root.vertical && abstractItem.inVisibleLayout ? abstractItem.width : size
|
||
|
implicitHeight: !root.vertical && abstractItem.inVisibleLayout ? abstractItem.height : size
|
||
|
Layout.topMargin: abstractItem.inHiddenLayout ? Math.round(PlasmaCore.Units.smallSpacing * 1.5): 0
|
||
|
}
|
||
|
PlasmaComponents3.Label {
|
||
|
id: label
|
||
|
|
||
|
Layout.fillWidth: true
|
||
|
Layout.fillHeight: abstractItem.inHiddenLayout ? true : false
|
||
|
Layout.leftMargin: abstractItem.inHiddenLayout ? PlasmaCore.Units.smallSpacing : 0
|
||
|
Layout.rightMargin: abstractItem.inHiddenLayout ? PlasmaCore.Units.smallSpacing : 0
|
||
|
Layout.bottomMargin: abstractItem.inHiddenLayout ? PlasmaCore.Units.smallSpacing : 0
|
||
|
|
||
|
visible: abstractItem.inHiddenLayout
|
||
|
|
||
|
verticalAlignment: Text.AlignTop
|
||
|
horizontalAlignment: Text.AlignHCenter
|
||
|
elide: Text.ElideRight
|
||
|
wrapMode: Text.Wrap
|
||
|
maximumLineCount: 3
|
||
|
|
||
|
opacity: visible ? 1 : 0
|
||
|
Behavior on opacity {
|
||
|
NumberAnimation {
|
||
|
duration: PlasmaCore.Units.longDuration
|
||
|
easing.type: Easing.InOutQuad
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|