Skip to content

Commit

Permalink
fix setEdit, unsetEdit and doubleClicked methods of Python view provider
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Feb 20, 2017
1 parent ced83be commit f556359
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 24 deletions.
33 changes: 21 additions & 12 deletions src/Gui/ViewProviderPythonFeature.cpp
Expand Up @@ -411,7 +411,8 @@ std::vector<Base::Vector3d> ViewProviderPythonFeatureImp::getSelectionShape(cons
return std::vector<Base::Vector3d>();
}

bool ViewProviderPythonFeatureImp::setEdit(int ModNum)
ViewProviderPythonFeatureImp::ValueT
ViewProviderPythonFeatureImp::setEdit(int ModNum)
{
// Run the onChanged method of the proxy object.
Base::PyGILStateLocker lock;
Expand All @@ -425,15 +426,17 @@ 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")));
Py::Tuple args(2);
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;
}
}
}
Expand All @@ -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;
Expand All @@ -460,15 +464,17 @@ 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")));
Py::Tuple args(2);
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;
}
}
}
Expand All @@ -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;
Expand All @@ -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;
}
}
}
Expand All @@ -512,7 +521,7 @@ bool ViewProviderPythonFeatureImp::doubleClicked(void)
e.ReportException();
}

return false;
return NotImplemented;
}

void ViewProviderPythonFeatureImp::setupContextMenu(QMenu* menu)
Expand Down
37 changes: 25 additions & 12 deletions src/Gui/ViewProviderPythonFeature.h
Expand Up @@ -55,9 +55,9 @@ class GuiExport ViewProviderPythonFeatureImp
std::string getElement(const SoDetail *det) const;
SoDetail* getDetail(const char*) const;
std::vector<Base::Vector3d> 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*/
Expand Down Expand Up @@ -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:
Expand All @@ -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)
{
Expand Down

0 comments on commit f556359

Please sign in to comment.