From 49daa163530ceabc9eaa8911ab96b5f799cfb552 Mon Sep 17 00:00:00 2001 From: Fabien Proriol Date: Sun, 25 May 2025 17:58:09 +0200 Subject: Initial Commit --- src/waylandentriesfiltered.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/waylandentriesfiltered.cpp (limited to 'src/waylandentriesfiltered.cpp') diff --git a/src/waylandentriesfiltered.cpp b/src/waylandentriesfiltered.cpp new file mode 100644 index 0000000..f1f2ebc --- /dev/null +++ b/src/waylandentriesfiltered.cpp @@ -0,0 +1,63 @@ +#include "waylandentriesfiltered.h" +#include "waylandentries.h" +#include "xdgdesktopentries.h" +#include + +WaylandEntriesFiltered::WaylandEntriesFiltered(QObject *parent) + : QSortFilterProxyModel{parent} +{ + m_entries = new KaZoe::DesktopEntries(this); + QObject::connect(this, &WaylandEntriesFiltered::rowsInserted, this, &WaylandEntriesFiltered::lengthChanged); + QObject::connect(this, &WaylandEntriesFiltered::rowsRemoved, this, &WaylandEntriesFiltered::lengthChanged); +} + +QString WaylandEntriesFiltered::roleFilter() const +{ + return m_roleFilter.join(";"); +} + +void WaylandEntriesFiltered::setRoleFilter(const QString &roles) +{ + QStringList newlist = roles.split(";"); + if (m_roleFilter == newlist) + return; + m_roleFilter = newlist; + emit roleFilterChanged(); +} + +bool WaylandEntriesFiltered::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const +{ + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); + QVariant appid = sourceModel()->data(index, WaylandEntries::AppIdRole); + QString role = m_entries->appIdData(appid.toString(), "Desktop Entry/X-DESKTOPMGR-ROLE"); + + if(appid.isNull()) + return false; + + if(m_roleFilter.contains(role)) + { + return false; + } + return true; +} + +QObject *WaylandEntriesFiltered::model() const +{ + return static_cast(m_model); +} + +void WaylandEntriesFiltered::setModel(QObject *newModel) +{ + WaylandEntries *entries = qobject_cast(newModel); + if (entries) + { + m_model = entries; + setSourceModel(m_model); + emit modelChanged(m_model); + } +} + +int WaylandEntriesFiltered::length() +{ + return rowCount(); +} -- cgit v1.2.3