##// END OF EJS Templates
Blocks initalization of axes, TODO after release
Michal Klocek -
r1667:2b787e94878f
parent child
Show More
@@ -1,467 +1,467
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 "chartdataset_p.h"
21 #include "chartdataset_p.h"
22 #include "qchart.h"
22 #include "qchart.h"
23 #include "qvaluesaxis.h"
23 #include "qvaluesaxis.h"
24 #include "qbarcategoriesaxis.h"
24 #include "qbarcategoriesaxis.h"
25 #include "qvaluesaxis_p.h"
25 #include "qvaluesaxis_p.h"
26 #include "qabstractseries_p.h"
26 #include "qabstractseries_p.h"
27 #include "qabstractbarseries.h"
27 #include "qabstractbarseries.h"
28 #include "qstackedbarseries.h"
28 #include "qstackedbarseries.h"
29 #include "qpercentbarseries.h"
29 #include "qpercentbarseries.h"
30 #include "qpieseries.h"
30 #include "qpieseries.h"
31
31
32 QTCOMMERCIALCHART_BEGIN_NAMESPACE
32 QTCOMMERCIALCHART_BEGIN_NAMESPACE
33
33
34 ChartDataSet::ChartDataSet(QChart *parent):QObject(parent),
34 ChartDataSet::ChartDataSet(QChart *parent):QObject(parent),
35 m_domainIndex(0)
35 m_domainIndex(0)
36 {
36 {
37
37
38 }
38 }
39
39
40 ChartDataSet::~ChartDataSet()
40 ChartDataSet::~ChartDataSet()
41 {
41 {
42 removeAllSeries();
42 removeAllSeries();
43 }
43 }
44
44
45 void ChartDataSet::addSeries(QAbstractSeries* series)
45 void ChartDataSet::addSeries(QAbstractSeries* series)
46 {
46 {
47 Domain* domain = m_seriesDomainMap.value(series);
47 Domain* domain = m_seriesDomainMap.value(series);
48
48
49 if(domain) {
49 if(domain) {
50 qWarning() << "Can not add series. Series already on the chart";
50 qWarning() << "Can not add series. Series already on the chart";
51 return;
51 return;
52 }
52 }
53
53
54 series->setParent(this); // take ownership
54 series->setParent(this); // take ownership
55
55
56 domain = new Domain(series);
56 domain = new Domain(series);
57
57
58 m_seriesDomainMap.insert(series,domain);
58 m_seriesDomainMap.insert(series,domain);
59
59
60 series->d_ptr->scaleDomain(*domain);
60 series->d_ptr->scaleDomain(*domain);
61
61
62 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
62 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
63
63
64 int key=0;
64 int key=0;
65 while (i.hasNext()) {
65 while (i.hasNext()) {
66 i.next();
66 i.next();
67 if(i.key()!=key) {
67 if(i.key()!=key) {
68 break;
68 break;
69 }
69 }
70 key++;
70 key++;
71 }
71 }
72
72
73 m_indexSeriesMap.insert(key,series);
73 m_indexSeriesMap.insert(key,series);
74
74
75 series->d_ptr->m_chart = qobject_cast<QChart*>(parent());
75 series->d_ptr->m_chart = qobject_cast<QChart*>(parent());
76 series->d_ptr->m_dataset = this;
76 series->d_ptr->m_dataset = this;
77
77
78 emit seriesAdded(series,domain);
78 emit seriesAdded(series,domain);
79
79
80 }
80 }
81
81
82 void ChartDataSet::createDefaultAxes()
82 void ChartDataSet::createDefaultAxes()
83 {
83 {
84
84
85 if(m_seriesDomainMap.isEmpty()) return;
85 if(m_seriesDomainMap.isEmpty()) return;
86
86
87 QAbstractAxis::AxisTypes typeX(0);
87 QAbstractAxis::AxisTypes typeX(0);
88 QAbstractAxis::AxisTypes typeY(0);
88 QAbstractAxis::AxisTypes typeY(0);
89
89
90 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
90 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
91 while (i.hasNext()) {
91 while (i.hasNext()) {
92 i.next();
92 i.next();
93 removeAxes(i.key());
93 removeAxes(i.key());
94 }
94 }
95
95
96 i.toFront();
96 i.toFront();
97
97
98 while (i.hasNext()) {
98 while (i.hasNext()) {
99 i.next();
99 i.next();
100 QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key());
100 QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key());
101 QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key());
101 QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key());
102 if(axisX) typeX&=axisX->type();
102 if(axisX) typeX&=axisX->type();
103 else typeX|=i.key()->d_ptr->defaultAxisXType();
103 else typeX|=i.key()->d_ptr->defaultAxisXType();
104 if(axisY) typeY&=axisY->type();
104 if(axisY) typeY&=axisY->type();
105 else typeY|=i.key()->d_ptr->defaultAxisYType();
105 else typeY|=i.key()->d_ptr->defaultAxisYType();
106 }
106 }
107
107
108
108
109 if(typeX.testFlag(QAbstractAxis::AxisTypeValues) && typeX.testFlag(QAbstractAxis::AxisTypeCategories))
109 if(typeX.testFlag(QAbstractAxis::AxisTypeValues) && typeX.testFlag(QAbstractAxis::AxisTypeCategories))
110 {
110 {
111 i.toFront();
111 i.toFront();
112 while (i.hasNext()) {
112 while (i.hasNext()) {
113 i.next();
113 i.next();
114 QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisXType());
114 QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisXType());
115 if(!axis) continue;
115 if(!axis) continue;
116 i.key()->d_ptr->initializeAxisX(axis);
116 i.key()->d_ptr->initializeAxisX(axis);
117 addAxisX(axis,i.key());
117 addAxisX(axis,i.key());
118 emit axisAdded(axis,i.value());
118 emit axisAdded(axis,i.value());
119 }
119 }
120
120
121 }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){
121 }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){
122 QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeX)));
122 QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeX)));
123 i.toFront();
123 i.toFront();
124 while (i.hasNext()) {
124 while (i.hasNext()) {
125 i.next();
125 i.next();
126 i.key()->d_ptr->initializeAxisX(axis);
126 i.key()->d_ptr->initializeAxisX(axis);
127 addAxisX(axis,i.key());
127 addAxisX(axis,i.key());
128 }
128 }
129 emit axisAdded(axis,i.value());
129 emit axisAdded(axis,i.value());
130
130
131 }
131 }
132
132
133 if(typeY.testFlag(QAbstractAxis::AxisTypeValues) && typeY.testFlag(QAbstractAxis::AxisTypeCategories))
133 if(typeY.testFlag(QAbstractAxis::AxisTypeValues) && typeY.testFlag(QAbstractAxis::AxisTypeCategories))
134 {
134 {
135 i.toFront();
135 i.toFront();
136 while (i.hasNext()) {
136 while (i.hasNext()) {
137 i.next();
137 i.next();
138 QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisYType());
138 QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisYType());
139 i.key()->d_ptr->initializeAxisY(axis);
139 i.key()->d_ptr->initializeAxisY(axis);
140 addAxisY(axis,i.key());
140 addAxisY(axis,i.key());
141 emit axisAdded(axis,i.value());
141 emit axisAdded(axis,i.value());
142 }
142 }
143
143
144 }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){
144 }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){
145 QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeY)));
145 QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeY)));
146 i.toFront();
146 i.toFront();
147 while (i.hasNext()) {
147 while (i.hasNext()) {
148 i.next();
148 i.next();
149 i.key()->d_ptr->initializeAxisY(axis);
149 i.key()->d_ptr->initializeAxisY(axis);
150 addAxisY(axis,i.key());
150 addAxisY(axis,i.key());
151 }
151 }
152 emit axisAdded(axis,i.value());
152 emit axisAdded(axis,i.value());
153
153
154 }
154 }
155 }
155 }
156
156
157
157
158 QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type)
158 QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type)
159 {
159 {
160 QAbstractAxis* axis =0;
160 QAbstractAxis* axis =0;
161
161
162 switch(type) {
162 switch(type) {
163 case QAbstractAxis::AxisTypeValues:
163 case QAbstractAxis::AxisTypeValues:
164 axis = new QValuesAxis(this);
164 axis = new QValuesAxis(this);
165 break;
165 break;
166 case QAbstractAxis::AxisTypeCategories:
166 case QAbstractAxis::AxisTypeCategories:
167 axis = new QBarCategoriesAxis(this);
167 axis = new QBarCategoriesAxis(this);
168 break;
168 break;
169 default:
169 default:
170 axis = 0;
170 axis = 0;
171 break;
171 break;
172 }
172 }
173
173
174 return axis;
174 return axis;
175 }
175 }
176
176
177 void ChartDataSet::addAxisX(QAbstractAxis* axis,QAbstractSeries* series) {
177 void ChartDataSet::addAxisX(QAbstractAxis* axis,QAbstractSeries* series) {
178 Domain* domain = m_seriesDomainMap.value(series);
178 Domain* domain = m_seriesDomainMap.value(series);
179 axis->d_ptr->m_orientation=Qt::Horizontal;
179 axis->d_ptr->m_orientation=Qt::Horizontal;
180 axis->d_ptr->initialize(domain);
180 //TODO:axis->d_ptr->initialize(domain);
181 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool)));
181 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool)));
182 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
182 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
183 m_seriesAxisXMap.insert(series,axis);
183 m_seriesAxisXMap.insert(series,axis);
184 }
184 }
185
185
186 void ChartDataSet::addAxisY(QAbstractAxis* axis,QAbstractSeries* series) {
186 void ChartDataSet::addAxisY(QAbstractAxis* axis,QAbstractSeries* series) {
187 Domain* domain = m_seriesDomainMap.value(series);
187 Domain* domain = m_seriesDomainMap.value(series);
188 axis->d_ptr->m_orientation=Qt::Vertical;
188 axis->d_ptr->m_orientation=Qt::Vertical;
189 axis->d_ptr->initialize(domain);
189 //TODO:axis->d_ptr->initialize(domain);
190 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
190 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
191 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
191 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
192 m_seriesAxisYMap.insert(series,axis);
192 m_seriesAxisYMap.insert(series,axis);
193 }
193 }
194
194
195 void ChartDataSet::removeSeries(QAbstractSeries* series)
195 void ChartDataSet::removeSeries(QAbstractSeries* series)
196 {
196 {
197 Domain* domain = m_seriesDomainMap.take(series);
197 Domain* domain = m_seriesDomainMap.take(series);
198
198
199 if(!domain) {
199 if(!domain) {
200 qWarning()<<"Can not remove series. Series not found on the chart.";
200 qWarning()<<"Can not remove series. Series not found on the chart.";
201 }
201 }
202
202
203 emit seriesRemoved(series);
203 emit seriesRemoved(series);
204
204
205 delete domain;
205 delete domain;
206 domain = 0;
206 domain = 0;
207
207
208 int key = seriesIndex(series);
208 int key = seriesIndex(series);
209 Q_ASSERT(key!=-1);
209 Q_ASSERT(key!=-1);
210
210
211 m_indexSeriesMap.remove(key);
211 m_indexSeriesMap.remove(key);
212
212
213 series->setParent(0);
213 series->setParent(0);
214 series->d_ptr->m_chart = 0;
214 series->d_ptr->m_chart = 0;
215 series->d_ptr->m_dataset = 0;
215 series->d_ptr->m_dataset = 0;
216
216
217 removeAxes(series);
217 removeAxes(series);
218 }
218 }
219
219
220 void ChartDataSet::removeAxes(QAbstractSeries* series)
220 void ChartDataSet::removeAxes(QAbstractSeries* series)
221 {
221 {
222 QAbstractAxis* axisX = m_seriesAxisXMap.take(series);
222 QAbstractAxis* axisX = m_seriesAxisXMap.take(series);
223
223
224 if(axisX) {
224 if(axisX) {
225 QList<QAbstractAxis*> axesX = m_seriesAxisXMap.values();
225 QList<QAbstractAxis*> axesX = m_seriesAxisXMap.values();
226 int x = axesX.indexOf(axisX);
226 int x = axesX.indexOf(axisX);
227
227
228 if(x==-1) {
228 if(x==-1) {
229 emit axisRemoved(axisX);
229 emit axisRemoved(axisX);
230 axisX->deleteLater();
230 axisX->deleteLater();
231 }
231 }
232 }
232 }
233
233
234 QAbstractAxis* axisY = m_seriesAxisYMap.take(series);
234 QAbstractAxis* axisY = m_seriesAxisYMap.take(series);
235
235
236 if(axisY) {
236 if(axisY) {
237 QList<QAbstractAxis*> axesY = m_seriesAxisYMap.values();
237 QList<QAbstractAxis*> axesY = m_seriesAxisYMap.values();
238
238
239 int y = axesY.indexOf(axisY);
239 int y = axesY.indexOf(axisY);
240
240
241 if(y==-1) {
241 if(y==-1) {
242 emit axisRemoved(axisY);
242 emit axisRemoved(axisY);
243 axisY->deleteLater();
243 axisY->deleteLater();
244 }
244 }
245 }
245 }
246 }
246 }
247
247
248 void ChartDataSet::removeAllSeries()
248 void ChartDataSet::removeAllSeries()
249 {
249 {
250 QList<QAbstractSeries*> series = m_seriesDomainMap.keys();
250 QList<QAbstractSeries*> series = m_seriesDomainMap.keys();
251 foreach(QAbstractSeries *s , series) {
251 foreach(QAbstractSeries *s , series) {
252 removeSeries(s);
252 removeSeries(s);
253 }
253 }
254
254
255 Q_ASSERT(m_seriesAxisXMap.count()==0);
255 Q_ASSERT(m_seriesAxisXMap.count()==0);
256 Q_ASSERT(m_seriesAxisXMap.count()==0);
256 Q_ASSERT(m_seriesAxisXMap.count()==0);
257 Q_ASSERT(m_seriesDomainMap.count()==0);
257 Q_ASSERT(m_seriesDomainMap.count()==0);
258
258
259 qDeleteAll(series);
259 qDeleteAll(series);
260 }
260 }
261
261
262 void ChartDataSet::zoomInDomain(const QRectF& rect, const QSizeF& size)
262 void ChartDataSet::zoomInDomain(const QRectF& rect, const QSizeF& size)
263 {
263 {
264 //for performance reasons block, signals and scale "full" domain one by one. Gives twice less screen updates
264 //for performance reasons block, signals and scale "full" domain one by one. Gives twice less screen updates
265
265
266
266
267 blockAxisSignals(true);
267 blockAxisSignals(true);
268
268
269 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
269 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
270
270
271 while (i.hasNext()) {
271 while (i.hasNext()) {
272 i.next();
272 i.next();
273 i.value()->zoomIn(rect,size);
273 i.value()->zoomIn(rect,size);
274 }
274 }
275
275
276 blockAxisSignals(false);
276 blockAxisSignals(false);
277
277
278 }
278 }
279
279
280 void ChartDataSet::zoomOutDomain(const QRectF& rect, const QSizeF& size)
280 void ChartDataSet::zoomOutDomain(const QRectF& rect, const QSizeF& size)
281 {
281 {
282 //for performance reasons block, signals and scale "full" domain one by one. Gives twice less screen updates
282 //for performance reasons block, signals and scale "full" domain one by one. Gives twice less screen updates
283
283
284 blockAxisSignals(true);
284 blockAxisSignals(true);
285
285
286 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
286 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
287
287
288 while (i.hasNext()) {
288 while (i.hasNext()) {
289 i.next();
289 i.next();
290 i.value()->zoomOut(rect,size);
290 i.value()->zoomOut(rect,size);
291 }
291 }
292
292
293 blockAxisSignals(false);
293 blockAxisSignals(false);
294 }
294 }
295
295
296 void ChartDataSet::blockAxisSignals(bool enabled)
296 void ChartDataSet::blockAxisSignals(bool enabled)
297 {
297 {
298 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
298 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
299 Q_UNUSED(enabled);
299 Q_UNUSED(enabled);
300 while (i.hasNext()) {
300 while (i.hasNext()) {
301 i.next();
301 i.next();
302 QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key());
302 QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key());
303 QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key());
303 QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key());
304 if(axisX) axisX->d_ptr->blockSignals(true);
304 if(axisX) axisX->d_ptr->blockSignals(true);
305 if(axisY) axisY->d_ptr->blockSignals(true);
305 if(axisY) axisY->d_ptr->blockSignals(true);
306 }
306 }
307 }
307 }
308
308
309 int ChartDataSet::seriesCount(QAbstractSeries::SeriesType type)
309 int ChartDataSet::seriesCount(QAbstractSeries::SeriesType type)
310 {
310 {
311 int count=0;
311 int count=0;
312 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
312 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
313 while (i.hasNext()) {
313 while (i.hasNext()) {
314 i.next();
314 i.next();
315 if(i.key()->type()==type) count++;
315 if(i.key()->type()==type) count++;
316 }
316 }
317 return count;
317 return count;
318 }
318 }
319
319
320 int ChartDataSet::seriesIndex(QAbstractSeries *series)
320 int ChartDataSet::seriesIndex(QAbstractSeries *series)
321 {
321 {
322 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
322 QMapIterator<int, QAbstractSeries*> i(m_indexSeriesMap);
323 while (i.hasNext()) {
323 while (i.hasNext()) {
324 i.next();
324 i.next();
325 if (i.value() == series)
325 if (i.value() == series)
326 return i.key();
326 return i.key();
327 }
327 }
328 return -1;
328 return -1;
329 }
329 }
330
330
331 QAbstractAxis* ChartDataSet::axisX(QAbstractSeries *series) const
331 QAbstractAxis* ChartDataSet::axisX(QAbstractSeries *series) const
332 {
332 {
333 if(series == 0) {
333 if(series == 0) {
334
334
335 QMapIterator<QAbstractSeries*, QAbstractAxis *> i(m_seriesAxisXMap);
335 QMapIterator<QAbstractSeries*, QAbstractAxis *> i(m_seriesAxisXMap);
336
336
337 while (i.hasNext()) {
337 while (i.hasNext()) {
338 i.next();
338 i.next();
339 if(i.value()->isVisible()) return i.value();
339 if(i.value()->isVisible()) return i.value();
340 }
340 }
341 return 0;
341 return 0;
342 }
342 }
343 return m_seriesAxisXMap.value(series);
343 return m_seriesAxisXMap.value(series);
344 }
344 }
345
345
346 QAbstractAxis* ChartDataSet::axisY(QAbstractSeries *series) const
346 QAbstractAxis* ChartDataSet::axisY(QAbstractSeries *series) const
347 {
347 {
348 if(series == 0) {
348 if(series == 0) {
349 QMapIterator<QAbstractSeries*, QAbstractAxis *> i(m_seriesAxisYMap);
349 QMapIterator<QAbstractSeries*, QAbstractAxis *> i(m_seriesAxisYMap);
350
350
351 while (i.hasNext()) {
351 while (i.hasNext()) {
352 i.next();
352 i.next();
353 if(i.value()->isVisible()) return i.value();
353 if(i.value()->isVisible()) return i.value();
354 }
354 }
355 return 0;
355 return 0;
356 }
356 }
357 return m_seriesAxisYMap.value(series);
357 return m_seriesAxisYMap.value(series);
358 }
358 }
359
359
360 void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis)
360 void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis)
361 {
361 {
362 Q_ASSERT(axis);
362 Q_ASSERT(axis);
363 Domain* domain = m_seriesDomainMap.value(series);
363 Domain* domain = m_seriesDomainMap.value(series);
364
364
365 if(!domain) {
365 if(!domain) {
366 qWarning() << "Series not found on the chart.";
366 qWarning() << "Series not found on the chart.";
367 return;
367 return;
368 }
368 }
369
369
370 if(axis->d_ptr->m_orientation==Qt::Vertical) {
370 if(axis->d_ptr->m_orientation==Qt::Vertical) {
371 qWarning()<<"Axis already defined as axis Y";
371 qWarning()<<"Axis already defined as axis Y";
372 return;
372 return;
373 }
373 }
374
374
375 QAbstractAxis *oldAxis = m_seriesAxisXMap.take(series);
375 QAbstractAxis *oldAxis = m_seriesAxisXMap.take(series);
376 QList<QAbstractAxis*> axesX = m_seriesAxisXMap.values();
376 QList<QAbstractAxis*> axesX = m_seriesAxisXMap.values();
377
377
378 if(oldAxis) {
378 if(oldAxis) {
379
379
380 int x = axesX.indexOf(oldAxis);
380 int x = axesX.indexOf(oldAxis);
381 if(x==-1) {
381 if(x==-1) {
382 emit axisRemoved(oldAxis);
382 emit axisRemoved(oldAxis);
383 oldAxis->deleteLater();
383 oldAxis->deleteLater();
384 }
384 }
385 }
385 }
386
386
387 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool)));
387 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool)));
388 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
388 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
389
389
390 int x = axesX.indexOf(axis);
390 int x = axesX.indexOf(axis);
391 if(x==-1) {
391 if(x==-1) {
392 axis->d_ptr->m_orientation=Qt::Horizontal;
392 axis->d_ptr->m_orientation=Qt::Horizontal;
393 emit axisAdded(axis,domain);
393 emit axisAdded(axis,domain);
394 }
394 }
395
395
396 m_seriesAxisXMap.insert(series,axis);
396 m_seriesAxisXMap.insert(series,axis);
397 axis->d_ptr->emitRange();
397 axis->d_ptr->emitRange();
398 }
398 }
399
399
400 void ChartDataSet::setAxisY(QAbstractSeries *series, QAbstractAxis *axis)
400 void ChartDataSet::setAxisY(QAbstractSeries *series, QAbstractAxis *axis)
401 {
401 {
402 Q_ASSERT(axis);
402 Q_ASSERT(axis);
403 Domain* domain = m_seriesDomainMap.value(series);
403 Domain* domain = m_seriesDomainMap.value(series);
404
404
405 if(!domain) {
405 if(!domain) {
406 qWarning() << "Series not found on the chart.";
406 qWarning() << "Series not found on the chart.";
407 return;
407 return;
408 }
408 }
409
409
410 if(axis->d_ptr->m_orientation==Qt::Horizontal) {
410 if(axis->d_ptr->m_orientation==Qt::Horizontal) {
411 qWarning()<<"Axis already defined as axis X";
411 qWarning()<<"Axis already defined as axis X";
412 return;
412 return;
413 }
413 }
414
414
415 QAbstractAxis *oldAxis = m_seriesAxisYMap.take(series);
415 QAbstractAxis *oldAxis = m_seriesAxisYMap.take(series);
416 QList<QAbstractAxis*> axesY = m_seriesAxisYMap.values();
416 QList<QAbstractAxis*> axesY = m_seriesAxisYMap.values();
417
417
418 if(oldAxis) {
418 if(oldAxis) {
419 int y = axesY.indexOf(oldAxis);
419 int y = axesY.indexOf(oldAxis);
420 if(y==-1) {
420 if(y==-1) {
421 emit axisRemoved(oldAxis);
421 emit axisRemoved(oldAxis);
422 oldAxis->deleteLater();
422 oldAxis->deleteLater();
423 }
423 }
424 }
424 }
425
425
426 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
426 QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool)));
427 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
427 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int)));
428
428
429 int y = axesY.indexOf(axis);
429 int y = axesY.indexOf(axis);
430 if(y==-1) {
430 if(y==-1) {
431 axis->d_ptr->m_orientation=Qt::Vertical;
431 axis->d_ptr->m_orientation=Qt::Vertical;
432 emit axisAdded(axis,domain);
432 emit axisAdded(axis,domain);
433 }
433 }
434
434
435 m_seriesAxisYMap.insert(series,axis);
435 m_seriesAxisYMap.insert(series,axis);
436 axis->d_ptr->emitRange();
436 axis->d_ptr->emitRange();
437 }
437 }
438
438
439 Domain* ChartDataSet::domain(QAbstractSeries *series) const
439 Domain* ChartDataSet::domain(QAbstractSeries *series) const
440 {
440 {
441 return m_seriesDomainMap.value(series);
441 return m_seriesDomainMap.value(series);
442 }
442 }
443
443
444 void ChartDataSet::scrollDomain(qreal dx,qreal dy,const QSizeF& size)
444 void ChartDataSet::scrollDomain(qreal dx,qreal dy,const QSizeF& size)
445 {
445 {
446 blockAxisSignals(true);
446 blockAxisSignals(true);
447 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
447 QMapIterator<QAbstractSeries*, Domain*> i(m_seriesDomainMap);
448 while (i.hasNext()) {
448 while (i.hasNext()) {
449 i.next();
449 i.next();
450 i.value()->move(dx,dy,size);
450 i.value()->move(dx,dy,size);
451 }
451 }
452 blockAxisSignals(false);
452 blockAxisSignals(false);
453 }
453 }
454
454
455 QList<QAbstractSeries*> ChartDataSet::series() const
455 QList<QAbstractSeries*> ChartDataSet::series() const
456 {
456 {
457 return m_seriesDomainMap.keys();
457 return m_seriesDomainMap.keys();
458 }
458 }
459
459
460 void ChartDataSet::updateSeries(QAbstractSeries *series)
460 void ChartDataSet::updateSeries(QAbstractSeries *series)
461 {
461 {
462 emit seriesUpdated(series);
462 emit seriesUpdated(series);
463 }
463 }
464
464
465 #include "moc_chartdataset_p.cpp"
465 #include "moc_chartdataset_p.cpp"
466
466
467 QTCOMMERCIALCHART_END_NAMESPACE
467 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now