diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.cpp b/src/Mod/TechDraw/Gui/MDIViewPage.cpp index 919b4eb4d..427bb0c85 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.cpp +++ b/src/Mod/TechDraw/Gui/MDIViewPage.cpp @@ -318,6 +318,11 @@ bool MDIViewPage::attachView(App::DocumentObject *obj) return (qview != nullptr); } +void MDIViewPage::removeView(QGIView *view) +{ + (void) m_view->removeView(view); +} + void MDIViewPage::updateTemplate(bool forceUpdate) diff --git a/src/Mod/TechDraw/Gui/MDIViewPage.h b/src/Mod/TechDraw/Gui/MDIViewPage.h index 29ff8ac2d..5126273fd 100644 --- a/src/Mod/TechDraw/Gui/MDIViewPage.h +++ b/src/Mod/TechDraw/Gui/MDIViewPage.h @@ -65,7 +65,8 @@ public: void attachTemplate(TechDraw::DrawTemplate *obj); void updateTemplate(bool force = false); void updateDrawing(bool force = false); - + void removeView(QGIView *view); + bool onMsg(const char* pMsg,const char** ppReturn); bool onHasMsg(const char* pMsg) const; void onRelabel(Gui::Document *pDoc); diff --git a/src/Mod/TechDraw/Gui/QGVPage.cpp b/src/Mod/TechDraw/Gui/QGVPage.cpp index b5e549c61..ac41d8f43 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.cpp +++ b/src/Mod/TechDraw/Gui/QGVPage.cpp @@ -198,6 +198,46 @@ int QGVPage::addView(QGIView *view) return views.size(); } +int QGVPage::removeView(QGIView *view) +{ + std::vector qviews = views; + std::vector newViews; + + std::vector::iterator qvit = qviews.begin(); + std::vector::iterator qvDel = qviews.end(); + + for (; qvit != qviews.end(); qvit++) { + if ((*qvit) == view) { + qvDel = qvit; + break; + } + } + + if (qvDel == qviews.end()) { //didn't find view in views + return views.size(); + } + + QGraphicsItemGroup* grp = view->group(); + if (grp) { + grp->removeFromGroup(view); + } + + if (view->parentItem()) { //not top level + view->setParentItem(0); + } + + if (view->scene()) { + view->scene()->removeItem(view); + } + + qviews.erase(qvDel); + views = qviews; + delete view; + + return views.size(); +} + + QGIView * QGVPage::addViewPart(TechDraw::DrawViewPart *part) { auto viewPart( new QGIViewPart ); diff --git a/src/Mod/TechDraw/Gui/QGVPage.h b/src/Mod/TechDraw/Gui/QGVPage.h index 01f6b83ef..8ca6a9e59 100644 --- a/src/Mod/TechDraw/Gui/QGVPage.h +++ b/src/Mod/TechDraw/Gui/QGVPage.h @@ -79,6 +79,7 @@ public: void addDimToParent(QGIViewDimension* dim, QGIView* parent); const std::vector & getViews() const { return views; } int addView(QGIView * view); + int removeView(QGIView *view); void setViews(const std::vector &view) {views = view; } void setPageTemplate(TechDraw::DrawTemplate *pageTemplate); diff --git a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp index bb3852de1..2ccbda836 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.cpp @@ -202,6 +202,17 @@ void ViewProviderDrawingView::unsetEdit(int ModNum) } } +bool ViewProviderDrawingView::onDelete(const std::vector &items) +{ + QGIView* qv = getQView(); + if (qv != nullptr) { + MDIViewPage* mdi = getMDIViewPage(); + mdi->removeView(qv); + } + + return ViewProviderDocumentObject::onDelete(items); +} + MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const { diff --git a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.h b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.h index 73931d4fe..a5d2bfe43 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDrawingView.h +++ b/src/Mod/TechDraw/Gui/ViewProviderDrawingView.h @@ -60,6 +60,7 @@ public: virtual void onChanged(const App::Property *prop); virtual void updateData(const App::Property*); virtual void unsetEdit(int ModNum); + virtual bool onDelete(const std::vector &items); QGIView* getQView(void); MDIViewPage* getMDIViewPage() const;