1/*
2 SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#ifndef KCOLUMNHEADERSMODEL_H
8#define KCOLUMNHEADERSMODEL_H
9
10#include "kitemmodels_export.h"
11
12#include <QAbstractListModel>
13
14#include <memory>
15
16class KColumnHeadersModelPrivate;
17
18/*!
19 * \class KColumnHeadersModel
20 * \inmodule KItemModels
21 * \brief A model that converts a model's headers into a list model.
22 *
23 * This model will expose the source model's headers as a simple list. This is
24 * mostly useful as a helper for QML applications that want to display a model's
25 * headers.
26 *
27 * Each columns's header will be presented as a row in this model. Roles are
28 * forwarded directly to the source model's headerData() method.
29 *
30 * \since 5.66
31 */
32class KITEMMODELS_EXPORT KColumnHeadersModel : public QAbstractListModel
33{
34 Q_OBJECT
35
36 /*!
37 * \property KColumnHeadersModel::sourceModel
38 */
39 Q_PROPERTY(QAbstractItemModel *sourceModel READ sourceModel WRITE setSourceModel NOTIFY sourceModelChanged)
40
41 /*!
42 * \property KColumnHeadersModel::sortColumn
43 */
44 Q_PROPERTY(int sortColumn READ sortColumn WRITE setSortColumn NOTIFY sortColumnChanged)
45
46 /*!
47 * \property KColumnHeadersModel::sortOrder
48 */
49 Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder NOTIFY sortOrderChanged)
50
51public:
52 /*!
53 * \value SortRole
54 */
55 enum ExtraRoles { SortRole = 0x011D910E };
56 Q_ENUM(ExtraRoles)
57
58 /*!
59 *
60 */
61 explicit KColumnHeadersModel(QObject *parent = nullptr);
62 ~KColumnHeadersModel() override;
63
64 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
65 QVariant data(const QModelIndex &index, int role) const override;
66 QHash<int, QByteArray> roleNames() const override;
67
68 QAbstractItemModel *sourceModel() const;
69 void setSourceModel(QAbstractItemModel *newSourceModel);
70
71 int sortColumn() const;
72 void setSortColumn(int newSortColumn);
73
74 Qt::SortOrder sortOrder() const;
75 void setSortOrder(Qt::SortOrder newSortOrder);
76
77Q_SIGNALS:
78 void sourceModelChanged();
79 void sortColumnChanged();
80 void sortOrderChanged();
81
82private:
83 void onLayoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents, QAbstractItemModel::LayoutChangeHint hint);
84 void onLayoutChanged(const QList<QPersistentModelIndex> &parents, QAbstractItemModel::LayoutChangeHint hint);
85
86 const std::unique_ptr<KColumnHeadersModelPrivate> d;
87};
88
89#endif
90

source code of kitemmodels/src/core/kcolumnheadersmodel.h