##// END OF EJS Templates
updated old license information and current date...
updated old license information and current date git-svn-id: svn://svn.code.sf.net/p/pythonqt/code/trunk@170 ea8d5007-eb21-0410-b261-ccb3ea6e24a9

File last commit:

r133:26c5443b8486
r133:26c5443b8486
Show More
PythonQtClassWrapper.cpp
454 lines | 16.2 KiB | text/x-c | CppLexer
/ src / PythonQtClassWrapper.cpp
ezust
reorganized SVN tree into branches, tags and trunk...
r0 /*
*
florianlink
updated old license information and current date...
r133 * Copyright (C) 2010 MeVis Medical Solutions AG All Rights Reserved.
ezust
reorganized SVN tree into branches, tags and trunk...
r0 *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 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
* Lesser General Public License for more details.
*
* Further, this software is distributed without any warranty that it is
* free of the rightful claim of any third person regarding infringement
* or the like. Any license provided herein, whether implied or
* otherwise, applies only to this software file. Patent licenses, if
* any, provided herein do not apply to combinations of this program with
* other software, or any other product whatsoever.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
florianlink
updated old license information and current date...
r133 * Contact information: MeVis Medical Solutions AG, Universitaetsallee 29,
ezust
reorganized SVN tree into branches, tags and trunk...
r0 * 28359 Bremen, Germany or:
*
* http://www.mevis.de
*
*/
//----------------------------------------------------------------------------------
/*!
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 // \file PythonQtClassWrapper.cpp
ezust
reorganized SVN tree into branches, tags and trunk...
r0 // \author Florian Link
// \author Last changed by $Author: florian $
// \date 2006-05
*/
//----------------------------------------------------------------------------------
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 #include "PythonQtClassWrapper.h"
ezust
reorganized SVN tree into branches, tags and trunk...
r0 #include <QObject>
#include "PythonQt.h"
#include "PythonQtSlot.h"
#include "PythonQtClassInfo.h"
#include "PythonQtConversion.h"
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 #include "PythonQtInstanceWrapper.h"
ezust
reorganized SVN tree into branches, tags and trunk...
r0
florianlink
added support for operators and rich compare...
r119 static PyObject* PythonQtInstanceWrapper_invert(PythonQtInstanceWrapper* wrapper)
{
PyObject* result = NULL;
static QByteArray memberName = "__invert__";
PythonQtMemberInfo opSlot = wrapper->classInfo()->member(memberName);
if (opSlot._type == PythonQtMemberInfo::Slot) {
result = PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, opSlot._slot, NULL, NULL, wrapper->_wrappedPtr);
}
return result;
}
static int PythonQtInstanceWrapper_nonzero(PythonQtInstanceWrapper* wrapper)
{
int result = (wrapper->_wrappedPtr == NULL && wrapper->_obj == NULL)?0:1;
if (result) {
static QByteArray memberName = "__nonzero__";
PythonQtMemberInfo opSlot = wrapper->classInfo()->member(memberName);
if (opSlot._type == PythonQtMemberInfo::Slot) {
PyObject* resultObj = PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, opSlot._slot, NULL, NULL, wrapper->_wrappedPtr);
if (resultObj == Py_False) {
result = 0;
}
Py_XDECREF(resultObj);
}
}
return result;
}
static PyObject* PythonQtInstanceWrapper_binaryfunc(PythonQtInstanceWrapper* wrapper, PyObject* other, const QByteArray& opName, const QByteArray& fallbackOpName = QByteArray())
{
PyObject* result = NULL;
PythonQtMemberInfo opSlot = wrapper->classInfo()->member(opName);
if (opSlot._type == PythonQtMemberInfo::Slot) {
// TODO get rid of tuple
PyObject* args = PyTuple_New(1);
Py_INCREF(other);
PyTuple_SET_ITEM(args, 0, other);
result = PythonQtSlotFunction_CallImpl(wrapper->classInfo(), wrapper->_obj, opSlot._slot, args, NULL, wrapper->_wrappedPtr);
Py_DECREF(args);
if (!result && !fallbackOpName.isEmpty()) {
// try fallback if we did not get a result
result = PythonQtInstanceWrapper_binaryfunc(wrapper, other, fallbackOpName);
}
}
return result;
}
#define BINARY_OP(NAME) \
static PyObject* PythonQtInstanceWrapper_ ## NAME(PythonQtInstanceWrapper* wrapper, PyObject* other) \
{ \
static const QByteArray opName("__" #NAME "__"); \
return PythonQtInstanceWrapper_binaryfunc(wrapper, other, opName); \
}
#define BINARY_OP_INPLACE(NAME) \
static PyObject* PythonQtInstanceWrapper_i ## NAME(PythonQtInstanceWrapper* wrapper, PyObject* other) \
{ \
static const QByteArray opName("__i" #NAME "__"); \
static const QByteArray fallbackName("__" #NAME "__"); \
return PythonQtInstanceWrapper_binaryfunc(wrapper, other, opName, fallbackName); \
}
BINARY_OP(add)
BINARY_OP(sub)
BINARY_OP(mul)
BINARY_OP(div)
BINARY_OP(and)
BINARY_OP(or)
BINARY_OP(xor)
BINARY_OP(mod)
BINARY_OP(lshift)
BINARY_OP(rshift)
BINARY_OP_INPLACE(add)
BINARY_OP_INPLACE(sub)
BINARY_OP_INPLACE(mul)
BINARY_OP_INPLACE(div)
BINARY_OP_INPLACE(and)
BINARY_OP_INPLACE(or)
BINARY_OP_INPLACE(xor)
BINARY_OP_INPLACE(mod)
BINARY_OP_INPLACE(lshift)
BINARY_OP_INPLACE(rshift)
static void initializeSlots(PythonQtClassWrapper* wrap)
{
int typeSlots = wrap->classInfo()->typeSlots();
if (typeSlots) {
if (typeSlots & PythonQt::Type_Add) {
wrap->_base.as_number.nb_add = (binaryfunc)PythonQtInstanceWrapper_add;
}
if (typeSlots & PythonQt::Type_Subtract) {
wrap->_base.as_number.nb_subtract = (binaryfunc)PythonQtInstanceWrapper_sub;
}
if (typeSlots & PythonQt::Type_Multiply) {
wrap->_base.as_number.nb_multiply = (binaryfunc)PythonQtInstanceWrapper_mul;
}
if (typeSlots & PythonQt::Type_Divide) {
wrap->_base.as_number.nb_divide = (binaryfunc)PythonQtInstanceWrapper_div;
wrap->_base.as_number.nb_true_divide = (binaryfunc)PythonQtInstanceWrapper_div;
}
if (typeSlots & PythonQt::Type_And) {
wrap->_base.as_number.nb_and = (binaryfunc)PythonQtInstanceWrapper_and;
}
if (typeSlots & PythonQt::Type_Or) {
wrap->_base.as_number.nb_or = (binaryfunc)PythonQtInstanceWrapper_or;
}
if (typeSlots & PythonQt::Type_Xor) {
wrap->_base.as_number.nb_xor = (binaryfunc)PythonQtInstanceWrapper_xor;
}
if (typeSlots & PythonQt::Type_Mod) {
wrap->_base.as_number.nb_remainder = (binaryfunc)PythonQtInstanceWrapper_mod;
}
if (typeSlots & PythonQt::Type_LShift) {
wrap->_base.as_number.nb_lshift = (binaryfunc)PythonQtInstanceWrapper_lshift;
}
if (typeSlots & PythonQt::Type_RShift) {
wrap->_base.as_number.nb_rshift = (binaryfunc)PythonQtInstanceWrapper_rshift;
}
if (typeSlots & PythonQt::Type_InplaceAdd) {
wrap->_base.as_number.nb_add = (binaryfunc)PythonQtInstanceWrapper_iadd;
}
if (typeSlots & PythonQt::Type_InplaceSubtract) {
wrap->_base.as_number.nb_subtract = (binaryfunc)PythonQtInstanceWrapper_isub;
}
if (typeSlots & PythonQt::Type_InplaceMultiply) {
wrap->_base.as_number.nb_multiply = (binaryfunc)PythonQtInstanceWrapper_imul;
}
if (typeSlots & PythonQt::Type_InplaceDivide) {
wrap->_base.as_number.nb_inplace_divide = (binaryfunc)PythonQtInstanceWrapper_idiv;
wrap->_base.as_number.nb_inplace_true_divide = (binaryfunc)PythonQtInstanceWrapper_idiv;
}
if (typeSlots & PythonQt::Type_InplaceAnd) {
wrap->_base.as_number.nb_inplace_and = (binaryfunc)PythonQtInstanceWrapper_iand;
}
if (typeSlots & PythonQt::Type_InplaceOr) {
wrap->_base.as_number.nb_inplace_or = (binaryfunc)PythonQtInstanceWrapper_ior;
}
if (typeSlots & PythonQt::Type_InplaceXor) {
wrap->_base.as_number.nb_inplace_xor = (binaryfunc)PythonQtInstanceWrapper_ixor;
}
if (typeSlots & PythonQt::Type_InplaceMod) {
wrap->_base.as_number.nb_inplace_remainder = (binaryfunc)PythonQtInstanceWrapper_imod;
}
if (typeSlots & PythonQt::Type_InplaceLShift) {
wrap->_base.as_number.nb_inplace_lshift = (binaryfunc)PythonQtInstanceWrapper_ilshift;
}
if (typeSlots & PythonQt::Type_InplaceRShift) {
wrap->_base.as_number.nb_inplace_rshift = (binaryfunc)PythonQtInstanceWrapper_irshift;
}
if (typeSlots & PythonQt::Type_Invert) {
wrap->_base.as_number.nb_invert = (unaryfunc)PythonQtInstanceWrapper_invert;
}
if (typeSlots & PythonQt::Type_NonZero) {
wrap->_base.as_number.nb_nonzero = (inquiry)PythonQtInstanceWrapper_nonzero;
}
}
}
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 static PyObject* PythonQtClassWrapper_alloc(PyTypeObject *self, Py_ssize_t nitems)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 // call the default type alloc
PyObject* obj = PyType_Type.tp_alloc(self, nitems);
ezust
reorganized SVN tree into branches, tags and trunk...
r0
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 // take current class type, if we are called via newPythonQtClassWrapper()
PythonQtClassWrapper* wrap = (PythonQtClassWrapper*)obj;
wrap->_classInfo = PythonQt::priv()->currentClassInfoForClassWrapperCreation();
florianlink
fixed deriving C++ classes...
r122 if (wrap->_classInfo) {
initializeSlots(wrap);
}
ezust
reorganized SVN tree into branches, tags and trunk...
r0
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return obj;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 static int PythonQtClassWrapper_init(PythonQtClassWrapper* self, PyObject* args, PyObject* kwds)
{
// call the default type init
if (PyType_Type.tp_init((PyObject *)self, args, kwds) < 0) {
return -1;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18
// if we have no CPP class information, try our base class
if (!self->classInfo()) {
PyTypeObject* superType = ((PyTypeObject *)self)->tp_base;
if (!superType || (superType->ob_type != &PythonQtClassWrapper_Type)) {
PyErr_Format(PyExc_TypeError, "type %s is not derived from PythonQtClassWrapper", ((PyTypeObject*)self)->tp_name);
return -1;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18
// take the class info from the superType
self->_classInfo = ((PythonQtClassWrapper*)superType)->classInfo();
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18
return 0;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 static PyObject *PythonQtClassWrapper_classname(PythonQtClassWrapper* type)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return PyString_FromString((QString("Class_") + type->classInfo()->className()).toLatin1().data());
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 static PyObject *PythonQtClassWrapper_help(PythonQtClassWrapper* type)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return PythonQt::self()->helpCalled(type->classInfo());
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 PyObject *PythonQtClassWrapper__init__(PythonQtClassWrapper *type, PyObject *args)
{
Py_ssize_t argc = PyTuple_Size(args);
if (argc>0) {
// we need to call __init__ of the instance
PyObject* self = PyTuple_GET_ITEM(args, 0);
if (PyObject_TypeCheck(self, (PyTypeObject*)type->classInfo()->pythonQtClassWrapper())) {
PyObject* newargs = PyTuple_New(argc-1);
for (int i = 0;i<argc-1; i++) {
PyTuple_SET_ITEM(newargs, i,PyTuple_GET_ITEM(args, i+1));
}
PythonQtInstanceWrapper* wrapper = (PythonQtInstanceWrapper*)self;
int result = PythonQtInstanceWrapper_init(wrapper, newargs, NULL);
Py_DECREF(newargs);
if (result==0) {
Py_INCREF(Py_None);
return Py_None;
} else {
// init failed!
}
} else {
// self not of correct type!
}
} else {
// wrong number of args
}
return NULL;
}
ezust
reorganized SVN tree into branches, tags and trunk...
r0
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 static PyMethodDef PythonQtClassWrapper_methods[] = {
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 {"__init__", (PyCFunction)PythonQtClassWrapper__init__, METH_VARARGS,
"Return the classname of the object"
},
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 {"className", (PyCFunction)PythonQtClassWrapper_classname, METH_NOARGS,
ezust
reorganized SVN tree into branches, tags and trunk...
r0 "Return the classname of the object"
},
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 {"help", (PyCFunction)PythonQtClassWrapper_help, METH_NOARGS,
ezust
reorganized SVN tree into branches, tags and trunk...
r0 "Shows the help of available methods for this class"
},
florianlink
- removed warnings...
r8 {NULL, NULL, 0 , NULL} /* Sentinel */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 };
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 static PyObject *PythonQtClassWrapper_getattro(PyObject *obj, PyObject *name)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
const char *attributeName;
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 PythonQtClassWrapper *wrapper = (PythonQtClassWrapper *)obj;
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22
ezust
reorganized SVN tree into branches, tags and trunk...
r0 if ((attributeName = PyString_AsString(name)) == NULL) {
return NULL;
}
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 if (obj == (PyObject*)&PythonQtInstanceWrapper_Type) {
return NULL;
}
ezust
reorganized SVN tree into branches, tags and trunk...
r0
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 if (qstrcmp(attributeName, "__dict__")==0) {
PyObject* dict = ((PyTypeObject *)wrapper)->tp_dict;
if (!wrapper->classInfo()) {
Py_INCREF(dict);
return dict;
}
dict = PyDict_Copy(dict);
florianlink
- removed argument to fullSignature...
r23 QStringList l = wrapper->classInfo()->memberList(false);
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 foreach (QString name, l) {
PyObject* o = PyObject_GetAttrString(obj, name.toLatin1().data());
florianlink
- removed argument to fullSignature...
r23 if (o) {
PyDict_SetItemString(dict, name.toLatin1().data(), o);
Py_DECREF(o);
} else {
// it must have been a property or child, which we do not know as a class object...
}
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 }
if (wrapper->classInfo()->constructors()) {
florianlink
- removed argument to fullSignature...
r23 PyObject* func = PyCFunction_New(&PythonQtClassWrapper_methods[0], obj);
PyDict_SetItemString(dict, "__init__", func);
Py_DECREF(func);
}
for (int i = 1;i<3;i++) {
PyObject* func = PyCFunction_New(&PythonQtClassWrapper_methods[i], obj);
PyDict_SetItemString(dict, PythonQtClassWrapper_methods[i].ml_name, func);
Py_DECREF(func);
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 }
return dict;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22
if (wrapper->classInfo()) {
PythonQtMemberInfo member = wrapper->classInfo()->member(attributeName);
if (member._type == PythonQtMemberInfo::EnumValue) {
florianlink
added enum wrapper classes derived from python int, so that enums are distinguishable from normal python integers. This will allow better overload handling e.g. of QColor constructors in the future...
r51 PyObject* enumValue = member._enumValue;
Py_INCREF(enumValue);
return enumValue;
} else if (member._type == PythonQtMemberInfo::EnumWrapper) {
PyObject* enumWrapper = member._enumWrapper;
Py_INCREF(enumWrapper);
return enumWrapper;
} else if (member._type == PythonQtMemberInfo::Slot) {
florianlink
- removed argument to fullSignature...
r23 // we return all slots, even the instance slots, since they are callable as unbound slots with self argument
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 return PythonQtSlotFunction_New(member._slot, obj, NULL);
}
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
merged in features from the MeVisLab repository...
r4
ezust
reorganized SVN tree into branches, tags and trunk...
r0 // look for the interal methods (className(), help())
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 PyObject* internalMethod = Py_FindMethod( PythonQtClassWrapper_methods, obj, (char*)attributeName);
ezust
reorganized SVN tree into branches, tags and trunk...
r0 if (internalMethod) {
return internalMethod;
}
PyErr_Clear();
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 // look in super
PyObject* superAttr = PyType_Type.tp_getattro(obj, name);
if (superAttr) {
return superAttr;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 QString error = QString(wrapper->classInfo()->className()) + " has no attribute named '" + QString(attributeName) + "'";
ezust
reorganized SVN tree into branches, tags and trunk...
r0 PyErr_SetString(PyExc_AttributeError, error.toLatin1().data());
return NULL;
}
florianlink
added support for setattr to allow derived classes to add own attributes...
r30 static int PythonQtClassWrapper_setattro(PyObject *obj,PyObject *name,PyObject *value)
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 {
florianlink
added support for setattr to allow derived classes to add own attributes...
r30 return PyType_Type.tp_setattro(obj,name,value);
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 }
/*
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 static PyObject * PythonQtClassWrapper_repr(PyObject * obj)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 PythonQtClassWrapper* wrapper = (PythonQtClassWrapper*)obj;
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 if (wrapper->classInfo()->isCPPWrapper()) {
const QMetaObject* meta = wrapper->classInfo()->metaObject();
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 if (!meta) {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 QObject* decorator = wrapper->classInfo()->decorator();
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 if (decorator) {
meta = decorator->metaObject();
}
}
if (meta) {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return PyString_FromFormat("%s Class (C++ wrapped by %s)", wrapper->classInfo()->className(), meta->className());
ezust
reorganized SVN tree into branches, tags and trunk...
r0 } else {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return PyString_FromFormat("%s Class (C++ unwrapped)", wrapper->classInfo()->className());
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
} else {
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 return PyString_FromFormat("%s Class", wrapper->classInfo()->className());
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
}
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 */
florianlink
merged in features from the MeVisLab repository...
r4
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 PyTypeObject PythonQtClassWrapper_Type = {
ezust
reorganized SVN tree into branches, tags and trunk...
r0 PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 "PythonQt.PythonQtClassWrapper", /*tp_name*/
sizeof(PythonQtClassWrapper), /*tp_basicsize*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_itemsize*/
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 0, /*tp_dealloc*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 0, /*tp_compare*/
0, //PythonQtClassWrapper_repr, /*tp_repr*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 0, /*tp_hash */
0, /*tp_call*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_str*/
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 PythonQtClassWrapper_getattro, /*tp_getattro*/
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 PythonQtClassWrapper_setattro, /*tp_setattro*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 0, /* tp_doc */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
florianlink
changed implementation to allow deriving python classes from PythonQt classes...
r22 0, /* tp_methods */
0, /* tp_members */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
florianlink
code cleanup and rename of PythonQtWrapper to PythonQtInstanceWrapper and PythonQtMetaObjectWrapper to PythonQtClassWrapper, since these names match much better what these classes wrap, regarding that we are wrapping CPP objects as well...
r16 (initproc)PythonQtClassWrapper_init, /* tp_init */
florianlink
- wrapped instances are now wrapped by class specific subtypes to facilitate future deriving from python...
r18 PythonQtClassWrapper_alloc, /* tp_alloc */
0, /* tp_new */
0, /* tp_free */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 };
//-------------------------------------------------------