/ sorters / sorter.h
sorter.h
 1  #ifndef SORTER_H
 2  #define SORTER_H
 3  
 4  #include <QObject>
 5  
 6  namespace qqsfpm {
 7  
 8  class QQmlSortFilterProxyModel;
 9  
10  class Sorter : public QObject
11  {
12      Q_OBJECT
13      Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
14      Q_PROPERTY(bool ascendingOrder READ ascendingOrder WRITE setAscendingOrder NOTIFY sortOrderChanged)
15      Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder NOTIFY sortOrderChanged)
16      Q_PROPERTY(int priority READ priority WRITE setPriority NOTIFY priorityChanged)
17  
18  public:
19      Sorter(QObject* parent = nullptr);
20      virtual ~Sorter() = 0;
21  
22      bool enabled() const;
23      void setEnabled(bool enabled);
24  
25      bool ascendingOrder() const;
26      void setAscendingOrder(bool ascendingOrder);
27  
28      Qt::SortOrder sortOrder() const;
29      void setSortOrder(Qt::SortOrder sortOrder);
30  
31      int priority() const;
32      void setPriority(int priority);
33  
34      int compareRows(const QModelIndex& source_left, const QModelIndex& source_right, const QQmlSortFilterProxyModel& proxyModel) const;
35  
36      virtual void proxyModelCompleted(const QQmlSortFilterProxyModel& proxyModel);
37  
38  Q_SIGNALS:
39      void enabledChanged();
40      void sortOrderChanged();
41      void priorityChanged();
42  
43      void invalidated();
44  
45  protected:
46      virtual int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight, const QQmlSortFilterProxyModel& proxyModel) const;
47      virtual bool lessThan(const QModelIndex& sourceLeft, const QModelIndex& sourceRight, const QQmlSortFilterProxyModel& proxyModel) const;
48      void invalidate();
49  
50  private:
51      bool m_enabled = true;
52      Qt::SortOrder m_sortOrder = Qt::AscendingOrder;
53      int m_priority = 0;
54  };
55  
56  }
57  
58  #endif // SORTER_H