diff --git a/src/axisitem.cpp b/src/axisitem.cpp index d363553..a3f051b 100644 --- a/src/axisitem.cpp +++ b/src/axisitem.cpp @@ -79,6 +79,8 @@ void AxisItem::updateItems(QVector& vector) void AxisItem::handleAxisUpdate(QChartAxis* axis) { + if(m_layoutVector.count()==0) return; + if(axis->isAxisVisible()) { setAxisOpacity(100); } @@ -130,7 +132,7 @@ void AxisItem::handleLabelsChanged(QChartAxis* axis,const QStringList& labels) m_thicksList=labels; m_layoutVector.resize(m_thicksList.size()); updateItems(m_layoutVector); - handleAxisUpdate(axis); + if(diff!=0) handleAxisUpdate(axis); } void AxisItem::handleGeometryChanged(const QRectF& rect) diff --git a/src/chartdataset_p.h b/src/chartdataset_p.h index b5851c3..dced6e0 100644 --- a/src/chartdataset_p.h +++ b/src/chartdataset_p.h @@ -25,6 +25,7 @@ public: void clearDomains(int toIndex =0); const Domain domain(QChartAxis *axisY) const; int domainIndex() const {return m_domainIndex;} + void setDomain(int index); QChartAxis* axisX() const { return m_axisX;}; QChartAxis* axisY(QChartSeries* series = 0) const; @@ -43,7 +44,6 @@ private slots: void handleTickChanged(QChartAxis*); private: - void setDomain(int index); QStringList createLabels(QChartAxis* axis,qreal min, qreal max); private: diff --git a/src/chartpresenter.cpp b/src/chartpresenter.cpp index 4d14bce..cafd114 100644 --- a/src/chartpresenter.cpp +++ b/src/chartpresenter.cpp @@ -12,6 +12,7 @@ #include "qscatterseries.h" //items #include "axisitem_p.h" +#include "axisanimationitem_p.h" #include "barpresenter.h" #include "stackedbarpresenter.h" #include "linechartitem_p.h" @@ -27,7 +28,8 @@ m_chart(chart), m_dataset(dataset), m_chartTheme(0), m_marginSize(0), -m_rect(QRectF(QPoint(0,0),m_chart->size())) +m_rect(QRectF(QPoint(0,0),m_chart->size())), +m_options(0) { createConnections(); setChartTheme(QChart::ChartThemeDefault); @@ -75,13 +77,18 @@ void ChartPresenter::setMargin(int margin) void ChartPresenter::handleAxisAdded(QChartAxis* axis) { + AxisItem* item ; - if(axis==m_dataset->axisX()){ - item = new AxisItem(AxisItem::X_AXIS,m_chart); + if(!m_options.testFlag(QChart::GridAxisAnimations)) + { + item = new AxisItem(axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart); + qDebug()<<"kuku1"; }else{ - item = new AxisItem(AxisItem::Y_AXIS,m_chart); + item = new AxisAnimationItem(axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart); + qDebug()<<"kuku2"; } + QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(axis,SIGNAL(update(QChartAxis*)),item,SLOT(handleAxisUpdate(QChartAxis*))); @@ -105,7 +112,12 @@ void ChartPresenter::handleSeriesAdded(QChartSeries* series) { case QChartSeries::SeriesTypeLine: { QLineChartSeries* lineSeries = static_cast(series); - LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart); + LineChartItem* item; + if(m_options.testFlag(QChart::SeriesAnimations)){ + item = new LineChartAnimationItem(this,lineSeries,m_chart); + }else{ + item = new LineChartItem(this,lineSeries,m_chart); + } m_chartTheme->decorate(item,lineSeries,m_chartItems.count()); QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&))); QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int))); @@ -235,6 +247,37 @@ QChart::ChartTheme ChartPresenter::chartTheme() return m_chartTheme->id(); } +void ChartPresenter::setAnimationOptions(QChart::AnimationOptions options) +{ + if(m_options!=options) { + + m_options=options; + + //recreate elements + + QList axisList = m_axisItems.uniqueKeys(); + QList seriesList = m_chartItems.uniqueKeys(); + + foreach(QChartAxis* axis, axisList) { + handleAxisRemoved(axis); + handleAxisAdded(axis); + } + foreach(QChartSeries* series, seriesList) { + handleSeriesRemoved(series); + handleSeriesAdded(series); + } + + //now reintialize view data + //TODO: make it more nice + m_dataset->setDomain(m_dataset->domainIndex()); + } +} + +QChart::AnimationOptions ChartPresenter::animationOptions() const +{ + return m_options; +} + #include "moc_chartpresenter_p.cpp" diff --git a/src/chartpresenter_p.h b/src/chartpresenter_p.h index 6ec594a..456284f 100644 --- a/src/chartpresenter_p.h +++ b/src/chartpresenter_p.h @@ -33,6 +33,9 @@ public: void setChartTheme(QChart::ChartTheme theme); QChart::ChartTheme chartTheme(); + void setAnimationOptions(QChart::AnimationOptions options); + QChart::AnimationOptions animationOptions() const; + private: void createConnections(); @@ -55,6 +58,7 @@ private: ChartTheme *m_chartTheme; int m_marginSize; QRectF m_rect; + QChart::AnimationOptions m_options; }; diff --git a/src/qchart.cpp b/src/qchart.cpp index e6df871..0d802e8 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -253,6 +253,22 @@ void QChart::resizeEvent(QGraphicsSceneResizeEvent *event) update(); } +/*! + Sets animation options for the chart +*/ +void QChart::setAnimationOptions(AnimationOptions options) +{ + m_presenter->setAnimationOptions(options); +} + +/*! + Returns animation options for the chart +*/ +QChart::AnimationOptions QChart::animationOptions() const +{ + return m_presenter->animationOptions(); +} + #include "moc_qchart.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchart.h b/src/qchart.h index 15b068f..a396c5b 100644 --- a/src/qchart.h +++ b/src/qchart.h @@ -25,7 +25,7 @@ class QTCOMMERCIALCHART_EXPORT QChart : public QGraphicsWidget { Q_OBJECT public: - enum ChartTheme { + enum ChartTheme { ChartThemeDefault, ChartThemeVanilla, ChartThemeIcy, @@ -35,6 +35,14 @@ public: /*! The default theme follows the GUI style of the Operating System */ }; + enum AnimationOption { + NoAnimation = 0x0, + GridAxisAnimations = 0x1, + SeriesAnimations =0x2, + AllAnimations = 0x3 + }; + Q_DECLARE_FLAGS(AnimationOptions, AnimationOption) + public: QChart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0); ~QChart(); @@ -53,6 +61,9 @@ public: void setChartBackgroundBrush(const QBrush& brush); void setChartBackgroundPen(const QPen& pen); + void setAnimationOptions(AnimationOptions options); + AnimationOptions animationOptions() const; + void zoomIn(); void zoomIn(const QRectF& rect); void zoomOut(); @@ -79,4 +90,6 @@ private: QTCOMMERCIALCHART_END_NAMESPACE +Q_DECLARE_OPERATORS_FOR_FLAGS(QTCOMMERCIALCHART_NAMESPACE::QChart::AnimationOptions) + #endif diff --git a/src/qchartview.cpp b/src/qchartview.cpp index 5b41cde..3b016da 100644 --- a/src/qchartview.cpp +++ b/src/qchartview.cpp @@ -331,4 +331,20 @@ QChartAxis* QChartView::axisY() const return m_chart->axisY(); } +/*! + Sets animation options for the chart +*/ +void QChartView::setAnimationOptions(QChart::AnimationOptions options) +{ + m_chart->setAnimationOptions(options); +} + +/*! + Returns animation options for the chart +*/ +QChart::AnimationOptions QChartView::animationOptions() const +{ + return m_chart->animationOptions(); +} + QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/qchartview.h b/src/qchartview.h index a52c959..237092c 100644 --- a/src/qchartview.h +++ b/src/qchartview.h @@ -44,6 +44,9 @@ public: void setChartTheme(QChart::ChartTheme theme); QChart::ChartTheme chartTheme() const; + void setAnimationOptions(QChart::AnimationOptions options); + QChart::AnimationOptions animationOptions() const; + QChartAxis* axisX() const; QChartAxis* axisY() const;