/ proxyroles / switchrole.h
switchrole.h
1 #ifndef SWITCHROLE_H 2 #define SWITCHROLE_H 3 4 #include "singlerole.h" 5 #include "filters/filtercontainer.h" 6 7 namespace qqsfpm { 8 9 class SwitchRoleAttached : public QObject 10 { 11 Q_OBJECT 12 Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged) 13 public: 14 SwitchRoleAttached(QObject* parent); 15 16 QVariant value() const; 17 void setValue(const QVariant &value); 18 19 Q_SIGNALS: 20 void valueChanged(); 21 22 private: 23 QVariant m_value; 24 }; 25 26 class SwitchRole : public SingleRole, public FilterContainer 27 { 28 Q_OBJECT 29 Q_INTERFACES(qqsfpm::FilterContainer) 30 Q_PROPERTY(QString defaultRoleName READ defaultRoleName WRITE setDefaultRoleName NOTIFY defaultRoleNameChanged) 31 Q_PROPERTY(QVariant defaultValue READ defaultValue WRITE setDefaultValue NOTIFY defaultValueChanged) 32 Q_PROPERTY(QQmlListProperty<qqsfpm::Filter> filters READ filtersListProperty) 33 Q_CLASSINFO("DefaultProperty", "filters") 34 35 public: 36 using SingleRole::SingleRole; 37 38 QString defaultRoleName() const; 39 void setDefaultRoleName(const QString& defaultRoleName); 40 41 QVariant defaultValue() const; 42 void setDefaultValue(const QVariant& defaultValue); 43 44 void proxyModelCompleted(const QQmlSortFilterProxyModel& proxyModel) override; 45 46 static SwitchRoleAttached* qmlAttachedProperties(QObject* object); 47 48 Q_SIGNALS: 49 void defaultRoleNameChanged(); 50 void defaultValueChanged(); 51 52 private: 53 QVariant data(const QModelIndex& sourceIndex, const QQmlSortFilterProxyModel& proxyModel) override; 54 55 void onFilterAppended(Filter *filter) override; 56 void onFilterRemoved(Filter *filter) override; 57 void onFiltersCleared() override; 58 59 QString m_defaultRoleName; 60 QVariant m_defaultValue; 61 }; 62 63 } 64 65 QML_DECLARE_TYPEINFO(qqsfpm::SwitchRole, QML_HAS_ATTACHED_PROPERTIES) 66 67 #endif // SWITCHROLE_H