File indexing completed on 2024-05-12 05:36:50

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 #include <qqmlregistration.h>
0012 
0013 #include "PagesModel.h"
0014 
0015 class PageSortModel : public QAbstractProxyModel
0016 {
0017     Q_OBJECT
0018     QML_ELEMENT
0019 
0020 public:
0021     enum Roles {
0022         ShouldRemoveFilesRole = PagesModel::FilesWriteableRole + 1,
0023     };
0024     Q_ENUM(Roles)
0025 
0026     explicit PageSortModel(QObject *parent = nullptr);
0027 
0028     QHash<int, QByteArray> roleNames() const override;
0029     QVariant data(const QModelIndex &index, int role) const override;
0030     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0031 
0032     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0033 
0034     QModelIndex index(int row, int column, const QModelIndex &parent) const override;
0035     QModelIndex parent(const QModelIndex &child) const override;
0036     QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
0037     QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
0038     int rowCount(const QModelIndex &parent) const override;
0039     int columnCount(const QModelIndex &parent) const override;
0040 
0041     Q_INVOKABLE void move(int fromRow, int toRow);
0042 
0043     Q_INVOKABLE void applyChangesToSourceModel() const;
0044 
0045 private:
0046     QList<int> m_rowMapping;
0047     QList<bool> m_hiddenProxy;
0048     QList<bool> m_removeFiles;
0049 };