diff --git a/demos/qmlf1legends/qml/qmlf1legends/main.qml b/demos/qmlf1legends/qml/qmlf1legends/main.qml index 49d0742..5da557a 100644 --- a/demos/qmlf1legends/qml/qmlf1legends/main.qml +++ b/demos/qmlf1legends/qml/qmlf1legends/main.qml @@ -61,15 +61,13 @@ Rectangle { if (currentIndex < speedsXml.count) { // Check if there is a series for the data already (we are using driver name to identify series) var lineSeries = chartView.series(speedsXml.get(currentIndex).driver); - if (!lineSeries) + if (!lineSeries){ lineSeries = chartView.createSeries(ChartView.SeriesTypeLine, speedsXml.get(currentIndex).driver); - - if (currentIndex < 3) { chartView.createDefaultAxes(); chartView.axisY(lineSeries).min = 0; chartView.axisY(lineSeries).max = 250 } - + lineSeries.append(currentIndex, speedsXml.get(currentIndex).speed); // Make the x-axis range dynamic diff --git a/examples/horizontalbarchart/main.cpp b/examples/horizontalbarchart/main.cpp index d1f4b34..1dcff73 100644 --- a/examples/horizontalbarchart/main.cpp +++ b/examples/horizontalbarchart/main.cpp @@ -70,7 +70,6 @@ int main(int argc, char *argv[]) categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun"; QBarCategoriesAxis* axis = new QBarCategoriesAxis(); axis->append(categories); - chart->createDefaultAxes(); chart->setAxisY(axis,series); //![4] diff --git a/src/areachart/qareaseries.cpp b/src/areachart/qareaseries.cpp index 22b7eeb..88a3fdf 100644 --- a/src/areachart/qareaseries.cpp +++ b/src/areachart/qareaseries.cpp @@ -380,23 +380,14 @@ QList QAreaSeriesPrivate::createLegendMarker(QLegend* legend) } -void QAreaSeriesPrivate::initializeAxisX(QAbstractAxis* axis) +void QAreaSeriesPrivate::initializeAxis(QAbstractAxis* axis) { Q_UNUSED(axis); } -void QAreaSeriesPrivate::initializeAxisY(QAbstractAxis* axis) -{ - Q_UNUSED(axis); -} - -QAbstractAxis::AxisType QAreaSeriesPrivate::defaultAxisXType() const -{ - return QAbstractAxis::AxisTypeValues; -} - -QAbstractAxis::AxisType QAreaSeriesPrivate::defaultAxisYType() const +QAbstractAxis::AxisType QAreaSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { + Q_UNUSED(orientation); return QAbstractAxis::AxisTypeValues; } diff --git a/src/areachart/qareaseries_p.h b/src/areachart/qareaseries_p.h index c15441f..cf3a8f4 100644 --- a/src/areachart/qareaseries_p.h +++ b/src/areachart/qareaseries_p.h @@ -46,10 +46,8 @@ public: void scaleDomain(Domain& domain); Chart* createGraphics(ChartPresenter* presenter); QList createLegendMarker(QLegend* legend); - void initializeAxisX(QAbstractAxis* axis); - void initializeAxisY(QAbstractAxis* axis); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + void initializeAxis(QAbstractAxis* axis); + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; Q_SIGNALS: void updated(); diff --git a/src/axis/qabstractaxis.cpp b/src/axis/qabstractaxis.cpp index ca960bd..f7f7294 100644 --- a/src/axis/qabstractaxis.cpp +++ b/src/axis/qabstractaxis.cpp @@ -597,6 +597,12 @@ void QAbstractAxis::setRange(const QVariant &min, const QVariant &max) d_ptr->setRange(min,max); } + +Qt::Orientation QAbstractAxis::orientation() +{ + return d_ptr->m_orientation; +} + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q): diff --git a/src/axis/qabstractaxis.h b/src/axis/qabstractaxis.h index b8febf6..7ed52c8 100644 --- a/src/axis/qabstractaxis.h +++ b/src/axis/qabstractaxis.h @@ -108,6 +108,8 @@ public: void setShadesBorderColor(QColor color); QColor shadesBorderColor() const; + Qt::Orientation orientation(); + //range handling void setMin(const QVariant &min); void setMax(const QVariant &max); diff --git a/src/axis/qabstractaxis_p.h b/src/axis/qabstractaxis_p.h index 89f3b63..2b43d04 100644 --- a/src/axis/qabstractaxis_p.h +++ b/src/axis/qabstractaxis_p.h @@ -51,7 +51,7 @@ Q_SIGNALS: public: virtual ChartAxis* createGraphics(ChartPresenter* presenter) = 0; virtual void emitRange() = 0; - virtual void initialize(Domain* domain) = 0; + virtual void intializeDomain(Domain* domain) = 0; protected: virtual void setMin(const QVariant &min) = 0; diff --git a/src/axis/qbarcategoriesaxis.cpp b/src/axis/qbarcategoriesaxis.cpp index 23c18b7..aeac932 100644 --- a/src/axis/qbarcategoriesaxis.cpp +++ b/src/axis/qbarcategoriesaxis.cpp @@ -421,7 +421,7 @@ void QBarCategoriesAxisPrivate::emitRange() emit changed(m_min -0.5, m_max +0.5, qCeil(m_max + 0.5) -qCeil(m_min - 0.5) +1, false); } -void QBarCategoriesAxisPrivate::initialize(Domain* domain) +void QBarCategoriesAxisPrivate::intializeDomain(Domain* domain) { Q_UNUSED(domain); // TODO: this causes crash now. added to known issues. diff --git a/src/axis/qbarcategoriesaxis_p.h b/src/axis/qbarcategoriesaxis_p.h index e6eb6a6..16e7c77 100644 --- a/src/axis/qbarcategoriesaxis_p.h +++ b/src/axis/qbarcategoriesaxis_p.h @@ -47,7 +47,7 @@ public: public: ChartAxis* createGraphics(ChartPresenter* presenter); - void initialize(Domain* domain); + void intializeDomain(Domain* domain); void emitRange(); private: diff --git a/src/axis/qvaluesaxis.cpp b/src/axis/qvaluesaxis.cpp index 6f67881..8b3c4a1 100644 --- a/src/axis/qvaluesaxis.cpp +++ b/src/axis/qvaluesaxis.cpp @@ -171,7 +171,6 @@ qreal QValuesAxis::max() const void QValuesAxis::setRange(qreal min, qreal max) { Q_D(QValuesAxis); - bool changed = false; if (!qFuzzyIsNull(d->m_min - min)) { d->m_min = min; @@ -306,13 +305,17 @@ void QValuesAxisPrivate::emitRange() emit changed(m_min, m_max, m_ticksCount, m_niceNumbers); } -void QValuesAxisPrivate::initialize(Domain* domain) +void QValuesAxisPrivate::intializeDomain(Domain* domain) { if(qFuzzyCompare(m_max,m_min)) { if(m_orientation==Qt::Vertical){ - handleAxisRangeChanged(domain->minY(),domain->maxY(),domain->tickXCount()); + m_min = domain->minY(); + m_max = domain->maxY(); + m_ticksCount = domain->tickYCount(); }else{ - handleAxisRangeChanged(domain->minX(),domain->maxX(),domain->tickYCount()); + m_min = domain->minX(); + m_max = domain->maxX(); + m_ticksCount = domain->tickXCount(); } } } diff --git a/src/axis/qvaluesaxis_p.h b/src/axis/qvaluesaxis_p.h index 5844fbe..e3c5b17 100644 --- a/src/axis/qvaluesaxis_p.h +++ b/src/axis/qvaluesaxis_p.h @@ -50,7 +50,7 @@ public Q_SLOTS: public: ChartAxis* createGraphics(ChartPresenter* presenter); - void initialize(Domain* domain); + void intializeDomain(Domain* domain); void emitRange(); protected: diff --git a/src/barchart/qabstractbarseries.cpp b/src/barchart/qabstractbarseries.cpp index 56927c3..85df10a 100644 --- a/src/barchart/qabstractbarseries.cpp +++ b/src/barchart/qabstractbarseries.cpp @@ -702,9 +702,9 @@ bool QAbstractBarSeriesPrivate::insert(int index, QBarSet *set) return true; } -void QAbstractBarSeriesPrivate::initializeAxisX(QAbstractAxis* axis) +void QAbstractBarSeriesPrivate::initializeAxis(QAbstractAxis* axis) { - if(axis->type()==QAbstractAxis::AxisTypeCategories) + if(axis->type()==QAbstractAxis::AxisTypeCategories && axis->orientation()==Qt::Horizontal) { QBarCategoriesAxis* cataxis = qobject_cast(axis); Q_ASSERT(cataxis); @@ -715,20 +715,12 @@ void QAbstractBarSeriesPrivate::initializeAxisX(QAbstractAxis* axis) } } -void QAbstractBarSeriesPrivate::initializeAxisY(QAbstractAxis* axis) -{ - Q_UNUSED(axis) -} - -QAbstractAxis::AxisType QAbstractBarSeriesPrivate::defaultAxisXType() const +QAbstractAxis::AxisType QAbstractBarSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { + Q_UNUSED(orientation); return QAbstractAxis::AxisTypeNoAxis; } -QAbstractAxis::AxisType QAbstractBarSeriesPrivate::defaultAxisYType() const -{ - return QAbstractAxis::AxisTypeNoAxis; -} #include "moc_qabstractbarseries.cpp" #include "moc_qabstractbarseries_p.cpp" diff --git a/src/barchart/qabstractbarseries_p.h b/src/barchart/qabstractbarseries_p.h index 78835a9..d303761 100644 --- a/src/barchart/qabstractbarseries_p.h +++ b/src/barchart/qabstractbarseries_p.h @@ -56,10 +56,8 @@ public: Chart* createGraphics(ChartPresenter* presenter); QList createLegendMarker(QLegend* legend); - void initializeAxisX(QAbstractAxis* axis); - void initializeAxisY(QAbstractAxis* axis); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + void initializeAxis(QAbstractAxis* axis); + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; bool append(QBarSet *set); bool remove(QBarSet *set); diff --git a/src/barchart/qbarseries.cpp b/src/barchart/qbarseries.cpp index c487021..8292405 100644 --- a/src/barchart/qbarseries.cpp +++ b/src/barchart/qbarseries.cpp @@ -113,14 +113,12 @@ Chart* QBarSeriesPrivate::createGraphics(ChartPresenter* presenter) return bar; } -QAbstractAxis::AxisType QBarSeriesPrivate::defaultAxisXType() const +QAbstractAxis::AxisType QBarSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { - return QAbstractAxis::AxisTypeCategories; -} - -QAbstractAxis::AxisType QBarSeriesPrivate::defaultAxisYType() const -{ - return QAbstractAxis::AxisTypeValues; + if(orientation==Qt::Horizontal) + return QAbstractAxis::AxisTypeCategories; + else + return QAbstractAxis::AxisTypeValues; } #include "moc_qbarseries.cpp" diff --git a/src/barchart/qbarseries_p.h b/src/barchart/qbarseries_p.h index aed983c..701e081 100644 --- a/src/barchart/qbarseries_p.h +++ b/src/barchart/qbarseries_p.h @@ -43,8 +43,8 @@ public: Chart* createGraphics(ChartPresenter* presenter); void scaleDomain(Domain& domain); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; + private: Q_DECLARE_PUBLIC(QBarSeries) diff --git a/src/barchart/qhorizontalbarseries.cpp b/src/barchart/qhorizontalbarseries.cpp index b69d2f7..d11366b 100644 --- a/src/barchart/qhorizontalbarseries.cpp +++ b/src/barchart/qhorizontalbarseries.cpp @@ -2,6 +2,7 @@ #include "qhorizontalbarseries_p.h" #include "horizontalbarchartitem_p.h" #include "horizontalbaranimation_p.h" +#include "qbarcategoriesaxis.h" #include "chartdataset_p.h" #include "charttheme_p.h" @@ -62,17 +63,28 @@ Chart* QHorizontalBarSeriesPrivate::createGraphics(ChartPresenter* presenter) return bar; } -QAbstractAxis::AxisType QHorizontalBarSeriesPrivate::defaultAxisXType() const +void QHorizontalBarSeriesPrivate::initializeAxis(QAbstractAxis* axis) { - return QAbstractAxis::AxisTypeValues; + + if(axis->type()==QAbstractAxis::AxisTypeCategories && axis->orientation()==Qt::Vertical) + { + QBarCategoriesAxis* cataxis = qobject_cast(axis); + Q_ASSERT(cataxis); + QStringList categories; + for (int i(1); i < categoryCount()+1; i++) + categories << QString::number(i); + cataxis->append(categories); + } } -QAbstractAxis::AxisType QHorizontalBarSeriesPrivate::defaultAxisYType() const +QAbstractAxis::AxisType QHorizontalBarSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { - return QAbstractAxis::AxisTypeCategories; + if(orientation==Qt::Vertical) + return QAbstractAxis::AxisTypeCategories; + else + return QAbstractAxis::AxisTypeValues; } - #include "moc_qhorizontalbarseries.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/barchart/qhorizontalbarseries_p.h b/src/barchart/qhorizontalbarseries_p.h index 45b7402..8575bef 100644 --- a/src/barchart/qhorizontalbarseries_p.h +++ b/src/barchart/qhorizontalbarseries_p.h @@ -41,8 +41,8 @@ public: QHorizontalBarSeriesPrivate(QHorizontalBarSeries* q); Chart* createGraphics(ChartPresenter* presenter); void scaleDomain(Domain& domain); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + void initializeAxis(QAbstractAxis* axis); + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; private: Q_DECLARE_PUBLIC(QHorizontalBarSeries) diff --git a/src/barchart/qpercentbarseries.cpp b/src/barchart/qpercentbarseries.cpp index 85248c9..477e9ad 100644 --- a/src/barchart/qpercentbarseries.cpp +++ b/src/barchart/qpercentbarseries.cpp @@ -112,15 +112,14 @@ Chart* QPercentBarSeriesPrivate::createGraphics(ChartPresenter* presenter) return bar; } -QAbstractAxis::AxisType QPercentBarSeriesPrivate::defaultAxisXType() const +QAbstractAxis::AxisType QPercentBarSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { - return QAbstractAxis::AxisTypeCategories; + if(orientation==Qt::Horizontal) + return QAbstractAxis::AxisTypeCategories; + else + return QAbstractAxis::AxisTypeValues; } -QAbstractAxis::AxisType QPercentBarSeriesPrivate::defaultAxisYType() const -{ - return QAbstractAxis::AxisTypeValues; -} #include "moc_qpercentbarseries.cpp" diff --git a/src/barchart/qpercentbarseries_p.h b/src/barchart/qpercentbarseries_p.h index 671b87e..ffcd494 100644 --- a/src/barchart/qpercentbarseries_p.h +++ b/src/barchart/qpercentbarseries_p.h @@ -42,8 +42,7 @@ public: QPercentBarSeriesPrivate(QPercentBarSeries* q); void scaleDomain(Domain& domain); Chart* createGraphics(ChartPresenter* presenter); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; private: Q_DECLARE_PUBLIC(QPercentBarSeries) diff --git a/src/barchart/qstackedbarseries.cpp b/src/barchart/qstackedbarseries.cpp index caa2c8b..949c7da 100644 --- a/src/barchart/qstackedbarseries.cpp +++ b/src/barchart/qstackedbarseries.cpp @@ -114,14 +114,12 @@ Chart* QStackedBarSeriesPrivate::createGraphics(ChartPresenter* presenter) return bar; } -QAbstractAxis::AxisType QStackedBarSeriesPrivate::defaultAxisXType() const +QAbstractAxis::AxisType QStackedBarSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { - return QAbstractAxis::AxisTypeCategories; -} - -QAbstractAxis::AxisType QStackedBarSeriesPrivate::defaultAxisYType() const -{ - return QAbstractAxis::AxisTypeValues; + if(orientation==Qt::Horizontal) + return QAbstractAxis::AxisTypeCategories; + else + return QAbstractAxis::AxisTypeValues; } diff --git a/src/barchart/qstackedbarseries_p.h b/src/barchart/qstackedbarseries_p.h index fafb251..62b2507 100644 --- a/src/barchart/qstackedbarseries_p.h +++ b/src/barchart/qstackedbarseries_p.h @@ -42,8 +42,7 @@ public: QStackedBarSeriesPrivate(QStackedBarSeries* q); Chart* createGraphics(ChartPresenter* presenter); void scaleDomain(Domain& domain); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; private: Q_DECLARE_PUBLIC(QStackedBarSeries) diff --git a/src/chartdataset.cpp b/src/chartdataset.cpp index 7232d9e..161e2e6 100644 --- a/src/chartdataset.cpp +++ b/src/chartdataset.cpp @@ -31,8 +31,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE -ChartDataSet::ChartDataSet(QChart *parent):QObject(parent), - m_domainIndex(0) +ChartDataSet::ChartDataSet(QChart *parent):QObject(parent) { } @@ -51,14 +50,47 @@ void ChartDataSet::addSeries(QAbstractSeries* series) return; } + domain = new Domain(series); + m_seriesDomainMap.insert(series,domain); + series->d_ptr->scaleDomain(*domain); + + createSeriesIndex(series); + series->setParent(this); // take ownership + series->d_ptr->m_chart = qobject_cast(parent()); + series->d_ptr->m_dataset = this; - domain = new Domain(series); + emit seriesAdded(series,domain); - m_seriesDomainMap.insert(series,domain); +} + +void ChartDataSet::removeSeries(QAbstractSeries* series) +{ + + if(!m_seriesDomainMap.contains(series)) { + qWarning()<<"Can not remove series. Series not found on the chart."; + return; + } + + emit seriesRemoved(series); + + Domain* domain = m_seriesDomainMap.take(series); + delete domain; + domain = 0; + + removeSeriesIndex(series); + + series->setParent(0); + series->d_ptr->m_chart = 0; + series->d_ptr->m_dataset = 0; + + removeAxes(series); +} - series->d_ptr->scaleDomain(*domain); + +void ChartDataSet::createSeriesIndex(QAbstractSeries* series) +{ QMapIterator i(m_indexSeriesMap); int key=0; @@ -71,12 +103,13 @@ void ChartDataSet::addSeries(QAbstractSeries* series) } m_indexSeriesMap.insert(key,series); +} - series->d_ptr->m_chart = qobject_cast(parent()); - series->d_ptr->m_dataset = this; - - emit seriesAdded(series,domain); - +void ChartDataSet::removeSeriesIndex(QAbstractSeries* series) +{ + int key = seriesIndex(series); + Q_ASSERT(key!=-1); + m_indexSeriesMap.remove(key); } void ChartDataSet::createDefaultAxes() @@ -100,62 +133,43 @@ void ChartDataSet::createDefaultAxes() QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key()); QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key()); if(axisX) typeX&=axisX->type(); - else typeX|=i.key()->d_ptr->defaultAxisXType(); + else typeX|=i.key()->d_ptr->defaultAxisType(Qt::Horizontal); if(axisY) typeY&=axisY->type(); - else typeY|=i.key()->d_ptr->defaultAxisYType(); + else typeY|=i.key()->d_ptr->defaultAxisType(Qt::Vertical); } + createAxes(typeX,Qt::Horizontal); + createAxes(typeY,Qt::Vertical); +} - if(typeX.testFlag(QAbstractAxis::AxisTypeValues) && typeX.testFlag(QAbstractAxis::AxisTypeCategories)) +void ChartDataSet::createAxes(QAbstractAxis::AxisTypes type,Qt::Orientation orientation) +{ + QMapIterator i(m_seriesDomainMap); + + if(type.testFlag(QAbstractAxis::AxisTypeValues) && type.testFlag(QAbstractAxis::AxisTypeCategories)) { - i.toFront(); while (i.hasNext()) { - i.next(); - QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisXType()); - if(!axis) continue; - i.key()->d_ptr->initializeAxisX(axis); - addAxisX(axis,i.key()); - emit axisAdded(axis,i.value()); + i.next(); + QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisType(orientation),orientation); + if(!axis) continue; + initializeAxis(axis,i.key()); + emit axisAdded(axis,i.value()); } - }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){ - QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeX))); - i.toFront(); - while (i.hasNext()) { - i.next(); - i.key()->d_ptr->initializeAxisX(axis); - addAxisX(axis,i.key()); - } - emit axisAdded(axis,i.value()); - } - - if(typeY.testFlag(QAbstractAxis::AxisTypeValues) && typeY.testFlag(QAbstractAxis::AxisTypeCategories)) - { + else if(!type.testFlag(QAbstractAxis::AxisTypeNoAxis)) { + QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(type)),orientation); i.toFront(); while (i.hasNext()) { - i.next(); - QAbstractAxis* axis = createAxis(i.key()->d_ptr->defaultAxisYType()); - i.key()->d_ptr->initializeAxisY(axis); - addAxisY(axis,i.key()); - emit axisAdded(axis,i.value()); + i.next(); + initializeAxis(axis,i.key()); } - - }else if(!typeY.testFlag(QAbstractAxis::AxisTypeNoAxis)){ - QAbstractAxis* axis = createAxis(QAbstractAxis::AxisType(int(typeY))); - i.toFront(); - while (i.hasNext()) { - i.next(); - i.key()->d_ptr->initializeAxisY(axis); - addAxisY(axis,i.key()); - } - emit axisAdded(axis,i.value()); - + emit axisAdded(axis,i.value()); } } -QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type) +QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type,Qt::Orientation orientation) { QAbstractAxis* axis =0; @@ -171,50 +185,28 @@ QAbstractAxis* ChartDataSet::createAxis(QAbstractAxis::AxisType type) break; } - return axis; -} - -void ChartDataSet::addAxisX(QAbstractAxis* axis,QAbstractSeries* series) { - Domain* domain = m_seriesDomainMap.value(series); - axis->d_ptr->m_orientation=Qt::Horizontal; - //TODO:axis->d_ptr->initialize(domain); - QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool))); - QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); - m_seriesAxisXMap.insert(series,axis); -} + if(axis) + axis->d_ptr->m_orientation=orientation; -void ChartDataSet::addAxisY(QAbstractAxis* axis,QAbstractSeries* series) { - Domain* domain = m_seriesDomainMap.value(series); - axis->d_ptr->m_orientation=Qt::Vertical; - //TODO:axis->d_ptr->initialize(domain); - QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool))); - QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); - m_seriesAxisYMap.insert(series,axis); + return axis; } -void ChartDataSet::removeSeries(QAbstractSeries* series) +void ChartDataSet::initializeAxis(QAbstractAxis* axis,QAbstractSeries* series) { - Domain* domain = m_seriesDomainMap.take(series); - - if(!domain) { - qWarning()<<"Can not remove series. Series not found on the chart."; + Domain* domain = m_seriesDomainMap.value(series); + axis->d_ptr->intializeDomain(domain); + series->d_ptr->initializeAxis(axis); + if(axis->orientation()==Qt::Horizontal) { + QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool))); + QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); + m_seriesAxisXMap.insert(series,axis); } - - emit seriesRemoved(series); - - delete domain; - domain = 0; - - int key = seriesIndex(series); - Q_ASSERT(key!=-1); - - m_indexSeriesMap.remove(key); - - series->setParent(0); - series->d_ptr->m_chart = 0; - series->d_ptr->m_dataset = 0; - - removeAxes(series); + else { + QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool))); + QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); + m_seriesAxisYMap.insert(series,axis); + } + axis->d_ptr->emitRange(); } void ChartDataSet::removeAxes(QAbstractSeries* series) @@ -296,13 +288,12 @@ void ChartDataSet::zoomOutDomain(const QRectF& rect, const QSizeF& size) void ChartDataSet::blockAxisSignals(bool enabled) { QMapIterator i(m_seriesDomainMap); -Q_UNUSED(enabled); while (i.hasNext()) { i.next(); QAbstractAxis* axisX = m_seriesAxisXMap.value(i.key()); QAbstractAxis* axisY = m_seriesAxisYMap.value(i.key()); - if(axisX) axisX->d_ptr->blockSignals(true); - if(axisY) axisY->d_ptr->blockSignals(true); + if(axisX) axisX->d_ptr->blockSignals(enabled); + if(axisY) axisY->d_ptr->blockSignals(enabled); } } @@ -357,9 +348,10 @@ QAbstractAxis* ChartDataSet::axisY(QAbstractSeries *series) const return m_seriesAxisYMap.value(series); } -void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis) +void ChartDataSet::setAxis(QAbstractSeries *series, QAbstractAxis *axis, Qt::Orientation orientation) { Q_ASSERT(axis); + Domain* domain = m_seriesDomainMap.value(series); if(!domain) { @@ -367,73 +359,43 @@ void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis) return; } - if(axis->d_ptr->m_orientation==Qt::Vertical) { + if(orientation==Qt::Horizontal && axis->orientation()==Qt::Vertical) { qWarning()<<"Axis already defined as axis Y"; return; } - QAbstractAxis *oldAxis = m_seriesAxisXMap.take(series); - QList axesX = m_seriesAxisXMap.values(); - - if(oldAxis) { - - int x = axesX.indexOf(oldAxis); - if(x==-1) { - emit axisRemoved(oldAxis); - oldAxis->deleteLater(); - } - } - - QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisXChanged(qreal,qreal,int,bool))); - QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); - - int x = axesX.indexOf(axis); - if(x==-1) { - axis->d_ptr->m_orientation=Qt::Horizontal; - emit axisAdded(axis,domain); + if(orientation==Qt::Vertical && axis->orientation()==Qt::Horizontal) { + qWarning()<<"Axis already defined as axis X"; + return; } - m_seriesAxisXMap.insert(series,axis); - axis->d_ptr->emitRange(); -} + axis->d_ptr->m_orientation=orientation; -void ChartDataSet::setAxisY(QAbstractSeries *series, QAbstractAxis *axis) -{ - Q_ASSERT(axis); - Domain* domain = m_seriesDomainMap.value(series); + QMap *seriesAxisMap; - if(!domain) { - qWarning() << "Series not found on the chart."; - return; - } + if(orientation==Qt::Vertical) { + seriesAxisMap= &m_seriesAxisYMap; - if(axis->d_ptr->m_orientation==Qt::Horizontal) { - qWarning()<<"Axis already defined as axis X"; - return; + }else{ + seriesAxisMap= &m_seriesAxisXMap; } - QAbstractAxis *oldAxis = m_seriesAxisYMap.take(series); - QList axesY = m_seriesAxisYMap.values(); + QAbstractAxis *oldAxis = seriesAxisMap->take(series); + QList axes = seriesAxisMap->values(); if(oldAxis) { - int y = axesY.indexOf(oldAxis); - if(y==-1) { + if(axes.indexOf(oldAxis)==-1) { emit axisRemoved(oldAxis); oldAxis->deleteLater(); } } - QObject::connect(axis->d_ptr.data(),SIGNAL(changed(qreal,qreal,int,bool)),domain,SLOT(handleAxisYChanged(qreal,qreal,int,bool))); - QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),axis->d_ptr.data(),SLOT(handleAxisRangeChanged(qreal,qreal,int))); - - int y = axesY.indexOf(axis); - if(y==-1) { - axis->d_ptr->m_orientation=Qt::Vertical; + if(axes.indexOf(axis)==-1) { + initializeAxis(axis,series); emit axisAdded(axis,domain); + }else{ + initializeAxis(axis,series); } - - m_seriesAxisYMap.insert(series,axis); - axis->d_ptr->emitRange(); } Domain* ChartDataSet::domain(QAbstractSeries *series) const diff --git a/src/chartdataset_p.h b/src/chartdataset_p.h index d8064fd..8563a09 100644 --- a/src/chartdataset_p.h +++ b/src/chartdataset_p.h @@ -61,8 +61,7 @@ public: QAbstractAxis* axisX(QAbstractSeries *series) const; QAbstractAxis* axisY(QAbstractSeries *series) const; - void setAxisX(QAbstractSeries *series, QAbstractAxis *axis); - void setAxisY(QAbstractSeries *series, QAbstractAxis *axis); + void setAxis(QAbstractSeries *series, QAbstractAxis *axis, Qt::Orientation orientation); QList series() const; Domain* domain(QAbstractSeries *series) const; @@ -78,11 +77,13 @@ Q_SIGNALS: private: void calculateDomain(QAbstractSeries* series,Domain* domain); - QAbstractAxis* createAxis(QAbstractAxis::AxisType type); - void addAxisX(QAbstractAxis* axis,QAbstractSeries* series); - void addAxisY(QAbstractAxis* axis,QAbstractSeries* series); + void createAxes(QAbstractAxis::AxisTypes type,Qt::Orientation orientation); + QAbstractAxis* createAxis(QAbstractAxis::AxisType type,Qt::Orientation orientation); + void initializeAxis(QAbstractAxis* axis,QAbstractSeries* series); void removeAxes(QAbstractSeries* series); void blockAxisSignals(bool enabled); + void createSeriesIndex(QAbstractSeries* series); + void removeSeriesIndex(QAbstractSeries* series); private: QMap m_seriesAxisXMap; diff --git a/src/piechart/qpieseries.cpp b/src/piechart/qpieseries.cpp index e5b55a4..6ca762d 100644 --- a/src/piechart/qpieseries.cpp +++ b/src/piechart/qpieseries.cpp @@ -790,23 +790,14 @@ QList QPieSeriesPrivate::createLegendMarker(QLegend* legend) return markers; } -void QPieSeriesPrivate::initializeAxisX(QAbstractAxis* axis) +void QPieSeriesPrivate::initializeAxis(QAbstractAxis* axis) { Q_UNUSED(axis); } -void QPieSeriesPrivate::initializeAxisY(QAbstractAxis* axis) -{ - Q_UNUSED(axis); -} - -QAbstractAxis::AxisType QPieSeriesPrivate::defaultAxisXType() const -{ - return QAbstractAxis::AxisTypeNoAxis; -} - -QAbstractAxis::AxisType QPieSeriesPrivate::defaultAxisYType() const +QAbstractAxis::AxisType QPieSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { + Q_UNUSED(orientation); return QAbstractAxis::AxisTypeNoAxis; } diff --git a/src/piechart/qpieseries_p.h b/src/piechart/qpieseries_p.h index ccab671..c8e62de 100644 --- a/src/piechart/qpieseries_p.h +++ b/src/piechart/qpieseries_p.h @@ -47,10 +47,8 @@ public: void scaleDomain(Domain& domain); Chart* createGraphics(ChartPresenter *presenter); QList createLegendMarker(QLegend *legend); - void initializeAxisX(QAbstractAxis* axis); - void initializeAxisY(QAbstractAxis* axis); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + void initializeAxis(QAbstractAxis* axis); + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; void updateDerivativeData(); diff --git a/src/qabstractseries_p.h b/src/qabstractseries_p.h index 7052b48..251597f 100644 --- a/src/qabstractseries_p.h +++ b/src/qabstractseries_p.h @@ -52,10 +52,8 @@ public: virtual void scaleDomain(Domain& domain) = 0; virtual Chart* createGraphics(ChartPresenter* presenter) = 0; virtual QList createLegendMarker(QLegend* legend) = 0; - virtual void initializeAxisX(QAbstractAxis* axis) = 0; - virtual void initializeAxisY(QAbstractAxis* axis) = 0; - virtual QAbstractAxis::AxisType defaultAxisXType() const = 0; - virtual QAbstractAxis::AxisType defaultAxisYType() const = 0; + virtual void initializeAxis(QAbstractAxis* axis) = 0; + virtual QAbstractAxis::AxisType defaultAxisType(Qt::Orientation) const = 0; protected: QAbstractSeries *q_ptr; diff --git a/src/qchart.cpp b/src/qchart.cpp index e472643..4ef4a54 100644 --- a/src/qchart.cpp +++ b/src/qchart.cpp @@ -462,7 +462,7 @@ void QChart::setMarginsMinimum(const QRectF& margins) */ void QChart::setAxisX(QAbstractAxis* axis , QAbstractSeries *series) { - d_ptr->m_dataset->setAxisX(series,axis); + d_ptr->m_dataset->setAxis(series,axis,Qt::Horizontal); } /*! @@ -472,7 +472,7 @@ void QChart::setAxisX(QAbstractAxis* axis , QAbstractSeries *series) */ void QChart::setAxisY( QAbstractAxis* axis , QAbstractSeries *series) { - d_ptr->m_dataset->setAxisY(series,axis); + d_ptr->m_dataset->setAxis(series,axis,Qt::Vertical); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/xychart/qxyseries.cpp b/src/xychart/qxyseries.cpp index c7ee22b..a36c9c1 100644 --- a/src/xychart/qxyseries.cpp +++ b/src/xychart/qxyseries.cpp @@ -435,23 +435,14 @@ QList QXYSeriesPrivate::createLegendMarker(QLegend* legend) return list << new XYLegendMarker(q,legend); } -void QXYSeriesPrivate::initializeAxisX(QAbstractAxis* axis) +void QXYSeriesPrivate::initializeAxis(QAbstractAxis* axis) { Q_UNUSED(axis); } -void QXYSeriesPrivate::initializeAxisY(QAbstractAxis* axis) -{ - Q_UNUSED(axis); -} - -QAbstractAxis::AxisType QXYSeriesPrivate::defaultAxisXType() const -{ - return QAbstractAxis::AxisTypeValues; -} - -QAbstractAxis::AxisType QXYSeriesPrivate::defaultAxisYType() const +QAbstractAxis::AxisType QXYSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const { + Q_UNUSED(orientation); return QAbstractAxis::AxisTypeValues; } diff --git a/src/xychart/qxyseries_p.h b/src/xychart/qxyseries_p.h index 2ca80c9..1947109 100644 --- a/src/xychart/qxyseries_p.h +++ b/src/xychart/qxyseries_p.h @@ -47,10 +47,8 @@ public: void scaleDomain(Domain& domain); QList createLegendMarker(QLegend* legend); - void initializeAxisX(QAbstractAxis* axis); - void initializeAxisY(QAbstractAxis* axis); - QAbstractAxis::AxisType defaultAxisXType() const; - QAbstractAxis::AxisType defaultAxisYType() const; + void initializeAxis(QAbstractAxis* axis); + QAbstractAxis::AxisType defaultAxisType(Qt::Orientation orientation) const; Q_SIGNALS: void updated(); diff --git a/tests/auto/qchart/tst_qchart.cpp b/tests/auto/qchart/tst_qchart.cpp index b29d20d..bf1d9b0 100644 --- a/tests/auto/qchart/tst_qchart.cpp +++ b/tests/auto/qchart/tst_qchart.cpp @@ -465,9 +465,6 @@ void tst_QChart::scroll_right_data() QLineSeries* series0 = new QLineSeries(this); *series0 << QPointF(0, 0) << QPointF(100, 100); - QLineSeries* series1 = new QLineSeries(this); - *series1 << QPointF(0, 0) << QPointF(100, 100); - QTest::newRow("lineSeries") << (QAbstractSeries*) series0;