diff --git a/libnymea-app/thingclassesproxy.cpp b/libnymea-app/thingclassesproxy.cpp index bc3a3478..0b164e47 100644 --- a/libnymea-app/thingclassesproxy.cpp +++ b/libnymea-app/thingclassesproxy.cpp @@ -130,6 +130,36 @@ void ThingClassesProxy::setFilterString(const QString &filterString) } } +QList ThingClassesProxy::shownThingClassIds() const +{ + return m_shownThingClassIds; +} + +void ThingClassesProxy::setShownThingClassIds(const QList &shownThingClassIds) +{ + if (m_shownThingClassIds != shownThingClassIds) { + m_shownThingClassIds = shownThingClassIds; + emit shownThingClassIdsChanged(); + invalidateFilter(); + emit countChanged(); + } +} + +QList ThingClassesProxy::hiddenThingClassIds() const +{ + return m_hiddenThingClassIds; +} + +void ThingClassesProxy::setHiddenThingClassIds(const QList &hiddenThingClassIds) +{ + if (m_hiddenThingClassIds != hiddenThingClassIds) { + m_hiddenThingClassIds = hiddenThingClassIds; + emit hiddenThingClassIdsChanged(); + invalidateFilter(); + emit countChanged(); + } +} + bool ThingClassesProxy::groupByInterface() const { return m_groupByInterface; @@ -192,6 +222,14 @@ bool ThingClassesProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourc } } + if (!m_shownThingClassIds.isEmpty() && !m_shownThingClassIds.contains(thingClass->id())) { + return false; + } + + if (!m_hiddenThingClassIds.isEmpty() && m_hiddenThingClassIds.contains(thingClass->id())) { + return false; + } + if (!m_filterString.isEmpty()) { Vendor *vendor = m_engine->thingManager()->vendors()->getVendor(thingClass->vendorId()); if (!vendor) { diff --git a/libnymea-app/thingclassesproxy.h b/libnymea-app/thingclassesproxy.h index f836b7ff..ba77de9e 100644 --- a/libnymea-app/thingclassesproxy.h +++ b/libnymea-app/thingclassesproxy.h @@ -50,6 +50,9 @@ class ThingClassesProxy : public QSortFilterProxyModel Q_PROPERTY(QUuid filterVendorId READ filterVendorId WRITE setFilterVendorId NOTIFY filterVendorIdChanged) Q_PROPERTY(QString filterVendorName READ filterVendorName WRITE setFilterVendorName NOTIFY filterVendorNameChanged) + Q_PROPERTY(QList shownThingClassIds READ shownThingClassIds WRITE setShownThingClassIds NOTIFY shownThingClassIdsChanged) + Q_PROPERTY(QList hiddenThingClassIds READ hiddenThingClassIds WRITE setHiddenThingClassIds NOTIFY hiddenThingClassIdsChanged) + // Filters by thingClass' displayName or vendor's displayName Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged) @@ -76,6 +79,12 @@ public: QString filterString() const; void setFilterString(const QString &filterString); + QList shownThingClassIds() const; + void setShownThingClassIds(const QList &shownThingClassIds); + + QList hiddenThingClassIds() const; + void setHiddenThingClassIds(const QList &hiddenThingClassIds); + bool groupByInterface() const; void setGroupByInterface(bool groupByInterface); @@ -90,6 +99,8 @@ signals: void filterVendorIdChanged(); void filterVendorNameChanged(); void filterStringChanged(); + void shownThingClassIdsChanged(); + void hiddenThingClassIdsChanged(); void groupByInterfaceChanged(); void countChanged(); @@ -103,6 +114,8 @@ private: QString m_filterDisplayName; QUuid m_filterVendorId; QString m_filterVendorName; + QList m_hiddenThingClassIds; + QList m_shownThingClassIds; QString m_filterString; bool m_groupByInterface = false; };