declarativechart.h
235 lines
| 8.7 KiB
| text/x-c
|
CLexer
Jani Honkonen
|
r830 | /**************************************************************************** | ||
** | ||||
Miikka Heikkinen
|
r2433 | ** Copyright (C) 2013 Digia Plc | ||
Jani Honkonen
|
r830 | ** All rights reserved. | ||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
Miikka Heikkinen
|
r2574 | ** This file is part of the Qt Enterprise Charts Add-on. | ||
Jani Honkonen
|
r830 | ** | ||
** $QT_BEGIN_LICENSE$ | ||||
Miikka Heikkinen
|
r2574 | ** Licensees holding valid Qt Enterprise licenses may use this file in | ||
** accordance with the Qt Enterprise License Agreement provided with the | ||||
Jani Honkonen
|
r830 | ** Software or, alternatively, in accordance with the terms contained in | ||
** a written agreement between you and Digia. | ||||
** | ||||
** If you have questions regarding the use of this file, please use | ||||
** contact form at http://qt.digia.com | ||||
** $QT_END_LICENSE$ | ||||
** | ||||
****************************************************************************/ | ||||
Jani Honkonen
|
r1 | #ifndef DECLARATIVECHART_H | ||
#define DECLARATIVECHART_H | ||||
#include <QtCore/QtGlobal> | ||||
Miikka Heikkinen
|
r2488 | #include "shared_defines.h" | ||
#ifdef CHARTS_FOR_QUICK2 | ||||
#include <QtQuick/QQuickItem> | ||||
#include <QtQuick/QQuickPaintedItem> | ||||
#include <QtWidgets/QGraphicsScene> | ||||
Heikkinen Miikka
|
r2505 | #include <QtCore/QMutex> | ||
Miikka Heikkinen
|
r2488 | #else | ||
Jani Honkonen
|
r2247 | #include <QtDeclarative/QDeclarativeItem> | ||
Miikka Heikkinen
|
r2488 | #endif | ||
Jani Honkonen
|
r2247 | |||
Tero Ahola
|
r1831 | #include "qchart.h" | ||
Tero Ahola
|
r120 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
Tero Ahola
|
r1928 | class DeclarativeMargins; | ||
Tero Ahola
|
r2296 | class Domain; | ||
class DeclarativeAxes; | ||||
Tero Ahola
|
r1928 | |||
Miikka Heikkinen
|
r2488 | class DeclarativeChart : public QDECLARATIVE_PAINTED_ITEM | ||
Jani Honkonen
|
r1 | { | ||
Q_OBJECT | ||||
Tero Ahola
|
r1481 | Q_PROPERTY(Theme theme READ theme WRITE setTheme) | ||
Q_PROPERTY(Animation animationOptions READ animationOptions WRITE setAnimationOptions) | ||||
Q_PROPERTY(QString title READ title WRITE setTitle) | ||||
Jani Honkonen
|
r1517 | Q_PROPERTY(QFont titleFont READ titleFont WRITE setTitleFont) | ||
Tero Ahola
|
r1461 | Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor NOTIFY titleColorChanged) | ||
Tero Ahola
|
r1357 | Q_PROPERTY(QLegend *legend READ legend) | ||
Tero Ahola
|
r1240 | Q_PROPERTY(int count READ count) | ||
Tero Ahola
|
r1357 | Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged) | ||
Tero Ahola
|
r1461 | Q_PROPERTY(bool dropShadowEnabled READ dropShadowEnabled WRITE setDropShadowEnabled NOTIFY dropShadowEnabledChanged) | ||
Miikka Heikkinen
|
r2549 | Q_PROPERTY(qreal backgroundRoundness READ backgroundRoundness WRITE setBackgroundRoundness NOTIFY backgroundRoundnessChanged REVISION 3) | ||
Tero Ahola
|
r1946 | Q_PROPERTY(qreal topMargin READ topMargin) | ||
Q_PROPERTY(qreal bottomMargin READ bottomMargin) | ||||
Q_PROPERTY(qreal leftMargin READ leftMargin) | ||||
Q_PROPERTY(qreal rightMargin READ rightMargin) | ||||
Q_PROPERTY(DeclarativeMargins *minimumMargins READ minimumMargins NOTIFY minimumMarginsChanged REVISION 1) | ||||
Michal Klocek
|
r2090 | Q_PROPERTY(DeclarativeMargins *margins READ margins NOTIFY marginsChanged REVISION 2) | ||
Tero Ahola
|
r1929 | Q_PROPERTY(QRectF plotArea READ plotArea NOTIFY plotAreaChanged REVISION 1) | ||
Miikka Heikkinen
|
r2498 | Q_PROPERTY(QColor plotAreaColor READ plotAreaColor WRITE setPlotAreaColor NOTIFY plotAreaColorChanged REVISION 3) | ||
Miikka Heikkinen
|
r2488 | #ifdef CHARTS_FOR_QUICK2 | ||
Q_PROPERTY(QQmlListProperty<QAbstractAxis> axes READ axes REVISION 2) | ||||
#else | ||||
Tero Ahola
|
r2296 | Q_PROPERTY(QDeclarativeListProperty<QAbstractAxis> axes READ axes REVISION 2) | ||
Miikka Heikkinen
|
r2488 | #endif | ||
Tero Ahola
|
r1240 | Q_ENUMS(Animation) | ||
Q_ENUMS(Theme) | ||||
Q_ENUMS(SeriesType) | ||||
Tero Ahola
|
r1095 | |||
public: | ||||
Tero Ahola
|
r1240 | // duplicating enums from QChart to make the QML api namings 1-to-1 with the C++ api | ||
enum Theme { | ||||
ChartThemeLight = 0, | ||||
ChartThemeBlueCerulean, | ||||
ChartThemeDark, | ||||
ChartThemeBrownSand, | ||||
ChartThemeBlueNcs, | ||||
ChartThemeHighContrast, | ||||
Titta Heikkala
|
r2625 | ChartThemeBlueIcy, | ||
ChartThemeQt | ||||
Tero Ahola
|
r1240 | }; | ||
enum Animation { | ||||
NoAnimation = 0x0, | ||||
GridAxisAnimations = 0x1, | ||||
Jani Honkonen
|
r2101 | SeriesAnimations = 0x2, | ||
Tero Ahola
|
r1240 | AllAnimations = 0x3 | ||
}; | ||||
enum SeriesType { | ||||
SeriesTypeLine, | ||||
SeriesTypeArea, | ||||
SeriesTypeBar, | ||||
SeriesTypeStackedBar, | ||||
SeriesTypePercentBar, | ||||
Mika Salmela
|
r2548 | SeriesTypeBoxPlot, | ||
Tero Ahola
|
r1240 | SeriesTypePie, | ||
SeriesTypeScatter, | ||||
sauimone
|
r1811 | SeriesTypeSpline, | ||
SeriesTypeHorizontalBar, | ||||
SeriesTypeHorizontalStackedBar, | ||||
SeriesTypeHorizontalPercentBar | ||||
Tero Ahola
|
r1240 | }; | ||
Jani Honkonen
|
r1 | public: | ||
Miikka Heikkinen
|
r2488 | DeclarativeChart(QDECLARATIVE_ITEM *parent = 0); | ||
Tero Ahola
|
r722 | ~DeclarativeChart(); | ||
Tero Ahola
|
r120 | |||
Miikka Heikkinen
|
r2488 | public: // From parent classes | ||
Tero Ahola
|
r1117 | void childEvent(QChildEvent *event); | ||
void componentComplete(); | ||||
Tero Ahola
|
r120 | void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); | ||
Miikka Heikkinen
|
r2488 | #ifdef CHARTS_FOR_QUICK2 | ||
void paint(QPainter *painter); | ||||
Miikka Heikkinen
|
r2495 | protected: | ||
void mousePressEvent(QMouseEvent *event); | ||||
void mouseReleaseEvent(QMouseEvent *event); | ||||
void hoverMoveEvent(QHoverEvent *event); | ||||
Miikka Heikkinen
|
r2488 | private Q_SLOTS: | ||
void handleAntialiasingChanged(bool enable); | ||||
Heikkinen Miikka
|
r2505 | void sceneChanged(QList<QRectF> region); | ||
void renderScene(); | ||||
Miikka Heikkinen
|
r2488 | #endif | ||
Tero Ahola
|
r120 | |||
public: | ||||
Tero Ahola
|
r1240 | void setTheme(DeclarativeChart::Theme theme); | ||
DeclarativeChart::Theme theme(); | ||||
void setAnimationOptions(DeclarativeChart::Animation animations); | ||||
DeclarativeChart::Animation animationOptions(); | ||||
Tero Ahola
|
r1357 | void setTitle(QString title); | ||
QString title(); | ||||
QLegend *legend(); | ||||
Jani Honkonen
|
r1517 | QFont titleFont() const; | ||
Jani Honkonen
|
r2101 | void setTitleFont(const QFont &font); | ||
Tero Ahola
|
r1357 | void setTitleColor(QColor color); | ||
QColor titleColor(); | ||||
void setBackgroundColor(QColor color); | ||||
QColor backgroundColor(); | ||||
Miikka Heikkinen
|
r2498 | Q_REVISION(3) void setPlotAreaColor(QColor color); | ||
Q_REVISION(3) QColor plotAreaColor(); | ||||
Tero Ahola
|
r1240 | int count(); | ||
Tero Ahola
|
r1461 | void setDropShadowEnabled(bool enabled); | ||
bool dropShadowEnabled(); | ||||
Miikka Heikkinen
|
r2549 | Q_REVISION(3) qreal backgroundRoundness() const; | ||
Q_REVISION(3) void setBackgroundRoundness(qreal diameter); | ||||
Tero Ahola
|
r2300 | |||
// Margins & plotArea | ||||
Tero Ahola
|
r1524 | qreal topMargin(); | ||
qreal bottomMargin(); | ||||
qreal leftMargin(); | ||||
qreal rightMargin(); | ||||
Michal Klocek
|
r2090 | DeclarativeMargins *minimumMargins() { return m_margins; } | ||
Q_REVISION(2) DeclarativeMargins *margins() { return m_margins; } | ||||
Tero Ahola
|
r1929 | QRectF plotArea() { return m_chart->plotArea(); } | ||
Michal Klocek
|
r1604 | |||
Tero Ahola
|
r2300 | // Axis handling | ||
QAbstractAxis *defaultAxis(Qt::Orientation orientation, QAbstractSeries *series); | ||||
void initializeAxes(QAbstractSeries *series); | ||||
void doInitializeAxes(QAbstractSeries *series, DeclarativeAxes *axes); | ||||
Miikka Heikkinen
|
r2488 | QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> axes(); | ||
static void axesAppendFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list, QAbstractAxis *element); | ||||
static int axesCountFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list); | ||||
static QAbstractAxis *axesAtFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list, int index); | ||||
static void axesClearFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list); | ||||
Tero Ahola
|
r2296 | |||
Tero Ahola
|
r1521 | public: | ||
Q_INVOKABLE QAbstractSeries *series(int index); | ||||
Q_INVOKABLE QAbstractSeries *series(QString seriesName); | ||||
Tero Ahola
|
r2389 | Q_INVOKABLE QAbstractSeries *createSeries(int type, QString name = "", QAbstractAxis *axisX = 0, QAbstractAxis *axisY = 0); | ||
Tero Ahola
|
r2068 | Q_INVOKABLE void removeSeries(QAbstractSeries *series); | ||
Tero Ahola
|
r1948 | Q_INVOKABLE void removeAllSeries() { m_chart->removeAllSeries(); } | ||
Tero Ahola
|
r1813 | Q_INVOKABLE void setAxisX(QAbstractAxis *axis, QAbstractSeries *series = 0); | ||
Q_INVOKABLE void setAxisY(QAbstractAxis *axis, QAbstractSeries *series = 0); | ||||
Michal Klocek
|
r1604 | Q_INVOKABLE void createDefaultAxes(); | ||
Michal Klocek
|
r1643 | Q_INVOKABLE QAbstractAxis *axisX(QAbstractSeries *series = 0); | ||
Q_INVOKABLE QAbstractAxis *axisY(QAbstractSeries *series = 0); | ||||
Tero Ahola
|
r1461 | Q_INVOKABLE void zoom(qreal factor); | ||
Q_INVOKABLE void scrollLeft(qreal pixels); | ||||
Q_INVOKABLE void scrollRight(qreal pixels); | ||||
Q_INVOKABLE void scrollUp(qreal pixels); | ||||
Q_INVOKABLE void scrollDown(qreal pixels); | ||||
Tero Ahola
|
r120 | |||
Tero Ahola
|
r1357 | Q_SIGNALS: | ||
void axisLabelsChanged(); | ||||
Tero Ahola
|
r1524 | void titleColorChanged(QColor color); | ||
Tero Ahola
|
r1357 | void backgroundColorChanged(); | ||
Tero Ahola
|
r1461 | void dropShadowEnabledChanged(bool enabled); | ||
Tero Ahola
|
r1946 | void minimumMarginsChanged(); | ||
Michal Klocek
|
r2090 | Q_REVISION(2) void marginsChanged(); | ||
Tero Ahola
|
r1929 | void plotAreaChanged(QRectF plotArea); | ||
Jani Honkonen
|
r2101 | void seriesAdded(QAbstractSeries *series); | ||
void seriesRemoved(QAbstractSeries *series); | ||||
Miikka Heikkinen
|
r2498 | Q_REVISION(3) void plotAreaColorChanged(); | ||
Miikka Heikkinen
|
r2549 | Q_REVISION(3) void backgroundRoundnessChanged(qreal diameter); | ||
Tero Ahola
|
r1357 | |||
Tero Ahola
|
r2296 | private Q_SLOTS: | ||
Tero Ahola
|
r1928 | void changeMinimumMargins(int top, int bottom, int left, int right); | ||
Tero Ahola
|
r1813 | void handleAxisXSet(QAbstractAxis *axis); | ||
void handleAxisYSet(QAbstractAxis *axis); | ||||
Tero Ahola
|
r2296 | void handleAxisXTopSet(QAbstractAxis *axis); | ||
void handleAxisYRightSet(QAbstractAxis *axis); | ||||
Jani Honkonen
|
r2277 | void handleSeriesAdded(QAbstractSeries *series); | ||
Tero Ahola
|
r1524 | |||
Miikka Heikkinen
|
r2483 | protected: | ||
Miikka Heikkinen
|
r2488 | explicit DeclarativeChart(QChart::ChartType type, QDECLARATIVE_ITEM *parent); | ||
Miikka Heikkinen
|
r2483 | |||
Tero Ahola
|
r1524 | private: | ||
Miikka Heikkinen
|
r2483 | void initChart(QChart::ChartType type); | ||
Tero Ahola
|
r120 | // Extending QChart with DeclarativeChart is not possible because QObject does not support | ||
// multi inheritance, so we now have a QChart as a member instead | ||||
QChart *m_chart; | ||||
Miikka Heikkinen
|
r2488 | #ifdef CHARTS_FOR_QUICK2 | ||
QGraphicsScene *m_scene; | ||||
Miikka Heikkinen
|
r2495 | QPointF m_mousePressScenePoint; | ||
QPoint m_mousePressScreenPoint; | ||||
QPointF m_lastMouseMoveScenePoint; | ||||
QPoint m_lastMouseMoveScreenPoint; | ||||
Qt::MouseButton m_mousePressButton; | ||||
Qt::MouseButtons m_mousePressButtons; | ||||
Heikkinen Miikka
|
r2505 | QMutex m_sceneImageLock; | ||
QImage *m_currentSceneImage; | ||||
bool m_updatePending; | ||||
Miikka Heikkinen
|
r2506 | Qt::HANDLE m_paintThreadId; | ||
Qt::HANDLE m_guiThreadId; | ||||
Miikka Heikkinen
|
r2488 | #endif | ||
Michal Klocek
|
r2090 | DeclarativeMargins *m_margins; | ||
Jani Honkonen
|
r1 | }; | ||
Tero Ahola
|
r120 | QTCOMMERCIALCHART_END_NAMESPACE | ||
Jani Honkonen
|
r1 | |||
#endif // DECLARATIVECHART_H | ||||