Removed QVariant from PySide.

Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
          Marcelo Lira <marcelo.lira@openbossa.org>
This commit is contained in:
Hugo Parente Lima 2010-06-10 19:57:18 -03:00
commit 1b6337d8b4
18 changed files with 170 additions and 601 deletions

View file

@ -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

View file

@ -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()

View file

@ -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