From 9f1825280c4afcd78314b9b6c061563cac8d6dbb 2012-07-04 06:33:48 From: Michal Klocek Date: 2012-07-04 06:33:48 Subject: [PATCH] Refactor categories implementation * updateReange -> emitRange * add missing setRange in categoriesaxis --- diff --git a/src/axis/qabstractaxis_p.h b/src/axis/qabstractaxis_p.h index 33cf781..71de189 100644 --- a/src/axis/qabstractaxis_p.h +++ b/src/axis/qabstractaxis_p.h @@ -49,12 +49,12 @@ Q_SIGNALS: public: virtual ChartAxis* createGraphics(ChartPresenter* presenter) = 0; - virtual void updateRange() = 0; + virtual void emitRange() = 0; protected: virtual void setMin(const QVariant &min) = 0; virtual void setMax(const QVariant &max) = 0; - virtual void setRange(const QVariant &min, const QVariant &max, bool force = false) = 0; + virtual void setRange(const QVariant &min, const QVariant &max) = 0; virtual int ticksCount() const = 0; public: diff --git a/src/axis/qcategoriesaxis.cpp b/src/axis/qcategoriesaxis.cpp index 38c7aba..a03e423 100644 --- a/src/axis/qcategoriesaxis.cpp +++ b/src/axis/qcategoriesaxis.cpp @@ -23,6 +23,7 @@ #include "chartcategoriesaxisx_p.h" #include "chartcategoriesaxisy_p.h" #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -47,11 +48,12 @@ void QCategoriesAxis::append(const QStringList &categories) { Q_D(QCategoriesAxis); if (d->m_categories.isEmpty()) { - d->m_minCategory = categories.first(); - d->m_maxCategory = categories.last(); + d->m_categories.append(categories); + setRange(categories.first(),categories.last()); + }else{ + d->m_categories.append(categories); } - d->m_categories.append(categories); emit categoriesChanged(); } @@ -60,14 +62,14 @@ void QCategoriesAxis::append(const QStringList &categories) */ void QCategoriesAxis::append(const QString &category) { - Q_D(QCategoriesAxis); - if (d->m_categories.isEmpty()) { - d->m_minCategory = category; - d->m_maxCategory = category; - } - - d->m_categories.append(category); - emit categoriesChanged(); + Q_D(QCategoriesAxis); + if (d->m_categories.isEmpty()) { + d->m_categories.append(category); + setRange(category,category); + }else{ + d->m_categories.append(category); + } + emit categoriesChanged(); } /*! @@ -78,8 +80,7 @@ void QCategoriesAxis::remove(const QString &category) Q_D(QCategoriesAxis); if (d->m_categories.contains(category)) { d->m_categories.removeAt(d->m_categories.indexOf(category)); - d->m_minCategory = d->m_categories.first(); - d->m_maxCategory = d->m_categories.last(); + setRange(d->m_categories.first(),d->m_categories.last()); emit categoriesChanged(); } } @@ -91,10 +92,11 @@ void QCategoriesAxis::insert(int index, const QString &category) { Q_D(QCategoriesAxis); if (d->m_categories.isEmpty()) { - d->m_minCategory = category; - d->m_maxCategory = category; + d->m_categories.insert(index,category); + setRange(category,category); + }else{ + } - d->m_categories.insert(index,category); emit categoriesChanged(); } @@ -105,18 +107,18 @@ void QCategoriesAxis::clear() { Q_D(QCategoriesAxis); d->m_categories.clear(); - d->m_minCategory.clear(); - d->m_maxCategory.clear(); + setRange(QString::null,QString::null); emit categoriesChanged(); } void QCategoriesAxis::setCategories(const QStringList &categories) { Q_D(QCategoriesAxis); + if(d->m_categories!=categories){ d->m_categories = categories; - d->m_minCategory = categories.first(); - d->m_maxCategory = categories.last(); + setRange(categories.first(),categories.last()); emit categoriesChanged(); + } } QStringList QCategoriesAxis::categories() @@ -200,24 +202,21 @@ void QCategoriesAxis::setRange(const QString& minCategory, const QString& maxCat return; } - d->m_minCategory = minCategory; - d->m_maxCategory = maxCategory; - bool changed = false; if (!qFuzzyIsNull(d->m_min - (minIndex))) { + d->m_minCategory = minCategory; d->m_min = minIndex; changed = true; } if (!qFuzzyIsNull(d->m_max - (maxIndex))) { d->m_max = maxIndex; + d->m_maxCategory = maxCategory; changed = true; } if ((changed)) { - if(!signalsBlocked()){ - emit d->changed(d->m_min -0.5, d->m_max +0.5, qCeil(d->m_max + 0.5) -qCeil(d->m_min - 0.5) +1, false); - } + d->emitRange(); emit categoriesChanged(); } } @@ -253,9 +252,8 @@ void QCategoriesAxisPrivate::setMax(const QVariant &max) setRange(m_minCategory,max); } -void QCategoriesAxisPrivate::setRange(const QVariant &min, const QVariant &max, bool force) +void QCategoriesAxisPrivate::setRange(const QVariant &min, const QVariant &max) { - Q_UNUSED(force); // TODO: use this? Q_Q(QCategoriesAxis); QString value1 = min.toString(); QString value2 = max.toString(); @@ -284,9 +282,12 @@ ChartAxis* QCategoriesAxisPrivate::createGraphics(ChartPresenter* presenter) } } -void QCategoriesAxisPrivate::updateRange() +void QCategoriesAxisPrivate::emitRange() { - setRange(m_min,m_max,true); + Q_Q( QCategoriesAxis); + if(!q->signalsBlocked()) { + emit changed(m_min -0.5, m_max +0.5, qCeil(m_max + 0.5) -qCeil(m_min - 0.5) +1, false); + } } diff --git a/src/axis/qcategoriesaxis.h b/src/axis/qcategoriesaxis.h index 1dcc434..bf27733 100644 --- a/src/axis/qcategoriesaxis.h +++ b/src/axis/qcategoriesaxis.h @@ -31,6 +31,8 @@ class QTCOMMERCIALCHART_EXPORT QCategoriesAxis : public QAbstractAxis { Q_OBJECT Q_PROPERTY(QStringList categories READ categories WRITE setCategories NOTIFY categoriesChanged) + Q_PROPERTY(QString min READ min WRITE setMin NOTIFY minChanged) + Q_PROPERTY(QString max READ max WRITE setMax NOTIFY maxChanged) public: explicit QCategoriesAxis(QObject *parent = 0); @@ -60,6 +62,9 @@ public: Q_SIGNALS: void categoriesChanged(); + void minChanged(const QString &min); + void maxChanged(const QString &max); + void rangeChanged(const QString &min, const QString &max); private: Q_DECLARE_PRIVATE(QCategoriesAxis) diff --git a/src/axis/qcategoriesaxis_p.h b/src/axis/qcategoriesaxis_p.h index e2e7e2e..960ac30 100644 --- a/src/axis/qcategoriesaxis_p.h +++ b/src/axis/qcategoriesaxis_p.h @@ -45,13 +45,13 @@ public: public: ChartAxis* createGraphics(ChartPresenter* presenter); - void updateRange(); + void emitRange(); private: //range handling void setMin(const QVariant &min); void setMax(const QVariant &max); - void setRange(const QVariant &min, const QVariant &max, bool force = false); + void setRange(const QVariant &min, const QVariant &max); int ticksCount() const; Q_SIGNALS: diff --git a/src/axis/qvaluesaxis.cpp b/src/axis/qvaluesaxis.cpp index 00c091e..e909186 100644 --- a/src/axis/qvaluesaxis.cpp +++ b/src/axis/qvaluesaxis.cpp @@ -165,10 +165,8 @@ void QValuesAxis::setRange(qreal min, qreal max) } if (changed) { + d->emitRange(); emit rangeChanged(d->m_min,d->m_max); - if(!signalsBlocked()){ - emit d->changed(d->m_min, d->m_max, d->m_ticksCount, d->m_niceNumbers); - } } } @@ -252,9 +250,8 @@ void QValuesAxisPrivate::setMax(const QVariant &max) if(ok) q->setMax(value); } -void QValuesAxisPrivate::setRange(const QVariant &min, const QVariant &max, bool force) +void QValuesAxisPrivate::setRange(const QVariant &min, const QVariant &max) { - Q_UNUSED(force); // TODO: use this Q_Q(QValuesAxis); bool ok1; bool ok2; @@ -279,9 +276,12 @@ ChartAxis* QValuesAxisPrivate::createGraphics(ChartPresenter* presenter) } -void QValuesAxisPrivate::updateRange() +void QValuesAxisPrivate::emitRange() { - setRange(m_min,m_max,true); + Q_Q(QValuesAxis); + if(!q->signalsBlocked()) { + emit changed(m_min, m_max, m_ticksCount, m_niceNumbers); + } } #include "moc_qvaluesaxis.cpp" diff --git a/src/axis/qvaluesaxis_p.h b/src/axis/qvaluesaxis_p.h index 9ffb1dd..a498d4e 100644 --- a/src/axis/qvaluesaxis_p.h +++ b/src/axis/qvaluesaxis_p.h @@ -50,12 +50,12 @@ public Q_SLOTS: public: ChartAxis* createGraphics(ChartPresenter* presenter); - void updateRange(); + void emitRange(); protected: void setMin(const QVariant &min); void setMax(const QVariant &max); - void setRange(const QVariant &min, const QVariant &max, bool force = false); + void setRange(const QVariant &min, const QVariant &max); int ticksCount() const; private: diff --git a/src/chartdataset.cpp b/src/chartdataset.cpp index cf01296..320a1cf 100644 --- a/src/chartdataset.cpp +++ b/src/chartdataset.cpp @@ -373,9 +373,7 @@ void ChartDataSet::setAxisX(QAbstractSeries *series, QAbstractAxis *axis) } m_seriesAxisXMap.insert(series,axis); - - // Force range update - axis->d_ptr->updateRange(); + axis->d_ptr->emitRange(); } void ChartDataSet::setAxisY(QAbstractSeries *series, QAbstractAxis *axis) @@ -414,6 +412,7 @@ void ChartDataSet::setAxisY(QAbstractSeries *series, QAbstractAxis *axis) } m_seriesAxisYMap.insert(series,axis); + axis->d_ptr->emitRange(); } Domain* ChartDataSet::domain(QAbstractSeries *series) const