From f55635900f43baa510badeb0c9be628df2a0e713 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 20 Feb 2017 22:16:56 +0100 Subject: [PATCH] fix setEdit, unsetEdit and doubleClicked methods of Python view provider --- src/Gui/ViewProviderPythonFeature.cpp | 33 +++++++++++++++--------- src/Gui/ViewProviderPythonFeature.h | 37 ++++++++++++++++++--------- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/Gui/ViewProviderPythonFeature.cpp b/src/Gui/ViewProviderPythonFeature.cpp index 2c1229a2a70f..d483c6e20c87 100644 --- a/src/Gui/ViewProviderPythonFeature.cpp +++ b/src/Gui/ViewProviderPythonFeature.cpp @@ -411,7 +411,8 @@ std::vector ViewProviderPythonFeatureImp::getSelectionShape(cons return std::vector(); } -bool ViewProviderPythonFeatureImp::setEdit(int ModNum) +ViewProviderPythonFeatureImp::ValueT +ViewProviderPythonFeatureImp::setEdit(int ModNum) { // Run the onChanged method of the proxy object. Base::PyGILStateLocker lock; @@ -425,7 +426,8 @@ bool ViewProviderPythonFeatureImp::setEdit(int ModNum) Py::Tuple args(1); args.setItem(0, Py::Int(ModNum)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } else { Py::Callable method(vp.getAttr(std::string("setEdit"))); @@ -433,7 +435,8 @@ bool ViewProviderPythonFeatureImp::setEdit(int ModNum) args.setItem(0, Py::Object(object->getPyObject(), true)); args.setItem(1, Py::Int(ModNum)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } } } @@ -443,10 +446,11 @@ bool ViewProviderPythonFeatureImp::setEdit(int ModNum) e.ReportException(); } - return false; + return NotImplemented; } -bool ViewProviderPythonFeatureImp::unsetEdit(int ModNum) +ViewProviderPythonFeatureImp::ValueT +ViewProviderPythonFeatureImp::unsetEdit(int ModNum) { // Run the onChanged method of the proxy object. Base::PyGILStateLocker lock; @@ -460,7 +464,8 @@ bool ViewProviderPythonFeatureImp::unsetEdit(int ModNum) Py::Tuple args(1); args.setItem(0, Py::Int(ModNum)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } else { Py::Callable method(vp.getAttr(std::string("unsetEdit"))); @@ -468,7 +473,8 @@ bool ViewProviderPythonFeatureImp::unsetEdit(int ModNum) args.setItem(0, Py::Object(object->getPyObject(), true)); args.setItem(1, Py::Int(ModNum)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } } } @@ -478,10 +484,11 @@ bool ViewProviderPythonFeatureImp::unsetEdit(int ModNum) e.ReportException(); } - return false; + return NotImplemented; } -bool ViewProviderPythonFeatureImp::doubleClicked(void) +ViewProviderPythonFeatureImp::ValueT +ViewProviderPythonFeatureImp::doubleClicked(void) { // Run the onChanged method of the proxy object. Base::PyGILStateLocker lock; @@ -495,14 +502,16 @@ bool ViewProviderPythonFeatureImp::doubleClicked(void) Py::Tuple args; //args.setItem(0, Py::Int(ModNum)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } else { Py::Callable method(vp.getAttr(std::string("doubleClicked"))); Py::Tuple args(1); args.setItem(0, Py::Object(object->getPyObject(), true)); Py::Boolean ok(method.apply(args)); - return (bool)ok; + bool value = (bool)ok; + return value ? Accepted : Rejected; } } } @@ -512,7 +521,7 @@ bool ViewProviderPythonFeatureImp::doubleClicked(void) e.ReportException(); } - return false; + return NotImplemented; } void ViewProviderPythonFeatureImp::setupContextMenu(QMenu* menu) diff --git a/src/Gui/ViewProviderPythonFeature.h b/src/Gui/ViewProviderPythonFeature.h index cb4402bb1f6d..03b93d129a4b 100644 --- a/src/Gui/ViewProviderPythonFeature.h +++ b/src/Gui/ViewProviderPythonFeature.h @@ -55,9 +55,9 @@ class GuiExport ViewProviderPythonFeatureImp std::string getElement(const SoDetail *det) const; SoDetail* getDetail(const char*) const; std::vector getSelectionShape(const char* Element) const; - bool setEdit(int ModNum); - bool unsetEdit(int ModNum); - bool doubleClicked(void); + ValueT setEdit(int ModNum); + ValueT unsetEdit(int ModNum); + ValueT doubleClicked(void); void setupContextMenu(QMenu* menu); /** @name Update data methods*/ @@ -383,15 +383,25 @@ class ViewProviderPythonFeatureT : public ViewProviderT /// is called by the document when the provider goes in edit mode virtual bool setEdit(int ModNum) { - bool ok = imp->setEdit(ModNum); - if (!ok) ok = ViewProviderT::setEdit(ModNum); - return ok; + switch (imp->setEdit(ModNum)) { + case ViewProviderPythonFeatureImp::Accepted: + return true; + case ViewProviderPythonFeatureImp::Rejected: + return false; + default: + return ViewProviderT::setEdit(ModNum); + } } /// is called when you lose the edit mode virtual void unsetEdit(int ModNum) { - bool ok = imp->unsetEdit(ModNum); - if (!ok) ViewProviderT::unsetEdit(ModNum); + switch (imp->unsetEdit(ModNum)) { + case ViewProviderPythonFeatureImp::Accepted: + return; + case ViewProviderPythonFeatureImp::Rejected: + default: + return ViewProviderT::unsetEdit(ModNum); + } } public: @@ -404,11 +414,14 @@ class ViewProviderPythonFeatureT : public ViewProviderT protected: virtual bool doubleClicked(void) { - bool ok = imp->doubleClicked(); - if (!ok) - return ViewProviderT::doubleClicked(); - else + switch (imp->doubleClicked()) { + case ViewProviderPythonFeatureImp::Accepted: return true; + case ViewProviderPythonFeatureImp::Rejected: + return false; + default: + return ViewProviderT::doubleClicked(); + } } virtual void setOverrideMode(const std::string &mode) {