aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/proxyslot.h
diff options
context:
space:
mode:
Diffstat (limited to 'libpyside/proxyslot.h')
-rw-r--r--libpyside/proxyslot.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/libpyside/proxyslot.h b/libpyside/proxyslot.h
new file mode 100644
index 000000000..8e45eff6f
--- /dev/null
+++ b/libpyside/proxyslot.h
@@ -0,0 +1,81 @@
+/*
+* This file is part of the Shiboken Python Bindings Generator project.
+*
+* Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+*
+* Contact: PySide team <contact@pyside.org>
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public License
+* version 2.1 as published by the Free Software Foundation. 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.
+*
+* As a special exception to the GNU Lesser General Public License
+* version 2.1, the object code form of a "work that uses the Library"
+* may incorporate material from a header file that is part of the
+* Library. You may distribute such object code under terms of your
+* choice, provided that the incorporated material (i) does not exceed
+* more than 5% of the total size of the Library; and (ii) is limited to
+* numerical parameters, data structure layouts, accessors, macros,
+* inline functions and templates.
+*
+* This program 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA
+*/
+
+#include <QObject>
+#include <QHash>
+
+namespace PySide
+{
+
+class AbstractQObjectConnection;
+
+class ProxySlot : public QObject
+{
+public:
+ ProxySlot(QObject* signalSource);
+ bool connect(AbstractQObjectConnection* connection);
+protected:
+ /**
+ * Qt's meta-object system uses the qt_metacall() function to access the
+ * meta-information for a particular QObject object (its signals, slots,
+ * properties, etc.).
+ *
+ * About the implemmentation
+ *
+ * The call may indicate access to the meta-object of the QObject base
+ * class, we need to take care of this use case.
+ * If the QObject::qt_metacall() call returns -1, this means that the
+ * metacall has been handled by QObject and that there is nothing to do.
+ * In that case, we return immediately. Similarly, if the metacall isn't
+ * a slot invocation, we follow QObject's convention and return an
+ * identifier that can be handled by a subclass.
+ *
+ * If all goes well, we invoke the specified slot and return -1 to
+ * indicate that the metacall has been processed.
+ *
+ * \see \link http://doc.trolltech.com/qq/qq16-dynamicqobject.html
+ */
+ int qt_metacall(QMetaObject::Call call, int id, void **args);
+
+private:
+ QObject* m_signalSource;
+ int m_nextSlotIndex;
+ // slot_index => connection_info, used by qt_metacall
+ // to recover the connection_info
+ QHash<int, AbstractQObjectConnection*> m_connections;
+
+ void attachAbstractConnection(AbstractQObjectConnection* connection);
+};
+
+} \ No newline at end of file