/ 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