Warning, /plasma/latte-dock/containment/package/contents/ui/abilities/privates/IndexerPrivate.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.7 0007 import org.kde.plasma.plasmoid 2.0 0008 0009 import org.kde.latte.abilities.definition 0.1 as AbilityDefinition 0010 0011 AbilityDefinition.Indexer { 0012 id: indxr 0013 property Item layouts: null 0014 property bool updateIsBlocked: false 0015 0016 property var clients: [] 0017 property var clientsBridges: [] 0018 0019 property var marginsAreaSeparators: [] 0020 0021 property int clientsTrackingWindowsCount: 0 0022 0023 Binding{ 0024 target: indxr 0025 property: "separators" 0026 when: !updateIsBlocked 0027 value: { 0028 var seps = []; 0029 0030 var sLayout = layouts.startLayout; 0031 for (var i=0; i<sLayout.children.length; ++i){ 0032 var appletItem = sLayout.children[i]; 0033 if (appletItem && appletItem.isSeparator && appletItem.index>=0) { 0034 seps.push(appletItem.index); 0035 } 0036 } 0037 0038 var mLayout = layouts.mainLayout; 0039 for (var i=0; i<mLayout.children.length; ++i){ 0040 var appletItem = mLayout.children[i]; 0041 if (appletItem && appletItem.isSeparator && appletItem.index>=0) { 0042 seps.push(appletItem.index); 0043 } 0044 } 0045 0046 var eLayout = layouts.endLayout; 0047 for (var i=0; i<eLayout.children.length; ++i){ 0048 var appletItem = eLayout.children[i]; 0049 if (appletItem && appletItem.isSeparator && appletItem.index>=0) { 0050 seps.push(appletItem.index); 0051 } 0052 } 0053 0054 return seps; 0055 } 0056 } 0057 0058 Binding { 0059 target: indxr 0060 property: "hidden" 0061 when: !updateIsBlocked 0062 value: { 0063 var hdn = []; 0064 0065 var sLayout = layouts.startLayout; 0066 for (var i=0; i<sLayout.children.length; ++i){ 0067 var appletItem = sLayout.children[i]; 0068 if (appletItem && appletItem.isHidden && appletItem.index>=0) { 0069 hdn.push(appletItem.index); 0070 } 0071 } 0072 0073 var mLayout = layouts.mainLayout; 0074 for (var i=0; i<mLayout.children.length; ++i){ 0075 var appletItem = mLayout.children[i]; 0076 if (appletItem && appletItem.isHidden && appletItem.index>=0) { 0077 hdn.push(appletItem.index); 0078 } 0079 } 0080 0081 var eLayout = layouts.endLayout; 0082 for (var i=0; i<eLayout.children.length; ++i){ 0083 var appletItem = eLayout.children[i]; 0084 if (appletItem && appletItem.isHidden && appletItem.index>=0) { 0085 hdn.push(appletItem.index); 0086 } 0087 } 0088 0089 return hdn; 0090 } 0091 } 0092 0093 Binding{ 0094 target: indxr 0095 property: "marginsAreaSeparators" 0096 when: !updateIsBlocked 0097 value: { 0098 var seps = []; 0099 var grid; 0100 0101 for (var l=0; l<=2; ++l) { 0102 if (l===0) { 0103 grid = layouts.startLayout; 0104 } else if (l===1) { 0105 grid = layouts.mainLayout; 0106 } else if (l===2) { 0107 grid = layouts.endLayout; 0108 } 0109 0110 for (var i=0; i<grid.children.length; ++i){ 0111 var appletItem = grid.children[i]; 0112 if (appletItem 0113 && appletItem.isMarginsAreaSeparator 0114 && appletItem.index>=0) { 0115 seps.push(appletItem.index); 0116 } 0117 } 0118 } 0119 0120 return seps; 0121 } 0122 } 0123 0124 Binding { 0125 target: indxr 0126 property: "clients" 0127 when: !updateIsBlocked 0128 value: { 0129 var clns = []; 0130 0131 var sLayout = layouts.startLayout; 0132 for (var i=0; i<sLayout.children.length; ++i){ 0133 var appletItem = sLayout.children[i]; 0134 if (appletItem 0135 && appletItem.index>=0 0136 && appletItem.communicator 0137 && appletItem.communicator.indexerIsSupported) { 0138 clns.push(appletItem.index); 0139 } 0140 } 0141 0142 var mLayout = layouts.mainLayout; 0143 for (var i=0; i<mLayout.children.length; ++i){ 0144 var appletItem = mLayout.children[i]; 0145 if (appletItem 0146 && appletItem.index>=0 0147 && appletItem.communicator 0148 && appletItem.communicator.indexerIsSupported) { 0149 clns.push(appletItem.index); 0150 } 0151 } 0152 0153 var eLayout = layouts.endLayout; 0154 for (var i=0; i<eLayout.children.length; ++i){ 0155 var appletItem = eLayout.children[i]; 0156 if (appletItem 0157 && appletItem.index>=0 0158 && appletItem.communicator 0159 && appletItem.communicator.indexerIsSupported) { 0160 clns.push(appletItem.index); 0161 } 0162 } 0163 0164 return clns; 0165 } 0166 } 0167 0168 Binding { 0169 target: indxr 0170 property: "clientsBridges" 0171 when: !updateIsBlocked 0172 value: { 0173 var bdgs = []; 0174 0175 var sLayout = layouts.startLayout; 0176 for (var i=0; i<sLayout.children.length; ++i){ 0177 var appletItem = sLayout.children[i]; 0178 if (appletItem 0179 && appletItem.index>=0 0180 && appletItem.communicator 0181 && appletItem.communicator.indexerIsSupported 0182 && appletItem.communicator.bridge 0183 && appletItem.communicator.bridge.indexer) { 0184 bdgs.push(appletItem.communicator.bridge.indexer); 0185 } 0186 } 0187 0188 var mLayout = layouts.mainLayout; 0189 for (var i=0; i<mLayout.children.length; ++i){ 0190 var appletItem = mLayout.children[i]; 0191 if (appletItem 0192 && appletItem.index>=0 0193 && appletItem.communicator 0194 && appletItem.communicator.indexerIsSupported 0195 && appletItem.communicator.bridge 0196 && appletItem.communicator.bridge.indexer) { 0197 bdgs.push(appletItem.communicator.bridge.indexer); 0198 } 0199 } 0200 0201 var eLayout = layouts.endLayout; 0202 for (var i=0; i<eLayout.children.length; ++i){ 0203 var appletItem = eLayout.children[i]; 0204 if (appletItem 0205 && appletItem.index>=0 0206 && appletItem.communicator 0207 && appletItem.communicator.indexerIsSupported 0208 && appletItem.communicator.bridge 0209 && appletItem.communicator.bridge.indexer) { 0210 bdgs.push(appletItem.communicator.bridge.indexer); 0211 } 0212 } 0213 0214 return bdgs; 0215 } 0216 } 0217 0218 Binding{ 0219 target: indxr 0220 property: "clientsTrackingWindowsCount" 0221 when: !(root.appletIsDragged || updateIsBlocked) 0222 value: { 0223 var cnts = 0; 0224 var grid; 0225 0226 for (var l=0; l<=2; ++l) { 0227 if (l===0) { 0228 grid = layouts.startLayout; 0229 } else if (l===1) { 0230 grid = layouts.mainLayout; 0231 } else if (l===2) { 0232 grid = layouts.endLayout; 0233 } 0234 0235 for (var i=0; i<grid.children.length; ++i){ 0236 var appletItem = grid.children[i]; 0237 if (appletItem 0238 && appletItem.communicator 0239 && appletItem.communicator.requires.windowsTrackingEnabled) { 0240 cnts = cnts + 1; 0241 } 0242 } 0243 } 0244 0245 return cnts; 0246 } 0247 } 0248 0249 function visibleItemsBeforeCount(layout, actualIndex) { 0250 var visibleItems = 0; 0251 0252 for (var i=0; i<layout.children.length; ++i){ 0253 var appletItem = layout.children[i]; 0254 if (appletItem && appletItem.index<actualIndex) { 0255 if ((separators.indexOf(appletItem.index) >= 0) 0256 || (marginsAreaSeparators.indexOf(appletItem.index)>=0) 0257 || (hidden.indexOf(appletItem.index) >= 0)) { 0258 //! ignore hidden and separators applets 0259 continue; 0260 } else if (!appletItem.communicator || !appletItem.communicator.indexerIsSupported) { 0261 //! single item applet 0262 visibleItems = visibleItems + 1; 0263 } else if (appletItem.communicator && appletItem.communicator.indexerIsSupported) { 0264 //! multi items applet 0265 visibleItems = visibleItems + appletItem.communicator.bridge.indexer.client.visibleItemsCount; 0266 } 0267 } 0268 } 0269 0270 return visibleItems; 0271 } 0272 0273 function visibleIndex(actualIndex) { 0274 if ((separators.indexOf(actualIndex) >= 0) || (hidden.indexOf(actualIndex) >= 0)) { 0275 return -1; 0276 } 0277 0278 var visibleItems = visibleItemsBeforeCount(layouts.startLayout, actualIndex) + 0279 visibleItemsBeforeCount(layouts.mainLayout, actualIndex) + 0280 visibleItemsBeforeCount(layouts.endLayout, actualIndex); 0281 0282 return visibleItems + 1; 0283 } 0284 0285 function visibleIndexBelongsAtApplet(applet, itemVisibleIndex) { 0286 if (itemVisibleIndex<0 || !applet) { 0287 return false; 0288 } 0289 0290 var vIndexBase = visibleIndex(applet.index); 0291 0292 if (vIndexBase === itemVisibleIndex) { 0293 return true; 0294 } else if (applet.communicator 0295 && applet.communicator.indexerIsSupported 0296 && applet.communicator.bridge 0297 && applet.communicator.bridge.indexer) { 0298 if (itemVisibleIndex >= vIndexBase 0299 && itemVisibleIndex< (vIndexBase + applet.communicator.bridge.indexer.client.visibleItemsCount)) { 0300 return true; 0301 } 0302 } 0303 0304 return false; 0305 } 0306 }