diff options
author | Fabien Proriol <fabien.proriol@kazoe.org> | 2025-05-25 17:58:09 +0200 |
---|---|---|
committer | Fabien Proriol <fabien.proriol@kazoe.org> | 2025-05-26 18:01:49 +0200 |
commit | 49daa163530ceabc9eaa8911ab96b5f799cfb552 (patch) | |
tree | 080d0b31eafd138cd8d47d5c2a52b75d3cfa6f28 /src/waylandentriesfiltered.cpp |
Initial Commit
Diffstat (limited to 'src/waylandentriesfiltered.cpp')
-rw-r--r-- | src/waylandentriesfiltered.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
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 <QDebug> + +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<QObject*>(m_model); +} + +void WaylandEntriesFiltered::setModel(QObject *newModel) +{ + WaylandEntries *entries = qobject_cast<WaylandEntries*>(newModel); + if (entries) + { + m_model = entries; + setSourceModel(m_model); + emit modelChanged(m_model); + } +} + +int WaylandEntriesFiltered::length() +{ + return rowCount(); +} |