source: trunk/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.h@ 506

Last change on this file since 506 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 5.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the examples of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef Patternist_QObjectNodeModel_H
43#define Patternist_QObjectNodeModel_H
44
45#include <QSimpleXmlNodeModel>
46
47QT_BEGIN_HEADER
48QT_BEGIN_NAMESPACE
49
50class QObject;
51class PropertyToAtomicValue;
52
53/**
54 * @short Delegates QtCore's QObject into Patternist's QAbstractXmlNodeModel.
55 * known as pre/post numbering.
56 *
57 * QObjectXmlModel sets the toggle on QXmlNodeModelIndex to @c true, if it
58 * represents a property of the QObject. That is, if the QXmlNodeModelIndex is
59 * an attribute.
60 *
61 * @author Frans Englich <[email protected]>
62 */
63class QObjectXmlModel : public QSimpleXmlNodeModel
64{
65 public:
66 QObjectXmlModel(QObject *const object, const QXmlNamePool &np);
67
68 QXmlNodeModelIndex root() const;
69
70//! [0]
71 virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &n1, const QXmlNodeModelIndex &n2) const;
72 virtual QXmlName name(const QXmlNodeModelIndex &n) const;
73 virtual QUrl documentUri(const QXmlNodeModelIndex &n) const;
74 virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &n) const;
75 virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const;
76 virtual QVariant typedValue(const QXmlNodeModelIndex &n) const;
77 virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex&) const;
78 virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis, const QXmlNodeModelIndex&) const;
79//! [0]
80
81 private:
82 /**
83 * The highest three bits are used to signify whether the node index
84 * is an artificial node.
85 *
86 * @short if QXmlNodeModelIndex::additionalData() has the
87 * QObjectPropery flag set, then the QXmlNodeModelIndex is an
88 * attribute of the QObject element, and the remaining bits form
89 * an offset to the QObject property that the QXmlNodeModelIndex
90 * refers to.
91 *
92 */
93//! [3]
94 enum QObjectNodeType
95 {
96 IsQObject = 0,
97 QObjectProperty = 1 << 26,
98 MetaObjects = 2 << 26,
99 MetaObject = 3 << 26,
100 MetaObjectClassName = 4 << 26,
101 MetaObjectSuperClass = 5 << 26,
102 QObjectClassName = 6 << 26
103 };
104//! [3]
105
106//! [1]
107 typedef QVector<const QMetaObject *> AllMetaObjects;
108//! [1]
109 AllMetaObjects allMetaObjects() const;
110
111 static QObjectNodeType toNodeType(const QXmlNodeModelIndex &n);
112 static bool isTypeSupported(QVariant::Type type);
113 static inline QObject *asQObject(const QXmlNodeModelIndex &n);
114 static inline bool isProperty(const QXmlNodeModelIndex n);
115 static inline QMetaProperty toMetaProperty(const QXmlNodeModelIndex &n);
116 /**
117 * Returns the ancestors of @p n. Does therefore not include
118 * @p n.
119 */
120 inline QXmlNodeModelIndex::List ancestors(const QXmlNodeModelIndex n) const;
121 QXmlNodeModelIndex qObjectSibling(const int pos,
122 const QXmlNodeModelIndex &n) const;
123 QXmlNodeModelIndex metaObjectSibling(const int pos,
124 const QXmlNodeModelIndex &n) const;
125
126//! [2]
127 const QUrl m_baseURI;
128 QObject *const m_root;
129//! [4]
130 const AllMetaObjects m_allMetaObjects;
131//! [4]
132//! [2]
133};
134
135QT_END_NAMESPACE
136
137QT_END_HEADER
138
139#endif
Note: See TracBrowser for help on using the repository browser.