diff options
Diffstat (limited to 'src/declarative/util/qmllistmodel.cpp')
-rw-r--r-- | src/declarative/util/qmllistmodel.cpp | 78 |
1 files changed, 29 insertions, 49 deletions
diff --git a/src/declarative/util/qmllistmodel.cpp b/src/declarative/util/qmllistmodel.cpp index cc85661..f5f76b0 100644 --- a/src/declarative/util/qmllistmodel.cpp +++ b/src/declarative/util/qmllistmodel.cpp @@ -49,6 +49,8 @@ #include <qmlbindablevalue.h> #include "qmllistmodel.h" +Q_DECLARE_METATYPE(QListModelInterface *) + QT_BEGIN_NAMESPACE #define DATA_ROLE_ID 1 @@ -67,8 +69,6 @@ struct ListModelData ListInstruction *instructions() const { return (ListInstruction *)((char *)this + sizeof(ListModelData)); } }; -Q_DECLARE_METATYPE(QListModelInterface *) - /*! \qmlclass ListModel \brief The ListModel element defines a free-form list data source. @@ -169,31 +169,6 @@ Q_DECLARE_METATYPE(QListModelInterface *) */ -struct ModelNode; -class ListModel : public QListModelInterface -{ - Q_OBJECT -public: - ListModel(QObject *parent=0); - - virtual QList<int> roles() const; - virtual QString toString(int role) const; - Q_PROPERTY(int count READ count) - virtual int count() const; - virtual QHash<int,QVariant> data(int index, const QList<int> &roles = (QList<int>())) const; - -private: - QVariant valueForNode(ModelNode *) const; - mutable QStringList roleStrings; - friend class ListModelParser; - friend struct ModelNode; - - void checkRoles() const; - void addRole(const QString &) const; - mutable bool _rolesOk; - ModelNode *_root; -}; - class ModelObject : public QObject { Q_OBJECT @@ -220,9 +195,9 @@ struct ModelNode QList<QVariant> values; QHash<QString, ModelNode *> properties; - ListModel *model() { + QmlListModel *model() { if (!modelCache) { - modelCache = new ListModel; + modelCache = new QmlListModel; modelCache->_root = this; } return modelCache; @@ -240,22 +215,25 @@ struct ModelNode return objectCache; } - ListModel *modelCache; + QmlListModel *modelCache; ModelObject *objectCache; }; -Q_DECLARE_METATYPE(ModelNode *) ModelObject::ModelObject(ModelNode *node) : _node(node), _haveProperties(false), _mo(new QmlOpenMetaObject(this)) { } -ListModel::ListModel(QObject *parent) +QmlListModel::QmlListModel(QObject *parent) : QListModelInterface(parent), _rolesOk(false), _root(0) { } -void ListModel::checkRoles() const +QmlListModel::~QmlListModel() +{ +} + +void QmlListModel::checkRoles() const { if (_rolesOk) return; @@ -271,13 +249,13 @@ void ListModel::checkRoles() const _rolesOk = true; } -void ListModel::addRole(const QString &role) const +void QmlListModel::addRole(const QString &role) const { if (!roleStrings.contains(role)) roleStrings << role; } -QList<int> ListModel::roles() const +QList<int> QmlListModel::roles() const { checkRoles(); QList<int> rv; @@ -286,7 +264,7 @@ QList<int> ListModel::roles() const return rv; } -QString ListModel::toString(int role) const +QString QmlListModel::toString(int role) const { checkRoles(); if (role < roleStrings.count()) @@ -295,7 +273,7 @@ QString ListModel::toString(int role) const return QString(); } -QVariant ListModel::valueForNode(ModelNode *node) const +QVariant QmlListModel::valueForNode(ModelNode *node) const { QObject *rv = 0; @@ -328,7 +306,7 @@ QVariant ListModel::valueForNode(ModelNode *node) const return QVariant(); } -QHash<int,QVariant> ListModel::data(int index, const QList<int> &roles) const +QHash<int,QVariant> QmlListModel::data(int index, const QList<int> &roles) const { checkRoles(); QHash<int, QVariant> rv; @@ -353,13 +331,13 @@ QHash<int,QVariant> ListModel::data(int index, const QList<int> &roles) const return rv; } -int ListModel::count() const +int QmlListModel::count() const { if (!_root) return 0; return _root->values.count(); } -class ListModelParser : public QmlCustomParser +class QmlListModelParser : public QmlCustomParser { public: QByteArray compile(const QList<QmlCustomParserProperty> &, bool *ok); @@ -367,7 +345,7 @@ public: void setCustomData(QObject *, const QByteArray &); }; -bool ListModelParser::compileProperty(const QmlCustomParserProperty &prop, QList<ListInstruction> &instr, QByteArray &data) +bool QmlListModelParser::compileProperty(const QmlCustomParserProperty &prop, QList<ListInstruction> &instr, QByteArray &data) { QList<QVariant> values = prop.assignedValues(); for(int ii = 0; ii < values.count(); ++ii) { @@ -434,7 +412,7 @@ bool ListModelParser::compileProperty(const QmlCustomParserProperty &prop, QList return true; } -QByteArray ListModelParser::compile(const QList<QmlCustomParserProperty> &customProps, bool *ok) +QByteArray QmlListModelParser::compile(const QList<QmlCustomParserProperty> &customProps, bool *ok) { *ok = true; QList<ListInstruction> instr; @@ -471,9 +449,9 @@ QByteArray ListModelParser::compile(const QList<QmlCustomParserProperty> &custom return rv; } -void ListModelParser::setCustomData(QObject *obj, const QByteArray &d) +void QmlListModelParser::setCustomData(QObject *obj, const QByteArray &d) { - ListModel *rv = static_cast<ListModel *>(obj); + QmlListModel *rv = static_cast<QmlListModel *>(obj); ModelNode *root = new ModelNode; rv->_root = root; @@ -519,16 +497,14 @@ void ListModelParser::setCustomData(QObject *obj, const QByteArray &d) } } -QML_DECLARE_TYPE(ListModel) -QML_DEFINE_CUSTOM_TYPE(ListModel, ListModel, ListModelParser) +QML_DEFINE_CUSTOM_TYPE(QmlListModel, ListModel, QmlListModelParser) // ### FIXME -class ListElement : public QObject +class QmlListElement : public QObject { Q_OBJECT }; -QML_DECLARE_TYPE(ListElement) -QML_DEFINE_TYPE(ListElement,ListElement) +QML_DEFINE_TYPE(QmlListElement,ListElement) static void dump(ModelNode *node, int ind) { @@ -567,4 +543,8 @@ ModelNode::~ModelNode() } QT_END_NAMESPACE + +Q_DECLARE_METATYPE(ModelNode *) +QML_DECLARE_TYPE(QmlListElement) + #include "qmllistmodel.moc" |