From b812f8bea87a343ea95f89083a483453246f7482 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Mon, 5 Feb 2018 21:13:51 -0500 Subject: [PATCH] Prevent Page Template Interference - adding a 2nd+ Page with a different Template modified the existing Page's Template --- src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp | 40 ++++++++++++------- src/Mod/TechDraw/Gui/ViewProviderTemplate.h | 3 ++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp b/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp index 302d53c90c..e37d89281a 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderTemplate.cpp @@ -37,17 +37,20 @@ #include #include #include + #include #include -#include -#include +#include +#include #include #include +#include #include "QGITemplate.h" #include "QGVPage.h" #include "MDIViewPage.h" #include "ViewProviderTemplate.h" +#include "ViewProviderPage.h" using namespace TechDrawGui; @@ -90,13 +93,10 @@ void ViewProviderTemplate::updateData(const App::Property* prop) if (getTemplate()->isDerivedFrom(TechDraw::DrawSVGTemplate::getClassTypeId())) { auto t = static_cast(getTemplate()); if (prop == &(t->Template)) { - Gui::MDIView* gmdi = getActiveView(); - if (gmdi != nullptr) { - MDIViewPage* mdi = dynamic_cast(gmdi); - if (mdi != nullptr) { - mdi->attachTemplate(t); - mdi->viewAll(); - } + MDIViewPage* mdi = getMDIViewPage(); + if (mdi != nullptr) { + mdi->attachTemplate(t); + mdi->viewAll(); } } } @@ -152,17 +152,27 @@ QGITemplate* ViewProviderTemplate::getQTemplate(void) QGITemplate *result = nullptr; TechDraw::DrawTemplate* dt = getTemplate(); if (dt) { - Gui::MDIView* gmdi = getActiveView(); - if (gmdi != nullptr) { - MDIViewPage* mdi = dynamic_cast(gmdi); - if (mdi != nullptr) { - result = mdi->getQGVPage()->getTemplate(); - } + MDIViewPage* mdi = getMDIViewPage(); + if (mdi != nullptr) { + result = mdi->getQGVPage()->getTemplate(); } } return result; } +MDIViewPage* ViewProviderTemplate::getMDIViewPage(void) +{ + MDIViewPage* myMdi = nullptr; + auto t = getTemplate(); + auto page = t->getParentPage(); + Gui::ViewProvider* vp = Gui::Application::Instance->getDocument(t->getDocument())->getViewProvider(page); + TechDrawGui::ViewProviderPage* dvp = dynamic_cast(vp); + if (dvp) { + myMdi = dvp->getMDIViewPage(); + } + return myMdi; +} + TechDraw::DrawTemplate* ViewProviderTemplate::getTemplate() const { return dynamic_cast(pcObject); diff --git a/src/Mod/TechDraw/Gui/ViewProviderTemplate.h b/src/Mod/TechDraw/Gui/ViewProviderTemplate.h index b051a94729..721fee31d7 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderTemplate.h +++ b/src/Mod/TechDraw/Gui/ViewProviderTemplate.h @@ -32,6 +32,7 @@ namespace TechDraw{ namespace TechDrawGui { class QGITemplate; +class MDIViewPage; class TechDrawGuiExport ViewProviderTemplate : public Gui::ViewProviderDocumentObject { @@ -55,6 +56,8 @@ public: virtual bool isShow(void) const; QGITemplate* getQTemplate(void); TechDraw::DrawTemplate* getTemplate() const; + MDIViewPage* getMDIViewPage(void); + }; } // namespace TechDrawGui