fix setEdit, unsetEdit and doubleClicked methods of Python view provider

This commit is contained in:
wmayer 2017-02-20 22:16:56 +01:00
parent ced83be2da
commit f55635900f
2 changed files with 46 additions and 24 deletions

View File

@ -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;
@ -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)

View File

@ -55,9 +55,9 @@ public:
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*/
@ -383,15 +383,25 @@ protected:
/// 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 @@ public:
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)
{