From 62e3aa7546c6b1533acef54e202d6f5c91b11b9b 2012-05-21 07:24:34 From: Tero Ahola Date: 2012-05-21 07:24:34 Subject: [PATCH] QML BarSeries API to support BarSet children --- diff --git a/demos/qmlchart/qml/qmlchart/View5.qml b/demos/qmlchart/qml/qmlchart/View5.qml index 0d6a630..a22abc7 100644 --- a/demos/qmlchart/qml/qmlchart/View5.qml +++ b/demos/qmlchart/qml/qmlchart/View5.qml @@ -34,44 +34,25 @@ Rectangle { BarSeries { barCategories: [ "2008", "2009", "2010", "2011", "2012" ] - model: barModel + BarSet { name: "Bob"; values: [2, 2, 3, 4, 5, 6] } + BarSet { name: "Susan"; values: [5, 1, 2, 4, 1, 7] } + BarSet { name: "James"; values: [3, 5, 8, 13, 5, 8] } } -// // TODO: optional syntax with ChartModel base model API + // TODO: optional syntax with ChartModel base model API // BarSeries { // model: chartModel // modelMapping: BarSeriesMapping { -// // Giving "undefined" x mapping value means that the indexes are used as x-values -// setIndexes: [BarSeriesMapping.Undefined, 0, -// BarSeriesMapping.Undefined, 1, -// BarSeriesMapping.Undefined, 2] // defaults to [] -//// setValues: [ -//// BarSetMapping {x: BarSetMapping.Undefined; y: 0}, -//// BarSetMapping {x: BarSetMapping.Undefined; y: 1}, -//// BarSetMapping {x: BarSetMapping.Undefined; y: 2} -//// ] -// orientation: BarSeriesMapping.Vertical // defaults to Vertical +// ? // startIndex: 0 // defaults to 0 // count: BarSeriesMapping.Undefined // defaults to "Undefined" // } // } +// ChartModel { +// id: chartModel +// ChartModelElement { values: ["Bob", 2, 2, 3, 4, 5, 6] } +// ChartModelElement { values: ["Susan", 5, 1, 2, 4, 1, 7] } +// ChartModelElement { values: ["James", 3, 5, 8, 13, 5, 8] } +// } } - -// ChartModel { -// id: chartModel -// } - - BarModel { - id: barModel - BarSet { name: "Bob"; values: [2, 2, 3, 4, 5, 6] } - BarSet { name: "Susan"; values: [5, 1, 2, 4, 1, 7] } - BarSet { name: "James"; values: [3, 5, 8, 13, 5, 8] } - } - - // TODO -// Component.onCompleted: { -// bobBars.append(1.2); -// bobBars.append(1.5); -// bobBars.append([1.5, 1.4, 1.9]); -// } } diff --git a/qmlplugin/declarativebarseries.cpp b/qmlplugin/declarativebarseries.cpp index 1724c80..67da14d 100644 --- a/qmlplugin/declarativebarseries.cpp +++ b/qmlplugin/declarativebarseries.cpp @@ -49,7 +49,7 @@ void DeclarativeBarSet::setValues(QVariantList values) } DeclarativeBarSeries::DeclarativeBarSeries(QDeclarativeItem *parent) : - QBarSeries(parent) + QGroupedBarSeries(parent) { } @@ -59,11 +59,20 @@ void DeclarativeBarSeries::classBegin() void DeclarativeBarSeries::componentComplete() { -// if (model()) -// setModelMapping(0, 1, 1, Qt::Vertical); + foreach(QObject *child, children()) { + if (qobject_cast(child)) { + qDebug() << "append bar set:" << child; + QBarSeries::appendBarSet(qobject_cast(child)); + } + } +} + +QDeclarativeListProperty DeclarativeBarSeries::initialBarSets() +{ + return QDeclarativeListProperty(this, 0, &DeclarativeBarSeries::appendInitialBarSets); } -bool DeclarativeBarSeries::setDeclarativeModel(DeclarativeBarModel *model) +bool DeclarativeBarSeries::setDeclarativeModel(DeclarativeTableModel *model) { QAbstractItemModel *m = qobject_cast(model); bool value(false); @@ -77,9 +86,9 @@ bool DeclarativeBarSeries::setDeclarativeModel(DeclarativeBarModel *model) return value; } -DeclarativeBarModel *DeclarativeBarSeries::declarativeModel() +DeclarativeTableModel *DeclarativeBarSeries::declarativeModel() { - return qobject_cast(model()); + return qobject_cast(model()); } void DeclarativeBarSeries::setBarCategories(QStringList categories) diff --git a/qmlplugin/declarativebarseries.h b/qmlplugin/declarativebarseries.h index 4e4120b..5500f51 100644 --- a/qmlplugin/declarativebarseries.h +++ b/qmlplugin/declarativebarseries.h @@ -25,12 +25,11 @@ #include "declarativemodel.h" #include #include -#include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE class QChart; -class QBarSeries; class DeclarativeBarSet : public QBarSet { @@ -44,31 +43,31 @@ public: void setValues(QVariantList values); }; -class DeclarativeBarSeries : public QBarSeries, public QDeclarativeParserStatus +class DeclarativeBarSeries : public QGroupedBarSeries, public QDeclarativeParserStatus { Q_OBJECT Q_INTERFACES(QDeclarativeParserStatus) - Q_PROPERTY(DeclarativeBarModel *model READ declarativeModel WRITE setDeclarativeModel) + Q_PROPERTY(DeclarativeTableModel *model READ declarativeModel WRITE setDeclarativeModel) Q_PROPERTY(QStringList barCategories READ barCategories WRITE setBarCategories) + Q_PROPERTY(QDeclarativeListProperty initialBarSets READ initialBarSets) + Q_CLASSINFO("DefaultProperty", "initialBarSets") public: explicit DeclarativeBarSeries(QDeclarativeItem *parent = 0); + QDeclarativeListProperty initialBarSets(); public: // from QDeclarativeParserStatus void classBegin(); void componentComplete(); public: - bool setDeclarativeModel(DeclarativeBarModel *model); - DeclarativeBarModel *declarativeModel(); + bool setDeclarativeModel(DeclarativeTableModel *model); + DeclarativeTableModel *declarativeModel(); void setBarCategories(QStringList categories); QStringList barCategories(); -Q_SIGNALS: - public Q_SLOTS: - -public: + static void appendInitialBarSets(QDeclarativeListProperty */*list*/, DeclarativeBarSet */*element*/) {} }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/qmlplugin/declarativemodel.cpp b/qmlplugin/declarativemodel.cpp index 61b7e76..0c672b3 100644 --- a/qmlplugin/declarativemodel.cpp +++ b/qmlplugin/declarativemodel.cpp @@ -106,27 +106,6 @@ void DeclarativeTableModel::appendPoint(QXYModelMapper *mapper, DeclarativeXyPoi append(values); } -////////////// Bar model /////////////////////// - -DeclarativeBarModel::DeclarativeBarModel(QObject *parent) : - DeclarativeTableModel(parent) -{ -} - -void DeclarativeBarModel::append(QBarSet* barSet) -{ - insertColumn(columnCount()); - for (int i(0); i < barSet->count(); i++) { - if (rowCount() < (i + 1)) - insertRow(rowCount()); - setData(createIndex(i, columnCount() - 1), barSet->at(i)); -// insertRow(rowCount()); -// setData(createIndex(rowCount() - 1, 0), ); -// setData(createIndex(rowCount() - 1, 1), barSet->at(i)); - } -// TODO: setModelMapping(0, 1, columnCount(), Qt::Vertical); -} - #include "moc_declarativemodel.cpp" QTCOMMERCIALCHART_END_NAMESPACE diff --git a/qmlplugin/declarativemodel.h b/qmlplugin/declarativemodel.h index 365a1f2..92a80a9 100644 --- a/qmlplugin/declarativemodel.h +++ b/qmlplugin/declarativemodel.h @@ -68,17 +68,6 @@ public Q_SLOTS: QObject *element); }; -class DeclarativeBarModel : public DeclarativeTableModel -{ - Q_OBJECT - -public: - explicit DeclarativeBarModel(QObject *parent = 0); - -public Q_SLOTS: - void append(QBarSet* barSet); -}; - QTCOMMERCIALCHART_END_NAMESPACE #endif // DECLARATIVEMODEL_H diff --git a/qmlplugin/plugin.cpp b/qmlplugin/plugin.cpp index 7814fe5..29e5d29 100644 --- a/qmlplugin/plugin.cpp +++ b/qmlplugin/plugin.cpp @@ -64,8 +64,6 @@ public: QLatin1String("Trying to create uncreatable: PieModelMapper.")); qmlRegisterUncreatableType(uri, 1, 0, "XYModelMapper", QLatin1String("Trying to create uncreatable: PieModelMapper.")); - - qmlRegisterType(uri, 1, 0, "BarModel"); qmlRegisterType(uri, 1, 0, "BarSet"); } };