From b855240b782395f94315f43ea3e7e182299fac48 Mon Sep 17 00:00:00 2001 From: Matthew Vogt Date: Thu, 16 Feb 2012 14:43:03 +1000 Subject: Rename QDeclarative symbols to QQuick and QQml Symbols beginning with QDeclarative are already exported by the quick1 module. Users can apply the bin/rename-qtdeclarative-symbols.sh script to modify client code using the previous names of the renamed symbols. Task-number: QTBUG-23737 Change-Id: Ifaa482663767634931e8711a8e9bf6e404859e66 Reviewed-by: Martin Jones --- src/qml/qml/qqmldata_p.h | 207 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 src/qml/qml/qqmldata_p.h (limited to 'src/qml/qml/qqmldata_p.h') diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h new file mode 100644 index 0000000000..e4ba44583d --- /dev/null +++ b/src/qml/qml/qqmldata_p.h @@ -0,0 +1,207 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQMLDATA_P_H +#define QQMLDATA_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +template class QHash; +class QQmlGuardImpl; +class QQmlCompiledData; +class QQmlAbstractBinding; +class QQmlContext; +class QQmlPropertyCache; +class QQmlContextData; +class QQmlNotifier; +class QQmlDataExtended; +class QQmlNotifierEndpoint; +// This class is structured in such a way, that simply zero'ing it is the +// default state for elemental object allocations. This is crucial in the +// workings of the QQmlInstruction::CreateSimpleObject instruction. +// Don't change anything here without first considering that case! +class Q_QML_EXPORT QQmlData : public QAbstractDeclarativeData +{ +public: + QQmlData() + : ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false), + hasTaintedV8Object(false), notifyList(0), context(0), outerContext(0), bindings(0), + nextContextObject(0), prevContextObject(0), bindingBitsSize(0), bindingBits(0), + lineNumber(0), columnNumber(0), deferredComponent(0), deferredIdx(0), v8objectid(0), + propertyCache(0), guards(0), extendedData(0) { + init(); + } + + static inline void init() { + QAbstractDeclarativeData::destroyed = destroyed; + QAbstractDeclarativeData::parentChanged = parentChanged; + QAbstractDeclarativeData::objectNameChanged = objectNameChanged; + QAbstractDeclarativeData::signalEmitted = signalEmitted; + } + + static void destroyed(QAbstractDeclarativeData *, QObject *); + static void parentChanged(QAbstractDeclarativeData *, QObject *, QObject *); + static void objectNameChanged(QAbstractDeclarativeData *, QObject *); + static void signalEmitted(QAbstractDeclarativeData *, QObject *, int, void **); + + void destroyed(QObject *); + void parentChanged(QObject *, QObject *); + void objectNameChanged(QObject *); + + void setImplicitDestructible() { + if (!explicitIndestructibleSet) indestructible = false; + } + + quint32 ownMemory:1; + quint32 ownContext:1; + quint32 indestructible:1; + quint32 explicitIndestructibleSet:1; + quint32 hasTaintedV8Object:1; + quint32 dummy:27; + + struct NotifyList { + quint64 connectionMask; + + quint16 maximumTodoIndex; + quint16 notifiesSize; + + QQmlNotifierEndpoint *todo; + QQmlNotifierEndpoint**notifies; + void layout(); + private: + void layout(QQmlNotifierEndpoint*); + }; + NotifyList *notifyList; + + inline QQmlNotifierEndpoint *notify(int index); + void addNotify(int index, QQmlNotifierEndpoint *); + + // The context that created the C++ object + QQmlContextData *context; + // The outermost context in which this object lives + QQmlContextData *outerContext; + + QQmlAbstractBinding *bindings; + + // Linked list for QQmlContext::contextObjects + QQmlData *nextContextObject; + QQmlData**prevContextObject; + + int bindingBitsSize; + quint32 *bindingBits; + bool hasBindingBit(int) const; + void clearBindingBit(int); + void setBindingBit(QObject *obj, int); + + ushort lineNumber; + ushort columnNumber; + + QQmlCompiledData *deferredComponent; // Can't this be found from the context? + unsigned int deferredIdx; + + quint32 v8objectid; + v8::Persistent v8object; + + QQmlPropertyCache *propertyCache; + + QQmlGuardImpl *guards; + + static QQmlData *get(const QObject *object, bool create = false) { + QObjectPrivate *priv = QObjectPrivate::get(const_cast(object)); + if (priv->wasDeleted) { + Q_ASSERT(!create); + return 0; + } else if (priv->declarativeData) { + return static_cast(priv->declarativeData); + } else if (create) { + priv->declarativeData = new QQmlData; + return static_cast(priv->declarativeData); + } else { + return 0; + } + } + + bool hasExtendedData() const { return extendedData != 0; } + QQmlNotifier *objectNameNotifier() const; + QHash *attachedProperties() const; + +private: + // For objectNameNotifier and attachedProperties + mutable QQmlDataExtended *extendedData; +}; + +QQmlNotifierEndpoint *QQmlData::notify(int index) +{ + Q_ASSERT(index <= 0xFFFF); + + if (!notifyList || !(notifyList->connectionMask & (1ULL << quint64(index % 64)))) { + return 0; + } else if (index < notifyList->notifiesSize) { + return notifyList->notifies[index]; + } else if (index <= notifyList->maximumTodoIndex) { + notifyList->layout(); + } + + if (index < notifyList->notifiesSize) { + return notifyList->notifies[index]; + } else { + return 0; + } +} + +QT_END_NAMESPACE + +#endif // QQMLDATA_P_H -- cgit v1.2.3