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 }