Fix crashes when dropping analysis plots into Multiplots

This commit is contained in:
Gaute Lindkvist 2020-09-16 19:33:44 +02:00 committed by Magne Sjaastad
parent ab3e43d8fb
commit 93baf776a1
50 changed files with 360 additions and 255 deletions

View File

@ -1645,15 +1645,15 @@ void RiaApplication::loadAndUpdatePlotData()
size_t plotCount = 0; size_t plotCount = 0;
plotCount += wlpColl ? wlpColl->wellLogPlots().size() : 0; plotCount += wlpColl ? wlpColl->wellLogPlots().size() : 0;
plotCount += spColl ? spColl->summaryPlots().size() : 0; plotCount += spColl ? spColl->plots().size() : 0;
plotCount += scpColl ? scpColl->summaryPlots().size() : 0; plotCount += scpColl ? scpColl->plots().size() : 0;
plotCount += flowColl ? flowColl->plotCount() : 0; plotCount += flowColl ? flowColl->plotCount() : 0;
plotCount += rftColl ? rftColl->rftPlots().size() : 0; plotCount += rftColl ? rftColl->rftPlots().size() : 0;
plotCount += pltColl ? pltColl->pltPlots().size() : 0; plotCount += pltColl ? pltColl->pltPlots().size() : 0;
plotCount += gcpColl ? gcpColl->gridCrossPlots().size() : 0; plotCount += gcpColl ? gcpColl->plotCount() : 0;
plotCount += sppColl ? sppColl->plots().size() : 0; plotCount += sppColl ? sppColl->plotCount() : 0;
plotCount += alsColl ? alsColl->plots().size() : 0; plotCount += alsColl ? alsColl->plotCount() : 0;
plotCount += corrColl ? corrColl->plots().size() + corrColl->reports().size() : 0; plotCount += corrColl ? corrColl->plotCount() + corrColl->reports().size() : 0;
plotCount += gpwColl ? gpwColl->multiPlots().size() : 0; plotCount += gpwColl ? gpwColl->multiPlots().size() : 0;
plotCount += frmColl ? frmColl->fractureModelPlots().size() : 0; plotCount += frmColl ? frmColl->fractureModelPlots().size() : 0;
@ -1671,16 +1671,16 @@ void RiaApplication::loadAndUpdatePlotData()
if ( spColl ) if ( spColl )
{ {
for ( size_t wlpIdx = 0; wlpIdx < spColl->summaryPlots().size(); ++wlpIdx ) for ( auto plot : spColl->plots() )
{ {
spColl->summaryPlots[wlpIdx]->loadDataAndUpdate(); plot->loadDataAndUpdate();
plotProgress.incrementProgress(); plotProgress.incrementProgress();
} }
} }
if ( scpColl ) if ( scpColl )
{ {
for ( auto plot : scpColl->summaryPlots() ) for ( auto plot : scpColl->plots() )
{ {
plot->loadDataAndUpdate(); plot->loadDataAndUpdate();
plotProgress.incrementProgress(); plotProgress.incrementProgress();
@ -1714,7 +1714,7 @@ void RiaApplication::loadAndUpdatePlotData()
if ( gcpColl ) if ( gcpColl )
{ {
for ( const auto& gcpPlot : gcpColl->gridCrossPlots() ) for ( const auto& gcpPlot : gcpColl->plots() )
{ {
gcpPlot->loadDataAndUpdate(); gcpPlot->loadDataAndUpdate();
plotProgress.incrementProgress(); plotProgress.incrementProgress();

View File

@ -77,7 +77,7 @@ void RiaSummaryTools::notifyCalculatedCurveNameHasChanged( int calculationId, co
{ {
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* plot : summaryPlotColl->summaryPlots() ) for ( RimSummaryPlot* plot : summaryPlotColl->plots() )
{ {
for ( RimSummaryCurve* curve : plot->summaryCurves() ) for ( RimSummaryCurve* curve : plot->summaryCurves() )
{ {

View File

@ -93,7 +93,7 @@ void RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection(
RimSummaryPlotCollection* plotColl = RimProject::current()->mainPlotCollection()->summaryPlotCollection(); RimSummaryPlotCollection* plotColl = RimProject::current()->mainPlotCollection()->summaryPlotCollection();
plotColl->summaryPlots.push_back( summaryPlot ); plotColl->addPlot( summaryPlot );
summaryPlot->resolveReferencesRecursively(); summaryPlot->resolveReferencesRecursively();
summaryPlot->initAfterReadRecursively(); summaryPlot->initAfterReadRecursively();

View File

@ -56,7 +56,7 @@ void RicCloseObservedDataFeature::deleteObservedSummaryData( const std::vector<R
for ( RimObservedSummaryData* observedData : data ) for ( RimObservedSummaryData* observedData : data )
{ {
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
summaryPlot->deleteCurvesAssosiatedWithCase( observedData ); summaryPlot->deleteCurvesAssosiatedWithCase( observedData );
} }

View File

@ -59,7 +59,7 @@ void RicCloseSummaryCaseFeature::deleteSummaryCases( std::vector<RimSummaryCase*
for ( RimSummaryCase* summaryCase : cases ) for ( RimSummaryCase* summaryCase : cases )
{ {
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
summaryPlot->deleteCurvesAssosiatedWithCase( summaryCase ); summaryPlot->deleteCurvesAssosiatedWithCase( summaryCase );
} }

View File

@ -66,7 +66,7 @@ void RicDeleteSubItemsFeature::onActionTriggered( bool isChecked )
auto collection = dynamic_cast<RimSummaryPlotCollection*>( item ); auto collection = dynamic_cast<RimSummaryPlotCollection*>( item );
if ( collection ) if ( collection )
{ {
collection->summaryPlots.deleteAllChildObjects(); collection->deleteAllPlots();
collection->updateConnectedEditors(); collection->updateConnectedEditors();
} }
@ -116,7 +116,7 @@ bool RicDeleteSubItemsFeature::hasDeletableSubItems( caf::PdmUiItem* uiItem )
{ {
{ {
auto collection = dynamic_cast<RimSummaryPlotCollection*>( uiItem ); auto collection = dynamic_cast<RimSummaryPlotCollection*>( uiItem );
if ( collection && !collection->summaryPlots().empty() ) if ( collection && !collection->plots().empty() )
{ {
return true; return true;
} }

View File

@ -48,7 +48,7 @@ void RicDeleteSummaryCaseCollectionFeature::deleteSummaryCaseCollection( RimSumm
for ( RimSummaryCase* summaryCase : caseCollection->allSummaryCases() ) for ( RimSummaryCase* summaryCase : caseCollection->allSummaryCases() )
{ {
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
summaryPlot->deleteCurvesAssosiatedWithCase( summaryCase ); summaryPlot->deleteCurvesAssosiatedWithCase( summaryCase );
} }

View File

@ -64,7 +64,7 @@ void RicReloadSummaryCaseFeature::onActionTriggered( bool isChecked )
RiaLogging::info( QString( "Reloaded data for %1" ).arg( summaryCase->summaryHeaderFilename() ) ); RiaLogging::info( QString( "Reloaded data for %1" ).arg( summaryCase->summaryHeaderFilename() ) );
} }
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
summaryPlot->loadDataAndUpdate(); summaryPlot->loadDataAndUpdate();
} }

View File

@ -111,7 +111,7 @@ void RicReplaceCaseFeature::onActionTriggered( bool isChecked )
gridSummaryCase->createRftReaderInterface(); gridSummaryCase->createRftReaderInterface();
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
summaryPlot->loadDataAndUpdate(); summaryPlot->loadDataAndUpdate();
} }

View File

@ -91,7 +91,7 @@ void RicReplaceSummaryCaseFeature::onActionTriggered( bool isChecked )
} }
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots ) for ( RimSummaryPlot* summaryPlot : summaryPlotColl->plots() )
{ {
// Update summary curves on calculated data // Update summary curves on calculated data
std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves(); std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves();
@ -118,7 +118,7 @@ void RicReplaceSummaryCaseFeature::onActionTriggered( bool isChecked )
} }
RimSummaryCrossPlotCollection* summaryCrossPlotColl = RiaSummaryTools::summaryCrossPlotCollection(); RimSummaryCrossPlotCollection* summaryCrossPlotColl = RiaSummaryTools::summaryCrossPlotCollection();
for ( RimSummaryPlot* summaryPlot : summaryCrossPlotColl->summaryPlots() ) for ( RimSummaryPlot* summaryPlot : summaryCrossPlotColl->plots() )
{ {
// Update summary curves on calculated data // Update summary curves on calculated data
std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves(); std::vector<RimSummaryCurve*> summaryCurves = summaryPlot->summaryCurves();

View File

@ -103,9 +103,9 @@ RimSummaryPlot* RicNewGridTimeHistoryCurveFeature::userSelectedSummaryPlot()
defaultSelectedPlot = dynamic_cast<RimSummaryPlot*>( app->activePlotWindow() ); defaultSelectedPlot = dynamic_cast<RimSummaryPlot*>( app->activePlotWindow() );
} }
if ( !defaultSelectedPlot && summaryPlotColl->summaryPlots().size() > 0 ) if ( !defaultSelectedPlot && !summaryPlotColl->plots().empty() )
{ {
defaultSelectedPlot = summaryPlotColl->summaryPlots()[0]; defaultSelectedPlot = summaryPlotColl->plots().front();
} }
} }

View File

@ -83,7 +83,7 @@ void RicNewSummaryCrossPlotFeature::onActionTriggered( bool isChecked )
RimSummaryCrossPlotCollection* summaryCrossPlotColl = project->mainPlotCollection()->summaryCrossPlotCollection(); RimSummaryCrossPlotCollection* summaryCrossPlotColl = project->mainPlotCollection()->summaryCrossPlotCollection();
RimSummaryPlot* summaryPlot = summaryCrossPlotColl->createSummaryPlot(); RimSummaryPlot* summaryPlot = summaryCrossPlotColl->createSummaryPlot();
summaryCrossPlotColl->addSummaryPlot( summaryPlot ); summaryCrossPlotColl->addPlot( summaryPlot );
if ( summaryPlot ) if ( summaryPlot )
{ {
summaryCrossPlotColl->updateConnectedEditors(); summaryCrossPlotColl->updateConnectedEditors();

View File

@ -257,7 +257,7 @@ RicPasteAsciiDataToSummaryPlotFeature::CurveType
RimSummaryPlot* RimSummaryPlot*
RicPasteAsciiDataToSummaryPlotFeature::createSummaryPlotAndAddToPlotCollection( RimSummaryPlotCollection* plotCollection ) RicPasteAsciiDataToSummaryPlotFeature::createSummaryPlotAndAddToPlotCollection( RimSummaryPlotCollection* plotCollection )
{ {
QString name = QString( "Summary Plot %1" ).arg( plotCollection->summaryPlots.size() + 1 ); QString name = QString( "Summary Plot %1" ).arg( plotCollection->plots().size() + 1 );
return plotCollection->createNamedSummaryPlot( name ); return plotCollection->createNamedSummaryPlot( name );
} }

View File

@ -47,7 +47,7 @@ void RicPasteSummaryCrossPlotFeature::copyPlotAndAddToCollection( RimSummaryCros
sourcePlot->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); sourcePlot->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) );
CVF_ASSERT( newSummaryPlot ); CVF_ASSERT( newSummaryPlot );
plotColl->addSummaryPlot( newSummaryPlot ); plotColl->addPlot( newSummaryPlot );
// Resolve references after object has been inserted into the data model // Resolve references after object has been inserted into the data model
newSummaryPlot->resolveReferencesRecursively(); newSummaryPlot->resolveReferencesRecursively();

View File

@ -47,7 +47,7 @@ void RicPasteSummaryPlotFeature::copyPlotAndAddToCollection( RimSummaryPlot* sou
sourcePlot->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); sourcePlot->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) );
CVF_ASSERT( newSummaryPlot ); CVF_ASSERT( newSummaryPlot );
plotColl->summaryPlots.push_back( newSummaryPlot ); plotColl->addPlot( newSummaryPlot );
// Resolve references after object has been inserted into the data model // Resolve references after object has been inserted into the data model
newSummaryPlot->resolveReferencesRecursively(); newSummaryPlot->resolveReferencesRecursively();

View File

@ -104,7 +104,7 @@ QList<caf::PdmOptionItemInfo>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicSelectSummaryPlotUI::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) void RicSelectSummaryPlotUI::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{ {
if ( RiaSummaryTools::summaryPlotCollection()->summaryPlots().size() == 0 ) if ( RiaSummaryTools::summaryPlotCollection()->plots().empty() )
{ {
m_createNewPlot = true; m_createNewPlot = true;
} }

View File

@ -129,7 +129,7 @@ void RicSummaryPlotFeatureImpl::ensureAtLeastOnePlot( RimSummaryPlotCollection*
{ {
if ( summaryPlotCollection && summaryCase ) if ( summaryPlotCollection && summaryCase )
{ {
if ( summaryPlotCollection->summaryPlots.empty() ) if ( summaryPlotCollection->plots().empty() )
{ {
auto objectToSelect = createDefaultSummaryPlot( summaryCase ); auto objectToSelect = createDefaultSummaryPlot( summaryCase );
if ( objectToSelect ) if ( objectToSelect )

View File

@ -135,7 +135,6 @@ private:
void detachAllCurves() override; void detachAllCurves() override;
void reattachAllCurves() override {} void reattachAllCurves() override {}
void doRemoveFromCollection() override {}
void updateAxes() override; void updateAxes() override;
void onAxisSelected( int axis, bool toggle ) override; void onAxisSelected( int axis, bool toggle ) override;
void updateZoomInQwt() override {} void updateZoomInQwt() override {}
@ -176,7 +175,7 @@ private:
void buildTestPlot( RiuGroupedBarChartBuilder& chartBuilder ); void buildTestPlot( RiuGroupedBarChartBuilder& chartBuilder );
int barTextFontSize() const; int barTextFontSize() const;
void initAfterRead(); void initAfterRead() override;
private: private:
void onCaseRemoved( const SignalEmitter* emitter, RimSummaryCase* summaryCase ); void onCaseRemoved( const SignalEmitter* emitter, RimSummaryCase* summaryCase );

View File

@ -53,7 +53,7 @@ RimAnalysisPlot* RimAnalysisPlotCollection::createAnalysisPlot()
applyFirstEnsembleFieldAddressesToPlot( plot, "FOPT" ); applyFirstEnsembleFieldAddressesToPlot( plot, "FOPT" );
// plot->enableAutoPlotTitle( true ); // plot->enableAutoPlotTitle( true );
m_analysisPlots.push_back( plot ); addPlot( plot );
plot->loadDataAndUpdate(); plot->loadDataAndUpdate();
@ -79,7 +79,7 @@ RimAnalysisPlot* RimAnalysisPlotCollection::createAnalysisPlot( RimSummaryCaseCo
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityName.toStdString(), timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityName.toStdString(), timeStep );
// plot->enableAutoPlotTitle( true ); // plot->enableAutoPlotTitle( true );
m_analysisPlots.push_back( plot ); addPlot( plot );
plot->loadDataAndUpdate(); plot->loadDataAndUpdate();
@ -106,15 +106,7 @@ void RimAnalysisPlotCollection::updateSummaryNameHasChanged()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimAnalysisPlotCollection::removeSummaryPlot( RimAnalysisPlot* analysisPlot ) std::vector<RimAnalysisPlot*> RimAnalysisPlotCollection::plots() const
{
m_analysisPlots.removeChildObject( analysisPlot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimAnalysisPlot*> RimAnalysisPlotCollection::plots()
{ {
return m_analysisPlots.childObjects(); return m_analysisPlots.childObjects();
} }
@ -122,9 +114,9 @@ std::vector<RimAnalysisPlot*> RimAnalysisPlotCollection::plots()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimAnalysisPlotCollection::deleteAllChildObjects() size_t RimAnalysisPlotCollection::plotCount() const
{ {
m_analysisPlots.deleteAllChildObjects(); return m_analysisPlots.size();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -156,6 +148,9 @@ void RimAnalysisPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAnaly
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAnalysisPlot* plot, void RimAnalysisPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAnalysisPlot* plot,
RimSummaryCaseCollection* ensemble, RimSummaryCaseCollection* ensemble,
const std::string& quantityName, const std::string& quantityName,
@ -182,3 +177,19 @@ void RimAnalysisPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAnalysis
plot->setTimeSteps( {timeStep} ); plot->setTimeSteps( {timeStep} );
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlotCollection::insertPlot( RimAnalysisPlot* analysisPlot, size_t index )
{
m_analysisPlots.insert( index, analysisPlot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlotCollection::removePlot( RimAnalysisPlot* analysisPlot )
{
m_analysisPlots.removeChildObject( analysisPlot );
}

View File

@ -18,19 +18,21 @@
#pragma once #pragma once
#include "RimAbstractPlotCollection.h"
#include "RimAnalysisPlot.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include <ctime> #include <ctime>
class RimAnalysisPlot;
class RimSummaryCaseCollection; class RimSummaryCaseCollection;
//================================================================================================== //==================================================================================================
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimAnalysisPlotCollection : public caf::PdmObject class RimAnalysisPlotCollection : public caf::PdmObject, public RimTypedPlotCollection<RimAnalysisPlot>
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -43,11 +45,11 @@ public:
createAnalysisPlot( RimSummaryCaseCollection* ensemble, const QString& quantityName, std::time_t timeStep ); createAnalysisPlot( RimSummaryCaseCollection* ensemble, const QString& quantityName, std::time_t timeStep );
void updateSummaryNameHasChanged(); void updateSummaryNameHasChanged();
void removeSummaryPlot( RimAnalysisPlot* analysisPlot );
std::vector<RimAnalysisPlot*> plots(); std::vector<RimAnalysisPlot*> plots() const final;
size_t plotCount() const final;
void deleteAllChildObjects(); void insertPlot( RimAnalysisPlot* analysisPlot, size_t index ) final;
void removePlot( RimAnalysisPlot* analysisPlot ) final;
private: private:
void applyFirstEnsembleFieldAddressesToPlot( RimAnalysisPlot* plot, const std::string& quantityName = "" ); void applyFirstEnsembleFieldAddressesToPlot( RimAnalysisPlot* plot, const std::string& quantityName = "" );

View File

@ -164,6 +164,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimElasticProperties.h
${CMAKE_CURRENT_LIST_DIR}/RimElasticPropertiesCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimElasticPropertiesCurve.h
${CMAKE_CURRENT_LIST_DIR}/RimLayerCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimLayerCurve.h
${CMAKE_CURRENT_LIST_DIR}/RimFractureModelStressCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimFractureModelStressCurve.h
${CMAKE_CURRENT_LIST_DIR}/RimAbstractPlotCollection.h
${CMAKE_CURRENT_LIST_DIR}/RimFractureModelPropertyCurve.h ${CMAKE_CURRENT_LIST_DIR}/RimFractureModelPropertyCurve.h
) )

View File

@ -98,7 +98,6 @@ protected:
RiuQwtPlotWidget* doCreatePlotViewWidget( QWidget* mainWindowParent = nullptr ) override; RiuQwtPlotWidget* doCreatePlotViewWidget( QWidget* mainWindowParent = nullptr ) override;
void reattachAllCurves() override {} void reattachAllCurves() override {}
void doRemoveFromCollection() override {}
void updateZoomInQwt() override {} void updateZoomInQwt() override {}
void updateZoomFromQwt() override {} void updateZoomFromQwt() override {}
void setAutoScaleXEnabled( bool enabled ) override {} void setAutoScaleXEnabled( bool enabled ) override {}

View File

@ -59,7 +59,7 @@ RimCorrelationPlot* RimCorrelationPlotCollection::createCorrelationPlot( bool de
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} ); if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -77,7 +77,7 @@ RimCorrelationPlot* RimCorrelationPlotCollection::createCorrelationPlot( RimSumm
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -92,7 +92,7 @@ RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixP
if ( defaultToFirstEnsembleField ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT", "FWPT", "FGPT"} ); if ( defaultToFirstEnsembleField ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT", "FWPT", "FGPT"} );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -109,7 +109,7 @@ RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixP
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityNames, timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityNames, timeStep );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -123,7 +123,7 @@ RimParameterResultCrossPlot* RimCorrelationPlotCollection::createParameterResult
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} ); if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} );
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -140,7 +140,7 @@ RimParameterResultCrossPlot* RimCorrelationPlotCollection::createParameterResult
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep );
plot->setEnsembleParameter( paramName ); plot->setEnsembleParameter( paramName );
m_correlationPlots.push_back( plot ); addPlot( plot );
return plot; return plot;
} }
@ -181,15 +181,23 @@ RimCorrelationReportPlot*
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::removePlot( RimAbstractCorrelationPlot* correlationPlot ) void RimCorrelationPlotCollection::insertPlot( RimAbstractCorrelationPlot* plot, size_t index )
{ {
m_correlationPlots.removeChildObject( correlationPlot ); m_correlationPlots.insert( index, plot );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimAbstractCorrelationPlot*> RimCorrelationPlotCollection::plots() void RimCorrelationPlotCollection::removePlot( RimAbstractCorrelationPlot* plot )
{
m_correlationPlots.removeChildObject( plot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimAbstractCorrelationPlot*> RimCorrelationPlotCollection::plots() const
{ {
return m_correlationPlots.childObjects(); return m_correlationPlots.childObjects();
} }
@ -197,7 +205,15 @@ std::vector<RimAbstractCorrelationPlot*> RimCorrelationPlotCollection::plots()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimCorrelationReportPlot*> RimCorrelationPlotCollection::reports() size_t RimCorrelationPlotCollection::plotCount() const
{
return m_correlationPlots.size();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimCorrelationReportPlot*> RimCorrelationPlotCollection::reports() const
{ {
return m_correlationReports.childObjects(); return m_correlationReports.childObjects();
} }
@ -205,9 +221,9 @@ std::vector<RimCorrelationReportPlot*> RimCorrelationPlotCollection::reports()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::deleteAllChildObjects() void RimCorrelationPlotCollection::deleteAllPlots()
{ {
m_correlationPlots.deleteAllChildObjects(); RimTypedPlotCollection<RimAbstractCorrelationPlot>::deleteAllPlots();
m_correlationReports.deleteAllChildObjects(); m_correlationReports.deleteAllChildObjects();
} }

View File

@ -18,13 +18,15 @@
#pragma once #pragma once
#include "RimAbstractCorrelationPlot.h"
#include "RimAbstractPlotCollection.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include <ctime> #include <ctime>
#include <vector> #include <vector>
class RimAbstractCorrelationPlot;
class RimCorrelationPlot; class RimCorrelationPlot;
class RimCorrelationMatrixPlot; class RimCorrelationMatrixPlot;
class RimCorrelationReportPlot; class RimCorrelationReportPlot;
@ -35,7 +37,7 @@ class RimSummaryCaseCollection;
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimCorrelationPlotCollection : public caf::PdmObject class RimCorrelationPlotCollection : public caf::PdmObject, public RimTypedPlotCollection<RimAbstractCorrelationPlot>
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -64,13 +66,15 @@ public:
const QString& tornadoAndCrossPlotQuantityName, const QString& tornadoAndCrossPlotQuantityName,
std::time_t timeStep ); std::time_t timeStep );
void removePlot( RimAbstractCorrelationPlot* correlationPlot );
void removeReport( RimCorrelationReportPlot* correlationReport ); void removeReport( RimCorrelationReportPlot* correlationReport );
std::vector<RimAbstractCorrelationPlot*> plots(); std::vector<RimAbstractCorrelationPlot*> plots() const final;
std::vector<RimCorrelationReportPlot*> reports(); size_t plotCount() const final;
void insertPlot( RimAbstractCorrelationPlot* plot, size_t index ) final;
void removePlot( RimAbstractCorrelationPlot* correlationPlot ) final;
void deleteAllPlots() final;
void deleteAllChildObjects(); std::vector<RimCorrelationReportPlot*> reports() const;
private: private:
void applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot, void applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot,

View File

@ -282,14 +282,6 @@ void RimWellDistributionPlot::zoomAll()
// cvf::Trace::show("RimWellDistributionPlot::zoomAll()"); // cvf::Trace::show("RimWellDistributionPlot::zoomAll()");
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellDistributionPlot::doRemoveFromCollection()
{
// cvf::Trace::show("RimWellDistributionPlot::doRemoveFromCollection()");
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -71,9 +71,6 @@ public:
void zoomAll() override; void zoomAll() override;
private: private:
// RimPlot implementations
void doRemoveFromCollection() override;
// RimViewWindow implementations // RimViewWindow implementations
void deleteViewWidget() override; void deleteViewWidget() override;
void onLoadDataAndUpdate() override; void onLoadDataAndUpdate() override;

View File

@ -391,20 +391,6 @@ void RimGridCrossPlot::onAxisSelected( int axis, bool toggle )
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGridCrossPlot::doRemoveFromCollection()
{
RimGridCrossPlotCollection* crossPlotCollection = nullptr;
this->firstAncestorOrThisOfType( crossPlotCollection );
if ( crossPlotCollection )
{
crossPlotCollection->removeGridCrossPlot( this );
crossPlotCollection->updateAllRequiredEditors();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -141,7 +141,6 @@ private:
void doUpdateLayout() override; void doUpdateLayout() override;
void cleanupBeforeClose(); void cleanupBeforeClose();
void doRemoveFromCollection() override;
QString generateInfoBoxText() const; QString generateInfoBoxText() const;
void connectAxisSignals( RimPlotAxisProperties* axis ); void connectAxisSignals( RimPlotAxisProperties* axis );

View File

@ -43,17 +43,17 @@ RimGridCrossPlotCollection::~RimGridCrossPlotCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridCrossPlotCollection::deleteAllChildObjects() std::vector<RimGridCrossPlot*> RimGridCrossPlotCollection::plots() const
{ {
m_gridCrossPlots.deleteAllChildObjects(); return m_gridCrossPlots.childObjects();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimGridCrossPlot*> RimGridCrossPlotCollection::gridCrossPlots() const size_t RimGridCrossPlotCollection::plotCount() const
{ {
return m_gridCrossPlots.childObjects(); return m_gridCrossPlots.size();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -65,22 +65,22 @@ RimGridCrossPlot* RimGridCrossPlotCollection::createGridCrossPlot()
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
// plot->setDescription(QString("Summary Cross Plot %1").arg(m_gridCrossPlots.size())); // plot->setDescription(QString("Summary Cross Plot %1").arg(m_gridCrossPlots.size()));
addGridCrossPlot( plot ); addPlot( plot );
return plot; return plot;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridCrossPlotCollection::addGridCrossPlot( RimGridCrossPlot* plot ) void RimGridCrossPlotCollection::insertPlot( RimGridCrossPlot* plot, size_t index )
{ {
m_gridCrossPlots().push_back( plot ); m_gridCrossPlots.insert( index, plot );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimGridCrossPlotCollection::removeGridCrossPlot( RimGridCrossPlot* plot ) void RimGridCrossPlotCollection::removePlot( RimGridCrossPlot* plot )
{ {
m_gridCrossPlots.removeChildObject( plot ); m_gridCrossPlots.removeChildObject( plot );
} }

View File

@ -17,16 +17,17 @@
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include "RimAbstractPlotCollection.h"
#include "RimGridCrossPlot.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
class RimGridCrossPlot;
//================================================================================================== //==================================================================================================
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimGridCrossPlotCollection : public caf::PdmObject class RimGridCrossPlotCollection : public caf::PdmObject, public RimTypedPlotCollection<RimGridCrossPlot>
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -34,12 +35,12 @@ public:
RimGridCrossPlotCollection(); RimGridCrossPlotCollection();
~RimGridCrossPlotCollection() override; ~RimGridCrossPlotCollection() override;
void deleteAllChildObjects(); std::vector<RimGridCrossPlot*> plots() const final;
size_t plotCount() const final;
void insertPlot( RimGridCrossPlot* plot, size_t index ) final;
void removePlot( RimGridCrossPlot* plot ) final;
std::vector<RimGridCrossPlot*> gridCrossPlots() const; RimGridCrossPlot* createGridCrossPlot();
RimGridCrossPlot* createGridCrossPlot();
void addGridCrossPlot( RimGridCrossPlot* plot );
void removeGridCrossPlot( RimGridCrossPlot* plot );
private: private:
caf::PdmChildArrayField<RimGridCrossPlot*> m_gridCrossPlots; caf::PdmChildArrayField<RimGridCrossPlot*> m_gridCrossPlots;

View File

@ -108,11 +108,19 @@ std::vector<RimSaturationPressurePlot*>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimSaturationPressurePlot*> RimSaturationPressurePlotCollection::plots() std::vector<RimSaturationPressurePlot*> RimSaturationPressurePlotCollection::plots() const
{ {
return m_saturationPressurePlots.childObjects(); return m_saturationPressurePlots.childObjects();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimSaturationPressurePlotCollection::plotCount() const
{
return m_saturationPressurePlots.size();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -38,7 +38,8 @@ public:
std::vector<RimSaturationPressurePlot*> createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase, std::vector<RimSaturationPressurePlot*> createSaturationPressurePlots( RimEclipseResultCase* eclipseResultCase,
int timeStep ); int timeStep );
std::vector<RimSaturationPressurePlot*> plots(); std::vector<RimSaturationPressurePlot*> plots() const;
size_t plotCount() const;
void deleteAllChildObjects(); void deleteAllChildObjects();
private: private:

View File

@ -0,0 +1,68 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2020- Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RimPlot.h"
#include "cafPdmObject.h"
class RimAbstractPlotCollection
{
public:
virtual ~RimAbstractPlotCollection() = default;
virtual size_t plotCount() const = 0;
virtual void deleteAllPlots() = 0;
virtual void removeRimPlot( RimPlot* plot ) = 0;
};
//==================================================================================================
/// Templated Base class of all plot collections.
/// Specialize on plot type (has to derive from RimPlot) and the base class of the collection.
//==================================================================================================
template <typename RimPlotType>
class RimTypedPlotCollection : public RimAbstractPlotCollection
{
static_assert( std::is_base_of<RimPlot, RimPlotType>::value, "RimPlotType must inherit from RimPlot" );
public:
~RimTypedPlotCollection() override = default;
virtual std::vector<RimPlotType*> plots() const = 0;
void deleteAllPlots() override
{
for ( auto plot : plots() )
{
removePlot( plot );
delete plot;
}
}
void addPlot( RimPlotType* plot ) { insertPlot( plot, plotCount() ); }
virtual void insertPlot( RimPlotType* plot, size_t index ) = 0;
virtual void removePlot( RimPlotType* plot ) = 0;
void removeRimPlot( RimPlot* rimPlot )
{
auto typedPlot = dynamic_cast<RimPlotType*>( rimPlot );
if ( typedPlot )
{
removePlot( typedPlot );
}
}
};

View File

@ -214,52 +214,6 @@ QString RimDepthTrackPlot::description() const
return m_plotWindowTitle; return m_plotWindowTitle;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::addPlot( RimPlot* plot )
{
insertPlot( plot, m_plots.size() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::insertPlot( RimPlot* plot, size_t index )
{
if ( plot )
{
m_plots.insert( index, plot );
if ( m_viewer )
{
plot->createPlotWidget();
m_viewer->insertPlot( plot->viewer(), index );
}
plot->setShowWindow( true );
plot->setLegendsVisible( false );
onPlotAdditionOrRemoval();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::removePlot( RimPlot* plot )
{
if ( plot )
{
if ( m_viewer )
{
m_viewer->removePlot( plot->viewer() );
}
m_plots.removeChildObject( plot );
onPlotAdditionOrRemoval();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -755,7 +709,6 @@ void RimDepthTrackPlot::onPlotsReordered( const SignalEmitter* emitter )
recreatePlotWidgets(); recreatePlotWidgets();
loadDataAndUpdate(); loadDataAndUpdate();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -945,7 +898,6 @@ void RimDepthTrackPlot::initAfterRead()
{ {
m_nameConfig->setCustomName( m_plotWindowTitle ); m_nameConfig->setCustomName( m_plotWindowTitle );
} }
performAutoNameUpdate(); performAutoNameUpdate();
} }
@ -1001,6 +953,44 @@ caf::PdmFieldHandle* RimDepthTrackPlot::userDescriptionField()
return &m_plotWindowTitle; return &m_plotWindowTitle;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::insertPlot( RimPlot* plot, size_t index )
{
if ( plot )
{
m_plots.insert( index, plot );
if ( m_viewer )
{
plot->createPlotWidget();
m_viewer->insertPlot( plot->viewer(), index );
}
plot->setShowWindow( true );
plot->setLegendsVisible( false );
onPlotAdditionOrRemoval();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::removePlot( RimPlot* plot )
{
if ( plot )
{
if ( m_viewer )
{
m_viewer->removePlot( plot->viewer() );
}
m_plots.removeChildObject( plot );
onPlotAdditionOrRemoval();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -1129,6 +1119,9 @@ void RimDepthTrackPlot::setDepthUnit( RiaDefines::DepthUnitType depthUnit )
updateLayout(); updateLayout();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDepthTrackPlot::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, void RimDepthTrackPlot::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) std::vector<caf::PdmObjectHandle*>& referringObjects )
{ {

View File

@ -19,6 +19,11 @@
#pragma once #pragma once
#include "RiaDefines.h"
#include "RimAbstractPlotCollection.h"
#include "RimPlotWindow.h"
#include "RimWellLogPlotNameConfig.h"
#include "cafAppEnum.h" #include "cafAppEnum.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h" #include "cafPdmChildField.h"
@ -26,10 +31,6 @@
#include "cafPdmFieldHandle.h" #include "cafPdmFieldHandle.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "RiaDefines.h"
#include "RimPlotWindow.h"
#include "RimWellLogPlotNameConfig.h"
#include <QPointer> #include <QPointer>
#include <set> #include <set>
@ -43,7 +44,7 @@ class QKeyEvent;
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimDepthTrackPlot : public RimPlotWindow, public RimNameConfigHolderInterface class RimDepthTrackPlot : public RimTypedPlotCollection<RimPlot>, public RimPlotWindow, public RimNameConfigHolderInterface
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -69,16 +70,14 @@ public:
QWidget* createPlotWidget( QWidget* mainWindowParent = nullptr ); QWidget* createPlotWidget( QWidget* mainWindowParent = nullptr );
QString description() const override; QString description() const override;
void addPlot( RimPlot* plot ); size_t plotCount() const override;
void insertPlot( RimPlot* plot, size_t index );
void removePlot( RimPlot* plot );
size_t plotCount() const;
size_t plotIndex( const RimPlot* plot ) const; size_t plotIndex( const RimPlot* plot ) const;
RimPlot* plotByIndex( size_t index ) const; RimPlot* plotByIndex( size_t index ) const;
std::vector<RimPlot*> plots() const; std::vector<RimPlot*> plots() const override;
std::vector<RimPlot*> visiblePlots() const; std::vector<RimPlot*> visiblePlots() const;
void insertPlot( RimPlot* plot, size_t index ) final;
void removePlot( RimPlot* plot ) final;
DepthTypeEnum depthType() const; DepthTypeEnum depthType() const;
void setDepthType( DepthTypeEnum depthType ); void setDepthType( DepthTypeEnum depthType );
@ -154,7 +153,7 @@ private:
void onPlotAdditionOrRemoval(); void onPlotAdditionOrRemoval();
void doRenderWindowContent( QPaintDevice* paintDevice ) override; void doRenderWindowContent( QPaintDevice* paintDevice ) override;
void doUpdateLayout() override; void doUpdateLayout() override;
void onPlotsReordered( const SignalEmitter* emitter ); void onPlotsReordered( const caf::SignalEmitter* emitter );
protected: protected:
caf::PdmChildField<RimWellLogCurveCommonDataSource*> m_commonDataSource; caf::PdmChildField<RimWellLogCurveCommonDataSource*> m_commonDataSource;

View File

@ -240,14 +240,14 @@ void RimMainPlotCollection::deleteAllContainedObjects()
m_wellLogPlotCollection()->wellLogPlots.deleteAllChildObjects(); m_wellLogPlotCollection()->wellLogPlots.deleteAllChildObjects();
m_rftPlotCollection()->deleteAllPlots(); m_rftPlotCollection()->deleteAllPlots();
m_pltPlotCollection()->deleteAllPlots(); m_pltPlotCollection()->deleteAllPlots();
m_summaryPlotCollection()->summaryPlots.deleteAllChildObjects(); m_summaryPlotCollection()->deleteAllPlots();
m_summaryCrossPlotCollection()->deleteAllChildObjects(); m_summaryCrossPlotCollection()->deleteAllPlots();
m_gridCrossPlotCollection->deleteAllChildObjects(); m_gridCrossPlotCollection->deleteAllPlots();
m_flowPlotCollection()->closeDefaultPlotWindowAndDeletePlots(); m_flowPlotCollection()->closeDefaultPlotWindowAndDeletePlots();
m_saturationPressurePlotCollection()->deleteAllChildObjects(); m_saturationPressurePlotCollection()->deleteAllChildObjects();
m_multiPlotCollection()->deleteAllChildObjects(); m_multiPlotCollection()->deleteAllChildObjects();
m_analysisPlotCollection()->deleteAllChildObjects(); m_analysisPlotCollection()->deleteAllPlots();
m_correlationPlotCollection()->deleteAllChildObjects(); m_correlationPlotCollection()->deleteAllPlots();
m_fractureModelPlotCollection()->deleteAllPlots(); m_fractureModelPlotCollection()->deleteAllPlots();
} }
@ -295,7 +295,7 @@ void RimMainPlotCollection::updatePlotsWithFormations()
if ( m_gridCrossPlotCollection ) if ( m_gridCrossPlotCollection )
{ {
for ( RimGridCrossPlot* crossPlot : m_gridCrossPlotCollection->gridCrossPlots() ) for ( RimGridCrossPlot* crossPlot : m_gridCrossPlotCollection->plots() )
{ {
crossPlot->loadDataAndUpdate(); crossPlot->loadDataAndUpdate();
} }

View File

@ -1,6 +1,8 @@
#include "RimPlot.h" #include "RimPlot.h"
#include "RicfCommandObject.h" #include "RicfCommandObject.h"
#include "RimAbstractPlotCollection.h"
#include "RimMultiPlot.h" #include "RimMultiPlot.h"
#include "RimPlotCurve.h" #include "RimPlotCurve.h"
#include "RimPlotWindow.h" #include "RimPlotWindow.h"
@ -124,7 +126,13 @@ void RimPlot::removeFromMdiAreaAndCollection()
{ {
revokeMdiWindowStatus(); revokeMdiWindowStatus();
} }
doRemoveFromCollection();
RimAbstractPlotCollection* plotCollection = nullptr;
this->firstAncestorOfType( plotCollection );
if ( plotCollection )
{
plotCollection->removeRimPlot( this );
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -101,7 +101,6 @@ protected:
void updateFonts() override; void updateFonts() override;
private: private:
virtual void doRemoveFromCollection() = 0;
virtual void doRenderWindowContent( QPaintDevice* paintDevice ) override; virtual void doRenderWindowContent( QPaintDevice* paintDevice ) override;
virtual void handleKeyPressEvent( QKeyEvent* event ) {} virtual void handleKeyPressEvent( QKeyEvent* event ) {}
virtual void handleWheelEvent( QWheelEvent* event ) {} virtual void handleWheelEvent( QWheelEvent* event ) {}

View File

@ -159,7 +159,7 @@ void RimReloadCaseTools::updateAllPlots()
RimSummaryPlotCollection* summaryPlotCollection = project->mainPlotCollection()->summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotCollection = project->mainPlotCollection()->summaryPlotCollection();
if ( summaryPlotCollection ) if ( summaryPlotCollection )
{ {
for ( RimSummaryPlot* summaryPlot : summaryPlotCollection->summaryPlots() ) for ( RimSummaryPlot* summaryPlot : summaryPlotCollection->plots() )
{ {
summaryPlot->loadDataAndUpdate(); summaryPlot->loadDataAndUpdate();
} }
@ -168,7 +168,7 @@ void RimReloadCaseTools::updateAllPlots()
RimGridCrossPlotCollection* gridCrossPlotCollection = project->mainPlotCollection()->gridCrossPlotCollection(); RimGridCrossPlotCollection* gridCrossPlotCollection = project->mainPlotCollection()->gridCrossPlotCollection();
if ( gridCrossPlotCollection ) if ( gridCrossPlotCollection )
{ {
for ( RimGridCrossPlot* crossPlot : gridCrossPlotCollection->gridCrossPlots() ) for ( RimGridCrossPlot* crossPlot : gridCrossPlotCollection->plots() )
{ {
crossPlot->loadDataAndUpdate(); crossPlot->loadDataAndUpdate();
} }

View File

@ -475,7 +475,7 @@ void RimSummaryCalculation::updateDependentCurvesAndPlots()
calcColl->rebuildCaseMetaData(); calcColl->rebuildCaseMetaData();
RimSummaryPlotCollection* summaryPlotCollection = RiaSummaryTools::summaryPlotCollection(); RimSummaryPlotCollection* summaryPlotCollection = RiaSummaryTools::summaryPlotCollection();
for ( RimSummaryPlot* sumPlot : summaryPlotCollection->summaryPlots() ) for ( RimSummaryPlot* sumPlot : summaryPlotCollection->plots() )
{ {
bool plotContainsCalculatedCurves = false; bool plotContainsCalculatedCurves = false;

View File

@ -518,19 +518,6 @@ int RimWellLogTrack::axisFontSize() const
return caf::FontTools::absolutePointSize( RiaPreferences::current()->defaultPlotFontSize(), m_axisFontSize() ); return caf::FontTools::absolutePointSize( RiaPreferences::current()->defaultPlotFontSize(), m_axisFontSize() );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellLogTrack::doRemoveFromCollection()
{
RimDepthTrackPlot* wellLogPlot = nullptr;
this->firstAncestorOrThisOfType( wellLogPlot );
if ( wellLogPlot )
{
wellLogPlot->removePlot( this );
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -247,8 +247,6 @@ private:
int axisFontSize() const; int axisFontSize() const;
void doRemoveFromCollection() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void curveDataChanged( const caf::SignalEmitter* emitter ); void curveDataChanged( const caf::SignalEmitter* emitter );
void curveVisibilityChanged( const caf::SignalEmitter* emitter, bool visible ); void curveVisibilityChanged( const caf::SignalEmitter* emitter, bool visible );

View File

@ -48,7 +48,7 @@ RimSummaryCrossPlotCollection::~RimSummaryCrossPlotCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryCrossPlotCollection::deleteAllChildObjects() void RimSummaryCrossPlotCollection::deleteAllPlots()
{ {
m_summaryCrossPlots.deleteAllChildObjects(); m_summaryCrossPlots.deleteAllChildObjects();
} }
@ -56,11 +56,19 @@ void RimSummaryCrossPlotCollection::deleteAllChildObjects()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimSummaryPlot*> RimSummaryCrossPlotCollection::summaryPlots() const std::vector<RimSummaryPlot*> RimSummaryCrossPlotCollection::plots() const
{ {
return m_summaryCrossPlots.childObjects(); return m_summaryCrossPlots.childObjects();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimSummaryCrossPlotCollection::plotCount() const
{
return m_summaryCrossPlots.size();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -86,6 +94,22 @@ void RimSummaryCrossPlotCollection::summaryPlotItemInfos( QList<caf::PdmOptionIt
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCrossPlotCollection::insertPlot( RimSummaryPlot* plot, size_t index )
{
m_summaryCrossPlots.insert( index, plot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCrossPlotCollection::removePlot( RimSummaryPlot* plot )
{
m_summaryCrossPlots.removeChildObject( plot );
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -98,11 +122,3 @@ RimSummaryPlot* RimSummaryCrossPlotCollection::createSummaryPlot()
return plot; return plot;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCrossPlotCollection::addSummaryPlot( RimSummaryPlot* plot )
{
m_summaryCrossPlots().push_back( plot );
}

View File

@ -18,16 +18,17 @@
#pragma once #pragma once
#include "RimAbstractPlotCollection.h"
#include "RimSummaryPlot.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
class RimSummaryPlot;
//================================================================================================== //==================================================================================================
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimSummaryCrossPlotCollection : public caf::PdmObject class RimSummaryCrossPlotCollection : public caf::PdmObject, public RimTypedPlotCollection<RimSummaryPlot>
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -35,11 +36,14 @@ public:
RimSummaryCrossPlotCollection(); RimSummaryCrossPlotCollection();
~RimSummaryCrossPlotCollection() override; ~RimSummaryCrossPlotCollection() override;
void deleteAllChildObjects(); void deleteAllPlots() final;
std::vector<RimSummaryPlot*> summaryPlots() const; std::vector<RimSummaryPlot*> plots() const final;
RimSummaryPlot* createSummaryPlot(); size_t plotCount() const final;
void addSummaryPlot( RimSummaryPlot* plot ); void insertPlot( RimSummaryPlot* plot, size_t index ) final;
void removePlot( RimSummaryPlot* plot ) final;
RimSummaryPlot* createSummaryPlot();
void updateSummaryNameHasChanged(); void updateSummaryNameHasChanged();
void summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const; void summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const;

View File

@ -106,7 +106,7 @@ protected:
void updateLegendsInPlot() override; void updateLegendsInPlot() override;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
void initAfterRead(); void initAfterRead() override;
private: private:
RifSummaryReaderInterface* valuesSummaryReaderX() const; RifSummaryReaderInterface* valuesSummaryReaderX() const;

View File

@ -1735,20 +1735,6 @@ void RimSummaryPlot::axisLogarithmicChanged( const caf::SignalEmitter* emitter,
loadDataAndUpdate(); loadDataAndUpdate();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlot::doRemoveFromCollection()
{
RimSummaryPlotCollection* summaryCollection = nullptr;
this->firstAncestorOrThisOfType( summaryCollection );
if ( summaryCollection )
{
summaryCollection->removeSummaryPlot( this );
summaryCollection->updateAllRequiredEditors();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -190,7 +190,6 @@ private:
void detachAllPlotItems(); void detachAllPlotItems();
void doRemoveFromCollection() override;
void handleKeyPressEvent( QKeyEvent* keyEvent ) override; void handleKeyPressEvent( QKeyEvent* keyEvent ) override;
void onCurvesReordered( const SignalEmitter* emitter ); void onCurvesReordered( const SignalEmitter* emitter );

View File

@ -39,9 +39,9 @@ RimSummaryPlotCollection::RimSummaryPlotCollection()
{ {
CAF_PDM_InitScriptableObject( "Summary Plots", ":/SummaryPlotsLight16x16.png", "", "" ); CAF_PDM_InitScriptableObject( "Summary Plots", ":/SummaryPlotsLight16x16.png", "", "" );
CAF_PDM_InitFieldNoDefault( &summaryPlots, "SummaryPlots", "Summary Plots", "", "", "" ); CAF_PDM_InitFieldNoDefault( &m_summaryPlots, "SummaryPlots", "Summary Plots", "", "", "" );
summaryPlots.uiCapability()->setUiHidden( true ); m_summaryPlots.uiCapability()->setUiHidden( true );
caf::PdmFieldReorderCapability::addToField( &summaryPlots ); caf::PdmFieldReorderCapability::addToField( &m_summaryPlots );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -49,7 +49,6 @@ RimSummaryPlotCollection::RimSummaryPlotCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimSummaryPlotCollection::~RimSummaryPlotCollection() RimSummaryPlotCollection::~RimSummaryPlotCollection()
{ {
summaryPlots.deleteAllChildObjects();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -61,7 +60,8 @@ RimSummaryPlot* RimSummaryPlotCollection::createSummaryPlotWithAutoTitle()
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
plot->enableAutoPlotTitle( true ); plot->enableAutoPlotTitle( true );
summaryPlots.push_back( plot );
addPlot( plot );
return plot; return plot;
} }
@ -74,7 +74,8 @@ RimSummaryPlot* RimSummaryPlotCollection::createNamedSummaryPlot( const QString&
RimSummaryPlot* plot = new RimSummaryPlot(); RimSummaryPlot* plot = new RimSummaryPlot();
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
summaryPlots.push_back( plot ); addPlot( plot );
plot->setDescription( name ); plot->setDescription( name );
return plot; return plot;
@ -85,7 +86,7 @@ RimSummaryPlot* RimSummaryPlotCollection::createNamedSummaryPlot( const QString&
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryPlotCollection::updateSummaryNameHasChanged() void RimSummaryPlotCollection::updateSummaryNameHasChanged()
{ {
for ( RimSummaryPlot* plot : summaryPlots ) for ( RimSummaryPlot* plot : plots() )
{ {
plot->updateCaseNameHasChanged(); plot->updateCaseNameHasChanged();
} }
@ -96,21 +97,13 @@ void RimSummaryPlotCollection::updateSummaryNameHasChanged()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryPlotCollection::summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const void RimSummaryPlotCollection::summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const
{ {
for ( RimSummaryPlot* plot : summaryPlots() ) for ( RimSummaryPlot* plot : plots() )
{ {
QString displayName = plot->description(); QString displayName = plot->description();
optionInfos->push_back( caf::PdmOptionItemInfo( displayName, plot, false, plot->uiCapability()->uiIconProvider() ) ); optionInfos->push_back( caf::PdmOptionItemInfo( displayName, plot, false, plot->uiCapability()->uiIconProvider() ) );
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotCollection::removeSummaryPlot( RimSummaryPlot* summaryPlot )
{
summaryPlots.removeChildObject( summaryPlot );
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -121,3 +114,35 @@ void RimSummaryPlotCollection::onChildDeleted( caf::PdmChildArrayFieldHandle*
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow(); RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateSummaryPlotToolBar(); mainPlotWindow->updateSummaryPlotToolBar();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimSummaryPlot*> RimSummaryPlotCollection::plots() const
{
return m_summaryPlots.childObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimSummaryPlotCollection::plotCount() const
{
return m_summaryPlots.size();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotCollection::insertPlot( RimSummaryPlot* summaryPlot, size_t index )
{
m_summaryPlots.insert( index, summaryPlot );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlotCollection::removePlot( RimSummaryPlot* summaryPlot )
{
m_summaryPlots.removeChildObject( summaryPlot );
}

View File

@ -18,6 +18,9 @@
#pragma once #pragma once
#include "RimAbstractPlotCollection.h"
#include "RimSummaryPlot.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrArrayField.h" #include "cafPdmPtrArrayField.h"
@ -28,7 +31,7 @@ class RimSummaryPlot;
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimSummaryPlotCollection : public caf::PdmObject class RimSummaryPlotCollection : public caf::PdmObject, public RimTypedPlotCollection<RimSummaryPlot>
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@ -36,16 +39,19 @@ public:
RimSummaryPlotCollection(); RimSummaryPlotCollection();
~RimSummaryPlotCollection() override; ~RimSummaryPlotCollection() override;
caf::PdmChildArrayField<RimSummaryPlot*> summaryPlots;
RimSummaryPlot* createSummaryPlotWithAutoTitle(); RimSummaryPlot* createSummaryPlotWithAutoTitle();
RimSummaryPlot* createNamedSummaryPlot( const QString& name ); RimSummaryPlot* createNamedSummaryPlot( const QString& name );
void updateSummaryNameHasChanged(); void updateSummaryNameHasChanged();
void summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const; void summaryPlotItemInfos( QList<caf::PdmOptionItemInfo>* optionInfos ) const;
void removeSummaryPlot( RimSummaryPlot* summaryPlot );
void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) override; std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
std::vector<RimSummaryPlot*> plots() const final;
size_t plotCount() const final;
void insertPlot( RimSummaryPlot* summaryPlot, size_t index ) final;
void removePlot( RimSummaryPlot* summaryPlot ) final;
private:
caf::PdmChildArrayField<RimSummaryPlot*> m_summaryPlots;
}; };

View File

@ -150,7 +150,8 @@ public:
void send( Args... args ) const void send( Args... args ) const
{ {
for ( auto observerCallbackPair : m_observerCallbacks ) auto observerCallBacksCopy = m_observerCallbacks;
for ( auto observerCallbackPair : observerCallBacksCopy )
{ {
if ( observerCallbackPair.second.second ) if ( observerCallbackPair.second.second )
{ {