source: trunk/src/declarative/qml/qdeclarativelist.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 5.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the QtDeclarative module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this 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 have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QDECLARATIVELIST_H
43#define QDECLARATIVELIST_H
44
45#include <QtCore/qglobal.h>
46#include <QtCore/qlist.h>
47#include <QtCore/qvariant.h>
48
49QT_BEGIN_HEADER
50
51QT_BEGIN_NAMESPACE
52
53QT_MODULE(Declarative)
54
55class QObject;
56struct QMetaObject;
57
58#ifndef QDECLARATIVELISTPROPERTY
59#define QDECLARATIVELISTPROPERTY
60template<typename T>
61class QDeclarativeListProperty {
62public:
63 typedef void (*AppendFunction)(QDeclarativeListProperty<T> *, T*);
64 typedef int (*CountFunction)(QDeclarativeListProperty<T> *);
65 typedef T *(*AtFunction)(QDeclarativeListProperty<T> *, int);
66 typedef void (*ClearFunction)(QDeclarativeListProperty<T> *);
67
68 QDeclarativeListProperty()
69 : object(0), data(0), append(0), count(0), at(0), clear(0), dummy1(0), dummy2(0) {}
70 QDeclarativeListProperty(QObject *o, QList<T *> &list)
71 : object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at),
72 clear(qlist_clear), dummy1(0), dummy2(0) {}
73 QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
74 ClearFunction r = 0)
75 : object(o), data(d), append(a), count(c), at(t), clear(r), dummy1(0), dummy2(0) {}
76
77 bool operator==(const QDeclarativeListProperty &o) const {
78 return object == o.object &&
79 data == o.data &&
80 append == o.append &&
81 count == o.count &&
82 at == o.at &&
83 clear == o.clear;
84 }
85
86 QObject *object;
87 void *data;
88
89 AppendFunction append;
90
91 CountFunction count;
92 AtFunction at;
93
94 ClearFunction clear;
95
96 void *dummy1;
97 void *dummy2;
98
99private:
100 static void qlist_append(QDeclarativeListProperty *p, T *v) {
101 reinterpret_cast<QList<T *> *>(p->data)->append(v);
102 }
103 static int qlist_count(QDeclarativeListProperty *p) {
104 return reinterpret_cast<QList<T *> *>(p->data)->count();
105 }
106 static T *qlist_at(QDeclarativeListProperty *p, int idx) {
107 return reinterpret_cast<QList<T *> *>(p->data)->at(idx);
108 }
109 static void qlist_clear(QDeclarativeListProperty *p) {
110 return reinterpret_cast<QList<T *> *>(p->data)->clear();
111 }
112};
113#endif
114
115class QDeclarativeEngine;
116class QDeclarativeListReferencePrivate;
117class Q_DECLARATIVE_EXPORT QDeclarativeListReference
118{
119public:
120 QDeclarativeListReference();
121 QDeclarativeListReference(QObject *, const char *property, QDeclarativeEngine * = 0);
122 QDeclarativeListReference(const QDeclarativeListReference &);
123 QDeclarativeListReference &operator=(const QDeclarativeListReference &);
124 ~QDeclarativeListReference();
125
126 bool isValid() const;
127
128 QObject *object() const;
129 const QMetaObject *listElementType() const;
130
131 bool canAppend() const;
132 bool canAt() const;
133 bool canClear() const;
134 bool canCount() const;
135
136 bool append(QObject *) const;
137 QObject *at(int) const;
138 bool clear() const;
139 int count() const;
140
141private:
142 friend class QDeclarativeListReferencePrivate;
143 QDeclarativeListReferencePrivate* d;
144};
145
146QT_END_NAMESPACE
147
148Q_DECLARE_METATYPE(QDeclarativeListReference)
149
150QT_END_HEADER
151
152#endif // QDECLARATIVELIST_H
Note: See TracBrowser for help on using the repository browser.