From 856c25da67fcfc67ca4e2e7c472e9afb14ddcc93 Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 24 Mar 2022 15:56:08 +0100 Subject: [PATCH] [FEM] add missing analysis deletion handling as it was, one could delete the analysis container breaking everything. Now you get a warning. - also fix typos --- src/Mod/Fem/Gui/ViewProviderAnalysis.cpp | 84 +++++++++++++------ src/Mod/Fem/Gui/ViewProviderAnalysis.h | 4 +- src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp | 2 +- src/Mod/Fem/Gui/ViewProviderSolver.cpp | 2 +- 4 files changed, 62 insertions(+), 30 deletions(-) diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp index f7c2da6fe4..08bea1e56f 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp @@ -20,34 +20,37 @@ * * ***************************************************************************/ - #include "PreCompiled.h" #ifndef _PreComp_ -# include # include # include +# include # include +# include +# include #endif -#include "ViewProviderAnalysis.h" -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "ViewProviderAnalysis.h" #include "TaskDlgAnalysis.h" + #ifdef FC_USE_VTK #include #endif @@ -84,12 +87,6 @@ std::vector ViewProviderFemAnalysis::claimChildren(void)co return Gui::ViewProviderDocumentObjectGroup::claimChildren(); } -bool ViewProviderFemAnalysis::canDelete(App::DocumentObject* obj) const -{ - Q_UNUSED(obj) - return true; -} - std::vector ViewProviderFemAnalysis::getDisplayModes(void) const { return { "Analysis" }; @@ -161,12 +158,6 @@ void ViewProviderFemAnalysis::unsetEdit(int ModNum) } } -bool ViewProviderFemAnalysis::onDelete(const std::vector &) -{ - // do nothing special on deletion - return true; -} - bool ViewProviderFemAnalysis::canDragObjects() const { return true; @@ -220,6 +211,45 @@ void ViewProviderFemAnalysis::dropObject(App::DocumentObject* obj) ViewProviderDocumentObjectGroup::dropObject(obj); } +bool ViewProviderFemAnalysis::onDelete(const std::vector&) +{ + // warn the user if the object has childs + + auto objs = claimChildren(); + if (!objs.empty()) + { + // generate dialog + QString bodyMessage; + QTextStream bodyMessageStream(&bodyMessage); + bodyMessageStream << qApp->translate("Std_Delete", + "The analysis is not empty, therefore the\nfollowing referencing objects might be lost:"); + bodyMessageStream << '\n'; + for (auto ObjIterator : objs) + bodyMessageStream << '\n' << QString::fromUtf8(ObjIterator->Label.getValue()); + bodyMessageStream << "\n\n" << QObject::tr("Are you sure you want to continue?"); + // show and evaluate the dialog + int DialogResult = QMessageBox::warning(Gui::getMainWindow(), + qApp->translate("Std_Delete", "Object dependencies"), bodyMessage, + QMessageBox::Yes, QMessageBox::No); + if (DialogResult == QMessageBox::Yes) + return true; + else + return false; + } + else { + return true; + } +} + +bool ViewProviderFemAnalysis::canDelete(App::DocumentObject* obj) const +{ + // deletions of objects from a FemAnalysis don't necesarily destroy anything + // thus we can pass this action + // we can warn the user if necessary in the object's ViewProvider in the onDelete() function + Q_UNUSED(obj) + return true; +} + // Python feature ----------------------------------------------------------------------- namespace Gui { diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.h b/src/Mod/Fem/Gui/ViewProviderAnalysis.h index 29f24e6543..15f8c58924 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.h +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.h @@ -47,13 +47,15 @@ public: virtual bool doubleClicked(void); virtual std::vector claimChildren(void)const; + + // handling when object is deleted + virtual bool onDelete(const std::vector&); /// Asks the view provider if the given object can be deleted. virtual bool canDelete(App::DocumentObject* obj) const; //virtual std::vector claimChildren3D(void)const; void setupContextMenu(QMenu*, QObject*, const char*); - virtual bool onDelete(const std::vector &); /// A list of all possible display modes virtual std::vector getDisplayModes(void) const; // shows solid in the tree diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp index 9c4ea446db..ad11a0523f 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp @@ -683,7 +683,7 @@ bool ViewProviderFemPostObject::onDelete(const std::vector&) QString bodyMessage; QTextStream bodyMessageStream(&bodyMessage); bodyMessageStream << qApp->translate("Std_Delete", - "The page is not empty, therefore the\nfollowing referencing objects might be lost:"); + "The pipeline is not empty, therefore the\nfollowing referencing objects might be lost:"); bodyMessageStream << '\n'; for (auto ObjIterator : objs) bodyMessageStream << '\n' << QString::fromUtf8(ObjIterator->Label.getValue()); diff --git a/src/Mod/Fem/Gui/ViewProviderSolver.cpp b/src/Mod/Fem/Gui/ViewProviderSolver.cpp index bc36c60fbe..787704d8cd 100644 --- a/src/Mod/Fem/Gui/ViewProviderSolver.cpp +++ b/src/Mod/Fem/Gui/ViewProviderSolver.cpp @@ -64,7 +64,7 @@ bool ViewProviderSolver::onDelete(const std::vector&) QString bodyMessage; QTextStream bodyMessageStream(&bodyMessage); bodyMessageStream << qApp->translate("Std_Delete", - "The page is not empty, therefore the\nfollowing referencing objects might be lost:"); + "The solver is not empty, therefore the\nfollowing referencing objects might be lost:"); bodyMessageStream << '\n'; for (auto ObjIterator : objs) bodyMessageStream << '\n' << QString::fromUtf8(ObjIterator->Label.getValue());