File indexing completed on 2024-05-05 05:01:25

0001 // SPDX-FileCopyrightText: 2022 Snehit Sah <hi@snehit.dev>
0002 // SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003 
0004 #pragma once
0005 
0006 #include <QQmlEngine>
0007 #include <QSortFilterProxyModel>
0008 
0009 /**
0010  * @class SortFilterSpaceListModel
0011  *
0012  * This model sorts and filters the space list.
0013  *
0014  * The spaces are sorted by their matrix ID. The filter only shows space rooms,
0015  * but filters out upgraded spaces.
0016  */
0017 class SortFilterSpaceListModel : public QSortFilterProxyModel
0018 {
0019     Q_OBJECT
0020     QML_ELEMENT
0021 
0022     /**
0023      * @brief The number of spaces in the model.
0024      */
0025     Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
0026 
0027 public:
0028     explicit SortFilterSpaceListModel(QObject *parent = nullptr);
0029 
0030 Q_SIGNALS:
0031     void countChanged();
0032 
0033 protected:
0034     /**
0035      * @brief Returns true if the value of source_left is less than source_right.
0036      *
0037      * @sa QSortFilterProxyModel::lessThan
0038      */
0039     [[nodiscard]] bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
0040 
0041     /**
0042      * @brief Whether a row should be shown out or not.
0043      *
0044      * @sa QSortFilterProxyModel::filterAcceptsRow
0045      */
0046     [[nodiscard]] bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0047 };