1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt Charts module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 or (at your option) any later version 20 ** approved by the KDE Free Qt Foundation. The licenses are as published by 21 ** the Free Software Foundation and appearing in the file LICENSE.GPL3 22 ** included in the packaging of this file. Please review the following 23 ** information to ensure the GNU General Public License requirements will 24 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 25 ** 26 ** $QT_END_LICENSE$ 27 ** 28 ****************************************************************************/ 29 30 // W A R N I N G 31 // ------------- 32 // 33 // This file is not part of the Qt Chart API. It exists purely as an 34 // implementation detail. This header file may change from version to 35 // version without notice, or even be removed. 36 // 37 // We mean it. 38 39 #ifndef SPLINECHARTITEM_P_H 40 #define SPLINECHARTITEM_P_H 41 42 #include <QtCharts/QSplineSeries> 43 #include <private/xychart_p.h> 44 #include <QtCharts/private/qchartglobal_p.h> 45 46 QT_CHARTS_BEGIN_NAMESPACE 47 48 class SplineAnimation; 49 50 class Q_CHARTS_PRIVATE_EXPORT SplineChartItem : public XYChart 51 { 52 Q_OBJECT 53 Q_INTERFACES(QGraphicsItem) 54 public: 55 SplineChartItem(QSplineSeries *series, QGraphicsItem *item = 0); 56 57 //from QGraphicsItem 58 QRectF boundingRect() const; 59 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 60 QPainterPath shape() const; 61 62 void setControlGeometryPoints(QVector<QPointF>& points); 63 QVector<QPointF> controlGeometryPoints() const; 64 65 void setAnimation(SplineAnimation *animation); 66 ChartAnimation *animation() const; 67 68 public Q_SLOTS: 69 void handleUpdated(); 70 71 protected: 72 void updateGeometry(); 73 QVector<QPointF> calculateControlPoints(const QVector<QPointF> &points); 74 QVector<qreal> firstControlPoints(const QVector<qreal>& vector); 75 void updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, int index); 76 void mousePressEvent(QGraphicsSceneMouseEvent *event); 77 void hoverEnterEvent(QGraphicsSceneHoverEvent *event); 78 void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); 79 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); 80 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); 81 82 private: 83 QSplineSeries *m_series; 84 QPainterPath m_path; 85 QPainterPath m_pathPolarRight; 86 QPainterPath m_pathPolarLeft; 87 QPainterPath m_fullPath; 88 QRectF m_rect; 89 QPen m_linePen; 90 QPen m_pointPen; 91 bool m_pointsVisible; 92 QVector<QPointF> m_controlPoints; 93 QVector<QPointF> m_visiblePoints; 94 SplineAnimation *m_animation; 95 96 bool m_pointLabelsVisible; 97 QString m_pointLabelsFormat; 98 QFont m_pointLabelsFont; 99 QColor m_pointLabelsColor; 100 bool m_pointLabelsClipping; 101 102 QPointF m_lastMousePos; 103 bool m_mousePressed; 104 105 friend class SplineAnimation; 106 }; 107 108 QT_CHARTS_END_NAMESPACE 109 110 #endif // SPLINECHARTITEM_P_H 111