@@ -48,7 +48,9 void ChartDataSet::addSeries(QSeries* series, QChartAxis *axisY) | |||
|
48 | 48 | { |
|
49 | 49 | if(axisY==0) axisY = m_axisY; |
|
50 | 50 | |
|
51 | if (seriesIndex(series) > -1) { | |
|
51 | QChartAxis* axis = m_seriesAxisMap.value(series); | |
|
52 | ||
|
53 | if(axis) { | |
|
52 | 54 | qWarning() << "Can not add series. Series already on the chart"; |
|
53 | 55 | return; |
|
54 | 56 | } |
@@ -62,7 +64,8 void ChartDataSet::addSeries(QSeries* series, QChartAxis *axisY) | |||
|
62 | 64 | } |
|
63 | 65 | |
|
64 | 66 | Domain* domain = m_axisDomainMap.value(axisY); |
|
65 | if (!domain) { | |
|
67 | ||
|
68 | if(!domain) { | |
|
66 | 69 | domain = new Domain(axisY); |
|
67 | 70 | QObject::connect(axisY,SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool))); |
|
68 | 71 | QObject::connect(axisX(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool))); |
@@ -73,75 +76,88 void ChartDataSet::addSeries(QSeries* series, QChartAxis *axisY) | |||
|
73 | 76 | emit axisAdded(axisY,domain); |
|
74 | 77 | } |
|
75 | 78 | |
|
76 |
if |
|
|
77 |
emit axisAdded(axisX(), |
|
|
78 |
m_axisXInitialized |
|
|
79 | if(!m_axisXInitialized){ | |
|
80 | emit axisAdded(axisX(),domain); | |
|
81 | m_axisXInitialized=true; | |
|
79 | 82 | } |
|
80 | 83 | |
|
81 |
calculateDomain(series, |
|
|
84 | calculateDomain(series,domain); | |
|
82 | 85 | |
|
83 |
m_seriesAxis |
|
|
86 | m_seriesAxisMap.insert(series,axisY); | |
|
87 | ||
|
88 | QMapIterator<int, QSeries*> i(m_indexSeriesMap); | |
|
89 | ||
|
90 | int key=0; | |
|
91 | while (i.hasNext()) { | |
|
92 | i.next(); | |
|
93 | if(i.key()!=key) { | |
|
94 | break; | |
|
95 | } | |
|
96 | key++; | |
|
97 | } | |
|
98 | ||
|
99 | m_indexSeriesMap.insert(key,series); | |
|
100 | ||
|
101 | emit seriesAdded(series,domain); | |
|
84 | 102 | |
|
85 | emit seriesAdded(series, domain); | |
|
86 | 103 | } |
|
87 | 104 | |
|
88 | 105 | void ChartDataSet::removeSeries(QSeries* series) |
|
89 | 106 | { |
|
90 | int index = seriesIndex(series); | |
|
91 | if (index < 0) { | |
|
92 | qWarning() << "Can not remove series. Series not found on the chart."; | |
|
107 | ||
|
108 | QChartAxis* axis = m_seriesAxisMap.value(series); | |
|
109 | ||
|
110 | if(!axis){ | |
|
111 | qWarning()<<"Can not remove series. Series not found on the chart."; | |
|
93 | 112 | return; |
|
94 | 113 | } |
|
114 | emit seriesRemoved(series); | |
|
115 | m_seriesAxisMap.remove(series); | |
|
116 | int key = seriesIndex(series); | |
|
117 | Q_ASSERT(key!=-1); | |
|
95 | 118 | |
|
96 | // Remove the series and the axis from the container | |
|
97 | QChartAxis* axis = m_seriesAxisList.at(index).second; | |
|
98 | m_seriesAxisList.removeAt(index); | |
|
119 | m_indexSeriesMap.remove(key); | |
|
99 | 120 | |
|
100 | // Delete the series | |
|
101 | emit seriesRemoved(series); | |
|
102 | if (series->parent() == this) { | |
|
121 | if(series->parent()==this){ | |
|
103 | 122 | delete series; |
|
104 |
series |
|
|
123 | series=0; | |
|
105 | 124 | } |
|
106 | 125 | |
|
107 | // Check if the Y axis is still in use | |
|
108 | bool yAxisInUse(false); | |
|
109 | for (int i(0); i < m_seriesAxisList.count(); i++) { | |
|
110 | QPair<QSeries *, QChartAxis *> pair = m_seriesAxisList.at(i); | |
|
111 | if (pair.second == axis) | |
|
112 | yAxisInUse = true; | |
|
113 | } | |
|
126 | QList<QChartAxis*> axes = m_seriesAxisMap.values(); | |
|
127 | ||
|
128 | int i = axes.indexOf(axis); | |
|
114 | 129 | |
|
115 | // Remove the Y axis if not in use | |
|
116 | if (!yAxisInUse) { | |
|
130 | if(i==-1){ | |
|
117 | 131 | Domain* domain = m_axisDomainMap.take(axis); |
|
118 | 132 | emit axisRemoved(axis); |
|
119 |
if |
|
|
120 | // Delete the Y axis unless it is the default one | |
|
121 | if (axis->parent() == this) { | |
|
133 | if(axis!=axisY()){ | |
|
134 | if(axis->parent()==this){ | |
|
122 | 135 | delete axis; |
|
123 |
axis |
|
|
136 | axis=0; | |
|
124 | 137 | } |
|
125 | 138 | } |
|
126 | 139 | delete domain; |
|
127 | 140 | } |
|
128 | 141 | |
|
129 | // Remove the x axis in case there are no y-axes left | |
|
130 | if (m_seriesAxisList.count() == 0) { | |
|
131 |
m_axisXInitialized |
|
|
142 | if(m_seriesAxisMap.values().size()==0) | |
|
143 | { | |
|
144 | m_axisXInitialized=false; | |
|
132 | 145 | emit axisRemoved(axisX()); |
|
133 | 146 | } |
|
134 | 147 | } |
|
135 | 148 | |
|
136 | 149 | void ChartDataSet::removeAllSeries() |
|
137 | 150 | { |
|
138 | while (m_seriesAxisList.count()) { | |
|
139 |
|
|
|
140 | removeSeries(pair.first); | |
|
151 | ||
|
152 | QList<QSeries*> series = m_seriesAxisMap.keys(); | |
|
153 | ||
|
154 | foreach(QSeries* s , series) { | |
|
155 | removeSeries(s); | |
|
141 | 156 | } |
|
142 | 157 | |
|
143 |
Q_ASSERT(m_seriesAxis |
|
|
144 |
Q_ASSERT(m_axisDomainMap.count() |
|
|
158 | Q_ASSERT(m_seriesAxisMap.count()==0); | |
|
159 | Q_ASSERT(m_axisDomainMap.count()==0); | |
|
160 | ||
|
145 | 161 | } |
|
146 | 162 | |
|
147 | 163 | //to be removed with PIMPL |
@@ -285,30 +301,41 void ChartDataSet::zoomOutDomain(const QRectF& rect, const QSizeF& size) | |||
|
285 | 301 | } |
|
286 | 302 | } |
|
287 | 303 | |
|
288 |
int ChartDataSet::series |
|
|
304 | int ChartDataSet::seriesCount(QSeries::QSeriesType type) | |
|
305 | { | |
|
306 | int count=0; | |
|
307 | QMapIterator<QSeries*, QChartAxis*> i(m_seriesAxisMap); | |
|
308 | while (i.hasNext()) { | |
|
309 | i.next(); | |
|
310 | if(i.key()->type()==type) count++; | |
|
311 | } | |
|
312 | return count; | |
|
313 | } | |
|
314 | ||
|
315 | int ChartDataSet::seriesIndex(QSeries *series) | |
|
289 | 316 | { |
|
290 | for (int i(0); i < m_seriesAxisList.count(); i++) { | |
|
291 | QPair<QSeries *, QChartAxis *> pair = m_seriesAxisList.at(i); | |
|
292 | if (pair.first == series) | |
|
293 | return i; | |
|
317 | QMapIterator<int, QSeries*> i(m_indexSeriesMap); | |
|
318 | while (i.hasNext()) { | |
|
319 | i.next(); | |
|
320 | if (i.value() == series) | |
|
321 | return i.key(); | |
|
294 | 322 | } |
|
295 | 323 | return -1; |
|
296 | 324 | } |
|
297 | 325 | |
|
298 | 326 | QChartAxis* ChartDataSet::axisY(QSeries* series) const |
|
299 | 327 | { |
|
300 |
if |
|
|
301 | return m_axisY; | |
|
302 | ||
|
303 | return m_seriesAxisList.at(seriesIndex(series)).second; | |
|
328 | if(series == 0) return m_axisY; | |
|
329 | return m_seriesAxisMap.value(series); | |
|
304 | 330 | } |
|
305 | 331 | |
|
306 | 332 | Domain* ChartDataSet::domain(QSeries* series) const |
|
307 | 333 | { |
|
308 |
|
|
|
309 |
|
|
|
334 | QChartAxis* axis = m_seriesAxisMap.value(series); | |
|
335 | if(axis){ | |
|
310 | 336 | return m_axisDomainMap.value(axis); |
|
311 | return 0; | |
|
337 | }else | |
|
338 | return 0; | |
|
312 | 339 | } |
|
313 | 340 | |
|
314 | 341 | Domain* ChartDataSet::domain(QChartAxis* axis) const |
@@ -54,7 +54,8 public: | |||
|
54 | 54 | void zoomOutDomain(const QRectF& rect, const QSizeF& size); |
|
55 | 55 | void scrollDomain(int dx,int dy,const QSizeF& size); |
|
56 | 56 | |
|
57 |
int series |
|
|
57 | int seriesCount(QSeries::QSeriesType type); | |
|
58 | int seriesIndex(QSeries *series); | |
|
58 | 59 | |
|
59 | 60 | Domain* domain(QSeries* series) const; |
|
60 | 61 | Domain* domain(QChartAxis* axis) const; |
@@ -74,8 +75,9 private: | |||
|
74 | 75 | void setupCategories(QBarSeries* series); |
|
75 | 76 | |
|
76 | 77 | private: |
|
77 |
Q |
|
|
78 | QMap<QSeries*, QChartAxis*> m_seriesAxisMap; | |
|
78 | 79 | QMap<QChartAxis*, Domain*> m_axisDomainMap; |
|
80 | QMap<int,QSeries*> m_indexSeriesMap; | |
|
79 | 81 | QChartAxis* m_axisX; |
|
80 | 82 | QChartAxis* m_axisY; |
|
81 | 83 |
@@ -52,6 +52,8 private Q_SLOTS: | |||
|
52 | 52 | void removeAllSeries(); |
|
53 | 53 | void axisY_data(); |
|
54 | 54 | void axisY(); |
|
55 | void seriesCount_data(); | |
|
56 | void seriesCount(); | |
|
55 | 57 | void seriesIndex_data(); |
|
56 | 58 | void seriesIndex(); |
|
57 | 59 | void domain_data(); |
@@ -95,6 +97,8 void tst_ChartDataSet::chartdataset() | |||
|
95 | 97 | //check if not dangling pointer |
|
96 | 98 | dataSet.axisX()->objectName(); |
|
97 | 99 | dataSet.axisY()->objectName(); |
|
100 | QLineSeries* series = new QLineSeries(this); | |
|
101 | QCOMPARE(dataSet.seriesIndex(series),-1); | |
|
98 | 102 | } |
|
99 | 103 | |
|
100 | 104 | void tst_ChartDataSet::addSeries_data() |
@@ -259,6 +263,40 void tst_ChartDataSet::axisY() | |||
|
259 | 263 | |
|
260 | 264 | } |
|
261 | 265 | |
|
266 | void tst_ChartDataSet::seriesCount_data() | |
|
267 | { | |
|
268 | addSeries_data(); | |
|
269 | } | |
|
270 | ||
|
271 | void tst_ChartDataSet::seriesCount() | |
|
272 | { | |
|
273 | QFETCH(QLineSeries*, series0); | |
|
274 | QFETCH(QChartAxis*, axis0); | |
|
275 | QFETCH(QLineSeries*, series1); | |
|
276 | QFETCH(QChartAxis*, axis1); | |
|
277 | QFETCH(QLineSeries*, series2); | |
|
278 | QFETCH(QChartAxis*, axis2); | |
|
279 | QFETCH(int, axisCount); | |
|
280 | Q_UNUSED(axisCount); | |
|
281 | ||
|
282 | ChartDataSet dataSet; | |
|
283 | ||
|
284 | dataSet.addSeries(series0, axis0); | |
|
285 | dataSet.addSeries(series1, axis1); | |
|
286 | dataSet.addSeries(series2, axis2); | |
|
287 | ||
|
288 | QSignalSpy spy0(&dataSet, SIGNAL(axisAdded(QChartAxis*,Domain*))); | |
|
289 | QSignalSpy spy1(&dataSet, SIGNAL(axisRemoved(QChartAxis*))); | |
|
290 | QSignalSpy spy2(&dataSet, SIGNAL(seriesAdded(QSeries*,Domain*))); | |
|
291 | QSignalSpy spy3(&dataSet, SIGNAL(seriesRemoved(QSeries*))); | |
|
292 | ||
|
293 | QCOMPARE(dataSet.seriesCount(series0->type()),3); | |
|
294 | QCOMPARE(spy0.count(), 0); | |
|
295 | QCOMPARE(spy1.count(), 0); | |
|
296 | QCOMPARE(spy2.count(), 0); | |
|
297 | QCOMPARE(spy3.count(), 0); | |
|
298 | } | |
|
299 | ||
|
262 | 300 | void tst_ChartDataSet::seriesIndex_data() |
|
263 | 301 | { |
|
264 | 302 | addSeries_data(); |
@@ -266,6 +304,8 void tst_ChartDataSet::seriesIndex_data() | |||
|
266 | 304 | |
|
267 | 305 | void tst_ChartDataSet::seriesIndex() |
|
268 | 306 | { |
|
307 | //TODO: rewrite this series_index_data to match better | |
|
308 | ||
|
269 | 309 | QFETCH(QLineSeries*, series0); |
|
270 | 310 | QFETCH(QChartAxis*, axis0); |
|
271 | 311 | QFETCH(QLineSeries*, series1); |
@@ -286,18 +326,62 void tst_ChartDataSet::seriesIndex() | |||
|
286 | 326 | QSignalSpy spy2(&dataSet, SIGNAL(seriesAdded(QSeries*,Domain*))); |
|
287 | 327 | QSignalSpy spy3(&dataSet, SIGNAL(seriesRemoved(QSeries*))); |
|
288 | 328 | |
|
289 |
|
|
|
290 |
|
|
|
291 |
|
|
|
292 | ||
|
293 | QVERIFY(i1!=i2); | |
|
294 | QVERIFY(i0!=i2); | |
|
295 | QVERIFY(i0!=i1); | |
|
329 | QCOMPARE(dataSet.seriesIndex(series0),0); | |
|
330 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
331 | QCOMPARE(dataSet.seriesIndex(series2),2); | |
|
296 | 332 | |
|
297 | 333 | QCOMPARE(spy0.count(), 0); |
|
298 | 334 | QCOMPARE(spy1.count(), 0); |
|
299 | 335 | QCOMPARE(spy2.count(), 0); |
|
300 | 336 | QCOMPARE(spy3.count(), 0); |
|
337 | ||
|
338 | dataSet.removeSeries(series0); | |
|
339 | dataSet.removeSeries(series1); | |
|
340 | dataSet.removeSeries(series2); | |
|
341 | ||
|
342 | QCOMPARE(dataSet.seriesIndex(series0),-1); | |
|
343 | QCOMPARE(dataSet.seriesIndex(series1),-1); | |
|
344 | QCOMPARE(dataSet.seriesIndex(series2),-1); | |
|
345 | ||
|
346 | dataSet.addSeries(series0, axis0); | |
|
347 | dataSet.addSeries(series1, axis1); | |
|
348 | dataSet.addSeries(series2, axis2); | |
|
349 | ||
|
350 | QCOMPARE(dataSet.seriesIndex(series0),0); | |
|
351 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
352 | QCOMPARE(dataSet.seriesIndex(series2),2); | |
|
353 | ||
|
354 | dataSet.removeSeries(series1); | |
|
355 | ||
|
356 | QCOMPARE(dataSet.seriesIndex(series0),0); | |
|
357 | QCOMPARE(dataSet.seriesIndex(series1),-1); | |
|
358 | QCOMPARE(dataSet.seriesIndex(series2),2); | |
|
359 | ||
|
360 | dataSet.addSeries(series1, axis1); | |
|
361 | QCOMPARE(dataSet.seriesIndex(series0),0); | |
|
362 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
363 | QCOMPARE(dataSet.seriesIndex(series2),2); | |
|
364 | ||
|
365 | dataSet.removeSeries(series2); | |
|
366 | QCOMPARE(dataSet.seriesIndex(series0),0); | |
|
367 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
368 | QCOMPARE(dataSet.seriesIndex(series2),-1); | |
|
369 | ||
|
370 | dataSet.removeSeries(series0); | |
|
371 | QCOMPARE(dataSet.seriesIndex(series0),-1); | |
|
372 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
373 | QCOMPARE(dataSet.seriesIndex(series2),-1); | |
|
374 | ||
|
375 | dataSet.addSeries(series2); | |
|
376 | QCOMPARE(dataSet.seriesIndex(series0),-1); | |
|
377 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
378 | QCOMPARE(dataSet.seriesIndex(series2),0); | |
|
379 | ||
|
380 | dataSet.addSeries(series0); | |
|
381 | QCOMPARE(dataSet.seriesIndex(series0),2); | |
|
382 | QCOMPARE(dataSet.seriesIndex(series1),1); | |
|
383 | QCOMPARE(dataSet.seriesIndex(series2),0); | |
|
384 | ||
|
301 | 385 | } |
|
302 | 386 | |
|
303 | 387 | void tst_ChartDataSet::domain_data() |
@@ -230,7 +230,6 void MainWidget::addSeries(QString seriesName, int columnCount, int rowCount, QS | |||
|
230 | 230 | for (int j(0); j < data.count(); j ++) { |
|
231 | 231 | QList<qreal> column = data.at(j); |
|
232 | 232 | QLineSeries *series = new QLineSeries(); |
|
233 | series->setName("line" + QString::number(j)); | |
|
234 | 233 | for (int i(0); i < column.count(); i++) |
|
235 | 234 | series->append(i, column.at(i)); |
|
236 | 235 | m_chart->addSeries(series); |
@@ -243,14 +242,12 void MainWidget::addSeries(QString seriesName, int columnCount, int rowCount, QS | |||
|
243 | 242 | for (int i(0); i < column.count(); i++) |
|
244 | 243 | lineSeries->append(i, column.at(i)); |
|
245 | 244 | QAreaSeries *areaSeries = new QAreaSeries(lineSeries); |
|
246 | areaSeries->setName("area" + QString::number(j)); | |
|
247 | 245 | m_chart->addSeries(areaSeries); |
|
248 | 246 | } |
|
249 | 247 | } else if (seriesName == "Scatter") { |
|
250 | 248 | for (int j(0); j < data.count(); j++) { |
|
251 | 249 | QList<qreal> column = data.at(j); |
|
252 | 250 | QScatterSeries *series = new QScatterSeries(); |
|
253 | series->setName("scatter" + QString::number(j)); | |
|
254 | 251 | for (int i(0); i < column.count(); i++) |
|
255 | 252 | series->append(i, column.at(i)); |
|
256 | 253 | m_chart->addSeries(series); |
General Comments 0
You need to be logged in to leave comments.
Login now