From 290a19e7735dbfb6527d89b75a102b575083116a Mon Sep 17 00:00:00 2001 From: wandererfan Date: Thu, 3 Nov 2022 08:58:02 -0400 Subject: [PATCH] [TD]fix view drag and drop to page --- src/Mod/TechDraw/Gui/ViewProviderPage.cpp | 55 +++++++++++++++++++++++ src/Mod/TechDraw/Gui/ViewProviderPage.h | 6 +++ 2 files changed, 61 insertions(+) diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index a3c3281339..4a36526192 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -460,6 +460,61 @@ bool ViewProviderPage::canDelete(App::DocumentObject *obj) const return true; } +bool ViewProviderPage::canDragObjects() const +{ +// Base::Console().Message("VPP:canDragObjects()\n"); + return ViewProviderDocumentObject::canDragObjects(); +} + +bool ViewProviderPage::canDragObject(App::DocumentObject* docObj) const +{ +// Base::Console().Message("VPP:canDragObject()\n"); + if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) { + //DPGI can not be dragged from the Page as it belongs to DPG, not Page + return false; + } + + if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) { + return true; + } + return false; +} + + +bool ViewProviderPage::canDropObject(App::DocumentObject* docObj) const +{ +// Base::Console().Message("VPP:canDropObject()\n"); + if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) { + //DPGI can not be dropped onto the Page as it belongs to DPG, not Page + return false; + } + + if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) { + return true; + } + return false; +} + +void ViewProviderPage::dropObject(App::DocumentObject* docObj) +{ +// Base::Console().Message("VPP:dropObject()\n"); + if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) { + //DPGI can not be dropped onto the Page as it belongs to DPG, not Page + ViewProviderDocumentObject::dropObject(docObj); + return; + } + if (docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId()) ) { + auto dv = static_cast(docObj); + if (dv->findParentPage()) { + dv->findParentPage()->removeView(dv); + } + getDrawPage()->addView(dv); + //don't run ancestor's method as addView does everything we need + return; + } + ViewProviderDocumentObject::dropObject(docObj); +} + //! Redo the whole visual page void ViewProviderPage::onGuiRepaint(const TechDraw::DrawPage* dp) { diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.h b/src/Mod/TechDraw/Gui/ViewProviderPage.h index 3ec2ac0829..04331bba3c 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.h +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.h @@ -59,6 +59,12 @@ public: void attach(App::DocumentObject *) override; void setDisplayMode(const char* ModeName) override; + + bool canDragObjects() const override; + bool canDragObject(App::DocumentObject* docObj) const override; + bool canDropObject(App::DocumentObject* docObj) const override; + void dropObject(App::DocumentObject* docObj) override; + bool useNewSelectionModel() const override {return false;} /// returns a list of all possible modes std::vector getDisplayModes() const override;