/****************************************************************************
**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
**
**
**
+**
** $QT_END_LICENSE$
**
****************************************************************************/
class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativePropertyPrivate : public QDeclarativeRefCount
{
public:
- enum WriteFlag { BypassInterceptor = 0x01, DontRemoveBinding = 0x02, RemoveBindingOnAliasWrite = 0x04 };
+ enum WriteFlag {
+ BypassInterceptor = 0x01,
+ DontRemoveBinding = 0x02,
+ RemoveBindingOnAliasWrite = 0x04
+ };
Q_DECLARE_FLAGS(WriteFlags, WriteFlag)
- QDeclarativePropertyPrivate()
- : context(0), engine(0), object(0), isNameCached(false) {}
-
QDeclarativeContextData *context;
QDeclarativeEngine *engine;
QDeclarativeGuard<QObject> object;
+ QDeclarativePropertyData core;
+
bool isNameCached:1;
- QDeclarativePropertyCache::Data core;
QString nameCache;
- // Describes the "virtual" value-type sub-property.
- QDeclarativePropertyCache::ValueTypeData valueType;
+ QDeclarativePropertyPrivate();
+
+ inline QDeclarativeContextData *effectiveContext() const;
void initProperty(QObject *obj, const QString &name);
void initDefault(QObject *obj);
static const QMetaObject *rawMetaObjectForType(QDeclarativeEnginePrivate *, int);
static bool writeEnumProperty(const QMetaProperty &prop, int idx, QObject *object,
const QVariant &value, int flags);
- static bool write(QObject *, const QDeclarativePropertyCache::Data &, const QVariant &,
+ static bool writeValueProperty(QObject *, QDeclarativeEngine *,
+ const QDeclarativePropertyData &,
+ const QVariant &, QDeclarativeContextData *,
+ WriteFlags flags = 0);
+ static bool write(QObject *, const QDeclarativePropertyData &, const QVariant &,
QDeclarativeContextData *, WriteFlags flags = 0);
static void findAliasTarget(QObject *, int, QObject **, int *);
- static QDeclarativeAbstractBinding *setBinding(QObject *, int coreIndex, int valueTypeIndex /* -1 */,
+ static QDeclarativeAbstractBinding *setBinding(QObject *, int coreIndex,
+ int valueTypeIndex /* -1 */,
QDeclarativeAbstractBinding *,
WriteFlags flags = DontRemoveBinding);
- static QDeclarativeAbstractBinding *setBindingNoEnable(QObject *, int coreIndex, int valueTypeIndex /* -1 */,
+ static QDeclarativeAbstractBinding *setBindingNoEnable(QObject *, int coreIndex,
+ int valueTypeIndex /* -1 */,
QDeclarativeAbstractBinding *);
- static QDeclarativeAbstractBinding *binding(QObject *, int coreIndex, int valueTypeIndex /* -1 */);
-
- static QByteArray saveValueType(const QMetaObject *, int,
- const QMetaObject *, int);
- static QByteArray saveProperty(const QMetaObject *, int);
-
- static QDeclarativeProperty restore(const QByteArray &, QObject *, QDeclarativeContextData *);
- static QDeclarativeProperty restore(const QDeclarativePropertyCache::Data &,
- const QDeclarativePropertyCache::ValueTypeData &,
- QObject *,
+ static QDeclarativeAbstractBinding *binding(QObject *, int coreIndex,
+ int valueTypeIndex /* -1 */);
+
+ static QDeclarativePropertyData saveValueType(const QMetaObject *, int,
+ const QMetaObject *, int,
+ QDeclarativeEngine *);
+ static QDeclarativeProperty restore(QObject *,
+ const QDeclarativePropertyData &,
QDeclarativeContextData *);
static bool equal(const QMetaObject *, const QMetaObject *);
static bool canConvert(const QMetaObject *from, const QMetaObject *to);
+ static inline QDeclarativePropertyPrivate *get(const QDeclarativeProperty &p) {
+ return p.d;
+ }
// "Public" (to QML) methods
static QDeclarativeAbstractBinding *binding(const QDeclarativeProperty &that);
QDeclarativeJavaScriptExpression *expression,
v8::Handle<v8::Value> result, bool isUndefined,
WriteFlags flags);
+ static bool writeBinding(QObject *, const QDeclarativePropertyData &,
+ QDeclarativeJavaScriptExpression *expression,
+ v8::Handle<v8::Value> result, bool isUndefined,
+ WriteFlags flags);
static int valueTypeCoreIndex(const QDeclarativeProperty &that);
static int bindingIndex(const QDeclarativeProperty &that);
+ static int bindingIndex(const QDeclarativePropertyData &that);
static QMetaMethod findSignalByName(const QMetaObject *mo, const QByteArray &);
static bool connect(const QObject *sender, int signal_index,
const QObject *receiver, int method_index,
int type = 0, int *types = 0);
static const QMetaObject *metaObjectForProperty(const QMetaObject *, int);
+ static void flushSignal(const QObject *sender, int signal_index);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativePropertyPrivate::WriteFlags)