@@ -1,5 +1,5 | |||
|
1 | 1 | #include "axisanimationitem_p.h" |
|
2 |
#include <Q |
|
|
2 | #include <QTimer> | |
|
3 | 3 | |
|
4 | 4 | Q_DECLARE_METATYPE(QVector<qreal>) |
|
5 | 5 | |
@@ -8,7 +8,8 QTCOMMERCIALCHART_BEGIN_NAMESPACE | |||
|
8 | 8 | const static int duration = 500; |
|
9 | 9 | |
|
10 | 10 | AxisAnimationItem::AxisAnimationItem(AxisType type,QGraphicsItem* parent) : |
|
11 | AxisItem(type,parent) | |
|
11 | AxisItem(type,parent), | |
|
12 | m_animation(new AxisAnimator(this,this)) | |
|
12 | 13 | { |
|
13 | 14 | } |
|
14 | 15 | |
@@ -16,19 +17,21 AxisAnimationItem::~AxisAnimationItem() | |||
|
16 | 17 | { |
|
17 | 18 | } |
|
18 | 19 | |
|
19 |
void AxisAnimationItem::updateItems(QVector<qreal>& |
|
|
20 | void AxisAnimationItem::updateItems(QVector<qreal>& oldLayout,QVector<qreal>& newLayout) | |
|
20 | 21 | { |
|
21 | QVector<qreal> vector0 = vector1; | |
|
22 | calculateLayout(vector1); | |
|
23 | if(vector1.count()==0) return; | |
|
24 | vector0.resize(vector1.size()); | |
|
25 | ||
|
26 | AxisAnimator *animation = new AxisAnimator(this,this); | |
|
27 | animation->setDuration(duration); | |
|
28 | animation->setEasingCurve(QEasingCurve::InOutBack); | |
|
29 | animation->setKeyValueAt(0.0, qVariantFromValue(vector0)); | |
|
30 |
animation->setKeyValueAt( |
|
|
31 | animation->start(QAbstractAnimation::DeleteWhenStopped); | |
|
22 | if(newLayout.count()==0) return; | |
|
23 | oldLayout.resize(newLayout.size()); | |
|
24 | ||
|
25 | if(m_animation->state()!=QAbstractAnimation::Stopped){ | |
|
26 | m_animation->stop(); | |
|
27 | } | |
|
28 | ||
|
29 | m_animation->setDuration(duration); | |
|
30 | m_animation->setEasingCurve(QEasingCurve::InOutBack); | |
|
31 | m_animation->setKeyValueAt(0.0, qVariantFromValue(oldLayout)); | |
|
32 | m_animation->setKeyValueAt(1.0, qVariantFromValue(newLayout)); | |
|
33 | QTimer::singleShot(0,m_animation,SLOT(start())); | |
|
34 | oldLayout = newLayout; | |
|
32 | 35 | } |
|
33 | 36 | |
|
34 | 37 | void AxisAnimationItem::setLabelsAngle(int angle) |
@@ -8,7 +8,7 | |||
|
8 | 8 | |
|
9 | 9 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
10 | 10 | |
|
11 |
class |
|
|
11 | class AxisAnimator; | |
|
12 | 12 | |
|
13 | 13 | class AxisAnimationItem : public AxisItem |
|
14 | 14 | { |
@@ -21,8 +21,9 public: | |||
|
21 | 21 | void setLabelsAngle(int angle); |
|
22 | 22 | |
|
23 | 23 | protected: |
|
24 |
void updateItems(QVector<qreal>& |
|
|
25 | ||
|
24 | virtual void updateItems(QVector<qreal>& oldLayout,QVector<qreal>& newLayout); | |
|
25 | private: | |
|
26 | AxisAnimator *m_animation; | |
|
26 | 27 | }; |
|
27 | 28 | |
|
28 | 29 | class AxisAnimator: public QVariantAnimation |
@@ -67,11 +67,11 void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, | |||
|
67 | 67 | Q_UNUSED(widget); |
|
68 | 68 | } |
|
69 | 69 | |
|
70 |
void AxisItem::updateItems(QVector<qreal>& |
|
|
70 | void AxisItem::updateItems(QVector<qreal>& oldLayout,QVector<qreal>& newLayout) | |
|
71 | 71 | { |
|
72 | calculateLayout(vector); | |
|
73 | if(vector.count()==0) return; | |
|
74 | applyLayout(vector); | |
|
72 | if(newLayout.count()==0) return; | |
|
73 | applyLayout(newLayout); | |
|
74 | oldLayout=newLayout; | |
|
75 | 75 | } |
|
76 | 76 | |
|
77 | 77 | void AxisItem::handleAxisUpdate(QChartAxis* axis) |
@@ -127,15 +127,19 void AxisItem::handleLabelsChanged(QChartAxis* axis,const QStringList& labels) | |||
|
127 | 127 | createItems(-diff); |
|
128 | 128 | } |
|
129 | 129 | m_thicksList=labels; |
|
130 | m_layoutVector.resize(m_thicksList.size()); | |
|
131 | updateItems(m_layoutVector); | |
|
130 | QVector<qreal> vector = calculateLayout(); | |
|
131 | updateItems(m_layoutVector,vector); | |
|
132 | 132 | if(diff!=0) handleAxisUpdate(axis); |
|
133 | 133 | } |
|
134 | 134 | |
|
135 | 135 | void AxisItem::handleGeometryChanged(const QRectF& rect) |
|
136 | 136 | { |
|
137 | 137 | m_rect = rect; |
|
138 | updateItems(m_layoutVector); | |
|
138 | ||
|
139 | if(m_thicksList.size()==0) return; | |
|
140 | ||
|
141 | QVector<qreal> vector = calculateLayout(); | |
|
142 | updateItems(m_layoutVector,vector); | |
|
139 | 143 | } |
|
140 | 144 | |
|
141 | 145 | void AxisItem::setAxisOpacity(qreal opacity) |
@@ -237,8 +241,11 void AxisItem::setGridPen(const QPen& pen) | |||
|
237 | 241 | } |
|
238 | 242 | } |
|
239 | 243 | |
|
240 | void AxisItem::calculateLayout(QVector<qreal>& points) | |
|
244 | QVector<qreal> AxisItem::calculateLayout() const | |
|
241 | 245 | { |
|
246 | QVector<qreal> points; | |
|
247 | points.resize(m_thicksList.size()); | |
|
248 | ||
|
242 | 249 | switch (m_type) |
|
243 | 250 | { |
|
244 | 251 | case X_AXIS: |
@@ -260,6 +267,7 void AxisItem::calculateLayout(QVector<qreal>& points) | |||
|
260 | 267 | } |
|
261 | 268 | break; |
|
262 | 269 | } |
|
270 | return points; | |
|
263 | 271 | } |
|
264 | 272 | |
|
265 | 273 | void AxisItem::applyLayout(const QVector<qreal>& points) |
@@ -54,9 +54,10 public slots: | |||
|
54 | 54 | void handleLabelsChanged(QChartAxis* axis,const QStringList& labels); //labels from dataset |
|
55 | 55 | void handleGeometryChanged(const QRectF& size); // geometry from presenter |
|
56 | 56 | public: |
|
57 |
virtual void updateItems(QVector<qreal>& |
|
|
58 | virtual void calculateLayout(QVector<qreal>& points); | |
|
59 |
|
|
|
57 | virtual void updateItems(QVector<qreal>& oldLayout,QVector<qreal>& newLayout); | |
|
58 | QVector<qreal> calculateLayout() const; | |
|
59 | void applyLayout(const QVector<qreal>& points); | |
|
60 | ||
|
60 | 61 | private: |
|
61 | 62 | void clear(int count); |
|
62 | 63 | void createItems(int count); |
General Comments 0
You need to be logged in to leave comments.
Login now