diff -r 000000000000 -r 1918ee327afb examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef Patternist_QObjectNodeModel_H +#define Patternist_QObjectNodeModel_H + +#include + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +class QObject; +class PropertyToAtomicValue; + +/** + * @short Delegates QtCore's QObject into Patternist's QAbstractXmlNodeModel. + * known as pre/post numbering. + * + * QObjectXmlModel sets the toggle on QXmlNodeModelIndex to @c true, if it + * represents a property of the QObject. That is, if the QXmlNodeModelIndex is + * an attribute. + * + * @author Frans Englich + */ +class QObjectXmlModel : public QSimpleXmlNodeModel +{ + public: + QObjectXmlModel(QObject *const object, const QXmlNamePool &np); + + QXmlNodeModelIndex root() const; + +//! [0] + virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &n1, const QXmlNodeModelIndex &n2) const; + virtual QXmlName name(const QXmlNodeModelIndex &n) const; + virtual QUrl documentUri(const QXmlNodeModelIndex &n) const; + virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &n) const; + virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const; + virtual QVariant typedValue(const QXmlNodeModelIndex &n) const; + virtual QVector attributes(const QXmlNodeModelIndex&) const; + virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis, const QXmlNodeModelIndex&) const; +//! [0] + + private: + /** + * The highest three bits are used to signify whether the node index + * is an artificial node. + * + * @short if QXmlNodeModelIndex::additionalData() has the + * QObjectPropery flag set, then the QXmlNodeModelIndex is an + * attribute of the QObject element, and the remaining bits form + * an offset to the QObject property that the QXmlNodeModelIndex + * refers to. + * + */ +//! [3] + enum QObjectNodeType + { + IsQObject = 0, + QObjectProperty = 1 << 26, + MetaObjects = 2 << 26, + MetaObject = 3 << 26, + MetaObjectClassName = 4 << 26, + MetaObjectSuperClass = 5 << 26, + QObjectClassName = 6 << 26 + }; +//! [3] + +//! [1] + typedef QVector AllMetaObjects; +//! [1] + AllMetaObjects allMetaObjects() const; + + static QObjectNodeType toNodeType(const QXmlNodeModelIndex &n); + static bool isTypeSupported(QVariant::Type type); + static inline QObject *asQObject(const QXmlNodeModelIndex &n); + static inline bool isProperty(const QXmlNodeModelIndex n); + static inline QMetaProperty toMetaProperty(const QXmlNodeModelIndex &n); + /** + * Returns the ancestors of @p n. Does therefore not include + * @p n. + */ + inline QXmlNodeModelIndex::List ancestors(const QXmlNodeModelIndex n) const; + QXmlNodeModelIndex qObjectSibling(const int pos, + const QXmlNodeModelIndex &n) const; + QXmlNodeModelIndex metaObjectSibling(const int pos, + const QXmlNodeModelIndex &n) const; + +//! [2] + const QUrl m_baseURI; + QObject *const m_root; +//! [4] + const AllMetaObjects m_allMetaObjects; +//! [4] +//! [2] +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif