summaryrefslogtreecommitdiffstats
path: root/kjsembed/jsproxy.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit90825e2392b2d70e43c7a25b8a3752299a933894 (patch)
treee33aa27f02b74604afbfd0ea4f1cfca8833d882a /kjsembed/jsproxy.h
downloadtdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.tar.gz
tdebindings-90825e2392b2d70e43c7a25b8a3752299a933894.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kjsembed/jsproxy.h')
-rw-r--r--kjsembed/jsproxy.h184
1 files changed, 184 insertions, 0 deletions
diff --git a/kjsembed/jsproxy.h b/kjsembed/jsproxy.h
new file mode 100644
index 00000000..df7615eb
--- /dev/null
+++ b/kjsembed/jsproxy.h
@@ -0,0 +1,184 @@
+// -*- c++ -*-
+
+/*
+ * Copyright (C) 2001-2004, Richard J. Moore <rich@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KJSEMBEDJSPROXY_H
+#define KJSEMBEDJSPROXY_H
+
+#include <kjs/object.h>
+#include "global.h"
+
+namespace KJSEmbed {
+
+class JSObjectProxy;
+class JSValueProxy;
+class JSOpaqueProxy;
+
+/**
+ * Base class for all proxy objects.
+ *
+ * @version $Id$
+ * @author Richard Moore, rich@kde.org
+ */
+class KJSEMBED_EXPORT JSProxy : public KJS::ObjectImp
+{
+public:
+ /** Identifiers for the various types of proxy. */
+ enum ProxyType {
+ UnknownProxy,
+ ObjectProxy,
+ ValueProxy,
+ OpaqueProxy,
+ BuiltinProxy
+ };
+
+ /** Identifies the owner of the currently wrapped pointer */
+ enum Owner { Native, /** This is a C++ pointer and it will not be deleted by the garbage collector */
+ JavaScript /** This pointer is owned by Javascript and it will be deleted by the garbage collector */
+ };
+ /**
+ * Structure to store information about a method.
+ */
+ struct MethodTable {
+ int id;
+ const char *name;
+ };
+
+ /**
+ * Adds a @ref MethodTable of methods to an object.
+ * Note: The method table MUST end in a {0,0} entry.
+ */
+ template< class T >
+ static void addMethods( KJS::ExecState *exec, MethodTable *table, KJS::Object &object )
+ {
+ int idx = 0;
+ if( !table[idx].name ) return; // check for empty list
+ do {
+ T *meth = new T( exec, table[idx].id );
+ object.put( exec , table[idx].name, KJS::Object(meth), KJS::Function );
+ ++idx;
+ } while( table[idx].name );
+ }
+
+ /**
+ * Structure to store information about enums.
+ */
+ struct EnumTable {
+ const char *id;
+ int val;
+ };
+
+ /**
+ * Adds a @ref EnumTable of static values to an object.
+ * Note: The method table MUST end in a {0,0} entry.
+ */
+ static void addEnums( KJS::ExecState *exec, EnumTable *table, KJS::Object &object );
+
+ /**
+ * Checks to see if an object is a desired type.
+ * @param object - the object you want to test.
+ * @param prxyType - the type of prxy you want.
+ * @param classname - the name of the class you want.
+ * @returns if the two above conditions are met.
+ */
+ static bool checkType( const KJS::Object &object, ProxyType prxyType, const QString &classname);
+
+
+ JSProxy( int type );
+ virtual ~JSProxy();
+
+ /** Returns the string value of the class name **/
+ virtual QString typeName() const = 0;
+ /** Returns true iff the content of this proxy inherits the specified base-class. */
+ virtual bool inherits( const char *clazz ) = 0;
+ /** Returns the type of the proxy. */
+ int proxyType() const { return proxytype; }
+
+ /** Returns true iff this is a JSObjectProxy. */
+ bool isObjectProxy() const { return proxytype == ObjectProxy; }
+
+ /** Returns true iff this is a JSValueProxy. */
+ bool isValueProxy() const { return proxytype == ValueProxy; }
+
+ /** Returns true iff this is a JSOpaqueProxy. */
+ bool isOpaqueProxy() const { return proxytype == OpaqueProxy; }
+
+ /** Returns this object as a JSObjectProxy or 0 if the type is wrong. */
+ JSObjectProxy *toObjectProxy();
+
+ /** Returns this object as a JSValueProxy or 0 if the type is wrong. */
+ JSValueProxy *toValueProxy();
+
+ /** Returns this object as a JSOpaqueProxy or 0 if the type is wrong. */
+ JSOpaqueProxy *toOpaqueProxy();
+
+ /**
+ * Converts the specified ValueImp to a JSProxy if possible, if the
+ * ValueImp is not a JSProxy then 0 is returned.
+ */
+ static JSProxy *toProxy( KJS::ValueImp *imp );
+
+ /**
+ * Converts the specified ValueImp to a JSObjectProxy if possible, if the
+ * ValueImp is not a JSObjectProxy then 0 is returned.
+ */
+ static JSObjectProxy *toObjectProxy( KJS::ValueImp *imp );
+
+ /**
+ * Converts the specified ValueImp to a JSValueProxy if possible, if the
+ * ValueImp is not a JSValueProxy then 0 is returned.
+ */
+ static JSValueProxy *toValueProxy( KJS::ValueImp *imp );
+
+ /**
+ * Converts the specified ValueImp to a JSOpaqueProxy if possible, if the
+ * ValueImp is not a JSOpaqueProxy then 0 is returned.
+ */
+ static JSOpaqueProxy *toOpaqueProxy( KJS::ValueImp *imp );
+
+ /**
+ * Transfers ownership of the contained pointer to C++ or Javascript.
+ * JavaScript - Javascript GC will delete the pointer
+ * Native - Javascript will not delete the pointer, but just the proxy.
+ */
+ void setOwner( Owner state = Native );
+
+ /**
+ * Returns the current ownership.
+ */
+ Owner owner() const;
+
+protected:
+ /**
+ * Who really owns the current pointer
+ */
+ Owner ownership;
+private:
+ int proxytype;
+ class JSProxyPrivate *d;
+};
+
+} // namespace KJSEmbed
+
+#endif // KJSEMBEDJSPROXYIMP_H
+
+// Local Variables:
+// c-basic-offset: 4
+// End: