From 4719201b4d31619c8c9ebd54ff2365b3d75045b4 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sun, 28 Mar 2021 13:32:47 +0300 Subject: [PATCH] settings:introduce views model --- app/settings/viewsdialog/CMakeLists.txt | 3 +- app/settings/viewsdialog/viewsmodel.cpp | 89 +++++++++++++++++++++ app/settings/viewsdialog/viewsmodel.h | 100 ++++++++++++++++++++++++ 3 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 app/settings/viewsdialog/viewsmodel.cpp create mode 100644 app/settings/viewsdialog/viewsmodel.h diff --git a/app/settings/viewsdialog/CMakeLists.txt b/app/settings/viewsdialog/CMakeLists.txt index b37161308..36798c575 100644 --- a/app/settings/viewsdialog/CMakeLists.txt +++ b/app/settings/viewsdialog/CMakeLists.txt @@ -1,7 +1,8 @@ set(lattedock-app_SRCS ${lattedock-app_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/viewsdialog.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/viewshandler.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/viewshandler.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/viewsmodel.cpp PARENT_SCOPE ) diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp new file mode 100644 index 000000000..c62139a68 --- /dev/null +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -0,0 +1,89 @@ +/* + * Copyright 2021 Michail Vourlakos + * + * 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 . + * + */ + +#include "viewsmodel.h" + + +namespace Latte { +namespace Settings { +namespace Model { + +Views::Views(QObject *parent, Latte::Corona *corona) + : QAbstractTableModel(parent), + m_corona(corona) +{ +} + +Views::~Views() +{ +} + +void Views::clear() +{ + if (m_viewsTable.rowCount() > 0) { + beginRemoveRows(QModelIndex(), 0, m_viewsTable.rowCount() - 1); + m_viewsTable.clear(); + endRemoveRows(); + } +} + +int Views::rowCount() const +{ + return m_viewsTable.rowCount(); +} + +int Views::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return m_viewsTable.rowCount(); +} + +int Views::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return IDCOLUMN+1; +} + +const Latte::Data::ViewsTable &Views::currentViewsData() +{ + return m_viewsTable; +} + +const Latte::Data::ViewsTable &Views::originalViewsData() +{ + return o_viewsTable; +} + + +void Views::setOriginalData(Latte::Data::ViewsTable &data) +{ + clear(); + + beginInsertRows(QModelIndex(), 0, data.rowCount() - 1); + o_viewsTable = data; + m_viewsTable = data; + endInsertRows(); + + emit rowsInserted(); +} + +} +} +} diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h new file mode 100644 index 000000000..08d3f86ba --- /dev/null +++ b/app/settings/viewsdialog/viewsmodel.h @@ -0,0 +1,100 @@ +/* + * Copyright 2021 Michail Vourlakos + * + * 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 . + * + */ + +#ifndef VIEWSMODEL_H +#define VIEWSMODEL_H + +// local +#include "../../lattecorona.h" +#include "../../data/viewdata.h" +#include "../../data/viewstable.h" + +// Qt +#include +#include + +namespace Latte { +namespace Settings { +namespace Model { + +class Views : public QAbstractTableModel +{ + Q_OBJECT + +public: + + enum Columns + { + SCREENCOLUMN = 0, + EDGECOLUMN, + ALIGNMENTCOLUMN, + IDCOLUMN + }; + + enum Roles + { + IDROLE = Qt::UserRole + 1, + ISACTIVEROLE, + SCREENSLISTROLE, + EDGESLISTROLE, + SUBCONTAINMENTSIDSROLE, + SORTINGROLE + }; + + enum SortingPriority + { + NORMALPRIORITY = 8000, + MEDIUMPRIORITY = 6000, + HIGHPRIORITY = 4000, + HIGHESTPRIORITY = 2000 + }; + + explicit Views(QObject *parent, Latte::Corona *corona); + ~Views(); + + int rowCount() const; + int rowCount(const QModelIndex &parent) const override; + int columnCount(const QModelIndex &parent) const override; + + const Latte::Data::ViewsTable ¤tViewsData(); + const Latte::Data::ViewsTable &originalViewsData(); + + void setOriginalData(Latte::Data::ViewsTable &data); + +signals: + void rowsInserted(); + +private slots: + void clear(); + +private: + Latte::Data::ViewsTable m_viewsTable; + Latte::Data::ViewsTable o_viewsTable; + + Latte::Corona *m_corona{nullptr}; +}; + +} +} +} + + + +#endif