support restore Presets in layouts manager

pull/1/head
Michail Vourlakos 8 years ago
parent 23391e53f5
commit ed6ca64c1f

@ -30,6 +30,8 @@
#include <QDir>
#include <QFileDialog>
#include <QHeaderView>
#include <KLocalizedString>
#include <QMessageBox>
#include <QStandardItem>
#include <QStandardItemModel>
@ -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;

@ -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;

@ -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();
}

@ -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};

@ -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);

@ -69,6 +69,8 @@ public:
QStringList globalLaunchers() const;
void setGlobalLaunchers(QStringList launchers);
static QString layoutName(const QString &fileName);
signals:
void activitiesChanged();
void colorChanged();

Loading…
Cancel
Save