From e13d4a78827942d2a470fa920591ea6b47e4437d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 1 Oct 2016 17:25:45 -0300 Subject: [PATCH] py3: ported Measure and TechDraw --- src/Mod/Measure/App/AppMeasure.cpp | 44 +++++++++++-------- src/Mod/TechDraw/App/AppTechDraw.cpp | 10 +++-- src/Mod/TechDraw/App/DrawPagePyImp.cpp | 9 +++- .../TechDraw/App/DrawParametricTemplatePy.xml | 2 +- .../App/DrawParametricTemplatePyImp.cpp | 8 ++++ src/Mod/TechDraw/App/DrawProjGroupPyImp.cpp | 8 ++++ src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp | 4 ++ src/Mod/TechDraw/App/DrawViewClipPyImp.cpp | 4 ++ .../TechDraw/App/DrawViewCollectionPyImp.cpp | 8 ++++ src/Mod/TechDraw/Gui/AppTechDrawGui.cpp | 36 +++++++++++---- 10 files changed, 99 insertions(+), 34 deletions(-) diff --git a/src/Mod/Measure/App/AppMeasure.cpp b/src/Mod/Measure/App/AppMeasure.cpp index af51864e93..6a3cff3cf5 100644 --- a/src/Mod/Measure/App/AppMeasure.cpp +++ b/src/Mod/Measure/App/AppMeasure.cpp @@ -26,24 +26,36 @@ #endif #include +#include #include #include "Measurement.h" #include "MeasurementPy.h" -struct PyMethodDef Measure_methods[] = { -// {"read" , read, 1}, - {NULL, NULL, 0, NULL} /* end of table marker */ +namespace Measure { +class Module : public Py::ExtensionModule +{ +public: + Module() : Py::ExtensionModule("Measure") + { + initialize("This module is the Measure module."); // register with Python + } + + virtual ~Module() {} + +private: }; +PyObject* initModule() +{ + return (new Module)->module().ptr(); +} -PyDoc_STRVAR(module_Measure_doc, -"This module is the Measure module."); +} // namespace Measure /* Python entry */ -extern "C" { -void MeasureExport initMeasure() +PyMOD_INIT_FUNC(Measure) { // load dependent module try { @@ -51,24 +63,18 @@ void MeasureExport initMeasure() } catch(const Base::Exception& e) { PyErr_SetString(PyExc_ImportError, e.what()); - return; + PyMOD_Return(0); } - PyObject* measureModule = Py_InitModule3("Measure", Measure_methods, module_Measure_doc); /* mod name, table ptr */ - + PyObject* mod = Measure::initModule(); // Add Types to module - Base::Interpreter().addType(&Measure::MeasurementPy ::Type,measureModule,"Measurement"); - - Base::Console().Log("Loading Measure module... done\n"); - + Base::Interpreter().addType(&Measure::MeasurementPy ::Type,mod,"Measurement"); + Base::Console().Log("Loading Inspection module... done\n"); Measure::Measurement ::init(); + PyMOD_Return(mod); } - - -} // extern "C" - // debug print for sketchsolv void debugprint(std::string s) { Base::Console().Log(s.c_str()); -} \ No newline at end of file +} diff --git a/src/Mod/TechDraw/App/AppTechDraw.cpp b/src/Mod/TechDraw/App/AppTechDraw.cpp index 9f046d2ccc..b79ebc04d9 100644 --- a/src/Mod/TechDraw/App/AppTechDraw.cpp +++ b/src/Mod/TechDraw/App/AppTechDraw.cpp @@ -15,6 +15,7 @@ #endif #include +#include #include #include "DrawPage.h" @@ -40,11 +41,11 @@ #include "DrawViewDetail.h" namespace TechDraw { -extern PyObject* initModule(); + extern PyObject* initModule(); } /* Python entry */ -PyMODINIT_FUNC initTechDraw() +PyMOD_INIT_FUNC(TechDraw) { // load dependent module try { @@ -53,9 +54,9 @@ PyMODINIT_FUNC initTechDraw() } catch(const Base::Exception& e) { PyErr_SetString(PyExc_ImportError, e.what()); - return; + PyMOD_Return(0); } - (void)TechDraw::initModule(); + PyObject* mod = TechDraw::initModule(); Base::Console().Log("Loading TechDraw module... done\n"); @@ -96,4 +97,5 @@ PyMODINIT_FUNC initTechDraw() TechDraw::DrawViewMultiPython ::init(); TechDraw::DrawTemplatePython ::init(); TechDraw::DrawViewSymbolPython::init(); + PyMOD_Return(mod); } diff --git a/src/Mod/TechDraw/App/DrawPagePyImp.cpp b/src/Mod/TechDraw/App/DrawPagePyImp.cpp index f095583f3a..7a445e7778 100644 --- a/src/Mod/TechDraw/App/DrawPagePyImp.cpp +++ b/src/Mod/TechDraw/App/DrawPagePyImp.cpp @@ -38,8 +38,11 @@ PyObject* DrawPagePy::addView(PyObject* args) DrawView* view = pyView->getDrawViewPtr(); //get DrawView for pyView int rc = page->addView(view); - +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) rc); +#else + return PyLong_FromLong((long) rc); +#endif } PyObject* DrawPagePy::removeView(PyObject* args) @@ -60,7 +63,11 @@ PyObject* DrawPagePy::removeView(PyObject* args) int rc = page->removeView(view); +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) rc); +#else + return PyLong_FromLong((long) rc); +#endif } diff --git a/src/Mod/TechDraw/App/DrawParametricTemplatePy.xml b/src/Mod/TechDraw/App/DrawParametricTemplatePy.xml index 89d54e5943..2f8c7388b9 100644 --- a/src/Mod/TechDraw/App/DrawParametricTemplatePy.xml +++ b/src/Mod/TechDraw/App/DrawParametricTemplatePy.xml @@ -22,7 +22,7 @@ Number of geometry in template - + diff --git a/src/Mod/TechDraw/App/DrawParametricTemplatePyImp.cpp b/src/Mod/TechDraw/App/DrawParametricTemplatePyImp.cpp index d4fbea50ee..9e1c3ad3cc 100644 --- a/src/Mod/TechDraw/App/DrawParametricTemplatePyImp.cpp +++ b/src/Mod/TechDraw/App/DrawParametricTemplatePyImp.cpp @@ -80,8 +80,16 @@ PyObject* DrawParametricTemplatePy::drawLine(PyObject *args) } +#if PY_MAJOR_VERSION < 3 Py::Int DrawParametricTemplatePy::getGeometryCount(void) const { int size = getDrawParametricTemplatePtr()->getGeometry().size(); return Py::Int(size); } +#else +Py::Long DrawParametricTemplatePy::getGeometryCount(void) const +{ + int size = getDrawParametricTemplatePtr()->getGeometry().size(); + return Py::Long(size); +} +#endif diff --git a/src/Mod/TechDraw/App/DrawProjGroupPyImp.cpp b/src/Mod/TechDraw/App/DrawProjGroupPyImp.cpp index a77b75e5cd..2c5840f6a1 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupPyImp.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroupPyImp.cpp @@ -49,7 +49,11 @@ PyObject* DrawProjGroupPy::removeProjection(PyObject* args) DrawProjGroup* projGroup = getDrawProjGroupPtr(); int i = projGroup->removeProjection(projType); +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) i); +#else + return PyLong_FromLong((long) i); +#endif } PyObject* DrawProjGroupPy::purgeProjections(PyObject* /*args*/) @@ -57,7 +61,11 @@ PyObject* DrawProjGroupPy::purgeProjections(PyObject* /*args*/) DrawProjGroup* projGroup = getDrawProjGroupPtr(); int i = projGroup->purgeProjections(); +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) i); +#else + return PyLong_FromLong((long) i); +#endif } PyObject* DrawProjGroupPy::getItemByLabel(PyObject* args) diff --git a/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp b/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp index fc7a720528..032c79567e 100644 --- a/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp +++ b/src/Mod/TechDraw/App/DrawSVGTemplatePyImp.cpp @@ -50,7 +50,11 @@ PyObject* DrawSVGTemplatePy::getEditFieldContent(PyObject* args) } std::string content = getDrawSVGTemplatePtr()->EditableTexts[fieldName]; if (!content.empty()) { +#if PY_MAJOR_VERSION < 3 result = PyString_FromString(content.c_str()); +#else + result = PyUnicode_FromString(content.c_str()); +#endif } return result; } diff --git a/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp b/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp index b47f392d6a..0179e67f7b 100644 --- a/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp +++ b/src/Mod/TechDraw/App/DrawViewClipPyImp.cpp @@ -82,7 +82,11 @@ PyObject* DrawViewClipPy::getChildViewNames(PyObject* args) std::vector::iterator it = strings.begin(); for( ; it != strings.end(); it++) { +#if PY_MAJOR_VERSION < 3 PyObject* pString = PyString_FromString(it->c_str()); //TODO: unicode & py3 +#else + PyObject* pString = PyUnicode_FromString(it->c_str()); +#endif //int rc = static_cast (PyList_Append(result, pString)); } diff --git a/src/Mod/TechDraw/App/DrawViewCollectionPyImp.cpp b/src/Mod/TechDraw/App/DrawViewCollectionPyImp.cpp index 6c2780206b..5e2ba1628a 100644 --- a/src/Mod/TechDraw/App/DrawViewCollectionPyImp.cpp +++ b/src/Mod/TechDraw/App/DrawViewCollectionPyImp.cpp @@ -29,7 +29,11 @@ PyObject* DrawViewCollectionPy::addView(PyObject* args) int i = collect->addView(view); +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) i); +#else + return PyLong_FromLong((long) i); +#endif } PyObject* DrawViewCollectionPy::removeView(PyObject* args) @@ -47,7 +51,11 @@ PyObject* DrawViewCollectionPy::removeView(PyObject* args) int i = collect->removeView(view); +#if PY_MAJOR_VERSION < 3 return PyInt_FromLong((long) i); +#else + return PyLong_FromLong((long) i); +#endif } diff --git a/src/Mod/TechDraw/Gui/AppTechDrawGui.cpp b/src/Mod/TechDraw/Gui/AppTechDrawGui.cpp index 1388e4fe72..1e3946b82c 100644 --- a/src/Mod/TechDraw/Gui/AppTechDrawGui.cpp +++ b/src/Mod/TechDraw/Gui/AppTechDrawGui.cpp @@ -28,6 +28,7 @@ #endif #include +#include #include #include #include @@ -65,21 +66,38 @@ void loadTechDrawResource() Gui::Translator::instance()->refresh(); } -/* registration table */ -extern struct PyMethodDef TechDrawGui_Import_methods[]; +namespace TechDrawGui { +class Module : public Py::ExtensionModule +{ +public: + Module() : Py::ExtensionModule("TechDrawGui") + { + initialize("This module is the TechDrawGui module."); // register with Python + } + + virtual ~Module() {} + +private: +}; + +PyObject* initModule() +{ + return (new Module)->module().ptr(); +} + +} // namespace TechDrawGui /* Python entry */ -extern "C" { -void TechDrawGuiExport initTechDrawGui() +PyMOD_INIT_FUNC(TechDrawGui) { if (!Gui::Application::Instance) { PyErr_SetString(PyExc_ImportError, "Cannot load Gui module in console application."); - return; + PyMOD_Return(0); } + PyObject* mod = TechDrawGui::initModule(); - (void) Py_InitModule("TechDrawGui", TechDrawGui_Import_methods); /* mod name, table ptr */ - Base::Console().Log("Loading GUI of TechDraw module... done\n"); + Base::Console().Log("Loading TechDrawGui module... done\n"); // instantiating the commands CreateTechDrawCommands(); @@ -113,6 +131,6 @@ void TechDrawGuiExport initTechDrawGui() // add resources and reloads the translators loadTechDrawResource(); -} -} // extern "C" { + PyMOD_Return(mod); +}