Warning, /plasma/latte-dock/declarativeimports/abilities/client/Indexer.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2020 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 import QtQuick 2.0 0007 0008 import org.kde.latte.abilities.definition 0.1 as AbilityDefinition 0009 0010 AbilityDefinition.Indexer { 0011 id: _indexer 0012 property Item bridge: null 0013 property Item layout: null 0014 0015 property bool updateIsBlocked: false 0016 0017 readonly property bool isActive: bridge !== null 0018 readonly property bool inMarginsArea: isActive ? bridge.indexer.inMarginsArea : false 0019 readonly property bool tailAppletIsSeparator: isActive ? bridge.indexer.tailAppletIsSeparator : false 0020 readonly property bool headAppletIsSeparator: isActive ? bridge.indexer.headAppletIsSeparator : false 0021 readonly property bool isReady: !updateIsBlocked 0022 readonly property int maxIndex: 99999 0023 readonly property alias firstTailItemIsSeparator: _privates.firstTailItemIsSeparator 0024 readonly property alias lastHeadItemIsSeparator: _privates.lastHeadItemIsSeparator 0025 readonly property alias itemsCount: _privates.itemsCount 0026 readonly property alias visibleItemsCount: _privates.visibleItemsCount 0027 readonly property alias firstVisibleItemIndex: _privates.firstVisibleItemIndex 0028 readonly property alias lastVisibleItemIndex: _privates.lastVisibleItemIndex 0029 0030 QtObject { 0031 id: _privates 0032 property bool firstTailItemIsSeparator: false 0033 property bool lastHeadItemIsSeparator: false 0034 property int firstVisibleItemIndex: -1 0035 property int lastVisibleItemIndex: -1 0036 property int itemsCount: 0 0037 property int visibleItemsCount: 0 0038 } 0039 0040 onIsActiveChanged: { 0041 if (isActive) { 0042 bridge.indexer.client = indexer; 0043 } 0044 } 0045 0046 Component.onCompleted: { 0047 if (isActive) { 0048 bridge.indexer.client = indexer; 0049 } 0050 } 0051 0052 Component.onDestruction: { 0053 if (isActive) { 0054 bridge.indexer.client = null; 0055 } 0056 } 0057 0058 Binding { 0059 target: _privates 0060 property: "firstTailItemIsSeparator" 0061 when: isReady 0062 value: { 0063 if (_indexer.visibleItemsCount === _indexer.layout.children.length) { 0064 return false; 0065 } 0066 0067 for(var i=0; i<_indexer.firstVisibleItemIndex; ++i) { 0068 if (_indexer.separators.indexOf(i)>=0 && _indexer.hidden.indexOf(i)<0) { 0069 return true; 0070 } 0071 } 0072 0073 return false; 0074 } 0075 } 0076 0077 Binding { 0078 target: _privates 0079 property: "lastHeadItemIsSeparator" 0080 when: isReady 0081 value: { 0082 if (_indexer.visibleItemsCount === _indexer.layout.children.length) { 0083 return false; 0084 } 0085 0086 var len = _indexer.layout.children.length; 0087 0088 for(var i=len-1; i>_indexer.lastVisibleItemIndex; --i) { 0089 if (_indexer.separators.indexOf(i)>=0 && _indexer.hidden.indexOf(i)<0) { 0090 return true; 0091 } 0092 } 0093 0094 return false; 0095 } 0096 } 0097 0098 Binding { 0099 target: _privates 0100 property: "firstVisibleItemIndex" 0101 when: isReady 0102 value: { 0103 var ind = maxIndex; 0104 for(var i=0; i<layout.children.length; ++i) { 0105 var item = layout.children[i]; 0106 if (item && item.itemIndex>=0 0107 && !item.isSeparator /*not using "separators" array to avoid binding loops*/ 0108 && !(item.isHidden || item.isSeparatorHidden) /*not using "hidden" array to avoid binding loops*/ 0109 && item.itemIndex < ind) { 0110 ind = item.itemIndex; 0111 } 0112 } 0113 0114 return ind === maxIndex ? -1 : ind; 0115 } 0116 } 0117 0118 Binding { 0119 target: _privates 0120 property: "lastVisibleItemIndex" 0121 when: isReady 0122 value: { 0123 var ind = -1; 0124 0125 for(var i=0; i<layout.children.length; ++i) { 0126 var item = layout.children[i]; 0127 0128 if (item && item.itemIndex>=0 0129 && !item.isSeparator /*not using "separators" array to avoid binding loops*/ 0130 && !(item.isHidden || item.isSeparatorHidden) /*not using "hidden" array to avoid binding loops*/ 0131 && item.itemIndex > ind) { 0132 //console.log("org/kde/latte SETTING UP ::: " + item.itemIndex + " / " + layout.children.length); 0133 ind = item.itemIndex; 0134 } 0135 } 0136 0137 return ind; 0138 } 0139 } 0140 0141 Binding { 0142 target: _privates 0143 property: "visibleItemsCount" 0144 value: { 0145 var count = 0; 0146 for(var i=0; i<layout.children.length; ++i) { 0147 var item = layout.children[i]; 0148 if (item && item.itemIndex>=0 0149 && separators.indexOf(item.itemIndex)<0 0150 && hidden.indexOf(item.itemIndex)<0) { 0151 count = count + 1; 0152 } 0153 } 0154 0155 return count; 0156 } 0157 } 0158 0159 Binding { 0160 target: _privates 0161 property: "itemsCount" 0162 value: { 0163 var count = 0; 0164 for(var i=0; i<layout.children.length; ++i) { 0165 var item = layout.children[i]; 0166 if (item && item.itemIndex>=0) { 0167 count = count + 1; 0168 } 0169 } 0170 0171 return count; 0172 } 0173 } 0174 0175 Binding { 0176 target: _indexer 0177 property: "hidden" 0178 when: isReady 0179 value: { 0180 var hdns = []; 0181 0182 for (var i=0; i<layout.children.length; ++i){ 0183 var item = layout.children[i]; 0184 if (item && (item.isHidden || item.isSeparatorHidden) && item.itemIndex>=0 && hdns.indexOf(item.itemIndex) < 0) { 0185 hdns.push(item.itemIndex); 0186 } 0187 } 0188 0189 return hdns; 0190 } 0191 } 0192 0193 Binding { 0194 target: _indexer 0195 property: "separators" 0196 when: isReady 0197 value: { 0198 var seps = []; 0199 0200 for (var i=0; i<layout.children.length; ++i){ 0201 var item = layout.children[i]; 0202 if (item && item.isSeparator && item.itemIndex>=0 && seps.indexOf(item.itemIndex) < 0) { 0203 seps.push(item.itemIndex); 0204 } 0205 } 0206 0207 return seps; 0208 } 0209 } 0210 0211 function visibleIndex(taskIndex) { 0212 if (taskIndex<firstVisibleItemIndex 0213 || taskIndex>lastVisibleItemIndex 0214 || hidden.indexOf(taskIndex) >= 0 0215 || separators.indexOf(taskIndex) >= 0) { 0216 return -1; 0217 } 0218 0219 var vindex = -1; 0220 if (bridge) { 0221 vindex = bridge.indexer.host.visibleIndex(bridge.indexer.appletIndex); 0222 } 0223 0224 for (var i=0; i<layout.children.length; ++i){ 0225 var item = layout.children[i]; 0226 if (hidden.indexOf(item.itemIndex)>=0 || separators.indexOf(item.itemIndex)>=0) { 0227 continue; 0228 } 0229 0230 if (item.itemIndex<taskIndex) { 0231 vindex = vindex + 1; 0232 } 0233 } 0234 0235 return vindex; 0236 } 0237 }