From e1166aadc3927eb26853fb31f1f53559f7d4d316 2012-08-22 10:33:04 From: sauimone Date: 2012-08-22 10:33:04 Subject: [PATCH] declarative series for horizontal barcharts --- diff --git a/plugins/declarative/declarativebarseries.cpp b/plugins/declarative/declarativebarseries.cpp index dd22a30..897d0bd 100644 --- a/plugins/declarative/declarativebarseries.cpp +++ b/plugins/declarative/declarativebarseries.cpp @@ -58,6 +58,7 @@ void DeclarativeBarSet::setValues(QVariantList values) } } +// Declarative bar series ====================================================================================== DeclarativeBarSeries::DeclarativeBarSeries(QDeclarativeItem *parent) : QBarSeries(parent) { @@ -114,6 +115,7 @@ DeclarativeBarSet *DeclarativeBarSeries::insert(int index, QString label, QVaria return 0; } +// Declarative stacked bar series ============================================================================== DeclarativeStackedBarSeries::DeclarativeStackedBarSeries(QDeclarativeItem *parent) : QStackedBarSeries(parent) { @@ -171,6 +173,7 @@ DeclarativeBarSet *DeclarativeStackedBarSeries::insert(int index, QString label, return 0; } +// Declarative percent bar series ============================================================================== DeclarativePercentBarSeries::DeclarativePercentBarSeries(QDeclarativeItem *parent) : QPercentBarSeries(parent) { @@ -227,6 +230,177 @@ DeclarativeBarSet *DeclarativePercentBarSeries::insert(int index, QString label, return 0; } +// Declarative horizontal bar series =========================================================================== +DeclarativeHorizontalBarSeries::DeclarativeHorizontalBarSeries(QDeclarativeItem *parent) : + QHorizontalBarSeries(parent) +{ +} + +void DeclarativeHorizontalBarSeries::classBegin() +{ +} + +void DeclarativeHorizontalBarSeries::componentComplete() +{ + foreach(QObject *child, children()) { + if (qobject_cast(child)) { + QAbstractBarSeries::append(qobject_cast(child)); + } else if(qobject_cast(child)) { + QVBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } else if(qobject_cast(child)) { + QHBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } + } +} + +QDeclarativeListProperty DeclarativeHorizontalBarSeries::seriesChildren() +{ + return QDeclarativeListProperty(this, 0, &DeclarativeHorizontalBarSeries::appendSeriesChildren); +} + +void DeclarativeHorizontalBarSeries::appendSeriesChildren(QDeclarativeListProperty * list, QObject *element) +{ + // Empty implementation; the children are parsed in componentComplete instead + Q_UNUSED(list); + Q_UNUSED(element); +} + +DeclarativeBarSet *DeclarativeHorizontalBarSeries::at(int index) +{ + QList setList = barSets(); + if (index >= 0 && index < setList.count()) + return qobject_cast(setList[index]); + + return 0; +} + +DeclarativeBarSet *DeclarativeHorizontalBarSeries::insert(int index, QString label, QVariantList values) +{ + DeclarativeBarSet *barset = new DeclarativeBarSet(this); + barset->setLabel(label); + barset->setValues(values); + if (QHorizontalBarSeries::insert(index, barset)) + return barset; + delete barset; + return 0; +} + +// Declarative horizontal stacked bar series =================================================================== +DeclarativeHorizontalStackedBarSeries::DeclarativeHorizontalStackedBarSeries(QDeclarativeItem *parent) : + QHorizontalStackedBarSeries(parent) +{ +} + +void DeclarativeHorizontalStackedBarSeries::classBegin() +{ +} + +void DeclarativeHorizontalStackedBarSeries::componentComplete() +{ + foreach(QObject *child, children()) { + if (qobject_cast(child)) { + QAbstractBarSeries::append(qobject_cast(child)); + } else if(qobject_cast(child)) { + QVBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } else if(qobject_cast(child)) { + QHBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } + } +} + +QDeclarativeListProperty DeclarativeHorizontalStackedBarSeries::seriesChildren() +{ + return QDeclarativeListProperty(this, 0, &DeclarativeHorizontalStackedBarSeries::appendSeriesChildren); +} + +void DeclarativeHorizontalStackedBarSeries::appendSeriesChildren(QDeclarativeListProperty * list, QObject *element) +{ + // Empty implementation; the children are parsed in componentComplete instead + Q_UNUSED(list); + Q_UNUSED(element); +} + +DeclarativeBarSet *DeclarativeHorizontalStackedBarSeries::at(int index) +{ + QList setList = barSets(); + if (index >= 0 && index < setList.count()) + return qobject_cast(setList[index]); + + return 0; +} + +DeclarativeBarSet *DeclarativeHorizontalStackedBarSeries::insert(int index, QString label, QVariantList values) +{ + DeclarativeBarSet *barset = new DeclarativeBarSet(this); + barset->setLabel(label); + barset->setValues(values); + if (QHorizontalStackedBarSeries::insert(index, barset)) + return barset; + delete barset; + return 0; +} + +// Declarative horizontal percent bar series =================================================================== +DeclarativeHorizontalPercentBarSeries::DeclarativeHorizontalPercentBarSeries(QDeclarativeItem *parent) : + QHorizontalPercentBarSeries(parent) +{ +} + +void DeclarativeHorizontalPercentBarSeries::classBegin() +{ +} + +void DeclarativeHorizontalPercentBarSeries::componentComplete() +{ + foreach(QObject *child, children()) { + if (qobject_cast(child)) { + QAbstractBarSeries::append(qobject_cast(child)); + } else if(qobject_cast(child)) { + QVBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } else if(qobject_cast(child)) { + QHBarModelMapper *mapper = qobject_cast(child); + mapper->setSeries(this); + } + } +} + +QDeclarativeListProperty DeclarativeHorizontalPercentBarSeries::seriesChildren() +{ + return QDeclarativeListProperty(this, 0, &DeclarativeHorizontalPercentBarSeries::appendSeriesChildren); +} + +void DeclarativeHorizontalPercentBarSeries::appendSeriesChildren(QDeclarativeListProperty * list, QObject *element) +{ + // Empty implementation; the children are parsed in componentComplete instead + Q_UNUSED(list); + Q_UNUSED(element); +} + +DeclarativeBarSet *DeclarativeHorizontalPercentBarSeries::at(int index) +{ + QList setList = barSets(); + if (index >= 0 && index < setList.count()) + return qobject_cast(setList[index]); + + return 0; +} + +DeclarativeBarSet *DeclarativeHorizontalPercentBarSeries::insert(int index, QString label, QVariantList values) +{ + DeclarativeBarSet *barset = new DeclarativeBarSet(this); + barset->setLabel(label); + barset->setValues(values); + if (QHorizontalPercentBarSeries::insert(index, barset)) + return barset; + delete barset; + return 0; +} + #include "moc_declarativebarseries.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/plugins/declarative/declarativebarseries.h b/plugins/declarative/declarativebarseries.h index f0875cd..03fb584 100644 --- a/plugins/declarative/declarativebarseries.h +++ b/plugins/declarative/declarativebarseries.h @@ -24,6 +24,9 @@ #include "qbarseries.h" #include "qstackedbarseries.h" #include "qpercentbarseries.h" +#include "qhorizontalbarseries.h" +#include "qhorizontalstackedbarseries.h" +#include "qhorizontalpercentbarseries.h" #include "qbarset.h" #include #include @@ -133,6 +136,78 @@ public Q_SLOTS: static void appendSeriesChildren(QDeclarativeListProperty *list, QObject *element); }; +class DeclarativeHorizontalBarSeries : public QHorizontalBarSeries, public QDeclarativeParserStatus +{ + Q_OBJECT + Q_INTERFACES(QDeclarativeParserStatus) + Q_PROPERTY(QDeclarativeListProperty seriesChildren READ seriesChildren) + Q_CLASSINFO("DefaultProperty", "seriesChildren") + +public: + explicit DeclarativeHorizontalBarSeries(QDeclarativeItem *parent = 0); + QDeclarativeListProperty seriesChildren(); + Q_INVOKABLE DeclarativeBarSet *at(int index); + Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } + Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); + Q_INVOKABLE bool remove(QBarSet *barset) { return QHorizontalBarSeries::remove(barset); } + Q_INVOKABLE void clear() { return QHorizontalBarSeries::clear(); } + +public: // from QDeclarativeParserStatus + void classBegin(); + void componentComplete(); + +public Q_SLOTS: + static void appendSeriesChildren(QDeclarativeListProperty *list, QObject *element); +}; + +class DeclarativeHorizontalStackedBarSeries : public QHorizontalStackedBarSeries, public QDeclarativeParserStatus +{ + Q_OBJECT + Q_INTERFACES(QDeclarativeParserStatus) + Q_PROPERTY(QDeclarativeListProperty seriesChildren READ seriesChildren) + Q_CLASSINFO("DefaultProperty", "seriesChildren") + +public: + explicit DeclarativeHorizontalStackedBarSeries(QDeclarativeItem *parent = 0); + QDeclarativeListProperty seriesChildren(); + Q_INVOKABLE DeclarativeBarSet *at(int index); + Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } + Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); + Q_INVOKABLE bool remove(QBarSet *barset) { return QHorizontalStackedBarSeries::remove(barset); } + Q_INVOKABLE void clear() { return QHorizontalStackedBarSeries::clear(); } + +public: // from QDeclarativeParserStatus + void classBegin(); + void componentComplete(); + +public Q_SLOTS: + static void appendSeriesChildren(QDeclarativeListProperty *list, QObject *element); +}; + +class DeclarativeHorizontalPercentBarSeries : public QHorizontalPercentBarSeries, public QDeclarativeParserStatus +{ + Q_OBJECT + Q_INTERFACES(QDeclarativeParserStatus) + Q_PROPERTY(QDeclarativeListProperty seriesChildren READ seriesChildren) + Q_CLASSINFO("DefaultProperty", "seriesChildren") + +public: + explicit DeclarativeHorizontalPercentBarSeries(QDeclarativeItem *parent = 0); + QDeclarativeListProperty seriesChildren(); + Q_INVOKABLE DeclarativeBarSet *at(int index); + Q_INVOKABLE DeclarativeBarSet *append(QString label, QVariantList values) { return insert(count(), label, values); } + Q_INVOKABLE DeclarativeBarSet *insert(int index, QString label, QVariantList values); + Q_INVOKABLE bool remove(QBarSet *barset) { return QHorizontalPercentBarSeries::remove(barset); } + Q_INVOKABLE void clear() { return QHorizontalPercentBarSeries::clear(); } + +public: // from QDeclarativeParserStatus + void classBegin(); + void componentComplete(); + +public Q_SLOTS: + static void appendSeriesChildren(QDeclarativeListProperty *list, QObject *element); +}; + QTCOMMERCIALCHART_END_NAMESPACE #endif // DECLARATIVEBARSERIES_H