From 5cb84e6f34233bdc2109fab7ff63449968fbceca 2012-05-29 07:42:52 From: Tero Ahola Date: 2012-05-29 07:42:52 Subject: [PATCH] QML custom model demo now implements it's own QAbstractItemModel based model --- diff --git a/src/charttablemodel.cpp b/demos/qmlcustommodel/customtablemodel.cpp similarity index 81% rename from src/charttablemodel.cpp rename to demos/qmlcustommodel/customtablemodel.cpp index 258ac18..741a14e 100644 --- a/src/charttablemodel.cpp +++ b/demos/qmlcustommodel/customtablemodel.cpp @@ -18,33 +18,31 @@ ** ****************************************************************************/ -#include "charttablemodel.h" +#include "customtablemodel.h" #include #include #include -QTCOMMERCIALCHART_USE_NAMESPACE - -ChartTableModel::ChartTableModel(QObject *parent) : +CustomTableModel::CustomTableModel(QObject *parent) : QAbstractTableModel(parent), m_columnCount(0), m_rowCount(0) { } -int ChartTableModel::rowCount(const QModelIndex & parent) const +int CustomTableModel::rowCount(const QModelIndex & parent) const { Q_UNUSED(parent) return m_data.count(); } -int ChartTableModel::columnCount(const QModelIndex & parent) const +int CustomTableModel::columnCount(const QModelIndex & parent) const { Q_UNUSED(parent) return m_columnCount; } -QVariant ChartTableModel::headerData (int section, Qt::Orientation orientation, int role ) const +QVariant CustomTableModel::headerData (int section, Qt::Orientation orientation, int role ) const { if (role != Qt::DisplayRole) return QVariant(); @@ -59,7 +57,7 @@ QVariant ChartTableModel::headerData (int section, Qt::Orientation orientation, } } -QVariant ChartTableModel::data(const QModelIndex &index, int role) const +QVariant CustomTableModel::data(const QModelIndex &index, int role) const { if (role == Qt::DisplayRole) { return m_data[index.row()]->at(index.column()); @@ -69,7 +67,7 @@ QVariant ChartTableModel::data(const QModelIndex &index, int role) const return QVariant(); } -bool ChartTableModel::setData(const QModelIndex &index, const QVariant &value, int role) +bool CustomTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (index.isValid() && role == Qt::EditRole) { m_data[index.row()]->replace(index.column(), value); @@ -79,14 +77,14 @@ bool ChartTableModel::setData(const QModelIndex &index, const QVariant &value, i return false; } -void ChartTableModel::insertColumn(int column, const QModelIndex &parent) +void CustomTableModel::insertColumn(int column, const QModelIndex &parent) { beginInsertColumns(parent, column, column); m_columnCount++; endInsertColumns(); } -void ChartTableModel::insertRow(int row, const QModelIndex &parent) +void CustomTableModel::insertRow(int row, const QModelIndex &parent) { beginInsertRows(parent, row, row); QVector* dataVec = new QVector(m_columnCount); @@ -94,23 +92,12 @@ void ChartTableModel::insertRow(int row, const QModelIndex &parent) endInsertRows(); } -//bool ChartTableModel::removeRow(int row, const QModelIndex &parent) -//{ -// Q_UNUSED(parent) -// Q_ASSERT(row >= 0 && row < rowCount); - -// beginRemoveRows(parent, row, row); -// m_data.removeAt(row); -// endRemoveRows(); -// return true; -//} - -bool ChartTableModel::removeRow(int row, const QModelIndex &parent) +bool CustomTableModel::removeRow(int row, const QModelIndex &parent) { return QAbstractTableModel::removeRow(row, parent); } -bool ChartTableModel::removeRows(int row, int count, const QModelIndex &parent) +bool CustomTableModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); bool removed(false); @@ -122,9 +109,9 @@ bool ChartTableModel::removeRows(int row, int count, const QModelIndex &parent) return removed; } -Qt::ItemFlags ChartTableModel::flags ( const QModelIndex & index ) const +Qt::ItemFlags CustomTableModel::flags ( const QModelIndex & index ) const { return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } -#include "moc_charttablemodel.cpp" +#include "moc_customtablemodel.cpp" diff --git a/src/charttablemodel.h b/demos/qmlcustommodel/customtablemodel.h similarity index 86% rename from src/charttablemodel.h rename to demos/qmlcustommodel/customtablemodel.h index 4d7dd78..5d6e0f7 100644 --- a/src/charttablemodel.h +++ b/demos/qmlcustommodel/customtablemodel.h @@ -18,23 +18,19 @@ ** ****************************************************************************/ -#ifndef CHARTTABLEMODEL_H -#define CHARTTABLEMODEL_H +#ifndef CUSTOMTABLEMODEL_H +#define CUSTOMTABLEMODEL_H -#include "qchartglobal.h" #include #include -#include -QTCOMMERCIALCHART_BEGIN_NAMESPACE - -class QTCOMMERCIALCHART_EXPORT ChartTableModel : public QAbstractTableModel +class CustomTableModel : public QAbstractTableModel { Q_OBJECT Q_PROPERTY(int count READ rowCount) public: - explicit ChartTableModel(QObject *parent = 0); + explicit CustomTableModel(QObject *parent = 0); int rowCount ( const QModelIndex & parent = QModelIndex() ) const; int columnCount ( const QModelIndex & parent = QModelIndex() ) const; @@ -54,6 +50,4 @@ private: int m_rowCount; }; -QTCOMMERCIALCHART_END_NAMESPACE - -#endif // CHARTTABLEMODEL_H +#endif // CUSTOMTABLEMODEL_H diff --git a/plugins/declarative/declarativemodel.cpp b/demos/qmlcustommodel/declarativemodel.cpp similarity index 83% rename from plugins/declarative/declarativemodel.cpp rename to demos/qmlcustommodel/declarativemodel.cpp index 6809360..468ca2a 100644 --- a/plugins/declarative/declarativemodel.cpp +++ b/demos/qmlcustommodel/declarativemodel.cpp @@ -22,10 +22,7 @@ #include #include -QTCOMMERCIALCHART_BEGIN_NAMESPACE - - -////////////// Table model row /////////////////// +////////////// Table model element /////////////////// DeclarativeTableModelElement::DeclarativeTableModelElement(QObject *parent) : QObject(parent) @@ -45,7 +42,7 @@ void DeclarativeTableModelElement::setValues(QVariantList values) ////////////// Table model /////////////////// DeclarativeTableModel::DeclarativeTableModel(QObject *parent) : - ChartTableModel(parent) + CustomTableModel(parent) { } @@ -97,18 +94,16 @@ void DeclarativeTableModel::append(QVariantList values) dataChanged(beginIndex, endIndex); } -void DeclarativeTableModel::appendPoint(QXYModelMapper *mapper, DeclarativeXyPoint *point) -{ - Q_UNUSED(mapper) - Q_UNUSED(point) - // TODO: XYModelMapper implementation has change, this code has to be updated. -// qDebug() << "DeclarativeTableModel::appendPoint:" << point; -// QVariantList values; -// values.insert(mapper->mapX(), point->x()); -// values.insert(mapper->mapY(), point->y()); -// append(values); -} +//void DeclarativeTableModel::appendPoint(QXYModelMapper *mapper, DeclarativeXyPoint *point) +//{ +// Q_UNUSED(mapper) +// Q_UNUSED(point) +// // TODO: XYModelMapper implementation has change, this code has to be updated. +//// qDebug() << "DeclarativeTableModel::appendPoint:" << point; +//// QVariantList values; +//// values.insert(mapper->mapX(), point->x()); +//// values.insert(mapper->mapY(), point->y()); +//// append(values); +//} #include "moc_declarativemodel.cpp" - -QTCOMMERCIALCHART_END_NAMESPACE diff --git a/plugins/declarative/declarativemodel.h b/demos/qmlcustommodel/declarativemodel.h similarity index 85% rename from plugins/declarative/declarativemodel.h rename to demos/qmlcustommodel/declarativemodel.h index 143a2bc..94fc3d1 100644 --- a/plugins/declarative/declarativemodel.h +++ b/demos/qmlcustommodel/declarativemodel.h @@ -21,21 +21,11 @@ #ifndef DECLARATIVEMODEL_H #define DECLARATIVEMODEL_H -#include "qchartglobal.h" -#include "declarativexypoint.h" -#include -#include "../src/charttablemodel.h" // TODO -#include -#include +#include "customtablemodel.h" #include #include #include -QTCOMMERCIALCHART_BEGIN_NAMESPACE - -// TODO: move model into demo app, -// the ChartModel API will not be implemented by charts declarative plugin - class DeclarativeTableModelElement : public QObject { Q_OBJECT @@ -49,7 +39,7 @@ private: QVariantList m_values; }; -class DeclarativeTableModel : public ChartTableModel, public QDeclarativeParserStatus +class DeclarativeTableModel : public CustomTableModel, public QDeclarativeParserStatus { Q_OBJECT Q_INTERFACES(QDeclarativeParserStatus) @@ -59,7 +49,7 @@ class DeclarativeTableModel : public ChartTableModel, public QDeclarativeParserS public: explicit DeclarativeTableModel(QObject *parent = 0); QDeclarativeListProperty modelChildren(); - void appendPoint(QXYModelMapper *mapper, DeclarativeXyPoint *point); +// void appendPoint(QXYModelMapper *mapper, DeclarativeXyPoint *point); public: // from QDeclarativeParserStatus void classBegin(); @@ -71,6 +61,4 @@ public Q_SLOTS: QObject *element); }; -QTCOMMERCIALCHART_END_NAMESPACE - #endif // DECLARATIVEMODEL_H diff --git a/demos/qmlcustommodel/main.cpp b/demos/qmlcustommodel/main.cpp index 600b5f3..670f407 100644 --- a/demos/qmlcustommodel/main.cpp +++ b/demos/qmlcustommodel/main.cpp @@ -20,13 +20,25 @@ #include #include +#include +#include +#include "declarativemodel.h" +#include "customtablemodel.h" #include "qmlapplicationviewer.h" +const char *uri = "QmlCustomModel"; + Q_DECL_EXPORT int main(int argc, char *argv[]) { QScopedPointer app(createApplication(argc, argv)); QScopedPointer viewer(QmlApplicationViewer::create()); + // @uri QmlCustomModel + qmlRegisterUncreatableType(uri, 1, 0, "AbstractItemModel", + QLatin1String("Trying to create uncreatable: AbstractItemModel.")); + qmlRegisterType(uri, 1, 0, "CustomModel"); + qmlRegisterType(uri, 1, 0, "CustomModelElement"); + viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto); viewer->setSource(QUrl("qrc:/qml/qmlcustommodel/loader.qml")); viewer->showExpanded(); diff --git a/demos/qmlcustommodel/qml/qmlcustommodel/main.qml b/demos/qmlcustommodel/qml/qmlcustommodel/main.qml index 7306a6e..3a13382 100644 --- a/demos/qmlcustommodel/qml/qmlcustommodel/main.qml +++ b/demos/qmlcustommodel/qml/qmlcustommodel/main.qml @@ -20,6 +20,7 @@ import QtQuick 1.0 import QtCommercial.Chart 1.0 +import QmlCustomModel 1.0 Rectangle { width: parent.width @@ -31,14 +32,14 @@ Rectangle { anchors.fill: parent theme: ChartView.ChartThemeLight - // For dynamic data you can use the ChartModel API. - ChartModel { - id: chartModel - ChartModelElement { values: ["Volkswagen", 13.5, 4.4] } - ChartModelElement { values: ["Toyota", 10.9, 4.2] } - ChartModelElement { values: ["Ford", 8.6, 3.0] } - ChartModelElement { values: ["Skoda", 8.2, 1.9] } - ChartModelElement { values: ["Volvo", 6.8, 1.5] } + // For dynamic data we use a custom data model derived from QAbstractiItemModel + CustomModel { + id: customModel + CustomModelElement { values: ["Volkswagen", 13.5, 4.4] } + CustomModelElement { values: ["Toyota", 10.9, 4.2] } + CustomModelElement { values: ["Ford", 8.6, 3.0] } + CustomModelElement { values: ["Skoda", 8.2, 1.9] } + CustomModelElement { values: ["Volvo", 6.8, 1.5] } } LineSeries { @@ -46,7 +47,7 @@ Rectangle { // TODO: the new mapper api // VXYModelMapper { -// model: chartModel +// model: customModel // xColumn: 0 // yColumn: 1 // } @@ -62,7 +63,7 @@ Rectangle { VPieModelMapper { series: pieSeries - model: chartModel + model: customModel labelsColumn: 0 valuesColumn: 1 } @@ -73,9 +74,8 @@ Rectangle { // lowerSeries: LineSeries {} // } - // TODO: BarSeries with ChartModel base model API // BarSeries { -// model: chartModel +// model: customModel // modelMapper.first: 0 // } } @@ -85,7 +85,7 @@ Rectangle { // pieSeries.model.append(["Others", 52.0]); // TODO: show how to use data from a list model in a chart view - // i.e. copy the data into a chart model + // i.e. copy the data into a custom model // ListModel { // id: listModel // ListElement { diff --git a/demos/qmlcustommodel/qmlcustommodel.pro b/demos/qmlcustommodel/qmlcustommodel.pro index 394db8f..faae6fa 100644 --- a/demos/qmlcustommodel/qmlcustommodel.pro +++ b/demos/qmlcustommodel/qmlcustommodel.pro @@ -3,7 +3,11 @@ } RESOURCES += resources.qrc -SOURCES += main.cpp +SOURCES += main.cpp\ + customtablemodel.cpp \ + declarativemodel.cpp +HEADERS += customtablemodel.h \ + declarativemodel.h include(qmlapplicationviewer/qmlapplicationviewer.pri) diff --git a/plugins/declarative/declarative.pro b/plugins/declarative/declarative.pro index 7ff1792..73cc447 100644 --- a/plugins/declarative/declarative.pro +++ b/plugins/declarative/declarative.pro @@ -20,8 +20,7 @@ SOURCES += \ declarativeareaseries.cpp \ declarativescatterseries.cpp \ declarativepieseries.cpp \ - declarativebarseries.cpp \ - declarativemodel.cpp + declarativebarseries.cpp HEADERS += \ declarativechart.h \ @@ -32,8 +31,7 @@ HEADERS += \ declarativeareaseries.h \ declarativescatterseries.h \ declarativepieseries.h \ - declarativebarseries.h \ - declarativemodel.h + declarativebarseries.h TARGETPATH = QtCommercial/Chart target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH diff --git a/plugins/declarative/declarativeareaseries.h b/plugins/declarative/declarativeareaseries.h index 2f78381..790de23 100644 --- a/plugins/declarative/declarativeareaseries.h +++ b/plugins/declarative/declarativeareaseries.h @@ -37,10 +37,6 @@ public: explicit DeclarativeAreaSeries(QObject *parent = 0); public: - bool setDeclarativeUpperModel(DeclarativeTableModel *model); - DeclarativeTableModel *declarativeUpperModel(); - bool setDeclarativeLowerModel(DeclarativeTableModel *model); - DeclarativeTableModel *declarativeLowerModel(); QXYModelMapper* upperModelMapper() const; QXYModelMapper* lowerModelMapper() const; public: diff --git a/plugins/declarative/declarativebarseries.h b/plugins/declarative/declarativebarseries.h index 7b0f0de..09a3275 100644 --- a/plugins/declarative/declarativebarseries.h +++ b/plugins/declarative/declarativebarseries.h @@ -22,10 +22,10 @@ #define DECLARATIVEBARSERIES_H #include "qchartglobal.h" -#include "declarativemodel.h" #include #include #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/declarativelineseries.h b/plugins/declarative/declarativelineseries.h index e5916ea..869d63e 100644 --- a/plugins/declarative/declarativelineseries.h +++ b/plugins/declarative/declarativelineseries.h @@ -25,7 +25,7 @@ #include "qlineseries.h" #include "declarativexyseries.h" #include -#include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/declarativepieseries.h b/plugins/declarative/declarativepieseries.h index c10e01f..5ee9831 100644 --- a/plugins/declarative/declarativepieseries.h +++ b/plugins/declarative/declarativepieseries.h @@ -27,7 +27,6 @@ #include #include #include -#include "declarativemodel.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/declarativescatterseries.h b/plugins/declarative/declarativescatterseries.h index cf3547f..2ea0ed5 100644 --- a/plugins/declarative/declarativescatterseries.h +++ b/plugins/declarative/declarativescatterseries.h @@ -24,6 +24,7 @@ #include "qchartglobal.h" #include "qscatterseries.h" #include "declarativexyseries.h" +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/declarativesplineseries.h b/plugins/declarative/declarativesplineseries.h index 6f09513..2800b0a 100644 --- a/plugins/declarative/declarativesplineseries.h +++ b/plugins/declarative/declarativesplineseries.h @@ -25,6 +25,7 @@ #include "qsplineseries.h" #include "declarativexyseries.h" #include +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/declarativexyseries.h b/plugins/declarative/declarativexyseries.h index c1f7b34..8b7d761 100644 --- a/plugins/declarative/declarativexyseries.h +++ b/plugins/declarative/declarativexyseries.h @@ -23,7 +23,7 @@ #include "qchartglobal.h" #include "declarativexypoint.h" -#include "declarativemodel.h" +#include QTCOMMERCIALCHART_BEGIN_NAMESPACE diff --git a/plugins/declarative/plugin.cpp b/plugins/declarative/plugin.cpp index a64d25a..d585af3 100644 --- a/plugins/declarative/plugin.cpp +++ b/plugins/declarative/plugin.cpp @@ -30,7 +30,6 @@ #include "declarativescatterseries.h" #include "declarativebarseries.h" #include "declarativepieseries.h" -#include "declarativemodel.h" #include #include #include @@ -55,8 +54,6 @@ public: qmlRegisterType(uri, 1, 0, "GroupedBarSeries"); qmlRegisterType(uri, 1, 0, "PieSeries"); qmlRegisterType(uri, 1, 0, "PieSlice"); - qmlRegisterType(uri, 1, 0, "ChartModel"); - qmlRegisterType(uri, 1, 0, "ChartModelElement"); qmlRegisterType(uri, 1, 0, "BarSet"); qmlRegisterUncreatableType(uri, 1, 0, "QPieSeries", diff --git a/src/src.pro b/src/src.pro index 50f616b..565ba01 100644 --- a/src/src.pro +++ b/src/src.pro @@ -37,8 +37,7 @@ SOURCES += \ $$PWD/qabstractseries.cpp \ $$PWD/chartbackground.cpp \ $$PWD/chart.cpp \ - $$PWD/scroller.cpp \ - $$PWD/charttablemodel.cpp + $$PWD/scroller.cpp PRIVATE_HEADERS += \ $$PWD/chartdataset_p.h \ $$PWD/chartitem_p.h \ @@ -51,8 +50,7 @@ PRIVATE_HEADERS += \ $$PWD/qchart_p.h \ $$PWD/qchartview_p.h \ $$PWD/scroller_p.h \ - $$PWD/qabstractseries_p.h \ - $$PWD/charttablemodel.h + $$PWD/qabstractseries_p.h PUBLIC_HEADERS += \ $$PWD/qchart.h \ $$PWD/qchartglobal.h \