From 156b2190a859c65a16eba4d6b35dfa9b0b64a665 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sun, 7 Feb 2021 13:43:10 +0200 Subject: [PATCH] checkability for AppletsTable in ExportTemplateDlg --- app/settings/dialogs/exporttemplatedialog.cpp | 3 -- .../handlers/exporttemplatehandler.cpp | 3 ++ app/settings/models/appletsmodel.cpp | 40 ++++++++++++++++++- app/settings/models/appletsmodel.h | 2 + 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/settings/dialogs/exporttemplatedialog.cpp b/app/settings/dialogs/exporttemplatedialog.cpp index 2abb59617..bca4eeacb 100644 --- a/app/settings/dialogs/exporttemplatedialog.cpp +++ b/app/settings/dialogs/exporttemplatedialog.cpp @@ -39,9 +39,6 @@ ExportTemplateDialog::ExportTemplateDialog(SettingsDialog *parent, Controller::L m_ui->setupUi(this); //! we must create handlers after creating/adjusting the ui m_handler = new Handler::ExportTemplateHandler(this); - - m_ui->appletsTable->horizontalHeader()->setStretchLastSection(true); - m_ui->appletsTable->verticalHeader()->setVisible(false); } ExportTemplateDialog::~ExportTemplateDialog() diff --git a/app/settings/handlers/exporttemplatehandler.cpp b/app/settings/handlers/exporttemplatehandler.cpp index 0f4e75ac2..86d54cd39 100644 --- a/app/settings/handlers/exporttemplatehandler.cpp +++ b/app/settings/handlers/exporttemplatehandler.cpp @@ -50,6 +50,9 @@ ExportTemplateHandler::~ExportTemplateHandler() void ExportTemplateHandler::init() { + m_ui->appletsTable->horizontalHeader()->setStretchLastSection(true); + m_ui->appletsTable->verticalHeader()->setVisible(false); + //! Layouts m_appletsProxyModel = new QSortFilterProxyModel(this); m_appletsProxyModel->setSourceModel(m_appletsModel); diff --git a/app/settings/models/appletsmodel.cpp b/app/settings/models/appletsmodel.cpp index b565b636b..c45980bc1 100644 --- a/app/settings/models/appletsmodel.cpp +++ b/app/settings/models/appletsmodel.cpp @@ -90,6 +90,18 @@ void Applets::setData(const Latte::Data::AppletsTable &applets) } } +Qt::ItemFlags Applets::flags(const QModelIndex &index) const +{ + const int column = index.column(); + const int row = index.row(); + + auto flags = QAbstractTableModel::flags(index); + + flags |= Qt::ItemIsUserCheckable; + + return flags; +} + QVariant Applets::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation != Qt::Horizontal) { @@ -115,6 +127,28 @@ QVariant Applets::headerData(int section, Qt::Orientation orientation, int role) return QAbstractTableModel::headerData(section, orientation, role); } +bool Applets::setData(const QModelIndex &index, const QVariant &value, int role) +{ + const int row = index.row(); + const int column = index.column(); + + if (!m_appletsTable.rowExists(row) || column<0 || column > NAMECOLUMN) { + return false; + } + + //! specific roles to each independent cell + switch (column) { + case NAMECOLUMN: + if (role == Qt::CheckStateRole) { + m_appletsTable[row].isSelected = (value.toInt() > 0 ? true : false); + return true; + } + break; + }; + + return false; +} + QVariant Applets::data(const QModelIndex &index, int role) const { const int row = index.row(); @@ -126,6 +160,10 @@ QVariant Applets::data(const QModelIndex &index, int role) const if (role == NAMEROLE || role == Qt::DisplayRole) { return m_appletsTable[row].name; + } else if (role == Qt::CheckStateRole) { + return (m_appletsTable[row].isSelected ? Qt::Checked : Qt::Unchecked); + } else if (role== Qt::DecorationRole) { + return QIcon::fromTheme(m_appletsTable[row].icon); } else if (role == IDROLE) { return m_appletsTable[row].id; } else if (role == SELECTEDROLE) { @@ -135,7 +173,7 @@ QVariant Applets::data(const QModelIndex &index, int role) const } 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 m_appletsTable[row].isInstalled() ? QString::number(1000) + m_appletsTable[row].name : QString::number(0000) + m_appletsTable[row].name; } return QVariant{}; diff --git a/app/settings/models/appletsmodel.h b/app/settings/models/appletsmodel.h index 6a497a05a..ab54cf356 100644 --- a/app/settings/models/appletsmodel.h +++ b/app/settings/models/appletsmodel.h @@ -63,7 +63,9 @@ public: int row(const QString &id); QVariant data(const QModelIndex &index, int role) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role) override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; void setData(const Latte::Data::AppletsTable &applets);