diff --git a/src/Mod/Fem/App/FemPostGroupExtension.cpp b/src/Mod/Fem/App/FemPostGroupExtension.cpp index 6fafdbc95a..7c10703064 100644 --- a/src/Mod/Fem/App/FemPostGroupExtension.cpp +++ b/src/Mod/Fem/App/FemPostGroupExtension.cpp @@ -143,6 +143,13 @@ void FemPostGroupExtension::onExtendedUnsetupObject() } } +bool FemPostGroupExtension::allowObject(App::DocumentObject* obj) +{ + // only filters may be added + return obj->isDerivedFrom(Fem::FemPostFilter::getClassTypeId()); +} + + void FemPostGroupExtension::recomputeChildren() { for (const auto& obj : Group.getValues()) { diff --git a/src/Mod/Fem/App/FemPostGroupExtension.h b/src/Mod/Fem/App/FemPostGroupExtension.h index 8cce8fb1ca..4691b08abf 100644 --- a/src/Mod/Fem/App/FemPostGroupExtension.h +++ b/src/Mod/Fem/App/FemPostGroupExtension.h @@ -59,6 +59,7 @@ public: protected: void extensionOnChanged(const App::Property* p) override; void onExtendedUnsetupObject() override; + bool allowObject(App::DocumentObject* obj) override; private: bool m_blockChange = false; diff --git a/src/Mod/Fem/App/FemPostPipeline.cpp b/src/Mod/Fem/App/FemPostPipeline.cpp index cebdd65aef..e646129a9e 100644 --- a/src/Mod/Fem/App/FemPostPipeline.cpp +++ b/src/Mod/Fem/App/FemPostPipeline.cpp @@ -245,6 +245,18 @@ Fem::FemPostFunctionProvider* FemPostPipeline::getFunctionProvider() { return nullptr; } +bool FemPostPipeline::allowObject(App::DocumentObject* obj) +{ + // we additionally allow FunctionPRoviders to be added + if (obj->isDerivedFrom(FemPostFunctionProvider::getClassTypeId())) { + return true; + } + + // and all standart Post objects the group can handle + return FemPostGroupExtension::allowObject(obj); +} + + bool FemPostPipeline::canRead(Base::FileInfo File) { diff --git a/src/Mod/Fem/App/FemPostPipeline.h b/src/Mod/Fem/App/FemPostPipeline.h index ba05b08d53..5303b4e25e 100644 --- a/src/Mod/Fem/App/FemPostPipeline.h +++ b/src/Mod/Fem/App/FemPostPipeline.h @@ -108,6 +108,7 @@ public: protected: void onChanged(const App::Property* prop) override; + bool allowObject(App::DocumentObject* obj) override; private: App::Enumeration m_frameEnum; diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.cpp index 941485e127..22c4698df1 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.cpp @@ -24,6 +24,7 @@ #include "TaskPostBoxes.h" #include "ViewProviderFemPostBranchFilter.h" +#include using namespace FemGui; @@ -51,3 +52,17 @@ void ViewProviderFemPostBranchFilter::setupTaskDialog(TaskDlgPost* dlg) FemGui::ViewProviderFemPostObject::setupTaskDialog(dlg); } +bool ViewProviderFemPostBranchFilter::acceptReorderingObjects() const { + return true; +} + +bool ViewProviderFemPostBranchFilter::canDragObjectToTarget(App::DocumentObject* obj, App::DocumentObject* target) const { + + // allow drag only to other post groups + if (target) { + return target->hasExtension(Fem::FemPostGroupExtension::getExtensionClassTypeId()); + } + else { + return false; + } +} diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.h b/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.h index 75199692fb..b73cb37c66 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.h +++ b/src/Mod/Fem/Gui/ViewProviderFemPostBranchFilter.h @@ -49,6 +49,10 @@ public: protected: virtual void setupTaskDialog(TaskDlgPost* dlg) override; + // change default group drag/drop behaviour sligthly + bool acceptReorderingObjects() const override; + bool canDragObjectToTarget(App::DocumentObject* obj, App::DocumentObject* target) const override; + // override, to not show/hide children as the parent is shown/hidden like normal groups void extensionHide() override {}; void extensionShow() override {}; diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp index 36a17530d8..596ae9435f 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp @@ -229,6 +229,22 @@ void ViewProviderFemPostPipeline::setupTaskDialog(TaskDlgPost* dlg) } +bool ViewProviderFemPostPipeline::acceptReorderingObjects() const { + return true; +} + +bool ViewProviderFemPostPipeline::canDragObjectToTarget(App::DocumentObject* obj, App::DocumentObject* target) const { + + // allow drag only to other post groups + if (target) { + return target->hasExtension(Fem::FemPostGroupExtension::getExtensionClassTypeId()); + } + else { + return false; + } +} + + PyObject* ViewProviderFemPostPipeline::getPyObject() { if (!pyViewObject) { diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h index 199ff626a5..f126df276c 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h +++ b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.h @@ -55,6 +55,10 @@ protected: void updateFunctionSize(); virtual void setupTaskDialog(TaskDlgPost* dlg) override; + // change default group drag/drop behaviour sligthly + bool acceptReorderingObjects() const override; + bool canDragObjectToTarget(App::DocumentObject* obj, App::DocumentObject* target) const override; + // override, to not show/hide children as the parent is shown/hidden like normal groups void extensionHide() override {}; void extensionShow() override {};