From 2e7dcb5428fbc965ac02e30d9233ac62a29e6532 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 31 Dec 2020 10:51:27 +0200 Subject: [PATCH] refactor rely on c++ to provide justify alignment --c++ takes the burden to validate the Justify alignment --- app/view/containmentinterface.cpp | 45 ++++++++++ app/view/containmentinterface.h | 1 + .../package/contents/code/LayoutManager.js | 4 +- containment/package/contents/ui/main.qml | 86 +++++++------------ 4 files changed, 77 insertions(+), 59 deletions(-) diff --git a/app/view/containmentinterface.cpp b/app/view/containmentinterface.cpp index df014c995..6b4a907d7 100644 --- a/app/view/containmentinterface.cpp +++ b/app/view/containmentinterface.cpp @@ -635,6 +635,51 @@ void ContainmentInterface::onAppletAdded(Plasma::Applet *applet) } +void ContainmentInterface::moveAppletsInJustifyAlignment(QQuickItem *start, QQuickItem *main, QQuickItem *end) +{ + if (!start || !main || !end) { + return; + } + + QList appletlist; + + appletlist << start->childItems(); + appletlist << main->childItems(); + appletlist << end->childItems(); + + bool firstSplitterFound{false}; + bool secondSplitterFound{false}; + int splitter1{-1}; + int splitter2{-1}; + + for(int i=0; iproperty("isInternalViewSplitter").toBool(); + + if (!firstSplitterFound) { + appletlist[i]->setParentItem(start); + if (issplitter) { + firstSplitterFound = true; + splitter1 = i; + } + } else if (firstSplitterFound && !secondSplitterFound) { + if (issplitter) { + secondSplitterFound = true; + splitter2 = i; + } else { + appletlist[i]->setParentItem(main); + } + } else if (firstSplitterFound && secondSplitterFound) { + appletlist[i]->setParentItem(end); + } + } + + if (splitter1>0) { + appletlist[splitter1]->stackAfter(appletlist[splitter1 - 1]); + } + if (splitter2>0 && splitter2stackBefore(appletlist[splitter2 + 1]); + } +} } } diff --git a/app/view/containmentinterface.h b/app/view/containmentinterface.h index 31db2fd69..2490a1778 100644 --- a/app/view/containmentinterface.h +++ b/app/view/containmentinterface.h @@ -92,6 +92,7 @@ public: public slots: Q_INVOKABLE void deactivateApplets(); Q_INVOKABLE void toggleAppletExpanded(const int id); + Q_INVOKABLE void moveAppletsInJustifyAlignment(QQuickItem *start, QQuickItem *main, QQuickItem *end); Q_INVOKABLE bool appletIsExpandable(const int id); Q_INVOKABLE bool appletIsExpanded(const int id); diff --git a/containment/package/contents/code/LayoutManager.js b/containment/package/contents/code/LayoutManager.js index 8b5962069..296ff3a31 100644 --- a/containment/package/contents/code/LayoutManager.js +++ b/containment/package/contents/code/LayoutManager.js @@ -82,7 +82,7 @@ function restore() { // console.log("UNDEFINEDSPLITTER 1 ::: " + missingApplets); // console.log("VALID SPLITTER 1 ::: " + validSplitter1); - root.addInternalViewSplitter(validSplitter1); + root.addInternalViewSplitterInMain(validSplitter1); } if(plasmoid.configuration.splitterPosition2 !== -1){ @@ -101,7 +101,7 @@ function restore() { // console.log("UNDEFINEDSPLITTER 2 ::: " + missingApplets2); // console.log("VALID SPLITTER 2 ::: " + validSplitter2); - root.addInternalViewSplitter(validSplitter2); + root.addInternalViewSplitterInMain(validSplitter2); } } diff --git a/containment/package/contents/ui/main.qml b/containment/package/contents/ui/main.qml index 9dffad3c2..30883f7af 100644 --- a/containment/package/contents/ui/main.qml +++ b/containment/package/contents/ui/main.qml @@ -514,7 +514,7 @@ Item { if (root.editMode){ if (panelAlignment===LatteCore.Types.Justify) { - addInternalViewSplitters(); + addInternalViewSplittersInMainLayout(); splitMainLayoutToLayouts(); } else { joinLayoutsToMainLayout(); @@ -762,25 +762,37 @@ Item { updateIndexes(); } - function addInternalViewSplitters(){ + function addInternalViewSplittersInMainLayout(){ if (internalViewSplittersCount() === 0) { - addInternalViewSplitter(plasmoid.configuration.splitterPosition); - addInternalViewSplitter(plasmoid.configuration.splitterPosition2); + addInternalViewSplitterInMain(plasmoid.configuration.splitterPosition); + addInternalViewSplitterInMain(plasmoid.configuration.splitterPosition2); } } - function addInternalViewSplitter(pos){ + function addInternalViewSplitterInStart(pos){ + addInternalViewSplitterInLayout(layoutsContainer.startLayout, pos); + } + + function addInternalViewSplitterInMain(pos){ + addInternalViewSplitterInLayout(layoutsContainer.mainLayout, pos); + } + + function addInternalViewSplitterInEnd(pos){ + addInternalViewSplitterInLayout(layoutsContainer.endLayout, pos); + } + + function addInternalViewSplitterInLayout(area, pos){ var splittersCount = internalViewSplittersCount(); if(splittersCount<2){ - var container = appletContainerComponent.createObject(root); + var splitter = appletContainerComponent.createObject(root); - container.internalSplitterId = splittersCount+1; - container.visible = true; + splitter.internalSplitterId = splittersCount+1; + splitter.visible = true; if(pos>=0 ){ - LayoutManager.insertAtIndex(layoutsContainer.mainLayout, container, pos); + LayoutManager.insertAtIndex(area, splitter, pos); } else { - LayoutManager.insertAtIndex(layoutsContainer.mainLayout, container, Math.floor(layouter.mainLayout.count / 2)); + LayoutManager.insertAtIndex(area, splitter, Math.floor(area.count / 2)); } } } @@ -967,53 +979,13 @@ Item { if (plasmoid.configuration.alignment !== 10) { return; } - layouter.appletsInParentChange = true; - - var splitter = -1; - var startChildrenLength = layoutsContainer.startLayout.children.length; - - //! Check if there is a splitter inside start layout after the user was dragging its applets - for (var i=0; i=0) { - for (var i=startChildrenLength-1; i>=splitter; --i){ - var item = layoutsContainer.startLayout.children[i]; - LayoutManager.insertAtIndex(layoutsContainer.mainLayout, item, 0); - } - } - - var splitter2 = -1; - var endChildrenLength = layoutsContainer.endLayout.children.length; - - //! Check if there is a splitter inside endlayout after the user was dragging its applets - for (var i=0; i=0) { - for (var i=0; i<=splitter2; ++i){ - var item = layoutsContainer.endLayout.children[0]; - item.parent = layoutsContainer.mainLayout; - } + if (latteView) { + latteView.extendedInterface.moveAppletsInJustifyAlignment(layoutsContainer.startLayout, + layoutsContainer.mainLayout, + layoutsContainer.endLayout); } - //! Validate applets positioning and move applets out of splitters to start/endlayouts accordingly - splitMainLayoutToLayouts(); - layouter.appletsInParentChange = false; } @@ -1039,19 +1011,19 @@ Item { // console.log("update layouts 1:"+splitter + " - "+splitter2); if (splitter > 0) { - for (var i=0; i 0) { - splitter2 = splitter2 - splitter; + splitter2 = splitter2 - splitter - 1; // console.log("update layouts 2:"+splitter + " - "+splitter2); totalChildren = layoutsContainer.mainLayout.children.length; - for (var i=totalChildren-1; i>=splitter2+1; --i){ + for (var i=totalChildren-1; i>=splitter2; --i){ var item = layoutsContainer.mainLayout.children[i]; LayoutManager.insertAtIndex(layoutsContainer.endLayout, item, 0); }