From ed6ca64c1f1fa06c5c492a81556aed80397eb893 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 22 Jul 2017 10:39:35 +0300 Subject: [PATCH] support restore Presets in layouts manager --- app/layoutconfigdialog.cpp | 61 +++++++++++++++++++++++++++++++++++++- app/layoutconfigdialog.h | 3 ++ app/layoutmanager.cpp | 11 +++++++ app/layoutmanager.h | 2 ++ app/layoutsettings.cpp | 27 ++++++++++------- app/layoutsettings.h | 2 ++ 6 files changed, 95 insertions(+), 11 deletions(-) diff --git a/app/layoutconfigdialog.cpp b/app/layoutconfigdialog.cpp index 89223875b..34e08b170 100644 --- a/app/layoutconfigdialog.cpp +++ b/app/layoutconfigdialog.cpp @@ -30,6 +30,8 @@ #include #include #include +#include + #include #include #include @@ -161,6 +163,8 @@ void LayoutConfigDialog::on_copyButton_clicked() m_layouts[copiedId] = settings; insertLayoutInfoAtRow(row + 1, copiedId, color, layoutName, menu, QStringList()); + + ui->layoutsView->selectRow(row + 1); } void LayoutConfigDialog::on_removeButton_clicked() @@ -278,6 +282,34 @@ void LayoutConfigDialog::apply() void LayoutConfigDialog::restoreDefaults() { qDebug() << Q_FUNC_INFO; + + foreach (auto preset, m_manager->presetsPaths()) { + QString presetName = LayoutSettings::layoutName(preset); + QByteArray presetNameChars = presetName.toUtf8(); + const char *prset_str = presetNameChars.data(); + presetName = i18n(prset_str); + + if (!nameExistsInModel(presetName)) { + qDebug() << "Must be added ::: " << presetName; + QString tempDir = uniqueTempDirectory(); + + QString copiedId = tempDir + "/" + presetName + ".layout.latte"; + QFile(preset).copy(copiedId); + + LayoutSettings *settings = new LayoutSettings(this, copiedId); + m_layouts[copiedId] = settings; + + QString id = copiedId; + QString color = settings->color(); + QString layoutName = presetName; + bool menu = settings->showInMenu(); + + int row = ascendingRowFor(layoutName); + insertLayoutInfoAtRow(row, copiedId, color, layoutName, menu, QStringList()); + + ui->layoutsView->selectRow(row); + } + } } void LayoutConfigDialog::loadLayouts() @@ -522,7 +554,8 @@ bool LayoutConfigDialog::saveAllChanges() layout->setActivities(cleanedActivities); } - if (layout->name() != name) { + //!if the layout name changed or when the layout path is a temporary one + if (layout->name() != name || (id.startsWith("/tmp/"))) { QString tempFile = layoutTempDir.filePath(QString(layout->name() + ".layout.latte")); qDebug() << "new temp file ::: " << tempFile; @@ -591,6 +624,32 @@ bool LayoutConfigDialog::idExistsInModel(QString id) return false; } +bool LayoutConfigDialog::nameExistsInModel(QString name) +{ + for (int i = 0; i < m_model->rowCount(); ++i) { + QString rowName = m_model->data(m_model->index(i, 2), Qt::DisplayRole).toString(); + + if (rowName == name) { + return true; + } + } + + return false; +} + +int LayoutConfigDialog::ascendingRowFor(QString name) +{ + for (int i = 0; i < m_model->rowCount(); ++i) { + QString rowName = m_model->data(m_model->index(i, 2), Qt::DisplayRole).toString(); + + if (rowName.toUpper() > name.toUpper()) { + return i; + } + } + + return m_model->rowCount(); +} + QString LayoutConfigDialog::uniqueTempDirectory() { QTemporaryDir tempDir; diff --git a/app/layoutconfigdialog.h b/app/layoutconfigdialog.h index 2be24078e..da935d324 100644 --- a/app/layoutconfigdialog.h +++ b/app/layoutconfigdialog.h @@ -74,8 +74,11 @@ private: bool dataAreAccepted(); bool idExistsInModel(QString id); + bool nameExistsInModel(QString name); bool saveAllChanges(); + int ascendingRowFor(QString name); + QString uniqueTempDirectory(); QStringList m_availableActivities; diff --git a/app/layoutmanager.cpp b/app/layoutmanager.cpp index c1c449407..46ccbcea5 100644 --- a/app/layoutmanager.cpp +++ b/app/layoutmanager.cpp @@ -143,6 +143,11 @@ QStringList LayoutManager::activities() return m_corona->m_activityConsumer->activities(); } +QStringList LayoutManager::presetsPaths() const +{ + return m_presetsPaths; +} + QString LayoutManager::layoutPath(QString layoutName) { QString path = QDir::homePath() + "/.config/latte/" + layoutName + ".layout.latte"; @@ -167,6 +172,7 @@ void LayoutManager::loadLayouts() { m_layouts.clear(); m_menuLayouts.clear(); + m_presetsPaths.clear(); QDir layoutDir(QDir::homePath() + "/.config/latte"); QStringList filter; @@ -183,6 +189,11 @@ void LayoutManager::loadLayouts() } } + m_presetsPaths.append(m_corona->kPackage().filePath("preset1")); + m_presetsPaths.append(m_corona->kPackage().filePath("preset2")); + m_presetsPaths.append(m_corona->kPackage().filePath("preset3")); + m_presetsPaths.append(m_corona->kPackage().filePath("preset4")); + emit layoutsChanged(); emit menuLayoutsChanged(); } diff --git a/app/layoutmanager.h b/app/layoutmanager.h index 5cf0cb2c5..ed4c77f97 100644 --- a/app/layoutmanager.h +++ b/app/layoutmanager.h @@ -64,6 +64,7 @@ public: QStringList layouts() const; QStringList menuLayouts() const; + QStringList presetsPaths() const; QAction *addWidgetsAction(); QAction *toggleLayoutAction(); @@ -110,6 +111,7 @@ private: QStringList m_layouts; QStringList m_menuLayouts; + QStringList m_presetsPaths; QAction *m_addWidgetsAction{nullptr}; QAction *m_toggleLayoutAction{nullptr}; diff --git a/app/layoutsettings.cpp b/app/layoutsettings.cpp index 3c1996fd8..45fb969ff 100644 --- a/app/layoutsettings.cpp +++ b/app/layoutsettings.cpp @@ -25,26 +25,21 @@ namespace Latte { -LayoutSettings::LayoutSettings(QObject *parent, QString layoutFile, QString layoutName) +LayoutSettings::LayoutSettings(QObject *parent, QString layoutFile, QString assignedName) : QObject(parent) { - qDebug() << "Layout file to create object: " << layoutFile << " with name: " << layoutName; + qDebug() << "Layout file to create object: " << layoutFile << " with name: " << assignedName; if (QFile(layoutFile).exists()) { - if (layoutName.isEmpty()) { - int lastSlash = layoutFile.lastIndexOf("/"); - QString tempLayoutFile = layoutFile; - layoutName = tempLayoutFile.remove(0, lastSlash + 1); - - int ext = layoutName.lastIndexOf(".layout.latte"); - layoutName = layoutName.remove(ext, 13); + if (assignedName.isEmpty()) { + assignedName = layoutName(layoutFile); } KSharedConfigPtr lConfig = KSharedConfig::openConfig(layoutFile); m_layoutGroup = KConfigGroup(lConfig, "LayoutSettings"); setFile(layoutFile); - setName(layoutName); + setName(assignedName); loadConfig(); init(); } @@ -195,6 +190,18 @@ void LayoutSettings::setActivities(QStringList activities) emit activitiesChanged(); } +QString LayoutSettings::layoutName(const QString &fileName) +{ + int lastSlash = fileName.lastIndexOf("/"); + QString tempLayoutFile = fileName; + QString layoutName = tempLayoutFile.remove(0, lastSlash + 1); + + int ext = layoutName.lastIndexOf(".layout.latte"); + layoutName = layoutName.remove(ext, 13); + + return layoutName; +} + void LayoutSettings::loadConfig() { m_version = m_layoutGroup.readEntry("version", 2); diff --git a/app/layoutsettings.h b/app/layoutsettings.h index bfdcaa3f1..0cf341ea8 100644 --- a/app/layoutsettings.h +++ b/app/layoutsettings.h @@ -69,6 +69,8 @@ public: QStringList globalLaunchers() const; void setGlobalLaunchers(QStringList launchers); + static QString layoutName(const QString &fileName); + signals: void activitiesChanged(); void colorChanged();