diff --git a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp index ee819dbb25..25cead722b 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp @@ -102,6 +102,7 @@ void DrawProjGroupItem::onChanged(const App::Property *prop) bool DrawProjGroupItem::isLocked(void) const { bool isLocked = DrawView::isLocked(); + if (isAnchor()) { //Anchor view is always locked to DPG return true; } @@ -112,6 +113,24 @@ bool DrawProjGroupItem::isLocked(void) const return isLocked; } +bool DrawProjGroupItem::showLock(void) const +{ + bool result = DrawView::showLock(); + DrawProjGroup* parent = getPGroup(); + bool parentLock = false; + if (parent != nullptr) { + parentLock = parent->LockPosition.getValue(); + } + + if (isAnchor() && //don't show lock for Front if DPG is not locked + !parentLock) { + result = false; + } + + return result; +} + + App::DocumentObjectExecReturn *DrawProjGroupItem::execute(void) { if (DrawUtil::checkParallel(Direction.getValue(), diff --git a/src/Mod/TechDraw/App/DrawProjGroupItem.h b/src/Mod/TechDraw/App/DrawProjGroupItem.h index 4e3966ac56..de929dc971 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupItem.h +++ b/src/Mod/TechDraw/App/DrawProjGroupItem.h @@ -84,6 +84,7 @@ public: protected: void onChanged(const App::Property* prop) override; virtual bool isLocked(void) const override; + virtual bool showLock(void) const override; private: static const char* TypeEnums[]; diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index 7d0af2a776..b1be4a73a1 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -153,6 +153,11 @@ bool DrawView::isLocked(void) const return LockPosition.getValue(); } +bool DrawView::showLock(void) const +{ + return true; +} + //override this for View inside a group (ex DPGI in DPG) void DrawView::handleXYLock(void) { diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h index 99c35d7818..0093eac9ae 100644 --- a/src/Mod/TechDraw/App/DrawView.h +++ b/src/Mod/TechDraw/App/DrawView.h @@ -92,6 +92,7 @@ public: void requestPaint(void); virtual void handleXYLock(void); virtual bool isLocked(void) const; + virtual bool showLock(void) const; std::vector getLeaders(void) const; diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index ddd2f55821..0c4a6f394d 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -502,7 +502,8 @@ void QGIView::drawBorder() double lockX = frameArea.left(); double lockY = frameArea.bottom() - m_lockHeight; - if (feat->isLocked()) { + if (feat->isLocked() && + feat->showLock()) { m_lock->setZValue(ZVALUE::LOCK); m_lock->setPos(lockX,lockY); m_lock->show();