From 5e48d2ec334d539eb69315c7d728415f301205e5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 18 Oct 2015 19:50:47 +0200 Subject: [PATCH] + make Python API of Selection consistent to C++ API --- src/Gui/Selection.cpp | 29 ++++++++++++++++++++++++----- src/Gui/Selection.h | 1 + 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Gui/Selection.cpp b/src/Gui/Selection.cpp index 77c94bf2d..9859734c3 100644 --- a/src/Gui/Selection.cpp +++ b/src/Gui/Selection.cpp @@ -989,7 +989,9 @@ PyMethodDef SelectionSingleton::Methods[] = { {"getSelection", (PyCFunction) SelectionSingleton::sGetSelection, 1, "getSelection([string]) -- Return a list of selected objets\n" "Return a list of selected objects for a given document name. If no\n" - "document is given the complete selection is returned."}, + "document name is given the selection for the active document is returned."}, + {"getCompleteSelection", (PyCFunction) SelectionSingleton::sGetCompleteSelection, 1, + "getCompleteSelection() -- Return a list of selected objects of all documents."}, {"getSelectionEx", (PyCFunction) SelectionSingleton::sGetSelectionEx, 1, "getSelectionEx([string]) -- Return a list of SelectionObjects\n" "Return a list of SelectionObjects for a given document name. If no\n" @@ -1107,10 +1109,27 @@ PyObject *SelectionSingleton::sGetSelection(PyObject * /*self*/, PyObject *args, return NULL; // NULL triggers exception std::vector sel; - if (documentName) - sel = Selection().getSelection(documentName); - else - sel = Selection().getCompleteSelection(); + sel = Selection().getSelection(documentName); + + try { + Py::List list; + for (std::vector::iterator it = sel.begin(); it != sel.end(); ++it) { + list.append(Py::asObject(it->pObject->getPyObject())); + } + return Py::new_reference_to(list); + } + catch (Py::Exception&) { + return 0; + } +} + +PyObject *SelectionSingleton::sGetCompleteSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) +{ + if (!PyArg_ParseTuple(args, "")) // convert args: Python->C + return NULL; // NULL triggers exception + + std::vector sel; + sel = Selection().getCompleteSelection(); try { Py::List list; diff --git a/src/Gui/Selection.h b/src/Gui/Selection.h index bbcb99aad..6e411d319 100644 --- a/src/Gui/Selection.h +++ b/src/Gui/Selection.h @@ -311,6 +311,7 @@ protected: static PyObject *sIsSelected (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sCountObjectsOfType (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sGetSelection (PyObject *self,PyObject *args,PyObject *kwd); + static PyObject *sGetCompleteSelection(PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sGetSelectionEx (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sGetSelectionObject (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sAddSelObserver (PyObject *self,PyObject *args,PyObject *kwd);