Removed QVariant from PySide.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
This commit is contained in:
parent
d8a192b5e1
commit
1b6337d8b4
18 changed files with 170 additions and 601 deletions
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
|
||||
#include "pyside.h"
|
||||
#include "signalmanager.h"
|
||||
|
||||
extern "C" void init_signal(PyObject* module);
|
||||
extern "C" void init_slot(PyObject* module);
|
||||
|
|
@ -45,6 +46,8 @@ void init(PyObject *module)
|
|||
{
|
||||
init_signal(module);
|
||||
init_slot(module);
|
||||
// Init signal manager, so it will register some meta types used by QVariant.
|
||||
SignalManager::instance();
|
||||
}
|
||||
|
||||
} //namespace PySide
|
||||
|
|
|
|||
|
|
@ -54,35 +54,22 @@
|
|||
|
||||
#define PYTHON_TYPE "PyObject"
|
||||
|
||||
|
||||
// Use this to wrap PyObject during the Signal/Slot handling
|
||||
struct PyObjectWrapper
|
||||
{
|
||||
PyObject* m_me;
|
||||
PyObjectWrapper(const PyObjectWrapper &other) : m_me(other.m_me) {}
|
||||
PyObjectWrapper(PyObject* me) : m_me(me) { Py_INCREF(m_me); }
|
||||
PyObjectWrapper() : m_me(Py_None) {}
|
||||
operator PyObject*() const { return m_me; }
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(PyObjectWrapper)
|
||||
|
||||
namespace Shiboken {
|
||||
|
||||
template<>
|
||||
struct Converter<PyObjectWrapper>
|
||||
struct Converter<PySide::PyObjectWrapper>
|
||||
{
|
||||
static PyObjectWrapper toCpp(PyObject* obj)
|
||||
static PySide::PyObjectWrapper toCpp(PyObject* obj)
|
||||
{
|
||||
return PyObjectWrapper(obj);
|
||||
return PySide::PyObjectWrapper(obj);
|
||||
}
|
||||
|
||||
static PyObject* toPython(void* obj)
|
||||
{
|
||||
return toPython(*reinterpret_cast<PyObjectWrapper*>(obj));
|
||||
return toPython(*reinterpret_cast<PySide::PyObjectWrapper*>(obj));
|
||||
}
|
||||
|
||||
static PyObject* toPython(const PyObjectWrapper& obj)
|
||||
static PyObject* toPython(const PySide::PyObjectWrapper& obj)
|
||||
{
|
||||
return obj;
|
||||
}
|
||||
|
|
@ -202,6 +189,8 @@ SignalManager::SignalManager() : m_d(new SignalManagerPrivate)
|
|||
qRegisterMetaType<PyObjectWrapper>(PYTHON_TYPE);
|
||||
|
||||
TypeResolver::createValueTypeResolver<PyObjectWrapper>(PYTHON_TYPE);
|
||||
TypeResolver::createValueTypeResolver<PyObjectWrapper>("object");
|
||||
TypeResolver::createValueTypeResolver<PyObjectWrapper>("PySide::PyObjectWrapper");
|
||||
}
|
||||
|
||||
void SignalManager::clear()
|
||||
|
|
|
|||
|
|
@ -46,6 +46,17 @@ class QObject;
|
|||
namespace PySide
|
||||
{
|
||||
|
||||
/// Thin wrapper for PyObject which increases the reference count at the constructor but *NOT* at destructor.
|
||||
class PYSIDE_API PyObjectWrapper
|
||||
{
|
||||
public:
|
||||
PyObjectWrapper(PyObject* me) : m_me(me) { Py_INCREF(m_me); }
|
||||
PyObjectWrapper() : m_me(Py_None) { Py_INCREF(m_me); }
|
||||
operator PyObject*() const { return m_me; }
|
||||
private:
|
||||
PyObject* m_me;
|
||||
};
|
||||
|
||||
PYSIDE_API bool isSignal(const char* signal);
|
||||
PYSIDE_API bool checkSignal(const char* signal);
|
||||
PYSIDE_API QString getCallbackSignature(const char* signal, PyObject* callback, bool encodeName);
|
||||
|
|
@ -84,4 +95,7 @@ private:
|
|||
};
|
||||
|
||||
}
|
||||
|
||||
Q_DECLARE_METATYPE(PySide::PyObjectWrapper)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue