Speed up summary case close/delete for ensembles (#8907)

* Speed up summary case close/delete for ensembles
This commit is contained in:
jonjenssen 2022-05-12 22:51:15 +02:00 committed by GitHub
parent 4f31f5c76e
commit 6f26f8e462
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 9 deletions

View File

@ -58,6 +58,8 @@ void RicCloseSummaryCaseFeature::deleteSummaryCases( std::vector<RimSummaryCase*
RimSummaryMultiPlotCollection* summaryPlotColl = RiaSummaryTools::summaryMultiPlotCollection();
RimSummaryCaseMainCollection* summaryCaseMainCollection = RiaSummaryTools::summaryCaseMainCollection();
std::set<RimSummaryMultiPlot*> plotsToUpdate;
for ( RimSummaryCase* summaryCase : cases )
{
for ( RimSummaryMultiPlot* multiPlot : summaryPlotColl->multiPlots() )
@ -66,10 +68,15 @@ void RicCloseSummaryCaseFeature::deleteSummaryCases( std::vector<RimSummaryCase*
{
summaryPlot->deleteCurvesAssosiatedWithCase( summaryCase );
}
multiPlot->updateConnectedEditors();
plotsToUpdate.insert( multiPlot );
}
}
summaryCaseMainCollection->removeCase( summaryCase );
summaryCaseMainCollection->removeCases( cases );
for ( auto plot : plotsToUpdate )
{
plot->updateConnectedEditors();
}
summaryCaseMainCollection->updateAllRequiredEditors();

View File

@ -151,7 +151,7 @@ RimSummaryCaseCollection::~RimSummaryCaseCollection()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase, bool notifyChange )
{
size_t caseCountBeforeRemove = m_cases.size();
@ -161,7 +161,10 @@ void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
caseRemoved.send( summaryCase );
updateReferringCurveSets();
if ( notifyChange )
{
updateReferringCurveSets();
}
if ( m_isEnsemble && m_cases.size() != caseCountBeforeRemove )
{

View File

@ -58,7 +58,7 @@ public:
RimSummaryCaseCollection();
~RimSummaryCaseCollection() override;
void removeCase( RimSummaryCase* summaryCase );
void removeCase( RimSummaryCase* summaryCase, bool notifyChange = true );
void addCase( RimSummaryCase* summaryCase );
virtual std::vector<RimSummaryCase*> allSummaryCases() const;
RimSummaryCase* firstSummaryCase() const;
@ -108,6 +108,8 @@ public:
void refreshMetaData();
void updateReferringCurveSets();
private:
RigEnsembleParameter createEnsembleParameter( const QString& paramName ) const;
static void sortByBinnedVariation( std::vector<RigEnsembleParameter>& parameterVector );
@ -127,7 +129,6 @@ private:
protected:
virtual void onLoadDataAndUpdate();
void updateReferringCurveSets();
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
void setNameAsReadOnly();

View File

@ -243,7 +243,7 @@ void RimSummaryCaseMainCollection::addCase( RimSummaryCase* summaryCase )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCaseMainCollection::removeCase( RimSummaryCase* summaryCase )
void RimSummaryCaseMainCollection::removeCase( RimSummaryCase* summaryCase, bool notifyChange )
{
std::vector<RimDerivedEnsembleCaseCollection*> derivedEnsembles;
@ -264,7 +264,7 @@ void RimSummaryCaseMainCollection::removeCase( RimSummaryCase* summaryCase )
for ( RimSummaryCaseCollection* summaryCaseCollection : m_caseCollections )
{
summaryCaseCollection->removeCase( summaryCase );
summaryCaseCollection->removeCase( summaryCase, notifyChange );
}
// Update derived ensemble cases (if any)
@ -273,6 +273,24 @@ void RimSummaryCaseMainCollection::removeCase( RimSummaryCase* summaryCase )
derEnsemble->createDerivedEnsembleCases();
}
if ( notifyChange ) dataSourceHasChanged.send();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCaseMainCollection::removeCases( std::vector<RimSummaryCase*>& cases )
{
for ( auto sumCase : cases )
{
removeCase( sumCase, false );
}
for ( RimSummaryCaseCollection* summaryCaseCollection : m_caseCollections )
{
summaryCaseCollection->updateReferringCurveSets();
}
dataSourceHasChanged.send();
}

View File

@ -62,7 +62,8 @@ public:
void addCases( const std::vector<RimSummaryCase*> cases );
void addCase( RimSummaryCase* summaryCase );
void removeCase( RimSummaryCase* summaryCase );
void removeCase( RimSummaryCase* summaryCase, bool notifyChange = true );
void removeCases( std::vector<RimSummaryCase*>& cases );
RimSummaryCaseCollection* addCaseCollection( std::vector<RimSummaryCase*> summaryCases,
const QString& coolectionName,