File indexing completed on 2024-06-23 05:08:10

0001 /*
0002   This file is part of KOrganizer.
0003 
0004   SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at>
0005 
0006   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #pragma once
0010 
0011 #include "prefs.h"
0012 
0013 #include <QSortFilterProxyModel>
0014 #include <QStringList>
0015 
0016 class TodoViewSortFilterProxyModel : public QSortFilterProxyModel
0017 {
0018     Q_OBJECT
0019 
0020 public:
0021     explicit TodoViewSortFilterProxyModel(const EventViews::PrefsPtr &prefs, QObject *parent = nullptr);
0022 
0023     void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
0024 
0025     [[nodiscard]] const QStringList &categories() const
0026     {
0027         return mCategories;
0028     }
0029 
0030     [[nodiscard]] const QStringList &priorities() const
0031     {
0032         return mPriorities;
0033     }
0034 
0035 protected:
0036     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0037     bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
0038 
0039 public Q_SLOTS:
0040     void setCategoryFilter(const QStringList &categories);
0041     void setPriorityFilter(const QStringList &priorities);
0042 
0043 private:
0044     int compareStartDates(const QModelIndex &left, const QModelIndex &right) const;
0045     int compareDueDates(const QModelIndex &left, const QModelIndex &right) const;
0046     int compareCompletedDates(const QModelIndex &left, const QModelIndex &right) const;
0047     int comparePriorities(const QModelIndex &left, const QModelIndex &right) const;
0048     int compareCompletion(const QModelIndex &left, const QModelIndex &right) const;
0049     QStringList mCategories;
0050     QStringList mPriorities;
0051     Qt::SortOrder mSortOrder = Qt::AscendingOrder;
0052     EventViews::PrefsPtr mPreferences;
0053 };