diff --git a/src/charttheme.cpp b/src/charttheme.cpp index ed4be54..7f25ee5 100644 --- a/src/charttheme.cpp +++ b/src/charttheme.cpp @@ -213,6 +213,7 @@ void ChartTheme::decorate(QScatterSeries* series, int index,bool force) void ChartTheme::decorate(QPieSeries* series, int index, bool force) { + for (int i(0); i < series->slices().count(); i++) { QColor penColor = colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0.0); @@ -221,8 +222,8 @@ void ChartTheme::decorate(QPieSeries* series, int index, bool force) qreal pos = (qreal) (i + 1) / (qreal) series->count(); QColor brushColor = colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), pos); - QPieSlice::DataPtr s = series->slices().at(i)->data_ptr(); - PieSliceData data = s->m_data; + QPieSlice *s = series->slices().at(i); + PieSliceData data = *s->data_ptr(); if (data.m_slicePen.isThemed() || force) { data.m_slicePen = penColor; @@ -244,9 +245,9 @@ void ChartTheme::decorate(QPieSeries* series, int index, bool force) data.m_labelFont.setThemed(true); } - if (s->m_data != data) { - s->m_data = data; - emit s->changed(); + if (*s->data_ptr() != data) { + *s->data_ptr() = data; + emit s->data_ptr()->emitChangedSignal(s); } } } diff --git a/src/piechart/piechart.pri b/src/piechart/piechart.pri index 6e5480c..15242b3 100644 --- a/src/piechart/piechart.pri +++ b/src/piechart/piechart.pri @@ -11,7 +11,6 @@ PRIVATE_HEADERS += \ $$PWD/pieslicedata_p.h \ $$PWD/piechartitem_p.h \ $$PWD/piesliceitem_p.h \ - $$PWD/qpiesliceprivate_p.h \ $$PWD/qpieseriesprivate_p.h PUBLIC_HEADERS += \ diff --git a/src/piechart/piechartitem.cpp b/src/piechart/piechartitem.cpp index e216453..3a6679a 100644 --- a/src/piechart/piechartitem.cpp +++ b/src/piechart/piechartitem.cpp @@ -21,7 +21,6 @@ #include "piechartitem_p.h" #include "piesliceitem_p.h" #include "qpieslice.h" -#include "qpiesliceprivate_p.h" #include "qpieseries.h" #include "chartpresenter_p.h" #include "chartdataset_p.h" @@ -147,7 +146,8 @@ void PieChartItem::calculatePieLayout() PieSliceData PieChartItem::sliceData(QPieSlice *slice) { - PieSliceData sliceData = slice->data_ptr()->m_data; + // TODO: This function is kid of useless now. Refactor. + PieSliceData sliceData = *slice->data_ptr(); sliceData.m_center = PieSliceItem::sliceCenter(m_pieCenter, m_pieRadius, slice); sliceData.m_radius = m_pieRadius; return sliceData; diff --git a/src/piechart/pieslicedata_p.h b/src/piechart/pieslicedata_p.h index 5ef4713..b60ad9a 100644 --- a/src/piechart/pieslicedata_p.h +++ b/src/piechart/pieslicedata_p.h @@ -21,7 +21,8 @@ #ifndef PIESLICEDATA_P_H #define PIESLICEDATA_P_H -#include +#include "qchartglobal.h" +#include "qpieslice.h" #include #include #include @@ -104,6 +105,11 @@ public: return false; } + void emitChangedSignal(QPieSlice *s) + { + emit s->changed(); + } + qreal m_value; Themed m_slicePen; diff --git a/src/piechart/piesliceitem_p.h b/src/piechart/piesliceitem_p.h index dd9d7d5..ecd06da 100644 --- a/src/piechart/piesliceitem_p.h +++ b/src/piechart/piesliceitem_p.h @@ -24,7 +24,7 @@ #include "qchartglobal.h" #include "charttheme_p.h" #include "qpieseries.h" -#include "qpiesliceprivate_p.h" +#include "pieslicedata_p.h" #include #include #include diff --git a/src/piechart/qpieseries.cpp b/src/piechart/qpieseries.cpp index c9c2ea7..cfa8194 100644 --- a/src/piechart/qpieseries.cpp +++ b/src/piechart/qpieseries.cpp @@ -19,8 +19,9 @@ ****************************************************************************/ #include "qpieseries.h" -#include "qpiesliceprivate_p.h" #include "qpieseriesprivate_p.h" +#include "qpieslice.h" +#include "pieslicedata_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -68,21 +69,21 @@ void QPieSeriesPrivate::updateDerivativeData() QVector changed; foreach (QPieSlice* s, m_slices) { - PieSliceData data = s->data_ptr()->m_data; + PieSliceData data = *s->data_ptr(); data.m_percentage = s->value() / m_total; data.m_angleSpan = pieSpan * data.m_percentage; data.m_startAngle = sliceAngle; sliceAngle += data.m_angleSpan; - if (s->data_ptr()->m_data != data) { - s->data_ptr()->m_data = data; + if (*s->data_ptr() != data) { + *s->data_ptr() = data; changed << s; } } // emit signals foreach (QPieSlice* s, changed) - emit s->data_ptr()->changed(); + s->data_ptr()->emitChangedSignal(s); } void QPieSeriesPrivate::sliceChanged() diff --git a/src/piechart/qpieseries.h b/src/piechart/qpieseries.h index 7a145b8..d26d224 100644 --- a/src/piechart/qpieseries.h +++ b/src/piechart/qpieseries.h @@ -89,10 +89,6 @@ private: QPieSeriesPrivate * const d_ptr; Q_DECLARE_PRIVATE(QPieSeries) Q_DISABLE_COPY(QPieSeries) - -public: - typedef QPieSeriesPrivate * const DataPtr; - inline DataPtr &data_ptr() { return d_ptr; } }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/piechart/qpieslice.cpp b/src/piechart/qpieslice.cpp index 456ef25..e7a68e1 100644 --- a/src/piechart/qpieslice.cpp +++ b/src/piechart/qpieslice.cpp @@ -19,9 +19,7 @@ ****************************************************************************/ #include "qpieslice.h" -#include "qpiesliceprivate_p.h" -#include "qpieseries.h" -#include "qpieseriesprivate_p.h" +#include "pieslicedata_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -57,7 +55,7 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE */ QPieSlice::QPieSlice(QObject *parent) :QObject(parent), - d_ptr(new QPieSlicePrivate(this)) + d(new PieSliceData()) { } @@ -69,11 +67,10 @@ QPieSlice::QPieSlice(QObject *parent) */ QPieSlice::QPieSlice(qreal value, QString label, QObject *parent) :QObject(parent), - d_ptr(new QPieSlicePrivate(this)) + d(new PieSliceData()) { - Q_D(QPieSlice); - d->m_data.m_value = value; - d->m_data.m_labelText = label; + d->m_value = value; + d->m_labelText = label; } /*! @@ -82,7 +79,7 @@ QPieSlice::QPieSlice(qreal value, QString label, QObject *parent) */ QPieSlice::~QPieSlice() { - delete d_ptr; + delete d; } /*! @@ -92,8 +89,7 @@ QPieSlice::~QPieSlice() */ qreal QPieSlice::value() const { - Q_D(const QPieSlice); - return d->m_data.m_value; + return d->m_value; } /*! @@ -101,9 +97,8 @@ qreal QPieSlice::value() const \sa setLabel() */ QString QPieSlice::label() const -{ - Q_D(const QPieSlice); - return d->m_data.m_labelText; +{ + return d->m_labelText; } /*! @@ -112,8 +107,7 @@ QString QPieSlice::label() const */ bool QPieSlice::isLabelVisible() const { - Q_D(const QPieSlice); - return d->m_data.m_isLabelVisible; + return d->m_isLabelVisible; } /*! @@ -122,8 +116,7 @@ bool QPieSlice::isLabelVisible() const */ bool QPieSlice::isExploded() const { - Q_D(const QPieSlice); - return d->m_data.m_isExploded; + return d->m_isExploded; } /*! @@ -139,8 +132,7 @@ bool QPieSlice::isExploded() const */ qreal QPieSlice::explodeDistanceFactor() const { - Q_D(const QPieSlice); - return d->m_data.m_explodeDistanceFactor; + return d->m_explodeDistanceFactor; } /*! @@ -151,8 +143,7 @@ qreal QPieSlice::explodeDistanceFactor() const */ qreal QPieSlice::percentage() const { - Q_D(const QPieSlice); - return d->m_data.m_percentage; + return d->m_percentage; } /*! @@ -164,8 +155,7 @@ qreal QPieSlice::percentage() const */ qreal QPieSlice::startAngle() const { - Q_D(const QPieSlice); - return d->m_data.m_startAngle; + return d->m_startAngle; } /*! @@ -177,8 +167,7 @@ qreal QPieSlice::startAngle() const */ qreal QPieSlice::endAngle() const { - Q_D(const QPieSlice); - return d->m_data.m_startAngle + d->m_data.m_angleSpan; + return d->m_startAngle + d->m_angleSpan; } /*! @@ -187,8 +176,7 @@ qreal QPieSlice::endAngle() const */ QPen QPieSlice::pen() const { - Q_D(const QPieSlice); - return d->m_data.m_slicePen; + return d->m_slicePen; } /*! @@ -197,8 +185,7 @@ QPen QPieSlice::pen() const */ QBrush QPieSlice::brush() const { - Q_D(const QPieSlice); - return d->m_data.m_sliceBrush; + return d->m_sliceBrush; } /*! @@ -207,8 +194,7 @@ QBrush QPieSlice::brush() const */ QPen QPieSlice::labelPen() const { - Q_D(const QPieSlice); - return d->m_data.m_labelPen; + return d->m_labelPen; } /*! @@ -217,8 +203,7 @@ QPen QPieSlice::labelPen() const */ QFont QPieSlice::labelFont() const { - Q_D(const QPieSlice); - return d->m_data.m_labelFont; + return d->m_labelFont; } /*! @@ -234,8 +219,7 @@ QFont QPieSlice::labelFont() const */ qreal QPieSlice::labelArmLengthFactor() const { - Q_D(const QPieSlice); - return d->m_data.m_labelArmLengthFactor; + return d->m_labelArmLengthFactor; } /*! @@ -276,15 +260,9 @@ qreal QPieSlice::labelArmLengthFactor() const */ void QPieSlice::setValue(qreal value) { - Q_D(QPieSlice); - if (!qFuzzyIsNull(d->m_data.m_value - value)) { - d->m_data.m_value = value; - - QPieSeries *series = qobject_cast(parent()); - if (series) - series->data_ptr()->updateDerivativeData(); // will emit changed() - else - emit changed(); + if (!qFuzzyIsNull(d->m_value - value)) { + d->m_value = value; + emit changed(); } } @@ -294,9 +272,8 @@ void QPieSlice::setValue(qreal value) */ void QPieSlice::setLabel(QString label) { - Q_D(QPieSlice); - if (d->m_data.m_labelText != label) { - d->m_data.m_labelText = label; + if (d->m_labelText != label) { + d->m_labelText = label; emit changed(); } } @@ -307,9 +284,8 @@ void QPieSlice::setLabel(QString label) */ void QPieSlice::setLabelVisible(bool visible) { - Q_D(QPieSlice); - if (d->m_data.m_isLabelVisible != visible) { - d->m_data.m_isLabelVisible = visible; + if (d->m_isLabelVisible != visible) { + d->m_isLabelVisible = visible; emit changed(); } } @@ -320,9 +296,8 @@ void QPieSlice::setLabelVisible(bool visible) */ void QPieSlice::setExploded(bool exploded) { - Q_D(QPieSlice); - if (d->m_data.m_isExploded != exploded) { - d->m_data.m_isExploded = exploded; + if (d->m_isExploded != exploded) { + d->m_isExploded = exploded; emit changed(); } } @@ -340,9 +315,8 @@ void QPieSlice::setExploded(bool exploded) */ void QPieSlice::setExplodeDistanceFactor(qreal factor) { - Q_D(QPieSlice); - if (!qFuzzyIsNull(d->m_data.m_explodeDistanceFactor - factor)) { - d->m_data.m_explodeDistanceFactor = factor; + if (!qFuzzyIsNull(d->m_explodeDistanceFactor - factor)) { + d->m_explodeDistanceFactor = factor; emit changed(); } } @@ -354,10 +328,9 @@ void QPieSlice::setExplodeDistanceFactor(qreal factor) */ void QPieSlice::setPen(const QPen &pen) { - Q_D(QPieSlice); - if (d->m_data.m_slicePen != pen) { - d->m_data.m_slicePen = pen; - d->m_data.m_slicePen.setThemed(false); + if (d->m_slicePen != pen) { + d->m_slicePen = pen; + d->m_slicePen.setThemed(false); emit changed(); } } @@ -369,10 +342,9 @@ void QPieSlice::setPen(const QPen &pen) */ void QPieSlice::setBrush(const QBrush &brush) { - Q_D(QPieSlice); - if (d->m_data.m_sliceBrush != brush) { - d->m_data.m_sliceBrush = brush; - d->m_data.m_sliceBrush.setThemed(false); + if (d->m_sliceBrush != brush) { + d->m_sliceBrush = brush; + d->m_sliceBrush.setThemed(false); emit changed(); } } @@ -384,10 +356,9 @@ void QPieSlice::setBrush(const QBrush &brush) */ void QPieSlice::setLabelPen(const QPen &pen) { - Q_D(QPieSlice); - if (d->m_data.m_labelPen != pen) { - d->m_data.m_labelPen = pen; - d->m_data.m_labelPen.setThemed(false); + if (d->m_labelPen != pen) { + d->m_labelPen = pen; + d->m_labelPen.setThemed(false); emit changed(); } } @@ -399,10 +370,9 @@ void QPieSlice::setLabelPen(const QPen &pen) */ void QPieSlice::setLabelFont(const QFont &font) { - Q_D(QPieSlice); - if (d->m_data.m_labelFont != font) { - d->m_data.m_labelFont = font; - d->m_data.m_labelFont.setThemed(false); + if (d->m_labelFont != font) { + d->m_labelFont = font; + d->m_labelFont.setThemed(false); emit changed(); } } @@ -420,14 +390,12 @@ void QPieSlice::setLabelFont(const QFont &font) */ void QPieSlice::setLabelArmLengthFactor(qreal factor) { - Q_D(QPieSlice); - if (!qFuzzyIsNull(d->m_data.m_labelArmLengthFactor - factor)) { - d->m_data.m_labelArmLengthFactor = factor; + if (!qFuzzyIsNull(d->m_labelArmLengthFactor - factor)) { + d->m_labelArmLengthFactor = factor; emit changed(); } } #include "moc_qpieslice.cpp" -#include "moc_qpiesliceprivate_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/piechart/qpieslice.h b/src/piechart/qpieslice.h index 166324e..5a6e984 100644 --- a/src/piechart/qpieslice.h +++ b/src/piechart/qpieslice.h @@ -28,7 +28,7 @@ #include QTCOMMERCIALCHART_BEGIN_NAMESPACE -class QPieSlicePrivate; +class PieSliceData; class QTCOMMERCIALCHART_EXPORT QPieSlice : public QObject { @@ -77,13 +77,13 @@ Q_SIGNALS: void changed(); private: - QPieSlicePrivate * const d_ptr; - Q_DECLARE_PRIVATE(QPieSlice) + friend class PieSliceData; + PieSliceData * const d; Q_DISABLE_COPY(QPieSlice) public: - typedef QPieSlicePrivate * const DataPtr; - inline DataPtr &data_ptr() { return d_ptr; } + typedef PieSliceData * const DataPtr; + inline DataPtr &data_ptr() { return d; } }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/piechart/qpiesliceprivate_p.h b/src/piechart/qpiesliceprivate_p.h deleted file mode 100644 index 7cd3f9f..0000000 --- a/src/piechart/qpiesliceprivate_p.h +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc -** All rights reserved. -** For any questions to Digia, please use contact form at http://qt.digia.com -** -** This file is part of the Qt Commercial Charts Add-on. -** -** $QT_BEGIN_LICENSE$ -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. -** -** If you have questions regarding the use of this file, please use -** contact form at http://qt.digia.com -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPIESLICEPRIVATE_P_H -#define QPIESLICEPRIVATE_P_H - -#include "qpieslice.h" -#include "pieslicedata_p.h" - -QTCOMMERCIALCHART_BEGIN_NAMESPACE - -class QPieSlicePrivate : public QObject -{ - Q_OBJECT - Q_DECLARE_PUBLIC(QPieSlice) - -public: - QPieSlicePrivate(QPieSlice *parent) - :QObject(parent), - q_ptr(parent) - { - connect(this, SIGNAL(changed()), q_ptr, SIGNAL(changed())); - } - - ~QPieSlicePrivate() {} - -Q_SIGNALS: - void changed(); - -public: - friend class QPieSeriesPrivate; - friend class ChartTheme; - QPieSlice * const q_ptr; - PieSliceData m_data; -}; - -QTCOMMERCIALCHART_END_NAMESPACE - -#endif // QPIESLICEPRIVATE_P_H