From ffb34ebe540cee92d035883ad16e06b2c1e4d9d7 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Wed, 17 Apr 2024 17:07:13 +0200 Subject: [PATCH] TechDraw: Fix child not moving when drag and dropping a view between pages. --- src/Mod/TechDraw/App/DrawPage.cpp | 5 ++-- src/Mod/TechDraw/App/DrawPage.h | 2 +- .../Gui/ViewProviderPageExtension.cpp | 23 ++++++++++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawPage.cpp b/src/Mod/TechDraw/App/DrawPage.cpp index 98960e1cd1..98000cab2e 100644 --- a/src/Mod/TechDraw/App/DrawPage.cpp +++ b/src/Mod/TechDraw/App/DrawPage.cpp @@ -232,7 +232,7 @@ int DrawPage::getOrientation() const throw Base::RuntimeError("Template not set for Page"); } -int DrawPage::addView(App::DocumentObject* docObj) +int DrawPage::addView(App::DocumentObject* docObj, bool setPosition) { if (!docObj->isDerivedFrom() && !docObj->isDerivedFrom()) { @@ -256,7 +256,8 @@ int DrawPage::addView(App::DocumentObject* docObj) //position all new views without owners in center of Page (exceptDVDimension) if (!view->claimParent() && !docObj->isDerivedFrom() - && !docObj->isDerivedFrom()) { + && !docObj->isDerivedFrom() + && setPosition) { view->X.setValue(getPageWidth() / 2.0); view->Y.setValue(getPageHeight() / 2.0); } diff --git a/src/Mod/TechDraw/App/DrawPage.h b/src/Mod/TechDraw/App/DrawPage.h index 593722cb68..207982a54a 100644 --- a/src/Mod/TechDraw/App/DrawPage.h +++ b/src/Mod/TechDraw/App/DrawPage.h @@ -60,7 +60,7 @@ public: void handleChangedPropertyType(Base::XMLReader& reader, const char* TypeName, App::Property* prop) override; - int addView(App::DocumentObject* docObj); + int addView(App::DocumentObject* docObj, bool setPosition = true); int removeView(App::DocumentObject* docObj); short mustExecute() const override; boost::signals2::signal signalGuiPaint; diff --git a/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp b/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp index 1caf0b0799..548017d8c4 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp @@ -154,10 +154,27 @@ void ViewProviderPageExtension::dropObject(App::DocumentObject* obj) if (obj->isDerivedFrom()) { auto dv = static_cast(obj); - if (dv->findParentPage()) { - dv->findParentPage()->removeView(dv); + + std::vector deps; + for (auto* dep : dv->getInList()) { + if (dep && dep->isDerivedFrom()) { + deps.push_back(dep); + } } - getViewProviderPage()->getDrawPage()->addView(dv); + + auto* parentPage = dv->findParentPage(); + if (parentPage) { + for (auto* dep : deps) { + parentPage->removeView(dep); + } + parentPage->removeView(dv); + } + + getViewProviderPage()->getDrawPage()->addView(dv, false); + for (auto* dep : deps) { + getViewProviderPage()->getDrawPage()->addView(dep, false); + } + //don't run ancestor's method as addView does everything we need return; }