File indexing completed on 2024-05-05 07:58:32

0001 /*
0002  * This file is part of KQuickCharts
0003  * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #ifndef MODELSOURCE_H
0009 #define MODELSOURCE_H
0010 
0011 #include <QAbstractItemModel>
0012 #include <QPointer>
0013 
0014 #include "ChartDataSource.h"
0015 
0016 /**
0017  * A data source that reads data from a QAbstractItemModel.
0018  *
0019  *
0020  */
0021 class QUICKCHARTS_EXPORT ModelSource : public ChartDataSource
0022 {
0023     Q_OBJECT
0024     QML_ELEMENT
0025 
0026 public:
0027     explicit ModelSource(QObject *parent = nullptr);
0028 
0029     Q_PROPERTY(int role READ role WRITE setRole NOTIFY roleChanged)
0030     int role() const;
0031     void setRole(int role);
0032     Q_SIGNAL void roleChanged();
0033 
0034     Q_PROPERTY(QString roleName READ roleName WRITE setRoleName NOTIFY roleNameChanged)
0035     QString roleName() const;
0036     void setRoleName(const QString &name);
0037     Q_SIGNAL void roleNameChanged();
0038 
0039     Q_PROPERTY(int column READ column WRITE setColumn NOTIFY columnChanged)
0040     int column() const;
0041     void setColumn(int column);
0042     Q_SIGNAL void columnChanged();
0043 
0044     Q_PROPERTY(QAbstractItemModel *model READ model WRITE setModel NOTIFY modelChanged)
0045     QAbstractItemModel *model() const;
0046     void setModel(QAbstractItemModel *model);
0047     Q_SIGNAL void modelChanged();
0048 
0049     Q_PROPERTY(bool indexColumns READ indexColumns WRITE setIndexColumns NOTIFY indexColumnsChanged)
0050     bool indexColumns() const;
0051     void setIndexColumns(bool index);
0052     Q_SIGNAL void indexColumnsChanged();
0053 
0054     int itemCount() const override;
0055     QVariant item(int index) const override;
0056     QVariant minimum() const override;
0057     QVariant maximum() const override;
0058 
0059 private:
0060     Q_SLOT void onMinimumChanged();
0061     Q_SLOT void onMaximumChanged();
0062 
0063     mutable int m_role = -1;
0064     QString m_roleName;
0065     int m_column = 0;
0066     bool m_indexColumns = false;
0067     QAbstractItemModel *m_model = nullptr;
0068 
0069     QVariant m_minimum;
0070     QVariant m_maximum;
0071 };
0072 
0073 #endif // MODELSOURCE_H