From 0f0b635e65c3083d1134e52373d61bd2faa973da Mon Sep 17 00:00:00 2001 From: Uwe Date: Thu, 24 Mar 2022 14:55:40 +0100 Subject: [PATCH] [FEM] handle deletion of solver objects As it was, a deletion of non-empty solver could not be stopped, one could only decide if childs would be deleted too Now you get a warning and can stop the deletion --- src/Mod/Fem/Gui/ViewProviderSolver.cpp | 54 ++++++++++++++++++++------ src/Mod/Fem/Gui/ViewProviderSolver.h | 4 ++ 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/Mod/Fem/Gui/ViewProviderSolver.cpp b/src/Mod/Fem/Gui/ViewProviderSolver.cpp index 7648cc7967..bc36c60fbe 100644 --- a/src/Mod/Fem/Gui/ViewProviderSolver.cpp +++ b/src/Mod/Fem/Gui/ViewProviderSolver.cpp @@ -20,30 +20,24 @@ * * ***************************************************************************/ - #include "PreCompiled.h" #ifndef _PreComp_ -# include - +# include +# include +# include #endif -#include "ViewProviderSolver.h" -#include #include -#include +#include -#include +#include "ViewProviderSolver.h" -#include "TaskDlgAnalysis.h" using namespace FemGui; - - PROPERTY_SOURCE(FemGui::ViewProviderSolver, Gui::ViewProviderDocumentObject) - ViewProviderSolver::ViewProviderSolver() { sPixmap = "FEM_SolverStandard"; @@ -59,6 +53,44 @@ std::vector ViewProviderSolver::getDisplayModes(void) const return { "Solver" }; } +bool ViewProviderSolver::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 page 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 ViewProviderSolver::canDelete(App::DocumentObject* obj) const +{ + // deletions of objects from a FemSolver 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 ----------------------------------------------------------------------- diff --git a/src/Mod/Fem/Gui/ViewProviderSolver.h b/src/Mod/Fem/Gui/ViewProviderSolver.h index 1e892893e2..df61c896dc 100644 --- a/src/Mod/Fem/Gui/ViewProviderSolver.h +++ b/src/Mod/Fem/Gui/ViewProviderSolver.h @@ -58,6 +58,10 @@ public: } /// A list of all possible display modes virtual std::vector getDisplayModes(void) const; + + // handling when object is deleted + virtual bool onDelete(const std::vector&); + virtual bool canDelete(App::DocumentObject* obj) const; }; typedef Gui::ViewProviderPythonFeatureT ViewProviderSolverPython;