From 93a8ae3ff2ae5e57e9bcbba25e442f100d0b4862 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Mon, 16 Mar 2020 02:03:12 +0200 Subject: [PATCH] improvements for Layouts Editor --- .../controllers/layoutscontroller.cpp | 62 +++++++++++-------- app/settings/controllers/layoutscontroller.h | 3 + app/settings/data/layoutstable.cpp | 14 +++++ app/settings/data/layoutstable.h | 2 +- app/settings/models/layoutsmodel.cpp | 45 ++++++++++++-- app/settings/models/layoutsmodel.h | 10 ++- app/settings/settingsdialog.cpp | 6 +- 7 files changed, 104 insertions(+), 38 deletions(-) diff --git a/app/settings/controllers/layoutscontroller.cpp b/app/settings/controllers/layoutscontroller.cpp index 13de22035..bfa6d7069 100644 --- a/app/settings/controllers/layoutscontroller.cpp +++ b/app/settings/controllers/layoutscontroller.cpp @@ -303,6 +303,23 @@ void Layouts::toggleSharedForSelected() } } +QString Layouts::layoutNameForFreeActivities() const +{ + return m_model->layoutNameForFreeActivities(); +} + +void Layouts::setLayoutNameForFreeActivities(const QString &name, bool updateOriginalData) +{ + m_model->setLayoutNameForFreeActivities(name); + + if(updateOriginalData) { + QString id = o_layoutsOriginalData.idForCurrentName(name); + o_layoutsOriginalData.setLayoutForFreeActivities(id); + } + + emit dataChanged(); +} + void Layouts::loadLayouts() { @@ -393,7 +410,7 @@ void Layouts::loadLayouts() //! Send original loaded data to model m_model->setCurrentData(layoutsBuffer); - m_model->setLayoutForFreeActivities(m_corona->universalSettings()->lastNonAssignedLayoutName()); + m_model->setLayoutNameForFreeActivities(m_corona->universalSettings()->lastNonAssignedLayoutName()); m_view->selectRow(rowForName(m_corona->layoutsManager()->currentLayoutName())); @@ -696,22 +713,11 @@ void Layouts::save() } } - QString layoutForFreeActivities; - if (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) { for (const auto &newLayoutName : activeLayoutsToRename.keys()) { Latte::Layout::GenericLayout *layoutPtr = activeLayoutsToRename[newLayoutName]; qDebug() << " Active Layout of Type: " << layoutPtr->type() << " Is Renamed From : " << activeLayoutsToRename[newLayoutName]->name() << " TO :: " << newLayoutName; layoutPtr->renameLayout(newLayoutName); - - if (layoutPtr->type() == Latte::Layout::Type::Central) { - CentralLayout *central = qobject_cast(layoutPtr); - - if (central->activities().isEmpty()) { - //! that means it is an active layout for orphaned Activities - layoutForFreeActivities = newLayoutName; - } - } } } @@ -735,24 +741,28 @@ void Layouts::save() //! reload layouts in layoutsmanager m_corona->layoutsManager()->synchronizer()->loadLayouts(); - //! send to layout manager in which layout to switch - /* Latte::Types::LayoutsMemoryUsage inMemoryOption = static_cast(m_inMemoryButtons->checkedId()); + if (!m_model->layoutNameForFreeActivities().isEmpty()) { + //! make sure that there is a layout for free activities + //! send to layout manager in which layout to switch + Latte::Types::LayoutsMemoryUsage inMemoryOption = Latte::Types::SingleLayout; - if (m_corona->layoutsManager()->memoryUsage() != inMemoryOption) { - Types::LayoutsMemoryUsage previousMemoryUsage = m_corona->layoutsManager()->memoryUsage(); - m_corona->layoutsManager()->setMemoryUsage(inMemoryOption); + if (inMultipleMode()) { + inMemoryOption = Latte::Types::MultipleLayouts; + } - QVariant value = m_model->data(m_model->index(ui->layoutsView->currentIndex().row(), NAMECOLUMN), Qt::DisplayRole); - QString layoutName = value.toString(); + if (m_corona->layoutsManager()->memoryUsage() != inMemoryOption) { + Types::LayoutsMemoryUsage previousMemoryUsage = m_corona->layoutsManager()->memoryUsage(); + m_corona->layoutsManager()->setMemoryUsage(inMemoryOption); - m_corona->layoutsManager()->switchToLayout(layoutName, previousMemoryUsage); - } else { - if (!switchToLayout.isEmpty()) { - m_corona->layoutsManager()->switchToLayout(switchToLayout); - } else if (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) { - m_corona->layoutsManager()->synchronizer()->syncMultipleLayoutsToActivities(orphanedLayout); + m_corona->layoutsManager()->switchToLayout(m_model->layoutNameForFreeActivities(), previousMemoryUsage); + } else { + if (m_corona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) { + m_corona->layoutsManager()->synchronizer()->syncMultipleLayoutsToActivities(m_model->layoutNameForFreeActivities()); + } else { + m_corona->layoutsManager()->switchToLayout(m_model->layoutNameForFreeActivities()); + } } - }*/ + } m_model->applyCurrentNames(); diff --git a/app/settings/controllers/layoutscontroller.h b/app/settings/controllers/layoutscontroller.h index 782d8e5cb..c18bda440 100644 --- a/app/settings/controllers/layoutscontroller.h +++ b/app/settings/controllers/layoutscontroller.h @@ -70,6 +70,9 @@ public: void toggleLockedForSelected(); void toggleSharedForSelected(); + QString layoutNameForFreeActivities() const; + void setLayoutNameForFreeActivities(const QString &name, bool updateOriginalData = false); + void addLayoutForFile(QString file, QString layoutName = QString(), bool newTempDirectory = true, bool showNotification = true); void copySelectedLayout(); //! import layouts from Latte versions <= v0.7.x diff --git a/app/settings/data/layoutstable.cpp b/app/settings/data/layoutstable.cpp index faeded5c6..94fb60f3d 100644 --- a/app/settings/data/layoutstable.cpp +++ b/app/settings/data/layoutstable.cpp @@ -285,6 +285,20 @@ void LayoutsTable::remove(const int &row) } } +void LayoutsTable::setLayoutForFreeActivities(const QString &id) +{ + int row = indexOf(id); + + if (row>=0) { + for(int i=0; ilayoutsManager(), &Latte::Layouts::Manager::currentLayoutNameChanged, this, &Layouts::updateActiveStates); + connect(m_corona->layoutsManager(), &Latte::Layouts::Manager::centralLayoutsChanged, this, &Layouts::updateActiveStates); } bool Layouts::containsCurrentName(const QString &name) const @@ -161,18 +164,28 @@ bool Layouts::removeRows(int row, int count, const QModelIndex &parent) return false; } -void Layouts::setLayoutForFreeActivities(const QString &name) +QString Layouts::layoutNameForFreeActivities() const +{ + for(int i=0; i=0 && m_layoutsTable[row].activities.isEmpty()) { - m_layoutsTable[row].activities << Data::Layout::FREEACTIVITIESID; + if (!id.isEmpty()) { + m_layoutsTable.setLayoutForFreeActivities(id); QVector roles; roles << Qt::DisplayRole; roles << Qt::UserRole; - emit dataChanged(index(row, ACTIVITYCOLUMN), index(row, ACTIVITYCOLUMN), roles); + emit dataChanged(index(0, ACTIVITYCOLUMN), index(rowCount()-1, ACTIVITYCOLUMN), roles); } } @@ -530,6 +543,28 @@ bool Layouts::setData(const QModelIndex &index, const QVariant &value, int role) return false; } +void Layouts::updateActiveStates() +{ + QVector roles; + roles << Qt::DisplayRole; + roles << Qt::UserRole; + roles << LAYOUTISACTIVEROLE; + + for(int i=0; ilayoutsManager()->synchronizer()->layout(m_layoutsTable[i].currentName())) { + iActive = true; + } + + if (m_layoutsTable[i].isActive != iActive) { + m_layoutsTable[i].isActive = iActive; + + emit dataChanged(index(i, BACKGROUNDCOLUMN), index(i,SHAREDCOLUMN), roles); + } + } +} + const Data::Layout &Layouts::at(const int &row) { return m_layoutsTable[row]; diff --git a/app/settings/models/layoutsmodel.h b/app/settings/models/layoutsmodel.h index 6f99a09d1..0326b50fd 100644 --- a/app/settings/models/layoutsmodel.h +++ b/app/settings/models/layoutsmodel.h @@ -90,8 +90,11 @@ public: void clear(); void applyCurrentNames(); void appendLayout(const Settings::Data::Layout &layout); - void removeLayout(const QString &id); - void setLayoutForFreeActivities(const QString &name); + void removeLayout(const QString &id); + + QString layoutNameForFreeActivities() const; + void setLayoutNameForFreeActivities(const QString &name); + const Data::LayoutsTable ¤tData(); void setCurrentData(Data::LayoutsTable &data); @@ -99,6 +102,9 @@ public: signals: void inMultipleModeChanged(); +private slots: + void updateActiveStates(); + private: void setActivities(const int &row, const QStringList &activities); void setId(const int &row, const QString &newId); diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index 544a698bc..b39fa2c71 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -79,9 +79,6 @@ SettingsDialog::SettingsDialog(QWidget *parent, Latte::Corona *corona) m_layoutsController = new Settings::Controller::Layouts(this, m_corona, ui->layoutsView); m_model = m_layoutsController->model(); - //connect(m_corona->layoutsManager(), &Layouts::Manager::currentLayoutNameChanged, this, &SettingsDialog::layoutsChanged); - //connect(m_corona->layoutsManager(), &Layouts::Manager::centralLayoutsChanged, this, &SettingsDialog::layoutsChanged); - m_inMemoryButtons = new QButtonGroup(this); m_inMemoryButtons->addButton(ui->singleToolBtn, Latte::Types::SingleLayout); m_inMemoryButtons->addButton(ui->multipleToolBtn, Latte::Types::MultipleLayouts); @@ -662,7 +659,8 @@ void SettingsDialog::on_switchButton_clicked() } } else { if (!m_layoutsController->selectedLayoutIsCurrentActive()) { - m_corona->layoutsManager()->switchToLayout(selectedLayout.originalName()); + m_layoutsController->setLayoutNameForFreeActivities(selectedLayout.currentName(), true); + m_corona->layoutsManager()->switchToLayout(selectedLayout.originalName()); } }