##// END OF EJS Templates
renamed guards...
renamed guards git-svn-id: svn://svn.code.sf.net/p/pythonqt/code/trunk@53 ea8d5007-eb21-0410-b261-ccb3ea6e24a9

File last commit:

r16:c68e0aff542c
r17:4a5dbf143fd4
Show More
PythonQtClassWrapper.cpp
256 lines | 8.7 KiB | text/x-c | CppLexer
/ src / PythonQtClassWrapper.cpp
ezust
reorganized SVN tree into branches, tags and trunk...
r0 /*
*
* Copyright (C) 2006 MeVis Research GmbH All Rights Reserved.
*
* 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
*
* Contact information: MeVis Research GmbH, Universitaetsallee 29,
* 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
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 void PythonQtClassWrapper_dealloc(PythonQtClassWrapper* self)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
self->ob_type->tp_free((PyObject*)self);
}
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_new(PyTypeObject *type, PyObject * /*args*/, PyObject * /*kwds*/)
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 *self;
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 self = (PythonQtClassWrapper *)type->tp_alloc(type, 0);
ezust
reorganized SVN tree into branches, tags and trunk...
r0 if (self != NULL) {
self->_info = NULL;
}
return (PyObject *)self;
}
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 int PythonQtClassWrapper_init(PythonQtClassWrapper * /*self*/, PyObject * /*args*/, PyObject * /*kwds*/)
ezust
reorganized SVN tree into branches, tags and trunk...
r0 {
return 0;
}
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 *PythonQtClassWrapper_call(PyObject *func, PyObject *args, PyObject *kw) {
PythonQtClassWrapper* wrapper = (PythonQtClassWrapper*)func;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 PyObject* result = NULL;
QString error;
PyObject* err = NULL;
if (wrapper->_info->constructors()) {
result = PythonQtSlotFunction_CallImpl(NULL, wrapper->_info->constructors(), args, kw);
err = PyErr_Occurred();
}
if (!result) {
QObject* v = NULL;
QListIterator<PythonQtConstructorHandler*> it(PythonQt::self()->constructorHandlers());
while (!v && it.hasNext()) {
v = it.next()->create(wrapper->_info->metaObject(), args, kw, error);
}
if (v) {
result = PythonQt::priv()->wrapQObject(v);
}
}
if (result) {
// change ownershipflag to be owned by PythonQt
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 if (result->ob_type == &PythonQtInstanceWrapper_Type) {
((PythonQtInstanceWrapper*)result)->_ownedByPythonQt = true;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 }
} else {
if (!wrapper->_info->constructors()) {
if (!err) {
if (error.isEmpty()) {
error = QString("No constructors available for ") + wrapper->_info->className();
}
PyErr_SetString(PyExc_ValueError, error.toLatin1().data());
}
}
}
return result;
}
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 {
return PyString_FromString((QString("Meta_") + type->_info->className()).toLatin1().data());
}
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 {
return PythonQt::self()->helpCalled(type->_info);
}
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[] = {
{"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
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_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;
ezust
reorganized SVN tree into branches, tags and trunk...
r0
if ((attributeName = PyString_AsString(name)) == NULL) {
return NULL;
}
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 PythonQtMemberInfo member = wrapper->_info->member(attributeName);
ezust
reorganized SVN tree into branches, tags and trunk...
r0 if (member._type == PythonQtMemberInfo::EnumValue) {
return PyInt_FromLong(member._enumValue);
}
if (member._type == PythonQtMemberInfo::Slot && member._slot->isClassDecorator()) {
return PythonQtSlotFunction_New(member._slot, obj, NULL);
}
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();
if (qstrcmp(attributeName, "__dict__")==0) {
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 QStringList l = wrapper->_info->memberList(true);
ezust
reorganized SVN tree into branches, tags and trunk...
r0 PyObject* dict = PyDict_New();
foreach (QString name, l) {
//PyObject* o = PyObject_GetAttrString(obj, name.toLatin1().data());
PyDict_SetItemString(dict, name.toLatin1().data(), Py_None);
//Py_DECREF(o);
}
return dict;
}
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 QString error = QString(wrapper->_info->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
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;
if (wrapper->_info->isCPPWrapper()) {
const QMetaObject* meta = wrapper->_info->metaObject();
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 if (!meta) {
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 QObject* decorator = wrapper->_info->decorator();
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 if (decorator) {
meta = decorator->metaObject();
}
}
if (meta) {
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 return PyString_FromFormat("%s Class (C++ wrapped by %s)", wrapper->_info->className(), meta->className());
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 } else {
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 return PyString_FromFormat("%s Class (C++ unwrapped)", wrapper->_info->className());
florianlink
syncing with my current work, updating to 1.2, see changelog...
r10 }
ezust
reorganized SVN tree into branches, tags and trunk...
r0 } else {
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 return PyString_FromFormat("%s Class", wrapper->_info->className());
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 int PythonQtClassWrapper_compare(PyObject * obj1, PyObject * obj2)
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 if (obj1->ob_type == &PythonQtClassWrapper_Type &&
obj2->ob_type == &PythonQtClassWrapper_Type) {
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* w1 = (PythonQtClassWrapper*)obj1;
PythonQtClassWrapper* w2 = (PythonQtClassWrapper*)obj2;
ezust
reorganized SVN tree into branches, tags and trunk...
r0 if (w1->_info == w2->_info) {
return 0;
} else {
return -1;
}
} else {
return -1;
}
}
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 long PythonQtClassWrapper_hash(PythonQtClassWrapper *obj)
florianlink
merged in features from the MeVisLab repository...
r4 {
return reinterpret_cast<long>(obj->_info);
}
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
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 (destructor)PythonQtClassWrapper_dealloc, /*tp_dealloc*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
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_compare, /*tp_compare*/
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
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 (hashfunc)PythonQtClassWrapper_hash, /*tp_hash */
PythonQtClassWrapper_call, /*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*/
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
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 object", /* 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 */
0, /* tp_methods */
0, /* tp_members */
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 */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 0, /* tp_alloc */
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_new, /* tp_new */
ezust
reorganized SVN tree into branches, tags and trunk...
r0 };
//-------------------------------------------------------