src/script/api/qscriptvalue.cpp
branchRCL_3
changeset 4 3b1da2848fc7
parent 3 41300fa6a67c
child 5 d3bac044e0f0
equal deleted inserted replaced
3:41300fa6a67c 4:3b1da2848fc7
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the QtScript module of the Qt Toolkit.
     7 ** This file is part of the QtScript module of the Qt Toolkit.
     8 **
     8 **
    52 #include "bridge/qscriptobject_p.h"
    52 #include "bridge/qscriptobject_p.h"
    53 #include "bridge/qscriptclassobject_p.h"
    53 #include "bridge/qscriptclassobject_p.h"
    54 #include "bridge/qscriptvariant_p.h"
    54 #include "bridge/qscriptvariant_p.h"
    55 #include "bridge/qscriptqobject_p.h"
    55 #include "bridge/qscriptqobject_p.h"
    56 #include "bridge/qscriptdeclarativeclass_p.h"
    56 #include "bridge/qscriptdeclarativeclass_p.h"
       
    57 #include "bridge/qscriptdeclarativeobject_p.h"
    57 
    58 
    58 /*!
    59 /*!
    59   \since 4.3
    60   \since 4.3
    60   \class QScriptValue
    61   \class QScriptValue
    61 
    62 
  1568 QObject *QScriptValue::toQObject() const
  1569 QObject *QScriptValue::toQObject() const
  1569 {
  1570 {
  1570     Q_D(const QScriptValue);
  1571     Q_D(const QScriptValue);
  1571     if (isQObject()) {
  1572     if (isQObject()) {
  1572         QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
  1573         QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
  1573         return static_cast<QScript::QObjectDelegate*>(object->delegate())->value();
  1574         QScriptObjectDelegate *delegate = object->delegate();
  1574     } else if (QScriptDeclarativeClass *dc = QScriptDeclarativeClass::scriptClass(*this)) {
  1575         if (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject)
  1575         return dc->toQObject(QScriptDeclarativeClass::object(*this));
  1576             return static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->toQObject(QScriptDeclarativeClass::object(*this));
       
  1577         return static_cast<QScript::QObjectDelegate*>(delegate)->value();
  1576     } else if (isVariant()) {
  1578     } else if (isVariant()) {
  1577         QVariant var = toVariant();
  1579         QVariant var = toVariant();
  1578         int type = var.userType();
  1580         int type = var.userType();
  1579         if ((type == QMetaType::QObjectStar) || (type == QMetaType::QWidgetStar))
  1581         if ((type == QMetaType::QObjectStar) || (type == QMetaType::QWidgetStar))
  1580             return *reinterpret_cast<QObject* const *>(var.constData());
  1582             return *reinterpret_cast<QObject* const *>(var.constData());
  2243     Q_D(const QScriptValue);
  2245     Q_D(const QScriptValue);
  2244     if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
  2246     if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
  2245         return false;
  2247         return false;
  2246     QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
  2248     QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
  2247     QScriptObjectDelegate *delegate = object->delegate();
  2249     QScriptObjectDelegate *delegate = object->delegate();
  2248     return (delegate && (delegate->type() == QScriptObjectDelegate::QtObject));
  2250     return (delegate && (delegate->type() == QScriptObjectDelegate::QtObject ||
       
  2251                          (delegate->type() == QScriptObjectDelegate::DeclarativeClassObject &&
       
  2252                           static_cast<QScript::DeclarativeObjectDelegate*>(delegate)->scriptClass()->isQObject())));
  2249 }
  2253 }
  2250 
  2254 
  2251 /*!
  2255 /*!
  2252   Returns true if this QScriptValue is a QMetaObject; otherwise returns
  2256   Returns true if this QScriptValue is a QMetaObject; otherwise returns
  2253   false.
  2257   false.