summaryrefslogtreecommitdiff
path: root/src/waylandentriesfiltered.cpp
blob: f1f2ebcabd3dcfe0078e28cd501798dede5c489f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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();
}