##// END OF EJS Templates
Fixed range handling in categoryAxis
Marek Rosa -
r1846:080956abe37a
parent child
Show More
@@ -47,18 +47,19 QVector<qreal> ChartCategoryAxisX::calculateLayout() const
47 47 if (tickCount < 2)
48 48 return points;
49 49
50 points.resize(tickCount);
51
52 qreal scale = m_rect.width() / axis->max();
53 for (int i = 0; i < tickCount; ++i)
54 if (i < tickCount - 1) {
55 int x = axis->categoryStart(axis->categoriesLabels().at(i)) * scale + m_rect.left();
56 points[i] = x;
57 } else {
58 int x = axis->categoryEnd(axis->categoriesLabels().at(i - 1)) * scale + m_rect.left();
59 points[i] = x;
60 }
61
50 qreal range = axis->max() - axis->min();
51 if (range > 0) {
52 points.resize(tickCount);
53 qreal scale = m_rect.width() / range;
54 for (int i = 0; i < tickCount; ++i)
55 if (i < tickCount - 1) {
56 int x = (axis->categoryStart(axis->categoriesLabels().at(i)) - axis->min()) * scale + m_rect.left();
57 points[i] = x;
58 } else {
59 int x = (axis->categoryEnd(axis->categoriesLabels().at(i - 1)) - axis->min()) * scale + m_rect.left();
60 points[i] = x;
61 }
62 }
62 63 return points;
63 64 }
64 65
@@ -47,17 +47,19 QVector<qreal> ChartCategoryAxisY::calculateLayout() const
47 47 if (tickCount < 2)
48 48 return points;
49 49
50 points.resize(tickCount);
51
52 qreal scale = m_rect.height() / axis->max();
53 for (int i = 0; i < tickCount; ++i)
54 if (i < tickCount - 1) {
55 int y = -axis->categoryStart(axis->categoriesLabels().at(i)) * scale + m_rect.bottom();
56 points[i] = y;
57 } else {
58 int y = -axis->categoryEnd(axis->categoriesLabels().at(i - 1)) * scale + m_rect.bottom();
59 points[i] = y;
60 }
50 qreal range = axis->max() - axis->min();
51 if (range > 0) {
52 points.resize(tickCount);
53 qreal scale = m_rect.height() / range;
54 for (int i = 0; i < tickCount; ++i)
55 if (i < tickCount - 1) {
56 int y = -(axis->categoryStart(axis->categoriesLabels().at(i)) - axis->min()) * scale + m_rect.bottom();
57 points[i] = y;
58 } else {
59 int y = -(axis->categoryEnd(axis->categoriesLabels().at(i - 1)) - axis->min()) * scale + m_rect.bottom();
60 points[i] = y;
61 }
62 }
61 63
62 64 return points;
63 65 }
@@ -59,7 +59,7 private slots:
59 59 void interval();
60 60
61 61 private:
62 QCategoryAxis* m_intervalsaxis;
62 QCategoryAxis* m_categoryaxis;
63 63 QLineSeries* m_series;
64 64 };
65 65
@@ -73,10 +73,10 void tst_QCategoryAxis::cleanupTestCase()
73 73
74 74 void tst_QCategoryAxis::init()
75 75 {
76 m_intervalsaxis = new QCategoryAxis();
76 m_categoryaxis = new QCategoryAxis();
77 77 m_series = new QLineSeries();
78 78 *m_series << QPointF(-100, -100) << QPointF(0, 0) << QPointF(100, 100);
79 tst_QAbstractAxis::init(m_intervalsaxis, m_series);
79 tst_QAbstractAxis::init(m_categoryaxis, m_series);
80 80 m_chart->addSeries(m_series);
81 81 m_chart->createDefaultAxes();
82 82 }
@@ -84,9 +84,9 void tst_QCategoryAxis::init()
84 84 void tst_QCategoryAxis::cleanup()
85 85 {
86 86 delete m_series;
87 delete m_intervalsaxis;
87 delete m_categoryaxis;
88 88 m_series = 0;
89 m_intervalsaxis = 0;
89 m_categoryaxis = 0;
90 90 tst_QAbstractAxis::cleanup();
91 91 }
92 92
@@ -98,16 +98,16 void tst_QCategoryAxis::qcategoryaxis()
98 98 {
99 99 qabstractaxis();
100 100
101 QVERIFY(qFuzzyIsNull(m_intervalsaxis->max()));
102 QVERIFY(qFuzzyIsNull(m_intervalsaxis->min()));
103 QCOMPARE(m_intervalsaxis->type(), QAbstractAxis::AxisTypeCategory);
101 QVERIFY(qFuzzyIsNull(m_categoryaxis->max()));
102 QVERIFY(qFuzzyIsNull(m_categoryaxis->min()));
103 QCOMPARE(m_categoryaxis->type(), QAbstractAxis::AxisTypeCategory);
104 104
105 m_chart->setAxisX(m_intervalsaxis, m_series);
105 m_chart->setAxisX(m_categoryaxis, m_series);
106 106 m_view->show();
107 107 QTest::qWaitForWindowShown(m_view);
108 108
109 QVERIFY(!qFuzzyIsNull(m_intervalsaxis->max()));
110 QVERIFY(!qFuzzyIsNull(m_intervalsaxis->min()));
109 QVERIFY(!qFuzzyIsNull(m_categoryaxis->max()));
110 QVERIFY(!qFuzzyIsNull(m_categoryaxis->min()));
111 111 }
112 112
113 113 void tst_QCategoryAxis::max_raw_data()
@@ -122,12 +122,12 void tst_QCategoryAxis::max_raw()
122 122 {
123 123 QFETCH(qreal, max);
124 124
125 QSignalSpy spy0(m_intervalsaxis, SIGNAL(maxChanged(qreal)));
126 QSignalSpy spy1(m_intervalsaxis, SIGNAL(minChanged(qreal)));
127 QSignalSpy spy2(m_intervalsaxis, SIGNAL(rangeChanged(qreal, qreal)));
125 QSignalSpy spy0(m_categoryaxis, SIGNAL(maxChanged(qreal)));
126 QSignalSpy spy1(m_categoryaxis, SIGNAL(minChanged(qreal)));
127 QSignalSpy spy2(m_categoryaxis, SIGNAL(rangeChanged(qreal, qreal)));
128 128
129 m_intervalsaxis->setMax(max);
130 QVERIFY2(qFuzzyIsNull(m_intervalsaxis->max() - max), "Not equal");
129 m_categoryaxis->setMax(max);
130 QVERIFY2(qFuzzyIsNull(m_categoryaxis->max() - max), "Not equal");
131 131
132 132 QCOMPARE(spy0.count(), 1);
133 133 QCOMPARE(spy1.count(), 0);
@@ -141,7 +141,7 void tst_QCategoryAxis::max_data()
141 141
142 142 void tst_QCategoryAxis::max()
143 143 {
144 m_chart->setAxisX(m_intervalsaxis, m_series);
144 m_chart->setAxisX(m_categoryaxis, m_series);
145 145 m_view->show();
146 146 QTest::qWaitForWindowShown(m_view);
147 147 max_raw();
@@ -170,12 +170,12 void tst_QCategoryAxis::min_raw()
170 170 {
171 171 QFETCH(qreal, min);
172 172
173 QSignalSpy spy0(m_intervalsaxis, SIGNAL(maxChanged(qreal)));
174 QSignalSpy spy1(m_intervalsaxis, SIGNAL(minChanged(qreal)));
175 QSignalSpy spy2(m_intervalsaxis, SIGNAL(rangeChanged(qreal, qreal)));
173 QSignalSpy spy0(m_categoryaxis, SIGNAL(maxChanged(qreal)));
174 QSignalSpy spy1(m_categoryaxis, SIGNAL(minChanged(qreal)));
175 QSignalSpy spy2(m_categoryaxis, SIGNAL(rangeChanged(qreal, qreal)));
176 176
177 m_intervalsaxis->setMin(min);
178 QVERIFY2(qFuzzyIsNull(m_intervalsaxis->min() - min), "Not equal");
177 m_categoryaxis->setMin(min);
178 QVERIFY2(qFuzzyIsNull(m_categoryaxis->min() - min), "Not equal");
179 179
180 180 QCOMPARE(spy0.count(), 0);
181 181 QCOMPARE(spy1.count(), 1);
@@ -189,7 +189,7 void tst_QCategoryAxis::min_data()
189 189
190 190 void tst_QCategoryAxis::min()
191 191 {
192 m_chart->setAxisX(m_intervalsaxis, m_series);
192 m_chart->setAxisX(m_categoryaxis, m_series);
193 193 m_view->show();
194 194 QTest::qWaitForWindowShown(m_view);
195 195 min_raw();
@@ -213,6 +213,9 void tst_QCategoryAxis::range_raw_data()
213 213 QTest::newRow("1.0 - 101.0") << -1.0 << 101.0;
214 214 QTest::newRow("25.0 - 75.0") << 25.0 << 75.0;
215 215 QTest::newRow("101.0") << 40.0 << 60.0;
216 QTest::newRow("-35.0 - 0.0") << -35.0 << 10.0;
217 QTest::newRow("-35.0 - 0.0") << -35.0 << -15.0;
218 QTest::newRow("0.0 - 0.0") << -0.1 << 0.1;
216 219 }
217 220
218 221 void tst_QCategoryAxis::range_raw()
@@ -220,13 +223,13 void tst_QCategoryAxis::range_raw()
220 223 QFETCH(qreal, min);
221 224 QFETCH(qreal, max);
222 225
223 QSignalSpy spy0(m_intervalsaxis, SIGNAL(maxChanged(qreal)));
224 QSignalSpy spy1(m_intervalsaxis, SIGNAL(minChanged(qreal)));
225 QSignalSpy spy2(m_intervalsaxis, SIGNAL(rangeChanged(qreal, qreal)));
226 QSignalSpy spy0(m_categoryaxis, SIGNAL(maxChanged(qreal)));
227 QSignalSpy spy1(m_categoryaxis, SIGNAL(minChanged(qreal)));
228 QSignalSpy spy2(m_categoryaxis, SIGNAL(rangeChanged(qreal, qreal)));
226 229
227 m_intervalsaxis->setRange(min, max);
228 QVERIFY2(qFuzzyIsNull(m_intervalsaxis->min() - min), "Min not equal");
229 QVERIFY2(qFuzzyIsNull(m_intervalsaxis->max() - max), "Max not equal");
230 m_categoryaxis->setRange(min, max);
231 QVERIFY2(qFuzzyIsNull(m_categoryaxis->min() - min), "Min not equal");
232 QVERIFY2(qFuzzyIsNull(m_categoryaxis->max() - max), "Max not equal");
230 233
231 234 QCOMPARE(spy0.count(), 1);
232 235 QCOMPARE(spy1.count(), 1);
@@ -240,7 +243,7 void tst_QCategoryAxis::range_data()
240 243
241 244 void tst_QCategoryAxis::range()
242 245 {
243 m_chart->setAxisX(m_intervalsaxis, m_series);
246 m_chart->setAxisX(m_categoryaxis, m_series);
244 247 m_view->show();
245 248 QTest::qWaitForWindowShown(m_view);
246 249 range_raw();
@@ -265,38 +268,38 void tst_QCategoryAxis::interval_data()
265 268 void tst_QCategoryAxis::interval()
266 269 {
267 270 // append one correct interval
268 m_intervalsaxis->append("first", (qreal)45);
269 QCOMPARE(m_intervalsaxis->categoryStart("first"), (qreal)0);
270 QCOMPARE(m_intervalsaxis->categoryEnd("first"), (qreal)45);
271 m_categoryaxis->append("first", (qreal)45);
272 QCOMPARE(m_categoryaxis->categoryStart("first"), (qreal)0);
273 QCOMPARE(m_categoryaxis->categoryEnd("first"), (qreal)45);
271 274
272 275 // append one more correct interval
273 m_intervalsaxis->append("second", (qreal)75);
274 QCOMPARE(m_intervalsaxis->categoryStart("second"), (qreal)45);
275 QCOMPARE(m_intervalsaxis->categoryEnd("second"), (qreal)75);
276 m_categoryaxis->append("second", (qreal)75);
277 QCOMPARE(m_categoryaxis->categoryStart("second"), (qreal)45);
278 QCOMPARE(m_categoryaxis->categoryEnd("second"), (qreal)75);
276 279
277 280 // append one incorrect interval
278 m_intervalsaxis->append("third", (qreal)15);
279 QCOMPARE(m_intervalsaxis->count(), 2);
280 QCOMPARE(m_intervalsaxis->categoryEnd(m_intervalsaxis->categoriesLabels().last()), (qreal)75);
281 m_categoryaxis->append("third", (qreal)15);
282 QCOMPARE(m_categoryaxis->count(), 2);
283 QCOMPARE(m_categoryaxis->categoryEnd(m_categoryaxis->categoriesLabels().last()), (qreal)75);
281 284 // QCOMPARE(intervalMax("first"), (qreal)75);
282 285
283 286 // append one more correct interval
284 m_intervalsaxis->append("third", (qreal)100);
285 QCOMPARE(m_intervalsaxis->count(), 3);
286 QCOMPARE(m_intervalsaxis->categoryStart("third"), (qreal)75);
287 QCOMPARE(m_intervalsaxis->categoryEnd("third"), (qreal)100);
287 m_categoryaxis->append("third", (qreal)100);
288 QCOMPARE(m_categoryaxis->count(), 3);
289 QCOMPARE(m_categoryaxis->categoryStart("third"), (qreal)75);
290 QCOMPARE(m_categoryaxis->categoryEnd("third"), (qreal)100);
288 291
289 292 // remove one interval
290 m_intervalsaxis->remove("first");
291 QCOMPARE(m_intervalsaxis->count(), 2);
292 QCOMPARE(m_intervalsaxis->categoryStart("second"), (qreal)0); // second interval should extend to firstInterval minimum
293 QCOMPARE(m_intervalsaxis->categoryEnd("second"), (qreal)75);
293 m_categoryaxis->remove("first");
294 QCOMPARE(m_categoryaxis->count(), 2);
295 QCOMPARE(m_categoryaxis->categoryStart("second"), (qreal)0); // second interval should extend to firstInterval minimum
296 QCOMPARE(m_categoryaxis->categoryEnd("second"), (qreal)75);
294 297
295 298 // remove one interval
296 m_intervalsaxis->replaceLabel("second", "replaced");
297 QCOMPARE(m_intervalsaxis->count(), 2);
298 QCOMPARE(m_intervalsaxis->categoryStart("replaced"), (qreal)0); // second interval should extend to firstInterval minimum
299 QCOMPARE(m_intervalsaxis->categoryEnd("replaced"), (qreal)75);
299 m_categoryaxis->replaceLabel("second", "replaced");
300 QCOMPARE(m_categoryaxis->count(), 2);
301 QCOMPARE(m_categoryaxis->categoryStart("replaced"), (qreal)0); // second interval should extend to firstInterval minimum
302 QCOMPARE(m_categoryaxis->categoryEnd("replaced"), (qreal)75);
300 303 }
301 304
302 305 QTEST_MAIN(tst_QCategoryAxis)
General Comments 0
You need to be logged in to leave comments. Login now