diff --git a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp index d49cbedaa4..5803e85667 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp @@ -181,14 +181,7 @@ void DrawProjGroupItem::onDocumentRestored() DrawProjGroup* DrawProjGroupItem::getPGroup() const { - std::vector parent = getInList(); - for (std::vector::iterator it = parent.begin(); it != parent.end(); ++it) { - if ((*it)->isDerivedFrom()) { - DrawProjGroup* result = dynamic_cast(*it); - return result; - } - } - return nullptr; + return dynamic_cast(getCollection()); } bool DrawProjGroupItem::isAnchor(void) const diff --git a/src/Mod/TechDraw/App/DrawView.cpp b/src/Mod/TechDraw/App/DrawView.cpp index 0a75e1063b..6773d625e2 100644 --- a/src/Mod/TechDraw/App/DrawView.cpp +++ b/src/Mod/TechDraw/App/DrawView.cpp @@ -409,10 +409,14 @@ DrawView *DrawView::claimParent() const { App::PropertyLink *ownerProp = const_cast(this)->getOwnerProperty(); if (ownerProp) { - return dynamic_cast(ownerProp->getValue()); + auto ownerView = dynamic_cast(ownerProp->getValue()); + if (ownerView) { + return ownerView; + } } - return nullptr; + // If there is no parent view we are aware of, return the view collection we may belong to + return getCollection(); } DrawViewClip* DrawView::getClipGroup() @@ -430,6 +434,19 @@ DrawViewClip* DrawView::getClipGroup() return nullptr; } +DrawViewCollection *DrawView::getCollection() const +{ + std::vector parents = getInList(); + for (auto it = parents.begin(); it != parents.end(); ++it) { + auto parentCollection = dynamic_cast(*it); + if (parentCollection) { + return parentCollection; + } + } + + return nullptr; +} + double DrawView::autoScale() const { auto page = findParentPage(); diff --git a/src/Mod/TechDraw/App/DrawView.h b/src/Mod/TechDraw/App/DrawView.h index 32cd91fe59..73097254fe 100644 --- a/src/Mod/TechDraw/App/DrawView.h +++ b/src/Mod/TechDraw/App/DrawView.h @@ -37,6 +37,7 @@ namespace TechDraw { class DrawPage; +class DrawViewCollection; class DrawViewClip; class DrawLeaderLine; /*class CosmeticVertex;*/ @@ -74,6 +75,7 @@ public: bool isInClip(); DrawViewClip* getClipGroup(); + DrawViewCollection *getCollection() const; /// returns the type name of the ViewProvider const char* getViewProviderName() const override { diff --git a/src/Mod/TechDraw/Gui/QGIProjGroup.cpp b/src/Mod/TechDraw/Gui/QGIProjGroup.cpp index e3e5f7aabc..f2e15b2c17 100644 --- a/src/Mod/TechDraw/Gui/QGIProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/QGIProjGroup.cpp @@ -103,7 +103,6 @@ QVariant QGIProjGroup::itemChange(GraphicsItemChange change, const QVariant &val QString type = QString::fromLatin1(projItemPtr->Type.getValueAsString()); if (type == QString::fromLatin1("Front")) { - gView->setLocked(true); //this locks in GUI only gView->alignTo(m_origin, QString::fromLatin1("None")); installSceneEventFilter(gView); } else if ( type == QString::fromLatin1("Top") || diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index b327c4c031..17d801c261 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -69,7 +69,6 @@ const float labelCaptionFudge = 0.2f; // temp fiddle for devel QGIView::QGIView() :QGraphicsItemGroup(), viewObj(nullptr), - m_locked(false), m_innerView(false), m_multiselectActivated(false) { @@ -157,15 +156,8 @@ QVariant QGIView::itemChange(GraphicsItemChange change, const QVariant &value) // Base::Console().Message("QGIV::itemChange(%d)\n", change); if(change == ItemPositionChange && scene()) { newPos = value.toPointF(); //position within parent! - if(m_locked){ - // ignore position change for locked items - newPos.setX(pos().x()); - newPos.setY(pos().y()); - return newPos; - } TechDraw::DrawView *viewObj = getViewObject(); - if (viewObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) { // restrict movements of secondary views. TechDraw::DrawProjGroupItem* dpgi = static_cast(viewObj); diff --git a/src/Mod/TechDraw/Gui/QGIView.h b/src/Mod/TechDraw/Gui/QGIView.h index 16afe9328b..46c835a65f 100644 --- a/src/Mod/TechDraw/Gui/QGIView.h +++ b/src/Mod/TechDraw/Gui/QGIView.h @@ -122,9 +122,7 @@ public: void isInnerView(bool state) { m_innerView = state; } QGIViewClip* getClipGroup(); - void alignTo(QGraphicsItem*, const QString &alignment); - void setLocked(bool isLocked) { m_locked = isLocked; } QColor prefNormalColor(); //preference QColor getNormalColor() { return m_colNormal; } //current setting @@ -180,7 +178,6 @@ private: std::string viewName; QHash alignHash; - bool m_locked; bool m_innerView; //View is inside another View bool m_multiselectActivated; diff --git a/src/Mod/TechDraw/Gui/QGSPage.cpp b/src/Mod/TechDraw/Gui/QGSPage.cpp index 49edc5febb..05199449b2 100644 --- a/src/Mod/TechDraw/Gui/QGSPage.cpp +++ b/src/Mod/TechDraw/Gui/QGSPage.cpp @@ -257,16 +257,6 @@ int QGSPage::addQView(QGIView* view) // Find if it belongs to a parent QGIView *parent = findParent(view); if (parent) { - auto parentDocObj = parent->getViewObject(); - auto parentDPG = dynamic_cast(parentDocObj); - if (parentDPG) { - // move the DPGI to the center of the DPG. the DPGI must be placed in the - // correct position on the page before adding it to the DPG or it will be - // placed at scene(0,0). - QPointF posRef(0., 0.); - QPointF mapPos = view->mapToItem(parent, posRef); - view->moveBy(-mapPos.x(), -mapPos.y()); - } parent->addToGroup(view); } view->setPos(viewPos); @@ -744,24 +734,6 @@ QGIView* QGSPage::findParent(QGIView* view) const } } - // Check if part of view collection - for (std::vector::const_iterator it = qviews.begin(); it != qviews.end(); ++it) { - QGIViewCollection* grp = nullptr; - grp = dynamic_cast(*it); - if (grp) { - TechDraw::DrawViewCollection* collection = nullptr; - collection = dynamic_cast(grp->getViewObject()); - if (collection) { - std::vector objs = collection->Views.getValues(); - for (std::vector::iterator it = objs.begin(); - it != objs.end(); ++it) { - if (strcmp(myFeat->getNameInDocument(), (*it)->getNameInDocument()) == 0) - - return grp; - } - } - } - } // Not found a parent return nullptr; } diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index 20477f7b82..eeb751330c 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -388,8 +388,7 @@ std::vector ViewProviderPage::claimChildren(void) const } // Collect any child views - // for Page, valid children are any View except: DrawProjGroupItem - // DrawViewDimension + // for Page, valid children are any View except: DrawViewDimension // DrawViewBalloon // any FeatuerView in a DrawViewClip // DrawHatch @@ -407,9 +406,8 @@ std::vector ViewProviderPage::claimChildren(void) const } App::DocumentObject* docObj = *it; - // Don't collect if dimension, projection group item, hatch or member of ClipGroup as these should be grouped elsewhere - if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId()) - || docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) + // Don't collect if dimension, balloon, hatch or member of ClipGroup as these should be grouped elsewhere + if (docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawHatch::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId()) || (featView && featView->isInClip()))