1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
/*
SPDX-FileCopyrightText: 2019 Aditya Mehra <aix.m@outlook.com>
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.14
import QtQuick.Layouts 1.14
import QtGraphicalEffects 1.14
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.kirigami 2.12 as Kirigami
import org.kde.mycroft.bigscreen 1.0 as BigScreen
PlasmaComponents.ItemDelegate {
id: delegate
readonly property Flickable listView: {
var candidate = parent;
while (candidate) {
if (candidate instanceof Flickable) {
return candidate;
}
candidate = candidate.parent;
}
return null;
}
readonly property bool isCurrent: {//print(text+index+" "+listView.currentIndex+activeFocus+" "+listView.moving)
listView.currentIndex == index && activeFocus && !listView.moving
}
highlighted: isCurrent
property int borderSize: Kirigami.Units.smallSpacing
property int baseRadius: 3
z: isCurrent ? 2 : 0
onClicked: {
listView.forceActiveFocus()
listView.currentIndex = index
}
leftPadding: Kirigami.Units.largeSpacing * 2
topPadding: Kirigami.Units.largeSpacing * 2
rightPadding: Kirigami.Units.largeSpacing * 2
bottomPadding: Kirigami.Units.largeSpacing * 2
leftInset: Kirigami.Units.largeSpacing
topInset: Kirigami.Units.largeSpacing
rightInset: Kirigami.Units.largeSpacing
bottomInset: Kirigami.Units.largeSpacing
Keys.onReturnPressed: {
clicked();
}
contentItem: Item {}
background: Item {
id: background
readonly property Item highlight: Rectangle {
parent: delegate
z: 1
anchors {
fill: parent
}
color: "transparent"
border {
width: delegate.borderSize
color: delegate.Kirigami.Theme.highlightColor
}
opacity: delegate.isCurrent || delegate.highlighted
Behavior on opacity {
OpacityAnimator {
duration: Kirigami.Units.longDuration/2
easing.type: Easing.InOutQuad
}
}
}
Kirigami.ShadowedRectangle {
id: frame
anchors {
fill: parent
}
radius: delegate.baseRadius
color: delegate.Kirigami.Theme.backgroundColor
shadow {
size: Kirigami.Units.largeSpacing * 2
}
states: [
State {
when: delegate.isCurrent
PropertyChanges {
target: delegate
leftInset: 0
rightInset: 0
topInset: 0
bottomInset: 0
}
PropertyChanges {
target: background.highlight.anchors
margins: 0
}
PropertyChanges {
target: frame
// baseRadius + borderSize preserves the original radius for the visible part of frame
radius: delegate.baseRadius + delegate.borderSize
}
PropertyChanges {
target: background.highlight
// baseRadius + borderSize preserves the original radius for the visible part of frame
radius: delegate.baseRadius + delegate.borderSize
}
},
State {
when: !delegate.isCurrent
PropertyChanges {
target: delegate
leftInset: Kirigami.Units.largeSpacing
rightInset: Kirigami.Units.largeSpacing
topInset: Kirigami.Units.largeSpacing
bottomInset: Kirigami.Units.largeSpacing
}
PropertyChanges {
target: background.highlight.anchors
margins: Kirigami.Units.largeSpacing
}
PropertyChanges {
target: frame
radius: delegate.baseRadius
}
PropertyChanges {
target: background.highlight
radius: delegate.baseRadius
}
}
]
transitions: Transition {
ParallelAnimation {
NumberAnimation {
property: "leftInset"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
NumberAnimation {
property: "rightInset"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
NumberAnimation {
property: "topInset"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
NumberAnimation {
property: "bottomInset"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
NumberAnimation {
property: "radius"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
NumberAnimation {
property: "margins"
duration: Kirigami.Units.longDuration
easing.type: Easing.InOutQuad
}
}
}
}
}
}
|