From bba0bf1f40aadd7286c6f620ca8daa75fc711b3c Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Wed, 20 Mar 2024 20:37:09 +0100 Subject: [PATCH] TechDraw: Enable drag and drop to and from clip groups. Remove TechDraw_ClipGroupAdd and TechDraw_ClipGroupRemove from the UI. --- src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp | 40 +++++++++++++++++++ src/Mod/TechDraw/Gui/ViewProviderViewClip.h | 2 + src/Mod/TechDraw/Gui/Workbench.cpp | 25 ++---------- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp b/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp index af7b8513b0..d653b9bb25 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp @@ -31,6 +31,9 @@ #endif #include +#include +#include + #include "ViewProviderViewClip.h" using namespace TechDrawGui; @@ -104,3 +107,40 @@ TechDraw::DrawViewClip* ViewProviderViewClip::getObject() const { return getViewObject(); } + + +void ViewProviderViewClip::dragObject(App::DocumentObject* docObj) +{ + if (!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { + return; + } + + auto dv = static_cast(docObj); + + getObject()->removeView(dv); +} + +void ViewProviderViewClip::dropObject(App::DocumentObject* docObj) +{ + if (docObj->isDerivedFrom(TechDraw::DrawProjGroupItem::getClassTypeId())) { + //DPGI can not be dropped onto the Page as it belongs to DPG, not Page + return; + } + if (!docObj->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { + return; + } + + auto dv = static_cast(docObj); + TechDraw::DrawPage* pageClip = getObject()->findParentPage(); + TechDraw::DrawPage* pageView = dv->findParentPage(); + if (!pageClip || !pageView) { + return; + } + + if (pageClip != pageView) { + pageView->removeView(dv); + pageClip->addView(dv); + } + + getObject()->addView(dv); +} \ No newline at end of file diff --git a/src/Mod/TechDraw/Gui/ViewProviderViewClip.h b/src/Mod/TechDraw/Gui/ViewProviderViewClip.h index 123b33bafd..a33f61bbe4 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderViewClip.h +++ b/src/Mod/TechDraw/Gui/ViewProviderViewClip.h @@ -56,6 +56,8 @@ public: bool canDelete(App::DocumentObject* obj) const override; + void dragObject(App::DocumentObject* docObj) override; + void dropObject(App::DocumentObject* docObj) override; }; } // namespace TechDrawGui diff --git a/src/Mod/TechDraw/Gui/Workbench.cpp b/src/Mod/TechDraw/Gui/Workbench.cpp index 1fdfeda451..0dbd7f64a7 100644 --- a/src/Mod/TechDraw/Gui/Workbench.cpp +++ b/src/Mod/TechDraw/Gui/Workbench.cpp @@ -49,7 +49,6 @@ using namespace TechDrawGui; qApp->translate("Workbench", "TechDraw Annotation"); qApp->translate("Workbench", "TechDraw Attributes"); qApp->translate("Workbench", "TechDraw Centerlines"); - qApp->translate("Workbench", "TechDraw Clips"); qApp->translate("Workbench", "TechDraw Decoration"); qApp->translate("Workbench", "TechDraw Dimensions"); qApp->translate("Workbench", "TechDraw Extend Dimensions"); @@ -217,6 +216,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *views << "TechDraw_ComplexSection"; *views << "TechDraw_DetailView"; *views << "TechDraw_ProjectionGroup"; + *views << "TechDraw_ClipGroup"; *views << "Separator"; *views << "TechDraw_Symbol"; *views << "TechDraw_Image"; @@ -235,13 +235,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const *other << "TechDraw_ArchView"; *other << "TechDraw_SpreadsheetView"; - // clip groups - Gui::MenuItem* clips = new Gui::MenuItem; - clips->setCommand("Clipped Views"); - *clips << "TechDraw_ClipGroup"; - *clips << "TechDraw_ClipGroupAdd"; - *clips << "TechDraw_ClipGroupRemove"; - // hatching Gui::MenuItem* hatch = new Gui::MenuItem; hatch->setCommand("Hatching"); @@ -263,8 +256,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const *draw << "Separator"; *draw << other; *draw << "Separator"; - *draw << clips; - *draw << "Separator"; *draw << dimensions; *draw << "Separator"; *draw << hatch; @@ -307,15 +298,10 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *views << "TechDraw_DraftView"; *views << "TechDraw_ArchView"; *views << "TechDraw_SpreadsheetView"; + *views << "TechDraw_ClipGroup"; *views << "TechDraw_ShareView"; *views << "TechDraw_ProjectShape"; - Gui::ToolBarItem* clips = new Gui::ToolBarItem(root); - clips->setCommand("TechDraw Clips"); - *clips << "TechDraw_ClipGroup"; - *clips << "TechDraw_ClipGroupAdd"; - *clips << "TechDraw_ClipGroupRemove"; - Gui::ToolBarItem* stacking = new Gui::ToolBarItem(root); stacking->setCommand("TechDraw Stacking"); *stacking << "TechDraw_StackGroup"; @@ -420,15 +406,10 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const *views << "TechDraw_DetailView"; *views << "TechDraw_DraftView"; *views << "TechDraw_SpreadsheetView"; + *views << "TechDraw_ClipGroup"; *views << "TechDraw_ShareView"; *views << "TechDraw_ProjectShape"; - Gui::ToolBarItem* clips = new Gui::ToolBarItem(root); - clips->setCommand("TechDraw Clips"); - *clips << "TechDraw_ClipGroup"; - *clips << "TechDraw_ClipGroupAdd"; - *clips << "TechDraw_ClipGroupRemove"; - Gui::ToolBarItem* stacking = new Gui::ToolBarItem(root); stacking->setCommand("TechDraw Stacking"); *stacking << "TechDraw_StackGroup";