From d84c2d354447dbbcbbbd4915ec4c95a0c9fe79e1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 11 Aug 2017 12:53:35 +0200 Subject: [PATCH] drag and drop for compound objects --- src/Mod/Part/Gui/ViewProviderCompound.cpp | 41 +++++++++++++++++++++++ src/Mod/Part/Gui/ViewProviderCompound.h | 8 +++++ 2 files changed, 49 insertions(+) diff --git a/src/Mod/Part/Gui/ViewProviderCompound.cpp b/src/Mod/Part/Gui/ViewProviderCompound.cpp index 609fa23608..61b286c17c 100644 --- a/src/Mod/Part/Gui/ViewProviderCompound.cpp +++ b/src/Mod/Part/Gui/ViewProviderCompound.cpp @@ -113,3 +113,44 @@ void ViewProviderCompound::updateData(const App::Property* prop) } } } + +bool ViewProviderCompound::canDragObjects() const +{ + return true; +} + +bool ViewProviderCompound::canDragObject(App::DocumentObject* obj) const +{ + return obj->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()); +} + +void ViewProviderCompound::dragObject(App::DocumentObject* obj) +{ + Part::Compound* pComp = static_cast(getObject()); + std::vector pShapes = pComp->Links.getValues(); + for (std::vector::iterator it = pShapes.begin(); it != pShapes.end(); ++it) { + if (*it == obj) { + pShapes.erase(it); + pComp->Links.setValues(pShapes); + break; + } + } +} + +bool ViewProviderCompound::canDropObjects() const +{ + return true; +} + +bool ViewProviderCompound::canDropObject(App::DocumentObject* obj) const +{ + return obj->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId()); +} + +void ViewProviderCompound::dropObject(App::DocumentObject* obj) +{ + Part::Compound* pComp = static_cast(getObject()); + std::vector pShapes = pComp->Links.getValues(); + pShapes.push_back(obj); + pComp->Links.setValues(pShapes); +} diff --git a/src/Mod/Part/Gui/ViewProviderCompound.h b/src/Mod/Part/Gui/ViewProviderCompound.h index 1ec37b6282..e72b9b278b 100644 --- a/src/Mod/Part/Gui/ViewProviderCompound.h +++ b/src/Mod/Part/Gui/ViewProviderCompound.h @@ -41,6 +41,14 @@ public: std::vector claimChildren() const; bool onDelete(const std::vector &); + /// drag and drop + bool canDragObjects() const; + bool canDragObject(App::DocumentObject*) const; + void dragObject(App::DocumentObject*); + bool canDropObjects() const; + bool canDropObject(App::DocumentObject*) const; + void dropObject(App::DocumentObject*); + protected: void updateData(const App::Property*); };