##// END OF EJS Templates
Removed not needed signal from XYSeries
Marek Rosa -
r1257:bc9b8942c17b
parent child
Show More
@@ -1,250 +1,238
1 /****************************************************************************
1 /****************************************************************************
2 **
2 **
3 ** Copyright (C) 2012 Digia Plc
3 ** Copyright (C) 2012 Digia Plc
4 ** All rights reserved.
4 ** All rights reserved.
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 **
6 **
7 ** This file is part of the Qt Commercial Charts Add-on.
7 ** This file is part of the Qt Commercial Charts Add-on.
8 **
8 **
9 ** $QT_BEGIN_LICENSE$
9 ** $QT_BEGIN_LICENSE$
10 ** Licensees holding valid Qt Commercial licenses may use this file in
10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 ** accordance with the Qt Commercial License Agreement provided with the
11 ** accordance with the Qt Commercial License Agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.
13 ** a written agreement between you and Digia.
14 **
14 **
15 ** If you have questions regarding the use of this file, please use
15 ** If you have questions regarding the use of this file, please use
16 ** contact form at http://qt.digia.com
16 ** contact form at http://qt.digia.com
17 ** $QT_END_LICENSE$
17 ** $QT_END_LICENSE$
18 **
18 **
19 ****************************************************************************/
19 ****************************************************************************/
20
20
21 #include "xychart_p.h"
21 #include "xychart_p.h"
22 #include "qxyseries.h"
22 #include "qxyseries.h"
23 #include "qxyseries_p.h"
23 #include "qxyseries_p.h"
24 #include "chartpresenter_p.h"
24 #include "chartpresenter_p.h"
25 #include "chartanimator_p.h"
25 #include "chartanimator_p.h"
26 #include <QPainter>
26 #include <QPainter>
27 #include <QAbstractItemModel>
27 #include <QAbstractItemModel>
28 #include "qxymodelmapper.h"
28 #include "qxymodelmapper.h"
29 #include <QDebug>
29 #include <QDebug>
30
30
31 QTCOMMERCIALCHART_BEGIN_NAMESPACE
31 QTCOMMERCIALCHART_BEGIN_NAMESPACE
32
32
33 //TODO: optimize : remove points which are not visible
33 //TODO: optimize : remove points which are not visible
34
34
35 XYChart::XYChart(QXYSeries *series, ChartPresenter *presenter):Chart(presenter),
35 XYChart::XYChart(QXYSeries *series, ChartPresenter *presenter):Chart(presenter),
36 m_minX(0),
36 m_minX(0),
37 m_maxX(0),
37 m_maxX(0),
38 m_minY(0),
38 m_minY(0),
39 m_maxY(0),
39 m_maxY(0),
40 m_series(series),
40 m_series(series),
41 m_animation(0),
41 m_animation(0),
42 m_dirty(true)
42 m_dirty(true)
43 {
43 {
44 QObject::connect(series->d_func(),SIGNAL(pointReplaced(int)),this,SLOT(handlePointReplaced(int)));
44 QObject::connect(series->d_func(),SIGNAL(pointReplaced(int)),this,SLOT(handlePointReplaced(int)));
45 QObject::connect(series->d_func(),SIGNAL(pointAdded(int)),this,SLOT(handlePointAdded(int)));
45 QObject::connect(series->d_func(),SIGNAL(pointAdded(int)),this,SLOT(handlePointAdded(int)));
46 QObject::connect(series->d_func(),SIGNAL(pointRemoved(int)),this,SLOT(handlePointRemoved(int)));
46 QObject::connect(series->d_func(),SIGNAL(pointRemoved(int)),this,SLOT(handlePointRemoved(int)));
47 QObject::connect(series->d_func(),SIGNAL(reinitialized()),this,SLOT(handleReinitialized()));
48 QObject::connect(this,SIGNAL(clicked(QPointF)),series,SIGNAL(clicked(QPointF)));
47 QObject::connect(this,SIGNAL(clicked(QPointF)),series,SIGNAL(clicked(QPointF)));
49 }
48 }
50
49
51 void XYChart::setGeometryPoints(const QVector<QPointF>& points)
50 void XYChart::setGeometryPoints(const QVector<QPointF>& points)
52 {
51 {
53 m_points = points;
52 m_points = points;
54 }
53 }
55
54
56 void XYChart::setClipRect(const QRectF &rect)
55 void XYChart::setClipRect(const QRectF &rect)
57 {
56 {
58 m_clipRect = rect;
57 m_clipRect = rect;
59 }
58 }
60
59
61 void XYChart::setAnimation(XYAnimation* animation)
60 void XYChart::setAnimation(XYAnimation* animation)
62 {
61 {
63 m_animation=animation;
62 m_animation=animation;
64 }
63 }
65
64
66 void XYChart::setDirty(bool dirty)
65 void XYChart::setDirty(bool dirty)
67 {
66 {
68 m_dirty=dirty;
67 m_dirty=dirty;
69 }
68 }
70
69
71 QPointF XYChart::calculateGeometryPoint(const QPointF &point) const
70 QPointF XYChart::calculateGeometryPoint(const QPointF &point) const
72 {
71 {
73 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
72 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
74 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
73 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
75 qreal x = (point.x() - m_minX)* deltaX;
74 qreal x = (point.x() - m_minX)* deltaX;
76 qreal y = (point.y() - m_minY)*-deltaY + m_size.height();
75 qreal y = (point.y() - m_minY)*-deltaY + m_size.height();
77 return QPointF(x,y);
76 return QPointF(x,y);
78 }
77 }
79
78
80 QPointF XYChart::calculateGeometryPoint(int index) const
79 QPointF XYChart::calculateGeometryPoint(int index) const
81 {
80 {
82 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
81 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
83 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
82 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
84 const QList<QPointF>& vector = m_series->points();
83 const QList<QPointF>& vector = m_series->points();
85 qreal x = (vector[index].x() - m_minX)* deltaX;
84 qreal x = (vector[index].x() - m_minX)* deltaX;
86 qreal y = (vector[index].y() - m_minY)*-deltaY + m_size.height();
85 qreal y = (vector[index].y() - m_minY)*-deltaY + m_size.height();
87 return QPointF(x,y);
86 return QPointF(x,y);
88 }
87 }
89
88
90 QVector<QPointF> XYChart::calculateGeometryPoints() const
89 QVector<QPointF> XYChart::calculateGeometryPoints() const
91 {
90 {
92 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
91 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
93 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
92 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
94
93
95 QVector<QPointF> result;
94 QVector<QPointF> result;
96 result.resize(m_series->count());
95 result.resize(m_series->count());
97 const QList<QPointF>& vector = m_series->points();
96 const QList<QPointF>& vector = m_series->points();
98 for (int i = 0; i < m_series->count(); ++i) {
97 for (int i = 0; i < m_series->count(); ++i) {
99 qreal x = (vector[i].x() - m_minX)* deltaX;
98 qreal x = (vector[i].x() - m_minX)* deltaX;
100 qreal y = (vector[i].y() - m_minY)*-deltaY + m_size.height();
99 qreal y = (vector[i].y() - m_minY)*-deltaY + m_size.height();
101 result[i].setX(x);
100 result[i].setX(x);
102 result[i].setY(y);
101 result[i].setY(y);
103 }
102 }
104 return result;
103 return result;
105 }
104 }
106
105
107 QPointF XYChart::calculateDomainPoint(const QPointF &point) const
106 QPointF XYChart::calculateDomainPoint(const QPointF &point) const
108 {
107 {
109 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
108 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
110 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
109 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
111 qreal x = point.x()/deltaX +m_minX;
110 qreal x = point.x()/deltaX +m_minX;
112 qreal y = (point.y()-m_size.height())/(-deltaY)+ m_minY;
111 qreal y = (point.y()-m_size.height())/(-deltaY)+ m_minY;
113 return QPointF(x,y);
112 return QPointF(x,y);
114 }
113 }
115
114
116 void XYChart::updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints,int index)
115 void XYChart::updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints,int index)
117 {
116 {
118 if (m_animation) {
117 if (m_animation) {
119 m_animation->setValues(oldPoints, newPoints, index);
118 m_animation->setValues(oldPoints, newPoints, index);
120 setGeometryPoints(newPoints);
119 setGeometryPoints(newPoints);
121 setDirty(false);
120 setDirty(false);
122 presenter()->startAnimation(m_animation);
121 presenter()->startAnimation(m_animation);
123 }
122 }
124 else {
123 else {
125 setGeometryPoints(newPoints);
124 setGeometryPoints(newPoints);
126 updateGeometry();
125 updateGeometry();
127 }
126 }
128 }
127 }
129
128
130 //handlers
129 //handlers
131
130
132 void XYChart::handlePointAdded(int index)
131 void XYChart::handlePointAdded(int index)
133 {
132 {
134 Q_ASSERT(index<m_series->count());
133 Q_ASSERT(index<m_series->count());
135 Q_ASSERT(index>=0);
134 Q_ASSERT(index>=0);
136
135
137 QVector<QPointF> points;
136 QVector<QPointF> points;
138
137
139 if(m_animation) {
138 if(m_animation) {
140 m_animation->setAnimationType(XYAnimation::AddPointAnimation);
139 m_animation->setAnimationType(XYAnimation::AddPointAnimation);
141 }
140 }
142
141
143 if(m_dirty) {
142 if(m_dirty) {
144 points = calculateGeometryPoints();
143 points = calculateGeometryPoints();
145 } else {
144 } else {
146 points = m_points;
145 points = m_points;
147 QPointF point = calculateGeometryPoint(index);
146 QPointF point = calculateGeometryPoint(index);
148 points.insert(index, point);
147 points.insert(index, point);
149 }
148 }
150
149
151 updateChart(m_points,points,index);
150 updateChart(m_points,points,index);
152 }
151 }
153
152
154 void XYChart::handlePointRemoved(int index)
153 void XYChart::handlePointRemoved(int index)
155 {
154 {
156 Q_ASSERT(index<=m_series->count());
155 Q_ASSERT(index<=m_series->count());
157 Q_ASSERT(index>=0);
156 Q_ASSERT(index>=0);
158
157
159 QVector<QPointF> points;
158 QVector<QPointF> points;
160
159
161 if(m_animation) {
160 if(m_animation) {
162 m_animation->setAnimationType(XYAnimation::RemovePointAnimation);
161 m_animation->setAnimationType(XYAnimation::RemovePointAnimation);
163 }
162 }
164
163
165 if(m_dirty) {
164 if(m_dirty) {
166 points = calculateGeometryPoints();
165 points = calculateGeometryPoints();
167 } else {
166 } else {
168 points = m_points;
167 points = m_points;
169 points.remove(index);
168 points.remove(index);
170 }
169 }
171
170
172 updateChart(m_points,points,index);
171 updateChart(m_points,points,index);
173 }
172 }
174
173
175 void XYChart::handlePointReplaced(int index)
174 void XYChart::handlePointReplaced(int index)
176 {
175 {
177 Q_ASSERT(index<m_series->count());
176 Q_ASSERT(index<m_series->count());
178 Q_ASSERT(index>=0);
177 Q_ASSERT(index>=0);
179
178
180 QVector<QPointF> points;
179 QVector<QPointF> points;
181
180
182 if(m_animation) {
181 if(m_animation) {
183 m_animation->setAnimationType(XYAnimation::ReplacePointAnimation);
182 m_animation->setAnimationType(XYAnimation::ReplacePointAnimation);
184 }
183 }
185
184
186 if(m_dirty) {
185 if(m_dirty) {
187 points = calculateGeometryPoints();
186 points = calculateGeometryPoints();
188 } else {
187 } else {
189 QPointF point = calculateGeometryPoint(index);
188 QPointF point = calculateGeometryPoint(index);
190 points = m_points;
189 points = m_points;
191 points.replace(index,point);
190 points.replace(index,point);
192 }
191 }
193
192
194 updateChart(m_points,points,index);
193 updateChart(m_points,points,index);
195 }
194 }
196
195
197 void XYChart::handleReinitialized()
198 {
199 QVector<QPointF> points = calculateGeometryPoints();
200
201 if(m_animation) {
202 m_animation->setAnimationType(XYAnimation::NewAnimation);
203 }
204
205 updateChart(m_points,points);
206 }
207
208 void XYChart::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY)
196 void XYChart::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY)
209 {
197 {
210 m_minX=minX;
198 m_minX=minX;
211 m_maxX=maxX;
199 m_maxX=maxX;
212 m_minY=minY;
200 m_minY=minY;
213 m_maxY=maxY;
201 m_maxY=maxY;
214 if (isEmpty()) return;
202 if (isEmpty()) return;
215
203
216 QVector<QPointF> points = calculateGeometryPoints();
204 QVector<QPointF> points = calculateGeometryPoints();
217
205
218 if(m_animation) {
206 if(m_animation) {
219 m_animation->setAnimationType(XYAnimation::ReplacePointAnimation);
207 m_animation->setAnimationType(XYAnimation::ReplacePointAnimation);
220 }
208 }
221
209
222 updateChart(m_points,points);
210 updateChart(m_points,points);
223 }
211 }
224
212
225 void XYChart::handleGeometryChanged(const QRectF &rect)
213 void XYChart::handleGeometryChanged(const QRectF &rect)
226 {
214 {
227 Q_ASSERT(rect.isValid());
215 Q_ASSERT(rect.isValid());
228 m_size=rect.size();
216 m_size=rect.size();
229 m_clipRect=rect.translated(-rect.topLeft());
217 m_clipRect=rect.translated(-rect.topLeft());
230 m_origin=rect.topLeft();
218 m_origin=rect.topLeft();
231
219
232 if (isEmpty()) return;
220 if (isEmpty()) return;
233
221
234 QVector<QPointF> points = calculateGeometryPoints();
222 QVector<QPointF> points = calculateGeometryPoints();
235
223
236 if(m_animation) {
224 if(m_animation) {
237 m_animation->setAnimationType(XYAnimation::NewAnimation);
225 m_animation->setAnimationType(XYAnimation::NewAnimation);
238 }
226 }
239
227
240 updateChart(m_points,points);
228 updateChart(m_points,points);
241 }
229 }
242
230
243 bool XYChart::isEmpty()
231 bool XYChart::isEmpty()
244 {
232 {
245 return !m_clipRect.isValid() || qFuzzyIsNull(m_maxX - m_minX) || qFuzzyIsNull(m_maxY - m_minY) || m_series->points().isEmpty();
233 return !m_clipRect.isValid() || qFuzzyIsNull(m_maxX - m_minX) || qFuzzyIsNull(m_maxY - m_minY) || m_series->points().isEmpty();
246 }
234 }
247
235
248 #include "moc_xychart_p.cpp"
236 #include "moc_xychart_p.cpp"
249
237
250 QTCOMMERCIALCHART_END_NAMESPACE
238 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,97 +1,96
1 /****************************************************************************
1 /****************************************************************************
2 **
2 **
3 ** Copyright (C) 2012 Digia Plc
3 ** Copyright (C) 2012 Digia Plc
4 ** All rights reserved.
4 ** All rights reserved.
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
5 ** For any questions to Digia, please use contact form at http://qt.digia.com
6 **
6 **
7 ** This file is part of the Qt Commercial Charts Add-on.
7 ** This file is part of the Qt Commercial Charts Add-on.
8 **
8 **
9 ** $QT_BEGIN_LICENSE$
9 ** $QT_BEGIN_LICENSE$
10 ** Licensees holding valid Qt Commercial licenses may use this file in
10 ** Licensees holding valid Qt Commercial licenses may use this file in
11 ** accordance with the Qt Commercial License Agreement provided with the
11 ** accordance with the Qt Commercial License Agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia.
13 ** a written agreement between you and Digia.
14 **
14 **
15 ** If you have questions regarding the use of this file, please use
15 ** If you have questions regarding the use of this file, please use
16 ** contact form at http://qt.digia.com
16 ** contact form at http://qt.digia.com
17 ** $QT_END_LICENSE$
17 ** $QT_END_LICENSE$
18 **
18 **
19 ****************************************************************************/
19 ****************************************************************************/
20
20
21 #ifndef XYCHARTITEM_H
21 #ifndef XYCHARTITEM_H
22 #define XYCHARTITEM_H
22 #define XYCHARTITEM_H
23
23
24 #include "qchartglobal.h"
24 #include "qchartglobal.h"
25 #include "chartitem_p.h"
25 #include "chartitem_p.h"
26 #include "xyanimation_p.h"
26 #include "xyanimation_p.h"
27 #include <QPen>
27 #include <QPen>
28
28
29 QTCOMMERCIALCHART_BEGIN_NAMESPACE
29 QTCOMMERCIALCHART_BEGIN_NAMESPACE
30
30
31 class ChartPresenter;
31 class ChartPresenter;
32 class QXYSeries;
32 class QXYSeries;
33
33
34 class XYChart : public Chart
34 class XYChart : public Chart
35 {
35 {
36 Q_OBJECT
36 Q_OBJECT
37 public:
37 public:
38 explicit XYChart(QXYSeries *series, ChartPresenter *presenter);
38 explicit XYChart(QXYSeries *series, ChartPresenter *presenter);
39 ~XYChart(){};
39 ~XYChart(){};
40
40
41 void setGeometryPoints(const QVector<QPointF>& points);
41 void setGeometryPoints(const QVector<QPointF>& points);
42 QVector<QPointF> geometryPoints() const { return m_points; }
42 QVector<QPointF> geometryPoints() const { return m_points; }
43
43
44 void setClipRect(const QRectF &rect);
44 void setClipRect(const QRectF &rect);
45 QRectF clipRect() const { return m_clipRect; }
45 QRectF clipRect() const { return m_clipRect; }
46
46
47 QSizeF size() const { return m_size; }
47 QSizeF size() const { return m_size; }
48 QPointF origin() const { return m_origin; }
48 QPointF origin() const { return m_origin; }
49
49
50 void setAnimation(XYAnimation* animation);
50 void setAnimation(XYAnimation* animation);
51 ChartAnimation* animation() const { return m_animation; }
51 ChartAnimation* animation() const { return m_animation; }
52 virtual void updateGeometry() = 0;
52 virtual void updateGeometry() = 0;
53
53
54 bool isDirty() const { return m_dirty; }
54 bool isDirty() const { return m_dirty; }
55 void setDirty(bool dirty);
55 void setDirty(bool dirty);
56
56
57 public Q_SLOTS:
57 public Q_SLOTS:
58 void handlePointAdded(int index);
58 void handlePointAdded(int index);
59 void handlePointRemoved(int index);
59 void handlePointRemoved(int index);
60 void handlePointReplaced(int index);
60 void handlePointReplaced(int index);
61 void handleReinitialized();
62 void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY);
61 void handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal maxY);
63 void handleGeometryChanged(const QRectF &size);
62 void handleGeometryChanged(const QRectF &size);
64
63
65 Q_SIGNALS:
64 Q_SIGNALS:
66 void clicked(const QPointF& point);
65 void clicked(const QPointF& point);
67
66
68 protected:
67 protected:
69 virtual void updateChart(QVector<QPointF> &oldPoints,QVector<QPointF> &newPoints,int index = 0);
68 virtual void updateChart(QVector<QPointF> &oldPoints,QVector<QPointF> &newPoints,int index = 0);
70 QPointF calculateGeometryPoint(const QPointF &point) const;
69 QPointF calculateGeometryPoint(const QPointF &point) const;
71 QPointF calculateGeometryPoint(int index) const;
70 QPointF calculateGeometryPoint(int index) const;
72 QPointF calculateDomainPoint(const QPointF &point) const;
71 QPointF calculateDomainPoint(const QPointF &point) const;
73 QVector<QPointF> calculateGeometryPoints() const;
72 QVector<QPointF> calculateGeometryPoints() const;
74
73
75 private:
74 private:
76 inline bool isEmpty();
75 inline bool isEmpty();
77
76
78 private:
77 private:
79 qreal m_minX;
78 qreal m_minX;
80 qreal m_maxX;
79 qreal m_maxX;
81 qreal m_minY;
80 qreal m_minY;
82 qreal m_maxY;
81 qreal m_maxY;
83 QXYSeries* m_series;
82 QXYSeries* m_series;
84 QSizeF m_size;
83 QSizeF m_size;
85 QPointF m_origin;
84 QPointF m_origin;
86 QRectF m_clipRect;
85 QRectF m_clipRect;
87 QVector<QPointF> m_points;
86 QVector<QPointF> m_points;
88 XYAnimation* m_animation;
87 XYAnimation* m_animation;
89 bool m_dirty;
88 bool m_dirty;
90
89
91 friend class AreaChartItem;
90 friend class AreaChartItem;
92
91
93 };
92 };
94
93
95 QTCOMMERCIALCHART_END_NAMESPACE
94 QTCOMMERCIALCHART_END_NAMESPACE
96
95
97 #endif
96 #endif
General Comments 0
You need to be logged in to leave comments. Login now