Warning, /plasma/latte-dock/declarativeimports/abilities/items/basicitem/HiddenSpacer.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2016 Smith AR <audoban@openmailbox.org>
0003     SPDX-FileCopyrightText: 2016 Michail Vourlakos <mvourlakos@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick 2.0
0008 
0009 import org.kde.plasma.core 2.0 as PlasmaCore
0010 import org.kde.latte.core 0.2 as LatteCore
0011 
0012 Item{
0013     id: hiddenSpacer
0014     width: plasmoid.formFactor === PlasmaCore.Types.Vertical ? abilityItem.parabolicItem.width : nHiddenSize
0015     height: plasmoid.formFactor === PlasmaCore.Types.Vertical ? nHiddenSize : abilityItem.parabolicItem.height
0016 
0017     visible: (rightSpacer ? index === abilityItem.abilities.indexer.lastVisibleItemIndex : index === abilityItem.abilities.indexer.firstVisibleItemIndex)
0018              || (separatorSpace > 0)
0019              || abilityItem.isHiddenSpacerForcedShow
0020 
0021     property bool neighbourSeparator: rightSpacer ? abilityItem.headItemIsVisibleSeparator : abilityItem.tailItemIsVisibleSeparator
0022     property bool rightSpacer: false
0023 
0024     property int separatorSpace: neighbourSeparator && !abilityItem.isSeparator && abilityItem.abilities.parabolic.isEnabled
0025                                  && !(abilityItem.abilities.indexer.separators.length>0 && abilityItem.isSeparatorInRealLength) ?
0026                                      (LatteCore.Environment.separatorLength/2) : 0
0027 
0028     property real nScale: 0
0029     property real nHiddenSize: 0
0030 
0031     readonly property int maxSize: Math.max(0,Math.ceil(0.55*abilityItem.abilities.metrics.iconSize) - abilityItem.abilities.metrics.totals.lengthEdges)
0032 
0033     Binding{
0034         target: hiddenSpacer
0035         property: "nHiddenSize"
0036         when: !hiddenSizeDelayer.running && itemIndex > -1 //! helps to solve BUGLOCALREF: #1
0037         value: {
0038             if (abilityItem.isHidden) {
0039                 return 0;
0040             } else if (!abilityItem.parabolicItem.isUpdatingOnlySpacers) {
0041                 return (nScale > 0) ? (maxSize * nScale) + separatorSpace : separatorSpace;
0042             } else {
0043                 return (nScale > 0) ? (abilityItem.abilities.metrics.iconSize * nScale) + separatorSpace : separatorSpace;
0044             }
0045         }
0046     }
0047 
0048     Connections{
0049         target: abilityItem
0050         onContainsMouseChanged: {
0051             if (!abilityItem.containsMouse && !abilityItem.isHiddenSpacerForcedShow) {
0052                 hiddenSpacer.nScale = 0;
0053             }
0054         }
0055     }
0056 
0057     Behavior on nHiddenSize {
0058         id: animatedBehavior
0059         enabled: abilityItem.isHiddenSpacerAnimated || restoreAnimation.running
0060         NumberAnimation{ duration: 3 * abilityItem.animationTime }
0061     }
0062 
0063     Behavior on nHiddenSize {
0064         id: directBehavior
0065         enabled: !animatedBehavior.enabled
0066         NumberAnimation { duration: 0 }
0067     }
0068 
0069     Loader{
0070         active: abilityItem.abilities.debug.spacersEnabled
0071 
0072         sourceComponent: Rectangle{
0073             width: abilityItem.isHorizontal ? hiddenSpacer.width : 1
0074             height: abilityItem.isHorizontal ? 1 : hiddenSpacer.height
0075             x: abilityItem.isHorizontal ? 0 : hiddenSpacer.width/2
0076             y: abilityItem.isHorizontal ? hiddenSpacer.height/2 : 0
0077 
0078             border.width: 1
0079             border.color: "red"
0080             color: "transparent"
0081         }
0082     }
0083 
0084     //! Delayer
0085     onSeparatorSpaceChanged: {
0086         if (!hiddenSizeDelayer.running) {
0087             hiddenSizeDelayer.start();
0088         }
0089     }
0090 
0091     //! BUGLOCALREF: #1
0092     //! Timer that helps to avoid binding loops from head/tailItemIsVisibleSeparator by delaying to update the spacer size
0093     //! This solution needs confirmation. That specific binding loop is very nasty as it breaks the tasks model consistency
0094     //! somehow when switching between different activities and the model contains separators that become shown and hidden
0095     //! during the activity change
0096     Timer {
0097         id: hiddenSizeDelayer
0098         interval: 400
0099     }
0100 }