Warning, /plasma/latte-dock/containment/package/contents/ui/abilities/privates/layouter/AppletsContainer.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 0008 Item { 0009 id: appletsContainer 0010 0011 property Item grid: null 0012 0013 // items in grid 0014 readonly property int count: grid.children.length 0015 0016 property bool onlyInternalSplitters: false 0017 0018 //it is used in calculations for fillWidth,fillHeight applets 0019 property int shownApplets: 0 0020 property int fillApplets: 0 0021 property int fillRealApplets: 0 //with no internal separators counted 0022 0023 property int lengthWithoutSplitters: 0 //with no internal separators length 0024 0025 //it is used in calculations for fillWidth,fillHeight applets 0026 property int sizeWithNoFillApplets: 0 0027 0028 0029 readonly property int maxIndex: 99999 0030 property int firstVisibleIndex: -1 0031 property int lastVisibleIndex: -1 0032 0033 //! do not update during dragging/moving applets inConfigureAppletsMode 0034 readonly property bool updateIsBlocked: appletsInParentChange //|| (root.dragOverlay && root.dragOverlay.pressed) 0035 0036 Binding{ 0037 target: appletsContainer 0038 property:"sizeWithNoFillApplets" 0039 when: appletsContainer && grid && !updateIsBlocked && inNormalFillCalculationsState 0040 value: { 0041 var space = 0; 0042 for (var i=0; i<grid.children.length; ++i){ 0043 if (grid.children[i] && (grid.children[i].isPlaceHolder || (!grid.children[i].isAutoFillApplet && !grid.children[i].isHidden && !grid.children[i].isParabolicEdgeSpacer))) { 0044 0045 if (!grid.children[i].isPlaceHolder && grid.children[i].isInternalViewSplitter) { 0046 space += root.maxJustifySplitterSize; 0047 } else { 0048 space = root.isHorizontal ? space + grid.children[i].width : space + grid.children[i].height; 0049 } 0050 } 0051 } 0052 0053 return space; 0054 } 0055 } 0056 0057 Binding{ 0058 target: appletsContainer 0059 property:"lengthWithoutSplitters" 0060 when: appletsContainer && grid && !updateIsBlocked && inNormalFillCalculationsState 0061 && !(dragOverlay && dragOverlay.currentApplet && dragOverlay.currentApplet.isInternalViewSplitter /*avoid binding loop when dragging splitters around*/) 0062 value: { 0063 var space = 0; 0064 for (var i=0; i<grid.children.length; ++i){ 0065 if (grid.children[i] && (grid.children[i].isPlaceHolder || (!grid.children[i].isInternalViewSplitter && !grid.children[i].isHidden))) { 0066 space = root.isHorizontal ? space + grid.children[i].width : space + grid.children[i].height; 0067 } 0068 } 0069 0070 return space; 0071 } 0072 } 0073 0074 0075 Binding{ 0076 target: appletsContainer 0077 property:"shownApplets" 0078 when: appletsContainer && grid && !updateIsBlocked 0079 value: { 0080 var res = 0; 0081 0082 for (var i=0; i<grid.children.length; ++i){ 0083 if (grid.children[i] && grid.children[i].isHidden) { 0084 //do nothing 0085 } else if (grid.children[i] && (grid.children[i].isPlaceHolder || grid.children[i].applet)){/*internal splitters are ignored this way*/ 0086 res = res + 1; 0087 } 0088 } 0089 0090 return res; 0091 } 0092 } 0093 0094 0095 Binding{ 0096 target: appletsContainer 0097 property:"fillApplets" 0098 when: appletsContainer && grid && !updateIsBlocked 0099 value: { 0100 var no = 0; 0101 for (var i=0; i<grid.children.length; ++i){ 0102 if (grid.children[i] 0103 && !grid.children[i].isParabolicEdgeSpacer 0104 && !grid.children[i].isPlaceHolder 0105 && grid.children[i].isAutoFillApplet 0106 && !grid.children[i].isHidden) { 0107 //console.log("fill :::: " + children[i].applet.pluginName); 0108 no++; 0109 } 0110 } 0111 0112 return no; 0113 } 0114 } 0115 0116 Binding{ 0117 target: appletsContainer 0118 property:"fillRealApplets" 0119 when: appletsContainer && grid && !updateIsBlocked 0120 value: { 0121 var no = 0; 0122 for (var i=0; i<grid.children.length; ++i){ 0123 if (grid.children[i] 0124 && !grid.children[i].isParabolicEdgeSpacer 0125 && !grid.children[i].isPlaceHolder 0126 && grid.children[i].isRequestingFill 0127 && grid.children[i].applet 0128 && !grid.children[i].isHidden) { 0129 //console.log("fill :::: " + children[i].applet.pluginName); 0130 no++; 0131 } 0132 } 0133 0134 return no; 0135 } 0136 } 0137 0138 Binding{ 0139 target: appletsContainer 0140 property:"firstVisibleIndex" 0141 when: appletsContainer && grid && !updateIsBlocked 0142 value: { 0143 var ind = maxIndex; 0144 for(var i=0; i<grid.children.length; ++i) { 0145 var appletItem = grid.children[i]; 0146 if (appletItem && appletItem.index>=0 0147 && indexer.hidden.indexOf(appletItem.index)<0 0148 && indexer.separators.indexOf(appletItem.index)<0 0149 && appletItem.index < ind) { 0150 ind = appletItem.index; 0151 } 0152 } 0153 0154 return ind === maxIndex ? -1 : ind; 0155 } 0156 } 0157 0158 Binding{ 0159 target: appletsContainer 0160 property:"lastVisibleIndex" 0161 when: appletsContainer && grid && !updateIsBlocked 0162 value: { 0163 var ind = -1; 0164 for(var i=0; i<grid.children.length; ++i) { 0165 var appletItem = grid.children[i]; 0166 if (appletItem && appletItem.index>=0 0167 && indexer.hidden.indexOf(appletItem.index)<0 0168 && indexer.separators.indexOf(appletItem.index)<0 0169 && appletItem.index > ind) { 0170 ind = appletItem.index; 0171 } 0172 } 0173 0174 return ind; 0175 } 0176 } 0177 0178 Binding{ 0179 target: appletsContainer 0180 property:"onlyInternalSplitters" 0181 when: appletsContainer && grid && !updateIsBlocked && inNormalFillCalculationsState 0182 value: { 0183 var intsSplits = 0; 0184 0185 for (var i=0; i<grid.children.length; ++i){ 0186 if (grid.children[i] 0187 && !grid.children[i].isParabolicEdgeSpacer 0188 && !grid.children[i].isPlaceHolder 0189 && grid.children[i].isInternalViewSplitter 0190 && !grid.children[i].isHidden) { 0191 intsSplits = intsSplits + 1; 0192 } 0193 } 0194 0195 return ((intsSplits > 0) && (intsSplits === grid.children.length)); 0196 } 0197 } 0198 0199 onCountChanged: { 0200 if (root.editMode) { 0201 //! this is mainly used when removing/adding internal view splitters 0202 //! in order to not break the parabolic effect from wrong indexes 0203 root.updateIndexes(); 0204 } 0205 } 0206 }