2 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef BINDINGS_QT_INSTANCE_H_
21 #define BINDINGS_QT_INSTANCE_H_
23 #include <QtScript/qscriptengine.h>
25 #include "runtime_root.h"
36 class QtRuntimeMetaMethod;
38 class QtInstance : public Instance {
42 virtual Class* getClass() const;
43 virtual RuntimeObjectImp* newRuntimeObject(ExecState*);
48 virtual JSValue valueOf(ExecState*) const;
49 virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const;
51 void markAggregate(MarkStack&);
53 virtual JSValue invokeMethod(ExecState*, const MethodList&, const ArgList&);
55 virtual void getPropertyNames(ExecState*, PropertyNameArray&);
57 JSValue stringValue(ExecState* exec) const;
58 JSValue numberValue(ExecState* exec) const;
59 JSValue booleanValue() const;
61 QObject* getObject() const { return m_object; }
63 static PassRefPtr<QtInstance> getQtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership);
65 virtual bool getOwnPropertySlot(JSObject*, ExecState*, const Identifier&, PropertySlot&);
66 virtual void put(JSObject*, ExecState*, const Identifier&, JSValue, PutPropertySlot&);
68 void removeCachedMethod(JSObject*);
70 static QtInstance* getInstance(JSObject*);
73 static PassRefPtr<QtInstance> create(QObject *instance, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership)
75 return adoptRef(new QtInstance(instance, rootObject, ownership));
80 QtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership); // Factory produced only..
81 mutable QtClass* m_class;
82 QPointer<QObject> m_object;
84 mutable QHash<QByteArray, JSObject*> m_methods;
85 mutable QHash<QString, QtField*> m_fields;
86 mutable QtRuntimeMetaMethod* m_defaultMethod;
87 QScriptEngine::ValueOwnership m_ownership;
90 } // namespace Bindings