more functionality for FastLayoutManager

--provide addAppletItem function
--provide reorderSplitters in Start and End
layouts when an applet is added in them and
the splitters are moving in faulty position
work/spdx
Michail Vourlakos 4 years ago
parent 62efa97e61
commit 3185a70b9a

@ -571,17 +571,8 @@ Item {
}
}
Containment.onAppletAdded: {
var appletItem = createAppletItem(applet);
addAppletItemInLayout(appletItem, x, y);
console.log(applet.pluginName);
fastLayoutManager.save();
}
Containment.onAppletRemoved: {
fastLayoutManager.removeAppletItem(applet);
fastLayoutManager.save();
}
Containment.onAppletAdded: fastLayoutManager.addAppletItem(applet, x, y);
Containment.onAppletRemoved: fastLayoutManager.removeAppletItem(applet);
Plasmoid.onUserConfiguringChanged: {
if (plasmoid.userConfiguring) {
@ -620,23 +611,6 @@ Item {
return splitter;
}
function addAppletItemInLayout(appletItem, x, y){
if ( (dndSpacer.parent === layoutsContainer.mainLayout)
|| (dndSpacer.parent === layoutsContainer.startLayout)
|| (dndSpacer.parent===layoutsContainer.endLayout)) {
// Is there a DND placeholder? Replace it!
fastLayoutManager.insertBefore(dndSpacer, appletItem);
dndSpacer.parent = root;
return;
} else if (x >= 0 && y >= 0) {
// If the provided position is valid, use it.
fastLayoutManager.insertAtCoordinates(appletItem, x , y);
} else {
// Fall through to adding at the end of main layout.
appletItem.parent = layoutsContainer.mainLayout;
}
}
//! it is used in order to check the right click position
//! the only way to take into account the visual appearance
//! of the applet (including its spacers)

@ -272,8 +272,8 @@ void LayoutManager::restore()
QList<QObject *> applets = m_plasmoid->property("applets").value<QList<QObject *>>();
Latte::Types::Alignment alignment = static_cast<Latte::Types::Alignment>((*m_configuration)["alignment"].toInt());
int splitterPosition = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition"].toInt());
int splitterPosition2 = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition2"].toInt());
int splitterPosition = (*m_configuration)["splitterPosition"].toInt();
int splitterPosition2 = (*m_configuration)["splitterPosition2"].toInt();
QList<int> appletIdsOrder;
for (int i=0; i<appletStringIdsOrder.count(); ++i) {
@ -506,8 +506,8 @@ void LayoutManager::save()
setSplitterPosition(startChilds + 1);
setSplitterPosition2(startChilds + 1 + mainChilds + 1);
} else {
int splitterPosition = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition"].toInt());
int splitterPosition2 = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition2"].toInt());
int splitterPosition = (*m_configuration)["splitterPosition"].toInt();
int splitterPosition2 = (*m_configuration)["splitterPosition2"].toInt();
setSplitterPosition(splitterPosition);
setSplitterPosition2(splitterPosition2);
@ -699,6 +699,41 @@ void LayoutManager::insertAtCoordinates(QQuickItem *item, const int &x, const in
}
}
void LayoutManager::addAppletItem(QObject *applet, int x, int y)
{
if (!m_startLayout || !m_mainLayout || !m_endLayout) {
return;
}
QVariant appletItemVariant;
QVariant appletVariant; appletVariant.setValue(applet);
m_createAppletItemMethod.invoke(m_rootItem, Q_RETURN_ARG(QVariant, appletItemVariant), Q_ARG(QVariant, appletVariant));
QQuickItem *appletItem = appletItemVariant.value<QQuickItem *>();
if (m_dndSpacer->parentItem() == m_mainLayout
|| m_dndSpacer->parentItem() == m_startLayout
|| m_dndSpacer->parentItem() == m_endLayout) {
insertBefore(m_dndSpacer, appletItem);
QQuickItem *currentlayout = m_dndSpacer->parentItem();
m_dndSpacer->setParentItem(m_rootItem);
if (currentlayout == m_startLayout) {
reorderSplitterInStartLayout();
} else if (currentlayout ==m_endLayout) {
reorderSplitterInEndLayout();
}
} else if (x >= 0 && y >= 0) {
// If the provided position is valid, use it.
insertAtCoordinates(appletItem, x , y);
} else {
// Fall through to adding at the end of main layout.
appletItem->setParentItem(m_mainLayout);
}
save();
}
void LayoutManager::removeAppletItem(QObject *applet)
{
if (!m_startLayout || !m_mainLayout || !m_endLayout) {
@ -728,6 +763,66 @@ void LayoutManager::removeAppletItem(QObject *applet)
}
}
}
save();
}
void LayoutManager::reorderSplitterInStartLayout()
{
Latte::Types::Alignment alignment = static_cast<Latte::Types::Alignment>((*m_configuration)["alignment"].toInt());
if (alignment != Latte::Types::Justify) {
return;
}
int size = m_startLayout->childItems().count();
if (size > 0) {
QQuickItem *splitter{nullptr};
for (int i=0; i<size; ++i) {
QQuickItem *item = m_startLayout->childItems()[i];
bool issplitter = item->property("isInternalViewSplitter").toBool();
if (issplitter && i<size-1) {
splitter = item;
break;
}
}
if (splitter) {
insertAfter(m_startLayout->childItems()[size-1],splitter);
}
}
}
void LayoutManager::reorderSplitterInEndLayout()
{
Latte::Types::Alignment alignment = static_cast<Latte::Types::Alignment>((*m_configuration)["alignment"].toInt());
if (alignment != Latte::Types::Justify) {
return;
}
int size = m_endLayout->childItems().count();
if (size > 0) {
QQuickItem *splitter{nullptr};
for (int i=0; i<size; ++i) {
QQuickItem *item = m_endLayout->childItems()[i];
bool issplitter = item->property("isInternalViewSplitter").toBool();
if (issplitter && i!=0) {
splitter = item;
break;
}
}
if (splitter) {
insertBefore(m_endLayout->childItems()[0],splitter);
}
}
}
void LayoutManager::addJustifySplittersInMainLayout()
@ -738,8 +833,8 @@ void LayoutManager::addJustifySplittersInMainLayout()
destroyJustifySplitters();
int splitterPosition = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition"].toInt());
int splitterPosition2 = static_cast<Latte::Types::Alignment>((*m_configuration)["splitterPosition2"].toInt());
int splitterPosition = (*m_configuration)["splitterPosition"].toInt();
int splitterPosition2 = (*m_configuration)["splitterPosition2"].toInt();
int splitterIndex = (splitterPosition >= 1 ? splitterPosition - 1 : -1);
int splitterIndex2 = (splitterPosition2 >= 1 ? splitterPosition2 - 1 : -1);

@ -92,6 +92,7 @@ public slots:
Q_INVOKABLE void save();
Q_INVOKABLE void saveOptions();
Q_INVOKABLE void addAppletItem(QObject *applet, int x, int y);
Q_INVOKABLE void removeAppletItem(QObject *applet);
Q_INVOKABLE void addJustifySplittersInMainLayout();
@ -118,7 +119,6 @@ signals:
private slots:
void onRootItemChanged();
void destroyJustifySplitters();
private:
@ -133,6 +133,9 @@ private:
void setLockedZoomApplets(const QString &applets);
void setUserBlocksColorizingApplets(const QString &applets);
void reorderSplitterInStartLayout();
void reorderSplitterInEndLayout();
bool isValidApplet(const int &id);
bool insertAtLayoutCoordinates(QQuickItem *layout, QQuickItem *item, int x, int y);

Loading…
Cancel
Save