1/*
2 * This file is part of KQuickCharts
3 * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
4 *
5 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6 */
7
8#ifndef MODELSOURCE_H
9#define MODELSOURCE_H
10
11#include <QAbstractItemModel>
12#include <QPointer>
13
14#include "ChartDataSource.h"
15
16/*!
17 * \qmltype ModelSource
18 * \inherits ChartDataSource
19 * \inqmlmodule org.kde.quickcharts
20 *
21 * \brief A data source that reads data from a QAbstractItemModel.
22 *
23 *
24 */
25class QUICKCHARTS_EXPORT ModelSource : public ChartDataSource
26{
27 Q_OBJECT
28 QML_ELEMENT
29
30public:
31 explicit ModelSource(QObject *parent = nullptr);
32
33 /*!
34 * \qmlproperty int ModelSource::role
35 */
36 Q_PROPERTY(int role READ role WRITE setRole NOTIFY roleChanged)
37 int role() const;
38 void setRole(int role);
39 Q_SIGNAL void roleChanged();
40
41 /*!
42 * \qmlproperty string ModelSource::roleName
43 */
44 Q_PROPERTY(QString roleName READ roleName WRITE setRoleName NOTIFY roleNameChanged)
45 QString roleName() const;
46 void setRoleName(const QString &name);
47 Q_SIGNAL void roleNameChanged();
48
49 /*!
50 * \qmlproperty int ModelSource::column
51 */
52 Q_PROPERTY(int column READ column WRITE setColumn NOTIFY columnChanged)
53 int column() const;
54 void setColumn(int column);
55 Q_SIGNAL void columnChanged();
56
57 /*!
58 * \qmlproperty QAbstractItemModel ModelSource::model
59 */
60 Q_PROPERTY(QAbstractItemModel *model READ model WRITE setModel NOTIFY modelChanged)
61 QAbstractItemModel *model() const;
62 void setModel(QAbstractItemModel *model);
63 Q_SIGNAL void modelChanged();
64
65 /*!
66 * \qmlproperty bool ModelSource::indexColumns
67 */
68 Q_PROPERTY(bool indexColumns READ indexColumns WRITE setIndexColumns NOTIFY indexColumnsChanged)
69 bool indexColumns() const;
70 void setIndexColumns(bool index);
71 Q_SIGNAL void indexColumnsChanged();
72
73 int itemCount() const override;
74 QVariant item(int index) const override;
75 QVariant minimum() const override;
76 QVariant maximum() const override;
77
78private:
79 Q_SLOT void onMinimumChanged();
80 Q_SLOT void onMaximumChanged();
81
82 mutable int m_role = -1;
83 QString m_roleName;
84 int m_column = 0;
85 bool m_indexColumns = false;
86 QAbstractItemModel *m_model = nullptr;
87
88 QVariant m_minimum;
89 QVariant m_maximum;
90};
91
92#endif // MODELSOURCE_H
93

source code of kquickcharts/src/datasource/ModelSource.h