diff --git a/containment/package/contents/ui/abilities/AutoSize.qml b/containment/package/contents/ui/abilities/AutoSize.qml index cf5c1cc4a..5d4f2b791 100644 --- a/containment/package/contents/ui/abilities/AutoSize.qml +++ b/containment/package/contents/ui/abilities/AutoSize.qml @@ -171,13 +171,9 @@ Item { //console.log("------Entered check-----"); //console.log("max length: "+ maxLength); - if (root.isVertical) { - layoutLength = (plasmoid.configuration.alignment === LatteCore.Types.Justify) ? - layouts.startLayout.height+layouts.mainLayout.height+layouts.endLayout.height : layouts.mainLayout.height - } else { - layoutLength = (plasmoid.configuration.alignment === LatteCore.Types.Justify) ? - layouts.startLayout.width+layouts.mainLayout.width+layouts.endLayout.width : layouts.mainLayout.width - } + layoutLength = (plasmoid.configuration.alignment === LatteCore.Types.Justify) ? + layouts.startLayout.length+layouts.mainLayout.length+layouts.endLayout.length : layouts.mainLayout.length + var itemLength = metrics.totals.length; diff --git a/containment/package/contents/ui/abilities/privates/layouter/AppletsContainer.qml b/containment/package/contents/ui/abilities/privates/layouter/AppletsContainer.qml index 6145477a0..adcf8d048 100644 --- a/containment/package/contents/ui/abilities/privates/layouter/AppletsContainer.qml +++ b/containment/package/contents/ui/abilities/privates/layouter/AppletsContainer.qml @@ -40,7 +40,7 @@ Item { value: { var space = 0; for (var i=0; i + SPDX-License-Identifier: GPL-2.0-or-later +*/ + +import QtQuick 2.7 +import org.kde.latte.core 0.2 as LatteCore + +Item { + id: edgeSpacer + width: length + height: length + + readonly property bool isParabolicEdgeSpacer: true + readonly property bool isHidden: true + + readonly property bool isAutoFillApplet: false + readonly property bool isInternalViewSplitter: false + readonly property bool isPlaceHolder: false + readonly property bool isTailSpacer: index < parent.beginIndex + readonly property bool isHeadSpacer: index >= parent.beginIndex + + readonly property int animationTime: animations.speedFactor.normal * (1.2*animations.duration.small) + readonly property int hiddenItemsCount: (parabolic.spread - 1)/2 + + property int index: -1 + property int length: 0 + + Behavior on length { + id: animatedLengthBehavior + enabled: !parabolic.directRenderingEnabled || restoreAnimation.running + NumberAnimation { + duration: 3 * edgeSpacer.animationTime + easing.type: Easing.OutCubic + } + } + + Behavior on length { + enabled: !animatedLengthBehavior.enabled + NumberAnimation { duration: 0 } + } + + ParallelAnimation{ + id: restoreAnimation + + PropertyAnimation { + target: edgeSpacer + property: "length" + to: 0 + duration: 4 * edgeSpacer.animationTime + easing.type: Easing.InCubic + } + } + + function updateScale(istail, newScales) { + var nextFactor = 0; + for (var i=0; iproperty("startParabolicSpacer").value(); + QQuickItem *endParabolicSpacer = m_mainLayout->property("endParabolicSpacer").value(); + + if (!startParabolicSpacer || !endParabolicSpacer) { + return; + } + + insertAtLayoutTail(m_mainLayout, startParabolicSpacer); + insertAtLayoutHead(m_mainLayout, endParabolicSpacer); +} + void LayoutManager::save() { QList appletIds; + reorderParabolicSpacers(); + int startChilds{0}; for(int i=0; ichildItems().count(); ++i) { QQuickItem *item = m_startLayout->childItems()[i]; bool isInternalSplitter = item->property("isInternalViewSplitter").toBool(); - if (!isInternalSplitter) { + bool isParabolicEdgeSpacer = item->property("isParabolicEdgeSpacer").toBool(); + if (!isInternalSplitter && !isParabolicEdgeSpacer) { QVariant appletVariant = item->property("applet"); if (!appletVariant.isValid()) { continue; @@ -528,7 +544,8 @@ void LayoutManager::save() for(int i=0; ichildItems().count(); ++i) { QQuickItem *item = m_mainLayout->childItems()[i]; bool isInternalSplitter = item->property("isInternalViewSplitter").toBool(); - if (!isInternalSplitter) { + bool isParabolicEdgeSpacer = item->property("isParabolicEdgeSpacer").toBool(); + if (!isInternalSplitter && !isParabolicEdgeSpacer) { QVariant appletVariant = item->property("applet"); if (!appletVariant.isValid()) { continue; @@ -553,7 +570,8 @@ void LayoutManager::save() for(int i=0; ichildItems().count(); ++i) { QQuickItem *item = m_endLayout->childItems()[i]; bool isInternalSplitter = item->property("isInternalViewSplitter").toBool(); - if (!isInternalSplitter) { + bool isParabolicEdgeSpacer = item->property("isParabolicEdgeSpacer").toBool(); + if (!isInternalSplitter && !isParabolicEdgeSpacer) { QVariant appletVariant = item->property("applet"); if (!appletVariant.isValid()) { continue; @@ -716,6 +734,21 @@ void LayoutManager::insertAtLayoutHead(QQuickItem *layout, QQuickItem *item) item->setParentItem(layout); } +void LayoutManager::insertAtLayoutIndex(QQuickItem *layout, QQuickItem *item, const int &index) +{ + if (!layout || !item) { + return; + } + + if (index == 0) { + insertAtLayoutTail(layout, item); + } else if (index >= layout->childItems().count()) { + insertAtLayoutHead(layout, item); + } else { + insertBefore(layout->childItems()[index], item); + } +} + bool LayoutManager::insertAtLayoutCoordinates(QQuickItem *layout, QQuickItem *item, int x, int y) { if (!layout || !item || !m_plasmoid || !layout->contains(QPointF(x,y))) { @@ -854,7 +887,8 @@ QQuickItem *LayoutManager::appletItemInLayout(QQuickItem *layout, const int &id) for(int i=0; ichildItems().count(); ++i) { QQuickItem *item = layout->childItems()[i]; bool isInternalSplitter = item->property("isInternalViewSplitter").toBool(); - if (!isInternalSplitter) { + bool isParabolicEdgeSpacer = item->property("isParabolicEdgeSpacer").toBool(); + if (!isInternalSplitter && !isParabolicEdgeSpacer) { QVariant appletVariant = item->property("applet"); if (!appletVariant.isValid()) { continue; @@ -905,8 +939,14 @@ int LayoutManager::dndSpacerIndex() if (alignment == Latte::Types::Justify) { for(int i=0; ichildItems().count(); ++i) { - index++; QQuickItem *item = m_startLayout->childItems()[i]; + bool isparabolicspacer = item->property("isParabolicEdgeSpacer").toBool(); + + if (isparabolicspacer) { + continue; + } + + index++; if (item == m_dndSpacer) { return index; } @@ -914,8 +954,14 @@ int LayoutManager::dndSpacerIndex() } for(int i=0; ichildItems().count(); ++i) { + QQuickItem *item = m_mainLayout->childItems()[i]; + bool isparabolicspacer = item->property("isParabolicEdgeSpacer").toBool(); + + if (isparabolicspacer) { + continue; + } + index++; - QQuickItem *item = m_mainLayout->childItems()[i]; if (item == m_dndSpacer) { return index; } @@ -923,8 +969,14 @@ int LayoutManager::dndSpacerIndex() if (alignment == Latte::Types::Justify) { for(int i=0; ichildItems().count(); ++i) { - index++; QQuickItem *item = m_endLayout->childItems()[i]; + bool isparabolicspacer = item->property("isParabolicEdgeSpacer").toBool(); + + if (isparabolicspacer) { + continue; + } + + index++; if (item == m_dndSpacer) { return index; } @@ -1344,13 +1396,13 @@ void LayoutManager::addJustifySplittersInMainLayout() m_createJustifySplitterMethod.invoke(m_rootItem, Q_RETURN_ARG(QVariant, splitterItemVariant)); QQuickItem *splitterItem = splitterItemVariant.value(); - int size = m_mainLayout->childItems().count(); + int size = m_mainLayout->childItems().count()-2; //we need to remove parabolic spacers splitterItem->setParentItem(m_mainLayout); if (size>0 && splitterIndex>=0) { bool atend = (splitterIndex >= size); - int validindex = atend ? size-1 : splitterIndex; + int validindex = (atend ? size-1 : splitterIndex) + 1; //we need to take into account first parabolic spacer QQuickItem *currentitem = m_mainLayout->childItems()[validindex]; if (atend) { @@ -1369,13 +1421,13 @@ void LayoutManager::addJustifySplittersInMainLayout() m_createJustifySplitterMethod.invoke(m_rootItem, Q_RETURN_ARG(QVariant, splitterItemVariant2)); QQuickItem *splitterItem2 = splitterItemVariant2.value(); - int size2 = m_mainLayout->childItems().count(); + int size2 = m_mainLayout->childItems().count()-2; //we need to remove parabolic spacers splitterItem2->setParentItem(m_mainLayout); if (size2>0 && splitterIndex2>=0) { bool atend = (splitterIndex2 >= size2); - int validindex2 = atend ? size2-1 : splitterIndex2; + int validindex2 = (atend ? size2-1 : splitterIndex2) + 1; //we need to take into account first parabolic spacer QQuickItem *currentitem2 = m_mainLayout->childItems()[validindex2]; if (atend) { @@ -1385,7 +1437,7 @@ void LayoutManager::addJustifySplittersInMainLayout() } } else if (size2>1){ //! add in last position - QQuickItem *currentitem2 = m_mainLayout->childItems()[size2-1]; + QQuickItem *currentitem2 = m_mainLayout->childItems()[size2-1+1]; //we need to take into account first parabolic spacer splitterItem2->stackAfter(currentitem2); } } @@ -1455,6 +1507,8 @@ void LayoutManager::moveAppletsBasedOnJustifyAlignment() return; } + reorderParabolicSpacers(); + QList appletlist; appletlist << m_startLayout->childItems(); @@ -1468,9 +1522,10 @@ void LayoutManager::moveAppletsBasedOnJustifyAlignment() for(int i=0; iproperty("isInternalViewSplitter").toBool(); + bool isparabolicspacer = appletlist[i]->property("isParabolicEdgeSpacer").toBool(); if (!firstSplitterFound) { - appletlist[i]->setParentItem(m_startLayout); + insertAtLayoutIndex(m_startLayout, appletlist[i], i); if (issplitter) { firstSplitterFound = true; splitter1 = i; @@ -1479,39 +1534,42 @@ void LayoutManager::moveAppletsBasedOnJustifyAlignment() if (issplitter) { secondSplitterFound = true; splitter2 = i; - appletlist[i]->setParentItem(m_endLayout); + insertAtLayoutTail(m_endLayout, appletlist[i]); } else { - appletlist[i]->setParentItem(m_mainLayout); + insertAtLayoutIndex(m_mainLayout, appletlist[i], i-splitter1); } } else if (firstSplitterFound && secondSplitterFound) { - appletlist[i]->setParentItem(m_endLayout); + insertAtLayoutIndex(m_endLayout, appletlist[i], i-splitter2); } } - for(int i=0; iparentItem() == after->parentItem()) { - before->stackBefore(after); - } - } +void LayoutManager::printAppletList(QList list) +{ + for(int i=0; iproperty("isInternalViewSplitter").toBool(); + bool isparabolicspacer = list[i]->property("isParabolicEdgeSpacer").toBool(); - //! Confirm Last item of End Layout - if (m_endLayout->childItems().count() > 0) { - QQuickItem *lastItem = m_endLayout->childItems()[m_endLayout->childItems().count()-1]; + if (issplitter) { + qDebug() << i << " __ JUSTIFY SPLITTER"; + continue; + } - int correctpos{-1}; + if (isparabolicspacer) { + qDebug() << i << " __ PARABOLICSPACER"; + continue; + } - for(int i=0; iproperty("applet"); + if (!appletVariant.isValid()) { + continue; } + PlasmaQuick::AppletQuickItem *appletitem = appletVariant.value(); - if (correctpos>=0) { - lastItem->stackBefore(appletlist[correctpos+1]); + if (appletitem) { + qDebug() << i << " __ " << appletitem->applet()->pluginMetaData().pluginId(); } } } diff --git a/containment/plugin/layoutmanager.h b/containment/plugin/layoutmanager.h index a380a6876..14a9bfc20 100644 --- a/containment/plugin/layoutmanager.h +++ b/containment/plugin/layoutmanager.h @@ -136,6 +136,7 @@ private slots: void updateOrder(); void cleanupOptions(); + void reorderParabolicSpacers(); private: void restoreOptions(); @@ -148,6 +149,7 @@ private: void insertAtLayoutTail(QQuickItem *layout, QQuickItem *item); void insertAtLayoutHead(QQuickItem *layout, QQuickItem *item); + void insertAtLayoutIndex(QQuickItem *layout, QQuickItem *item, const int &index); void setSplitterPosition(const int &position); void setSplitterPosition2(const int &position); @@ -172,6 +174,8 @@ private: QQuickItem *appletItem(const int &id); QQuickItem *appletItemInLayout(QQuickItem *layout, const int &id); + void printAppletList(QList list); + QList toIntList(const QString &serialized); QString toStr(const QList &list); diff --git a/declarativeimports/abilities/items/basicitem/ParabolicEventsArea.qml b/declarativeimports/abilities/items/basicitem/ParabolicEventsArea.qml index 127ad0e8b..857ceb45b 100644 --- a/declarativeimports/abilities/items/basicitem/ParabolicEventsArea.qml +++ b/declarativeimports/abilities/items/basicitem/ParabolicEventsArea.qml @@ -141,16 +141,6 @@ Item { //use the new parabolic ability in order to handle all parabolic effect messages var scales = abilityItem.abilities.parabolic.applyParabolicEffect(index, currentMousePosition, length); - //Left hiddenSpacer for first task - if(abilityItem.isFirstItemInContainer) { - hiddenSpacerLeft.nScale = scales.leftScale - 1; - } - - //Right hiddenSpacer for last task - if(abilityItem.isLastItemInContainer) { - hiddenSpacerRight.nScale = scales.rightScale - 1; - } - if (!parabolicItem.isUpdatingOnlySpacers) { abilityItem.parabolicItem.zoom = abilityItem.abilities.parabolic.factor.zoom; } else {