File indexing completed on 2024-10-06 03:40:53
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 CHART_H 0009 #define CHART_H 0010 0011 #include <QQuickItem> 0012 #include <qqmlregistration.h> 0013 0014 #include "datasource/ChartDataSource.h" 0015 0016 #include "quickcharts_export.h" 0017 0018 /** 0019 * Abstract base class for all charts. 0020 */ 0021 class QUICKCHARTS_EXPORT Chart : public QQuickItem 0022 { 0023 Q_OBJECT 0024 QML_ELEMENT 0025 QML_UNCREATABLE("Base class") 0026 0027 public: 0028 using DataSourcesProperty = QQmlListProperty<ChartDataSource>; 0029 0030 /** 0031 * How to index color and name sources relative to the different value sources. 0032 */ 0033 enum IndexingMode { 0034 IndexSourceValues = 1, ///< Index each value, restart indexing for each value source. 0035 IndexEachSource, ///< Index each value source, never index individual values. 0036 IndexAllValues ///< Index each value, continuing with the index for each value source. 0037 }; 0038 Q_ENUM(IndexingMode) 0039 0040 explicit Chart(QQuickItem *parent = nullptr); 0041 ~Chart() override = default; 0042 0043 /** 0044 * The data source to use for names of chart items. 0045 */ 0046 Q_PROPERTY(ChartDataSource *nameSource READ nameSource WRITE setNameSource NOTIFY nameSourceChanged) 0047 ChartDataSource *nameSource() const; 0048 void setNameSource(ChartDataSource *nameSource); 0049 Q_SIGNAL void nameSourceChanged(); 0050 0051 /** 0052 * The data source to use for short names of chart items. 0053 */ 0054 Q_PROPERTY(ChartDataSource *shortNameSource READ shortNameSource WRITE setShortNameSource NOTIFY shortNameSourceChanged) 0055 ChartDataSource *shortNameSource() const; 0056 void setShortNameSource(ChartDataSource *shortNameSource); 0057 Q_SIGNAL void shortNameSourceChanged(); 0058 0059 /** 0060 * The data source to use for colors of chart items. 0061 */ 0062 Q_PROPERTY(ChartDataSource *colorSource READ colorSource WRITE setColorSource NOTIFY colorSourceChanged) 0063 ChartDataSource *colorSource() const; 0064 void setColorSource(ChartDataSource *colorSource); 0065 Q_SIGNAL void colorSourceChanged(); 0066 0067 /** 0068 * The data sources providing the data this chart needs to render. 0069 */ 0070 Q_PROPERTY(QQmlListProperty<ChartDataSource> valueSources READ valueSourcesProperty NOTIFY valueSourcesChanged) 0071 DataSourcesProperty valueSourcesProperty(); 0072 QList<ChartDataSource *> valueSources() const; 0073 Q_SIGNAL void valueSourcesChanged(); 0074 Q_INVOKABLE void insertValueSource(int index, ChartDataSource *source); 0075 Q_INVOKABLE void removeValueSource(int index); 0076 Q_INVOKABLE void removeValueSource(QObject *source); 0077 0078 /** 0079 * The indexing mode used for indexing colors and names. 0080 */ 0081 Q_PROPERTY(IndexingMode indexingMode READ indexingMode WRITE setIndexingMode NOTIFY indexingModeChanged) 0082 IndexingMode indexingMode() const; 0083 void setIndexingMode(IndexingMode newIndexingMode); 0084 Q_SIGNAL void indexingModeChanged(); 0085 0086 Q_SIGNAL void dataChanged(); 0087 0088 protected: 0089 /** 0090 * Called when the data of a value source changes. 0091 * 0092 * This method should be reimplemented by subclasses. It is called whenever 0093 * the data of one of the value sources changes. Subclasses should use this 0094 * to make sure that they update whatever internal state they use for 0095 * rendering, then call update() to schedule rendering the item. 0096 */ 0097 virtual void onDataChanged() = 0; 0098 void componentComplete() override; 0099 0100 private: 0101 static void appendSource(DataSourcesProperty *list, ChartDataSource *source); 0102 static qsizetype sourceCount(DataSourcesProperty *list); 0103 static ChartDataSource *source(DataSourcesProperty *list, qsizetype index); 0104 static void clearSources(DataSourcesProperty *list); 0105 static void replaceSource(DataSourcesProperty *list, qsizetype index, ChartDataSource *source); 0106 static void removeLastSource(DataSourcesProperty *list); 0107 0108 ChartDataSource *m_nameSource = nullptr; 0109 ChartDataSource *m_shortNameSource = nullptr; 0110 ChartDataSource *m_colorSource = nullptr; 0111 QList<ChartDataSource *> m_valueSources; 0112 IndexingMode m_indexingMode = IndexEachSource; 0113 }; 0114 0115 #endif // CHART_H