diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp index f651ea3aae1e..126a81eae38f 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp @@ -34,6 +34,7 @@ #include #include +#include #include "TaskDlgAnalysis.h" @@ -159,6 +160,39 @@ bool ViewProviderFemAnalysis::onDelete(const std::vector &) return true; } +bool ViewProviderFemAnalysis::canDragObjects() const +{ + return true; +} + +void ViewProviderFemAnalysis::dragObject(App::DocumentObject* obj) +{ + Fem::FemAnalysis* analyze = static_cast(getObject()); + std::vector fem = analyze->Member.getValues(); + for (std::vector::iterator it = fem.begin(); it != fem.end(); ++it) { + if (*it == obj) { + fem.erase(it); + analyze->Member.setValues(fem); + break; + } + } +} + +bool ViewProviderFemAnalysis::canDropObjects() const +{ + return true; +} + +void ViewProviderFemAnalysis::dropObject(App::DocumentObject* obj) +{ + if (!obj || !obj->getTypeId().isDerivedFrom(Fem::FemMeshObject::getClassTypeId())) + return; + Fem::FemAnalysis* analyze = static_cast(getObject()); + std::vector fem = analyze->Member.getValues(); + fem.push_back(obj); + analyze->Member.setValues(fem); +} + // Python feature ----------------------------------------------------------------------- namespace Gui { diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.h b/src/Mod/Fem/Gui/ViewProviderAnalysis.h index c1c89abadaf3..5be435ce344e 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.h +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.h @@ -63,6 +63,18 @@ class FemGuiExport ViewProviderFemAnalysis : public Gui::ViewProviderDocumentObj // shows solid in the tree virtual bool isShow(void) const{return true;} + /** @name Drag and drop */ + //@{ + /// Returns true if the view provider generally supports dragging objects + bool canDragObjects() const; + /// Starts to drag the object + void dragObject(App::DocumentObject*); + /// Returns true if the view provider generally accepts dropping of objects + bool canDropObjects() const; + /// If the dropped object type is accepted the object will be added as child + void dropObject(App::DocumentObject*); + //@} + protected: virtual bool setEdit(int ModNum); virtual void unsetEdit(int ModNum);