File indexing completed on 2024-05-12 17:08:29

0001 /*
0002  * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0003  * SPDX-FileCopyrightText: 2020 David Redondo <kde@david-redondo.de>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #pragma once
0009 
0010 #include <QAbstractProxyModel>
0011 
0012 #include "PagesModel.h"
0013 
0014 class PageSortModel : public QAbstractProxyModel
0015 {
0016     Q_OBJECT
0017 
0018 public:
0019     enum Roles {
0020         ShouldRemoveFilesRole = PagesModel::FilesWriteableRole + 1,
0021     };
0022     Q_ENUM(Roles)
0023 
0024     explicit PageSortModel(QObject *parent = nullptr);
0025 
0026     QHash<int, QByteArray> roleNames() const override;
0027     QVariant data(const QModelIndex &index, int role) const override;
0028     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0029 
0030     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0031 
0032     QModelIndex index(int row, int column, const QModelIndex &parent) const override;
0033     QModelIndex parent(const QModelIndex &child) const override;
0034     QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
0035     QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
0036     int rowCount(const QModelIndex &parent) const override;
0037     int columnCount(const QModelIndex &parent) const override;
0038 
0039     Q_INVOKABLE void move(int fromRow, int toRow);
0040 
0041     Q_INVOKABLE void applyChangesToSourceModel() const;
0042 
0043 private:
0044     QVector<int> m_rowMapping;
0045     QVector<bool> m_hiddenProxy;
0046     QVector<bool> m_removeFiles;
0047 };