Go to the documentation of this file.00001 #ifndef _PYTHONQTSIGNALRECEIVER_H
00002 #define _PYTHONQTSIGNALRECEIVER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00043
00044
00045 #include <Python.h>
00046 #include "PythonQtSystem.h"
00047 #include "PythonQtObjectPtr.h"
00048
00049 class PythonQtMethodInfo;
00050 class PythonQtClassInfo;
00051
00053
00055 class PYTHONQT_EXPORT PythonQtSignalTarget {
00056 public:
00057 PythonQtSignalTarget() {
00058 _signalId = -1;
00059 _methodInfo = NULL;
00060 _slotId = -1;
00061 }
00062
00063 PythonQtSignalTarget(int signalId,const PythonQtMethodInfo* methodInfo, int slotId, PyObject* callable)
00064 {
00065 _signalId = signalId;
00066 _slotId = slotId;
00067 _methodInfo = methodInfo;
00068 _callable = callable;
00069 };
00070
00071 ~PythonQtSignalTarget() {
00072 };
00073
00075 int signalId() const { return _signalId; }
00076
00078 int slotId() const { return _slotId; }
00079
00081 const PythonQtMethodInfo* methodInfo() const { return _methodInfo; }
00082
00084 void call(void **arguments) const;
00085
00087 bool isSame(int signalId, PyObject* callable) const { return callable==_callable && signalId==_signalId; }
00088
00090 static PyObject* call(PyObject* callable, const PythonQtMethodInfo* methodInfo, void **arguments, bool skipFirstArgumentOfMethodInfo = false);
00091
00092 private:
00093 int _signalId;
00094 int _slotId;
00095 const PythonQtMethodInfo* _methodInfo;
00096 PythonQtObjectPtr _callable;
00097 };
00098
00100
00102 class PythonQtSignalReceiverBase : public QObject {
00103 Q_OBJECT
00104 public:
00105 PythonQtSignalReceiverBase(QObject* obj):QObject(obj) {};
00106 };
00107
00109
00111 class PythonQtSignalReceiver : public PythonQtSignalReceiverBase {
00112
00113 public:
00114 PythonQtSignalReceiver(QObject* obj);
00115 ~PythonQtSignalReceiver();
00116
00118 bool addSignalHandler(const char* signal, PyObject* callable);
00119
00121 bool removeSignalHandler(const char* signal, PyObject* callable);
00122
00124 void removeSignalHandlers();
00125
00127 virtual int qt_metacall(QMetaObject::Call c, int id, void **arguments);
00128
00129 private:
00131 int getSignalIndex(const char* signal);
00132
00133 QObject* _obj;
00134 PythonQtClassInfo* _objClassInfo;
00135 int _slotCount;
00136
00137 QList<PythonQtSignalTarget> _targets;
00138 };
00139
00140
00141 #endif