diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index 7fa224baac..5b9a9ab5da 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -577,12 +577,7 @@ QGIViewClip* QGIView::getClipGroup() void QGIView::updateView(bool forceUpdate) { - //allow/prevent dragging - if (getViewObject()->isLocked()) { - setFlag(QGraphicsItem::ItemIsMovable, false); - } else { - setFlag(QGraphicsItem::ItemIsMovable, true); - } + setMovableFlag(); if (getViewObject() && forceUpdate) { setPosition(Rez::guiX(getViewObject()->X.getValue()), @@ -1140,6 +1135,15 @@ bool QGIView::isExporting() const return scenePage->getExportingAny(); } +void QGIView::setMovableFlag() +{ + if (getViewObject()->isLocked()) { + setFlag(QGraphicsItem::ItemIsMovable, false); + } else { + setFlag(QGraphicsItem::ItemIsMovable, true); + } +} + //! Retrieves objects of type T with given indexes template std::vector QGIView::getObjects(std::vector indexes) diff --git a/src/Mod/TechDraw/Gui/QGIView.h b/src/Mod/TechDraw/Gui/QGIView.h index 1d49cd8d13..f7a62f29dd 100644 --- a/src/Mod/TechDraw/Gui/QGIView.h +++ b/src/Mod/TechDraw/Gui/QGIView.h @@ -187,6 +187,7 @@ public: bool isExporting() const; + virtual void setMovableFlag(); protected: QGIView* getQGIVByName(std::string name) const; diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.cpp b/src/Mod/TechDraw/Gui/QGIViewPart.cpp index eb58261a5d..4d1744be9c 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewPart.cpp @@ -44,6 +44,8 @@ #include #include #include +#include +#include #include "DrawGuiUtil.h" #include "MDIViewPage.h" @@ -65,6 +67,7 @@ #include "PathBuilder.h" #include "QGIBreakLine.h" #include "QGSPage.h" +#include "QGIProjGroup.h" using namespace TechDraw; using namespace TechDrawGui; @@ -220,18 +223,23 @@ QPainterPath QGIViewPart::drawPainterPath(TechDraw::BaseGeomPtr baseGeom) const double rot = getViewObject()->Rotation.getValue(); return m_pathBuilder->geomToPainterPath(baseGeom, rot); } + void QGIViewPart::updateView(bool update) { - // Base::Console().message("QGIVP::updateView() - %s\n", getViewObject()->getNameInDocument()); auto viewPart(dynamic_cast(getViewObject())); - if (!viewPart) - return; - auto vp = static_cast(getViewProvider(getViewObject())); - if (!vp) + if (!viewPart) { return; + } - if (update) + auto vp = static_cast(getViewProvider(getViewObject())); + if (!vp) { + return; + } + + if (update) { draw(); + } + QGIView::updateView(update); } @@ -1427,3 +1435,36 @@ bool QGIViewPart::hideCenterMarks() const return true; } +void QGIViewPart::setMovableFlag() +{ + auto* dvp(dynamic_cast(getViewObject())); + if (TechDraw::DrawView::isProjGroupItem(dvp)) { + setMovableFlagProjGroupItem(); + return; + } + QGIView::setMovableFlag(); +} + +void QGIViewPart::setMovableFlagProjGroupItem() +{ + auto* dpgi(dynamic_cast(getViewObject())); + if (!dpgi) { + return; + } + + if (dpgi->isLocked()) { + setFlag(QGraphicsItem::ItemIsMovable, false); + return; + } + + bool isAutoDist{dpgi->getPGroup()->AutoDistribute.getValue()}; + if (isAutoDist) { + setFlag(QGraphicsItem::ItemIsMovable, false); + return; + } + + // not locked, not autoDistribute + setFlag(QGraphicsItem::ItemIsMovable, true); +} + + diff --git a/src/Mod/TechDraw/Gui/QGIViewPart.h b/src/Mod/TechDraw/Gui/QGIViewPart.h index f243596b8b..191b857985 100644 --- a/src/Mod/TechDraw/Gui/QGIViewPart.h +++ b/src/Mod/TechDraw/Gui/QGIViewPart.h @@ -129,7 +129,8 @@ public: bool hideCenterMarks() const; - + void setMovableFlag() override; + void setMovableFlagProjGroupItem(); protected: bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;