@@ -303,11 +303,13 void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation ori | |||||
303 | //create one axis for all |
|
303 | //create one axis for all | |
304 |
|
304 | |||
305 | addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft); |
|
305 | addAxis(axis,orientation==Qt::Horizontal?Qt::AlignBottom:Qt::AlignLeft); | |
306 |
|
306 | qreal min = 0; | ||
|
307 | qreal max = 0; | |||
|
308 | findMinMaxForSeries(m_seriesList,orientation,min,max); | |||
307 | foreach(QAbstractSeries *s, m_seriesList) { |
|
309 | foreach(QAbstractSeries *s, m_seriesList) { | |
308 | attachAxis(s,axis); |
|
310 | attachAxis(s,axis); | |
309 | } |
|
311 | } | |
310 |
|
312 | axis->setRange(min,max); | ||
311 | } |
|
313 | } | |
312 | else if (!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) { |
|
314 | else if (!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) { | |
313 | //create separate axis |
|
315 | //create separate axis | |
@@ -321,6 +323,21 void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type, Qt::Orientation ori | |||||
321 | } |
|
323 | } | |
322 | } |
|
324 | } | |
323 |
|
325 | |||
|
326 | void ChartDataSet::findMinMaxForSeries(QList<QAbstractSeries *> series,Qt::Orientations orientation, qreal &min, qreal &max) | |||
|
327 | { | |||
|
328 | Q_ASSERT(!series.isEmpty()); | |||
|
329 | ||||
|
330 | AbstractDomain* domain = series.first()->d_ptr->domain(); | |||
|
331 | min = (orientation == Qt::Vertical) ? domain->minY() : domain->minX(); | |||
|
332 | max = (orientation == Qt::Vertical) ? domain->maxY() : domain->maxX(); | |||
|
333 | ||||
|
334 | for(int i = 1; i< series.size(); i++) { | |||
|
335 | AbstractDomain* domain = series[i]->d_ptr->domain(); | |||
|
336 | min = qMin((orientation == Qt::Vertical) ? domain->minY() : domain->minX(), min); | |||
|
337 | max = qMax((orientation == Qt::Vertical) ? domain->maxY() : domain->maxX(), max); | |||
|
338 | } | |||
|
339 | } | |||
|
340 | ||||
324 | void ChartDataSet::deleteAllSeries() |
|
341 | void ChartDataSet::deleteAllSeries() | |
325 | { |
|
342 | { | |
326 | foreach (QAbstractSeries *s , m_seriesList){ |
|
343 | foreach (QAbstractSeries *s , m_seriesList){ |
@@ -80,6 +80,7 private: | |||||
80 | AbstractDomain* createDomain(AbstractDomain::DomainType type); |
|
80 | AbstractDomain* createDomain(AbstractDomain::DomainType type); | |
81 | void deleteAllAxes(); |
|
81 | void deleteAllAxes(); | |
82 | void deleteAllSeries(); |
|
82 | void deleteAllSeries(); | |
|
83 | void findMinMaxForSeries(QList<QAbstractSeries *> series,Qt::Orientations orientation, qreal &min, qreal &max); | |||
83 | private: |
|
84 | private: | |
84 | QList<QAbstractSeries *> m_seriesList; |
|
85 | QList<QAbstractSeries *> m_seriesList; | |
85 | QList<QAbstractAxis *> m_axisList; |
|
86 | QList<QAbstractAxis *> m_axisList; |
@@ -99,7 +99,8 private slots: | |||||
99 | void zoomIn(); |
|
99 | void zoomIn(); | |
100 | void zoomOut_data(); |
|
100 | void zoomOut_data(); | |
101 | void zoomOut(); |
|
101 | void zoomOut(); | |
102 |
|
102 | void createDefaultAxesForLineSeries_data(); | ||
|
103 | void createDefaultAxesForLineSeries(); | |||
103 | private: |
|
104 | private: | |
104 | void createTestData(); |
|
105 | void createTestData(); | |
105 |
|
106 | |||
@@ -793,6 +794,83 void tst_QChart::zoomOut() | |||||
793 |
|
794 | |||
794 | } |
|
795 | } | |
795 |
|
796 | |||
|
797 | void tst_QChart::createDefaultAxesForLineSeries_data() | |||
|
798 | { | |||
|
799 | QTest::addColumn<qreal>("series1minX"); | |||
|
800 | QTest::addColumn<qreal>("series1midX"); | |||
|
801 | QTest::addColumn<qreal>("series1maxX"); | |||
|
802 | QTest::addColumn<qreal>("series2minX"); | |||
|
803 | QTest::addColumn<qreal>("series2midX"); | |||
|
804 | QTest::addColumn<qreal>("series2maxX"); | |||
|
805 | QTest::addColumn<qreal>("overallminX"); | |||
|
806 | QTest::addColumn<qreal>("overallmaxX"); | |||
|
807 | QTest::addColumn<qreal>("series1minY"); | |||
|
808 | QTest::addColumn<qreal>("series1midY"); | |||
|
809 | QTest::addColumn<qreal>("series1maxY"); | |||
|
810 | QTest::addColumn<qreal>("series2minY"); | |||
|
811 | QTest::addColumn<qreal>("series2midY"); | |||
|
812 | QTest::addColumn<qreal>("series2maxY"); | |||
|
813 | QTest::addColumn<qreal>("overallminY"); | |||
|
814 | QTest::addColumn<qreal>("overallmaxY"); | |||
|
815 | QTest::newRow("series1hasMinAndMax") << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0 | |||
|
816 | << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0; | |||
|
817 | QTest::newRow("series2hasMinAndMax") << (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0 | |||
|
818 | << (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0; | |||
|
819 | QTest::newRow("series1hasMinAndMaxX_series2hasMinAndMaxY") << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0 | |||
|
820 | << (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0; | |||
|
821 | QTest::newRow("series1hasMin_series2hasMax") << (qreal)1.0 << (qreal)2.0 << (qreal)2.9 << (qreal)1.1 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0 | |||
|
822 | << (qreal)1.0 << (qreal)2.0 << (qreal)2.9 << (qreal)1.1 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0; | |||
|
823 | } | |||
|
824 | ||||
|
825 | void tst_QChart::createDefaultAxesForLineSeries() | |||
|
826 | { | |||
|
827 | QFETCH(qreal, series1minX); | |||
|
828 | QFETCH(qreal, series1midX); | |||
|
829 | QFETCH(qreal, series1maxX); | |||
|
830 | QFETCH(qreal, series2minX); | |||
|
831 | QFETCH(qreal, series2midX); | |||
|
832 | QFETCH(qreal, series2maxX); | |||
|
833 | QFETCH(qreal, series1minY); | |||
|
834 | QFETCH(qreal, series1midY); | |||
|
835 | QFETCH(qreal, series1maxY); | |||
|
836 | QFETCH(qreal, series2minY); | |||
|
837 | QFETCH(qreal, series2midY); | |||
|
838 | QFETCH(qreal, series2maxY); | |||
|
839 | QFETCH(qreal, overallminX); | |||
|
840 | QFETCH(qreal, overallmaxX); | |||
|
841 | QFETCH(qreal, overallminY); | |||
|
842 | QFETCH(qreal, overallmaxY); | |||
|
843 | QLineSeries* series1 = new QLineSeries(this); | |||
|
844 | series1->append(series1minX, series1minY); | |||
|
845 | series1->append(series1midX, series1midY); | |||
|
846 | series1->append(series1maxX, series1maxY); | |||
|
847 | QLineSeries* series2 = new QLineSeries(this); | |||
|
848 | series2->append(series2minX, series2minY); | |||
|
849 | series2->append(series2midX, series2midY); | |||
|
850 | series2->append(series2maxX, series2maxY); | |||
|
851 | QChart chart; | |||
|
852 | chart.addSeries(series1); | |||
|
853 | chart.addSeries(series2); | |||
|
854 | chart.createDefaultAxes(); | |||
|
855 | QValueAxis *xAxis = (QValueAxis *)chart.axisX(); | |||
|
856 | QCOMPARE(xAxis->min(), overallminX); | |||
|
857 | QCOMPARE(xAxis->max(), overallmaxX); | |||
|
858 | QValueAxis *yAxis = (QValueAxis *)chart.axisY(); | |||
|
859 | QCOMPARE(yAxis->min(), overallminY); | |||
|
860 | QCOMPARE(yAxis->max(), overallmaxY); | |||
|
861 | QLineSeries *series3 = new QLineSeries(this); | |||
|
862 | // Numbers clearly out of existing range | |||
|
863 | series3->append(0, 0); | |||
|
864 | series3->append(100, 100); | |||
|
865 | // Adding a new series should not change the axes as they have not been told to update | |||
|
866 | chart.addSeries(series3); | |||
|
867 | QCOMPARE(xAxis->min(), overallminX); | |||
|
868 | QCOMPARE(xAxis->max(), overallmaxX); | |||
|
869 | QCOMPARE(yAxis->min(), overallminY); | |||
|
870 | QCOMPARE(yAxis->max(), overallmaxY); | |||
|
871 | ||||
|
872 | } | |||
|
873 | ||||
796 | QTEST_MAIN(tst_QChart) |
|
874 | QTEST_MAIN(tst_QChart) | |
797 | #include "tst_qchart.moc" |
|
875 | #include "tst_qchart.moc" | |
798 |
|
876 |
General Comments 0
You need to be logged in to leave comments.
Login now