From: <vo...@us...> - 2009-05-18 12:59:49
|
Revision: 1193 http://opde.svn.sourceforge.net/opde/?rev=1193&view=rev Author: volca Date: 2009-05-18 12:59:46 +0000 (Mon, 18 May 2009) Log Message: ----------- changes, fixes Modified Paths: -------------- trunk/src/bindings/DrawServiceBinder.cpp trunk/src/bindings/DrawSheetBinder.cpp trunk/src/bindings/DrawSheetBinder.h trunk/src/bindings/RootBinder.h trunk/src/bindings/bindings.h trunk/src/services/draw/DrawCommon.cpp trunk/src/services/object/SymNamePropertyStorage.cpp Modified: trunk/src/bindings/DrawServiceBinder.cpp =================================================================== --- trunk/src/bindings/DrawServiceBinder.cpp 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/bindings/DrawServiceBinder.cpp 2009-05-18 12:59:46 UTC (rev 1193) @@ -25,6 +25,7 @@ #include "bindings.h" #include "DrawServiceBinder.h" #include "DrawSheet.h" +#include "DrawSheetBinder.h" namespace Opde { @@ -99,38 +100,84 @@ DrawSheet* i = o->mInstance->createSheet(sname); // TODO: Sheet binding... + PyObject *o = DrawSheetBinder::create(i); - result = Py_None; - Py_INCREF(result); + result = o; + return result; } else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected a string argument!"); return NULL; } - + __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ PyObject* DrawServiceBinder::destroySheet(PyObject* self, PyObject* args) { + __PYTHON_EXCEPTION_GUARD_BEGIN_; + PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - return result; //Temporary return to fix the VC build + + PyObject *sheet; + if (PyArg_ParseTuple(args, "o", &sheet)) { + // cast to drawsheet and destroy + o->mInstance->destroySheet(DrawSheetBinder::extract(sheet)); + } + + result = Py_None; + Py_INCREF(result); + return result; + + __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ PyObject* DrawServiceBinder::getSheet(PyObject* self, PyObject* args) { + __PYTHON_EXCEPTION_GUARD_BEGIN_; + PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - return result; //Temporary return to fix the VC build + + // argument - the name of the sheet to create, string + const char* sname; + + if (PyArg_ParseTuple(args, "s", &sname)) { + DrawSheet* i = o->mInstance->getSheet(sname); + + // TODO: Sheet binding... + PyObject *o = DrawSheetBinder::create(i); + + result = o; + Py_INCREF(result); + return result; + } else { + // Invalid parameters + PyErr_SetString(PyExc_TypeError, "Expected a string argument!"); + return NULL; + } + + __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ PyObject* DrawServiceBinder::setActiveSheet(PyObject* self, PyObject* args) { + __PYTHON_EXCEPTION_GUARD_BEGIN_; + PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - return result; //Temporary return to fix the VC build + + PyObject *sheet; + if (PyArg_ParseTuple(args, "o", &sheet)) { + // cast to drawsheet and destroy + o->mInstance->setActiveSheet(DrawSheetBinder::extract(sheet)); + } + + return result; + + __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ PyObject* DrawServiceBinder::createDrawSource(PyObject* self, PyObject* args) { Modified: trunk/src/bindings/DrawSheetBinder.cpp =================================================================== --- trunk/src/bindings/DrawSheetBinder.cpp 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/bindings/DrawSheetBinder.cpp 2009-05-18 12:59:46 UTC (rev 1193) @@ -90,8 +90,8 @@ o->mInstance->activate(); result = Py_None; - Py_INCREF(result); - return result; + Py_INCREF(result); + return result; __PYTHON_EXCEPTION_GUARD_END_; } @@ -106,9 +106,12 @@ o->mInstance->deactivate(); result = Py_None; - Py_INCREF(result); - return result; + Py_INCREF(result); + return result; + /// TODO: Stub. Stupid return fix both + return result; + __PYTHON_EXCEPTION_GUARD_END_; } @@ -118,6 +121,9 @@ PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); + + /// TODO: Stub. Stupid return fix both + return result; __PYTHON_EXCEPTION_GUARD_END_; } @@ -129,6 +135,9 @@ PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); + /// TODO: Stub. Stupid return fix both + return result; + __PYTHON_EXCEPTION_GUARD_END_; } @@ -138,6 +147,9 @@ PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); + + /// TODO: Stub. Stupid return fix both + return result; __PYTHON_EXCEPTION_GUARD_END_; } @@ -148,6 +160,9 @@ PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); + + /// TODO: Stub. Stupid return fix both + return result; __PYTHON_EXCEPTION_GUARD_END_; } @@ -159,6 +174,9 @@ PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); + /// TODO: Stub. Stupid return fix both + return result; + __PYTHON_EXCEPTION_GUARD_END_; } @@ -175,6 +193,11 @@ } // ------------------------------------------ + DrawSheet* DrawSheetBinder::extract(PyObject *obj) { + return python_cast<Object*>(obj, &msType)->mInstance; + } + + // ------------------------------------------ PyObject* DrawSheetBinder::create(DrawSheet *sh) { Object* object = construct(&msType); Modified: trunk/src/bindings/DrawSheetBinder.h =================================================================== --- trunk/src/bindings/DrawSheetBinder.h 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/bindings/DrawSheetBinder.h 2009-05-18 12:59:46 UTC (rev 1193) @@ -43,6 +43,9 @@ /// to string - reprfunc conversion static PyObject* repr(PyObject *self); + /// helper class pointer extractor + static DrawSheet* extract(PyObject *object); + // --- Methods --- static PyObject* activate(PyObject* self, PyObject* args); static PyObject* deactivate(PyObject* self, PyObject* args); Modified: trunk/src/bindings/RootBinder.h =================================================================== --- trunk/src/bindings/RootBinder.h 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/bindings/RootBinder.h 2009-05-18 12:59:46 UTC (rev 1193) @@ -65,9 +65,8 @@ */ protected: - /// Static type definition for LinkService static PyTypeObject msType; - + /// Name of the python type static const char* msName; Modified: trunk/src/bindings/bindings.h =================================================================== --- trunk/src/bindings/bindings.h 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/bindings/bindings.h 2009-05-18 12:59:46 UTC (rev 1193) @@ -34,7 +34,7 @@ // Exception guard for the python code. use this as first/last lines of the binding function to have it prepared for exceptions #define __PYTHON_EXCEPTION_GUARD_BEGIN_ try { #define __PYTHON_EXCEPTION_GUARD_END_ } catch (BasicException& e) { \ - PyErr_Format(PyExc_RuntimeError, "C++ side exception (%s:%s) : %s", __FILE__, __LINE__, e.getDetails().c_str()); \ + PyErr_Format(PyExc_RuntimeError, "C++ side exception (%s:%u) : %s", __FILE__, __LINE__, e.getDetails().c_str()); \ return NULL; \ } @@ -43,15 +43,18 @@ // Type converters enum VariableType { VT_INVALID, VT_BOOL, VT_INT, VT_LONG, VT_FLOAT, VT_CHARPTR, VT_STRING, VT_CUSTOM_TYPE }; - struct TypeInfoBase { - }; - - template<typename T> struct TypeInfo : public TypeInfoBase { + template<typename T> struct TypeInfoBase { const char* typeName; VariableType type; + + TypeInfoBase(const char* tn, VariableType tt) : typeName(tn), type(tt) {}; + }; - TypeInfo() : typeName("invalid"), type(VT_INVALID) {}; + template<typename T> struct TypeInfo : public TypeInfoBase<T> { + TypeInfo() : TypeInfoBase<T>("invalid", VT_INVALID) {}; + // TypeInfo(const char* tname, VariableType tt) : TypeInfoBase(tname, tt) {}; + PyObject* toPyObject(T val) const { PyErr_SetString(PyExc_TypeError, "Binding error: Type has no conversion or TypeInfo specified!"); return NULL; @@ -59,12 +62,9 @@ }; - template<> struct TypeInfo<bool> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<bool> : TypeInfoBase<bool> { + TypeInfo() : TypeInfoBase<bool>("bool", VT_BOOL) {}; - TypeInfo() : typeName("bool"), type(VT_BOOL) {}; - PyObject* toPyObject(bool val) const { PyObject* res = val ? Py_True : Py_False; @@ -74,46 +74,34 @@ } }; - template<> struct TypeInfo<int> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<int> : TypeInfoBase<int> { + TypeInfo() : TypeInfoBase<int>("int", VT_INT) {}; - TypeInfo() : typeName("int"), type(VT_INT) {}; - PyObject* toPyObject(int val) const { return PyLong_FromLong(val); } }; - template<> struct TypeInfo<long> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<long> : TypeInfoBase<long> { + TypeInfo() : TypeInfoBase<long>("long", VT_LONG) {}; - TypeInfo() : typeName("long"), type(VT_LONG) {}; - PyObject* toPyObject(long val) const { return PyLong_FromLong(val); } }; - template<> struct TypeInfo<float> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<float> : TypeInfoBase<float> { + TypeInfo() : TypeInfoBase<float>("float", VT_FLOAT) {}; - TypeInfo() : typeName("float"), type(VT_FLOAT) {}; - PyObject* toPyObject(float val) const { return PyFloat_FromDouble(val); } }; - template<> struct TypeInfo<std::string> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<std::string> : TypeInfoBase<std::string> { + TypeInfo() : TypeInfoBase<std::string>("std::string", VT_STRING) {}; - TypeInfo() : typeName("std::string"), type(VT_STRING) {}; - PyObject* toPyObject(const std::string& val) const { return PyString_FromString(val.c_str()); } @@ -124,12 +112,9 @@ DVariant PyObjectToDVariant(PyObject* obj); // DVariant type info - template<> struct TypeInfo<DVariant> { - const char* typeName; - VariableType type; + template<> struct TypeInfo<DVariant> : TypeInfoBase<DVariant> { + TypeInfo() : TypeInfoBase<DVariant>("DVariant", VT_CUSTOM_TYPE) {}; - TypeInfo() : typeName("DVariant"), type(VT_CUSTOM_TYPE) {}; - PyObject* toPyObject(const DVariant& val) const { return DVariantToPyObject(val); } @@ -162,10 +147,11 @@ /// A template that binds sharedptr typed classes template <typename T> class shared_ptr_binder : public PythonPublishedType { - protected: + public: /// A python object type typedef ObjectBase<T> Object; - + + protected: /// A sort-of constructor method. To be used to create a new NULL Object* static Object* construct(PyTypeObject* type) { Object* object; @@ -201,9 +187,14 @@ /// A template that binds a pointer to class (simmilar to shared_ptr_binder, but no special handling is used) template <typename T> class class_ptr_binder : public PythonPublishedType { protected: + static PyTypeObject msType; + + public: /// A python object type typedef ObjectBase<T*> Object; + + protected: /// A sort-of constructor method. To be used to create a new NULL Object* static Object* construct(PyTypeObject* type) { Object* object; Modified: trunk/src/services/draw/DrawCommon.cpp =================================================================== --- trunk/src/services/draw/DrawCommon.cpp 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/services/draw/DrawCommon.cpp 2009-05-18 12:59:46 UTC (rev 1193) @@ -52,13 +52,13 @@ //------------------------------------------------------ DrawSource::DrawSource(DrawService *owner, ID id, const Ogre::MaterialPtr& mat, const Ogre::TexturePtr& tex) : DrawSourceBase(id, mat, tex), + mAtlassed(false), mOwner(owner), - mAtlassed(false), mImageLoaded(false) { } //------------------------------------------------------ - DrawSource::DrawSource(DrawService *owner) : mOwner(owner), DrawSourceBase(), mAtlassed(false), mImageLoaded(false) { + DrawSource::DrawSource(DrawService *owner) : DrawSourceBase(), mAtlassed(false), mOwner(owner), mImageLoaded(false) { mPixelSize.width = 0; // needs to be filled on loadimage mPixelSize.height = 0; mSize = Ogre::Vector2(1.0f, 1.0f); Modified: trunk/src/services/object/SymNamePropertyStorage.cpp =================================================================== --- trunk/src/services/object/SymNamePropertyStorage.cpp 2009-05-14 13:58:50 UTC (rev 1192) +++ trunk/src/services/object/SymNamePropertyStorage.cpp 2009-05-18 12:59:46 UTC (rev 1193) @@ -47,6 +47,9 @@ assert(eraseok); + if (!eraseok) + return false; + // destroy our record as well ReverseNameMap::iterator it = mReverseMap.find(res.toString()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |