From d7fe226114d580e60b5dcfb43475b105eb221f04 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 27 Nov 2025 07:39:23 +0100 Subject: [PATCH] Ensure correct update of required delta ensembles When a summary ensemble is modified, update all dependent delta ensembles related to curve display and tree item display. --- .../Commands/RicReloadSummaryCaseFeature.cpp | 3 +++ .../Ensemble/RimSummaryFileSetEnsemble.cpp | 3 +++ .../Summary/RimDeltaSummaryEnsemble.cpp | 11 +++++++++++ .../Summary/RimDeltaSummaryEnsemble.h | 1 + .../Summary/RimSummaryEnsembleTools.cpp | 16 ++++++++++++++++ .../Summary/RimSummaryEnsembleTools.h | 3 +++ 6 files changed, 37 insertions(+) diff --git a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp index aa9017f681..eb4b0c2bfa 100644 --- a/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp +++ b/ApplicationLibCode/Commands/RicReloadSummaryCaseFeature.cpp @@ -27,6 +27,7 @@ #include "RimSummaryCase.h" #include "RimSummaryCaseMainCollection.h" #include "RimSummaryEnsemble.h" +#include "RimSummaryEnsembleTools.h" #include "cafPdmObject.h" #include "cafSelectionManager.h" @@ -124,6 +125,7 @@ void RicReloadSummaryCaseFeature::reloadTaggedSummaryCasesAndUpdate() { ensemble->reloadCases(); ensemble->updateConnectedEditors(); + RimSummaryEnsembleTools::updateDependentDeltaEnsembles( ensemble ); } } } @@ -138,6 +140,7 @@ void RicReloadSummaryCaseFeature::reloadSelectedCasesAndUpdate() for ( RimSummaryEnsemble* ensemble : ensembleSelection ) { ensemble->reloadCases(); + RimSummaryEnsembleTools::updateDependentDeltaEnsembles( ensemble ); } for ( RimSummaryCase* summaryCase : caseSelection ) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/Ensemble/RimSummaryFileSetEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/Ensemble/RimSummaryFileSetEnsemble.cpp index dd235e1f1b..3ead152cfc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/Ensemble/RimSummaryFileSetEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/Ensemble/RimSummaryFileSetEnsemble.cpp @@ -27,6 +27,7 @@ #include "EnsembleFileSet/RimEnsembleFileSetCollection.h" #include "EnsembleFileSet/RimEnsembleFileSetTools.h" #include "RimSummaryCase.h" +#include "RimSummaryEnsembleTools.h" CAF_PDM_SOURCE_INIT( RimSummaryFileSetEnsemble, "RimSummaryFileSetEnsemble" ); @@ -134,6 +135,8 @@ void RimSummaryFileSetEnsemble::onFileSetChanged( const caf::SignalEmitter* emit RiaSummaryTools::updateConnectedPlots( this ); buildChildNodes(); updateAllRequiredEditors(); + + RimSummaryEnsembleTools::updateDependentDeltaEnsembles( this ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp index 4e7fcacc6e..636ca85f07 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp @@ -148,6 +148,17 @@ std::set RimDeltaSummaryEnsemble::ensembleSummaryAddre return addresses; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimDeltaSummaryEnsemble::onSourceEnsembleChanged() +{ + createDerivedEnsembleCases(); + buildMetaData(); + updateReferringCurveSets(); + updateConnectedEditors(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h index a16a5e6425..06870f9b96 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h @@ -60,6 +60,7 @@ public: void onLoadDataAndUpdate() override; + void onSourceEnsembleChanged(); void createDerivedEnsembleCases(); bool discardMissingOrIncompleteRealizations() const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.cpp index 96ab9932ac..53ba7c6a28 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.cpp @@ -26,6 +26,7 @@ #include "RigEnsembleParameter.h" #include "RimCorrelationPlotCollection.h" +#include "RimDeltaSummaryEnsemble.h" #include "RimEnsembleCurveSet.h" #include "RimMainPlotCollection.h" #include "RimParameterResultCrossPlot.h" @@ -506,3 +507,18 @@ RimSummaryCase* RimSummaryEnsembleTools::caseWithMostDataObjects( const std::vec return nullptr; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryEnsembleTools::updateDependentDeltaEnsembles( const RimSummaryEnsemble* sourceEnsemble ) +{ + if ( !sourceEnsemble ) return; + + auto referringObjects = sourceEnsemble->objectsWithReferringPtrFieldsOfType(); + for ( auto referringEnsemble : referringObjects ) + { + referringEnsemble->onSourceEnsembleChanged(); + updateDependentDeltaEnsembles( referringEnsemble ); + } +} \ No newline at end of file diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.h index bc3b2dee29..cf1ab65d8e 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsembleTools.h @@ -26,6 +26,7 @@ class RimSummaryCase; class RimPlotCurve; class RigEnsembleParameter; +class RimSummaryEnsemble; namespace RimSummaryEnsembleTools { @@ -46,4 +47,6 @@ void resetHighlightAllPlots(); RimSummaryCase* caseWithMostDataObjects( const std::vector& sourceCases ); +void updateDependentDeltaEnsembles( const RimSummaryEnsemble* sourceEnsemble ); + } // namespace RimSummaryEnsembleTools