provide basic implementation of ExportTemplateDlg

work/spdx
Michail Vourlakos 4 years ago
parent 0943ecb42e
commit a45b97a2b1

@ -66,6 +66,11 @@ Applet &Applet::operator=(Applet &&rhs)
return (*this);
}
bool Applet::isInstalled() const
{
return isValid() && id != name;
}
bool Applet::isValid() const
{
return !id.isEmpty() && !name.isEmpty();

@ -48,6 +48,7 @@ public:
Applet &operator=(const Applet &rhs);
Applet &operator=(Applet &&rhs);
bool isInstalled() const;
bool isValid() const;
};

@ -22,18 +22,23 @@
// local
#include "ui_exporttemplatedialog.h"
#include "../controllers/layoutscontroller.h"
#include "../handlers/exporttemplatehandler.h"
namespace Latte {
namespace Settings {
namespace Dialog {
ExportTemplateDialog::ExportTemplateDialog(SettingsDialog *parent)
ExportTemplateDialog::ExportTemplateDialog(SettingsDialog *parent, Controller::Layouts *controller)
: GenericDialog(parent),
m_parentDlg(parent),
m_ui(new Ui::ExportTemplateDialog)
m_ui(new Ui::ExportTemplateDialog),
m_layoutsController(controller)
{
//! first we need to setup the ui
m_ui->setupUi(this);
//! we must create handlers after creating/adjusting the ui
m_handler = new Handler::ExportTemplateHandler(this);
}
ExportTemplateDialog::~ExportTemplateDialog()
@ -50,6 +55,11 @@ Latte::Corona *ExportTemplateDialog::corona() const
return m_parentDlg->corona();
}
Controller::Layouts *ExportTemplateDialog::layoutsController() const
{
return m_layoutsController;
}
void ExportTemplateDialog::accept()
{
qDebug() << Q_FUNC_INFO;

@ -33,6 +33,18 @@ namespace Ui {
class ExportTemplateDialog;
}
namespace Latte {
namespace Settings {
namespace Controller {
class Layouts;
}
namespace Handler {
class ExportTemplateHandler;
}
}
}
namespace Latte {
namespace Settings {
namespace Dialog {
@ -42,12 +54,13 @@ class ExportTemplateDialog : public GenericDialog
Q_OBJECT
public:
ExportTemplateDialog(SettingsDialog *parent);
ExportTemplateDialog(SettingsDialog *parent, Controller::Layouts *controller);
~ExportTemplateDialog();
Latte::Corona *corona() const;
Ui::ExportTemplateDialog *ui() const;
Controller::Layouts *layoutsController() const;
protected:
void accept() override;
@ -58,6 +71,9 @@ private slots:
private:
SettingsDialog *m_parentDlg{nullptr};
Ui::ExportTemplateDialog *m_ui;
Controller::Layouts *m_layoutsController{nullptr};
Handler::ExportTemplateHandler *m_handler;
};
}

@ -45,7 +45,7 @@
</widget>
</item>
<item>
<widget class="QTableView" name="tableView"/>
<widget class="QTableView" name="appletsTable"/>
</item>
</layout>
</item>
@ -80,38 +80,5 @@
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DetailsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DetailsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
<connections/>
</ui>

@ -1,6 +1,7 @@
set(lattedock-app_SRCS
${lattedock-app_SRCS}
${CMAKE_CURRENT_SOURCE_DIR}/detailshandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/exporttemplatehandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/generichandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tabpreferenceshandler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tablayoutshandler.cpp

@ -0,0 +1,100 @@
/*
* Copyright 2021 Michail Vourlakos <mvourlakos@gmail.com>
*
* This file is part of Latte-Dock
*
* Latte-Dock is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* Latte-Dock is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "exporttemplatehandler.h"
// local
#include "ui_exporttemplatedialog.h"
#include "../controllers/layoutscontroller.h"
#include "../dialogs/exporttemplatedialog.h"
#include "../models/appletsmodel.h"
#include "../../data/appletdata.h"
#include "../../layouts/storage.h"
namespace Latte {
namespace Settings {
namespace Handler {
ExportTemplateHandler::ExportTemplateHandler(Dialog::ExportTemplateDialog *parentDialog)
: Generic(parentDialog),
m_parentDialog(parentDialog),
m_ui(m_parentDialog->ui()),
m_appletsModel(new Model::Applets(this, parentDialog->corona()))
{
init();
}
ExportTemplateHandler::~ExportTemplateHandler()
{
}
void ExportTemplateHandler::init()
{
//! Layouts
m_appletsProxyModel = new QSortFilterProxyModel(this);
m_appletsProxyModel->setSourceModel(m_appletsModel);
m_appletsProxyModel->setSortRole(Model::Applets::SORTINGROLE);
m_appletsProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
m_appletsProxyModel->sort(Model::Applets::NAMECOLUMN, Qt::AscendingOrder);
m_ui->appletsTable->setModel(m_appletsProxyModel);
loadCurrentLayoutApplets();
}
void ExportTemplateHandler::loadCurrentLayoutApplets()
{
Data::Layout o_layout = m_parentDialog->layoutsController()->selectedLayoutOriginalData();
c_data = Latte::Layouts::Storage::self()->plugins(o_layout.id);
o_data = c_data;
m_appletsModel->setData(c_data);
}
bool ExportTemplateHandler::dataAreChanged() const
{
return o_data != c_data;
}
bool ExportTemplateHandler::inDefaultValues() const
{
//nothing special
return true;
}
void ExportTemplateHandler::reset()
{
c_data = o_data;
}
void ExportTemplateHandler::resetDefaults()
{
//do nothing
}
void ExportTemplateHandler::save()
{
//do nothing
}
}
}
}

@ -0,0 +1,97 @@
/*
* Copyright 2021 Michail Vourlakos <mvourlakos@gmail.com>
*
* This file is part of Latte-Dock
*
* Latte-Dock is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* Latte-Dock is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef EXPORTTEMPLATEHANDLER_H
#define EXPORTTEMPLATEHANDLER_H
// local
#include "generichandler.h"
#include "../../data/appletdata.h"
// Qt
#include <QButtonGroup>
#include <QSortFilterProxyModel>
namespace Ui {
class ExportTemplateDialog;
}
namespace Latte{
namespace Settings{
namespace Dialog{
class ExportTemplateDialog;
}
}
}
namespace Latte{
namespace Settings{
namespace Model {
class Applets;
}
}
}
namespace Latte {
namespace Settings {
namespace Handler {
//! Handlers are objects to handle the UI elements that semantically associate with specific
//! ui::tabs or different windows. They are responsible also to handle the user interaction
//! between controllers and views
class ExportTemplateHandler : public Generic
{
Q_OBJECT
public:
ExportTemplateHandler(Dialog::ExportTemplateDialog *parentDialog);
~ExportTemplateHandler();
bool dataAreChanged() const override;
bool inDefaultValues() const override;
void reset() override;
void resetDefaults() override;
void save() override;
Latte::Data::AppletsTable currentData() const;
private:
void init();
void loadCurrentLayoutApplets();
private:
Dialog::ExportTemplateDialog *m_parentDialog{nullptr};
Ui::ExportTemplateDialog *m_ui{nullptr};
//! current data
Model::Applets *m_appletsModel{nullptr};
QSortFilterProxyModel *m_appletsProxyModel{nullptr};
Latte::Data::AppletsTable o_data;
Latte::Data::AppletsTable c_data;
};
}
}
}
#endif

@ -26,6 +26,7 @@
#include "../universalsettings.h"
#include "../dialogs/detailsdialog.h"
#include "../dialogs/settingsdialog.h"
#include "../dialogs/exporttemplatedialog.h"
#include "../controllers/layoutscontroller.h"
#include "../models/layoutsmodel.h"
#include "../views/layoutstableview.h"
@ -555,6 +556,13 @@ void TabLayouts::exportLayoutAsTemplate()
if (!m_layoutsController->hasSelectedLayout()) {
return;
}
//! Update ALL active original layouts before exporting,
m_corona->layoutsManager()->synchronizer()->syncActiveLayoutsToOriginalFiles();
m_corona->universalSettings()->syncSettings();
Dialog::ExportTemplateDialog *exportDlg = new Dialog::ExportTemplateDialog(m_parentDialog, m_layoutsController);
exportDlg->exec();
}
void TabLayouts::exportLayoutForBackup()

@ -70,6 +70,26 @@ int Applets::row(const QString &id)
return -1;
}
void Applets::clear()
{
if (m_appletsTable.rowCount() > 0) {
beginRemoveRows(QModelIndex(), 0, m_appletsTable.rowCount() - 1);
m_appletsTable.clear();
endRemoveRows();
}
}
void Applets::setData(const Latte::Data::AppletsTable &applets)
{
clear();
if (applets.rowCount() > 0) {
beginInsertRows(QModelIndex(), 0, applets.rowCount()-1);
m_appletsTable = applets;
endInsertRows();
}
}
QVariant Applets::data(const QModelIndex &index, int role) const
{
const int row = index.row();
@ -89,6 +109,8 @@ QVariant Applets::data(const QModelIndex &index, int role) const
return m_appletsTable[row].icon;
} else if (role == DESCRIPTIONROLE) {
return m_appletsTable[row].description;
} else if (role == SORTINGROLE) {
return m_appletsTable[row].isInstalled() ? QString(1000 + m_appletsTable[row].name) : m_appletsTable[row].name;
}
return QVariant{};

@ -41,12 +41,18 @@ public:
enum AppletsRoles
{
IDROLE = Qt::UserRole + 1,
SELECTEDROLE,
ICONROLE,
NAMEROLE,
ICONROLE,
SELECTEDROLE,
SORTINGROLE,
DESCRIPTIONROLE
};
enum Columns
{
NAMECOLUMN = 0
};
explicit Applets(QObject *parent, Latte::Corona *corona);
~Applets();
@ -58,6 +64,11 @@ public:
QVariant data(const QModelIndex &index, int role) const override;
void setData(const Latte::Data::AppletsTable &applets);
private:
void clear();
private:
Latte::Data::AppletsTable m_appletsTable;

Loading…
Cancel
Save