From b3e9c6b9a94261e0da61c42b1910b1950a6124db Mon Sep 17 00:00:00 2001 From: DeepSOIC Date: Wed, 4 May 2016 23:49:18 +0300 Subject: [PATCH] Attacher: make Placement read-only when attached Read-onlyness of Placement and superPlacement properties is now dynamically controlled by MapMode property value. --- src/Mod/Part/App/AttachableObject.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/App/AttachableObject.cpp b/src/Mod/Part/App/AttachableObject.cpp index 8fce2ed3e..300920a2d 100644 --- a/src/Mod/Part/App/AttachableObject.cpp +++ b/src/Mod/Part/App/AttachableObject.cpp @@ -28,6 +28,7 @@ #include "AttachableObject.h" #include +#include @@ -95,6 +96,14 @@ App::DocumentObjectExecReturn *AttachableObject::execute() return Part::Feature::execute(); } +void setReadonlyness(App::Property &prop, bool on) +{ + unsigned long status = prop.getStatus(); + prop.setStatus(App::Property::ReadOnly, on); + if (status != prop.getStatus()) + App::GetApplication().signalChangePropertyEditor(prop); +} + void AttachableObject::onChanged(const App::Property* prop) { if(! this->isRestoring()){ @@ -103,8 +112,14 @@ void AttachableObject::onChanged(const App::Property* prop) || prop == &MapMode || prop == &MapPathParameter || prop == &MapReversed - || prop == &superPlacement)) + || prop == &superPlacement)){ + + eMapMode mmode = eMapMode(this->MapMode.getValue()); + setReadonlyness(this->superPlacement, mmode == mmDeactivated); + setReadonlyness(this->Placement, mmode != mmDeactivated && mmode != mmTranslate); + positionBySupport(); + } } catch (Base::Exception &e) { this->setError(); Base::Console().Error("PositionBySupport: %s",e.what());