From 4586df88fe32a5a11adeef10065c4339c2f23e6b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 18 Mar 2026 11:00:17 +0100 Subject: [PATCH] SummaryPlotSourceStepping: Add isAtEnd() and fix source stepping for sub-plots --- .../Summary/RimSummaryPlotSourceStepping.cpp | 50 ++++++++++++++++--- .../Summary/RimSummaryPlotSourceStepping.h | 2 + 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index c98023555e..628851618f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -521,8 +521,6 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi( const caf::PdmFieldHandle* if ( triggerLoadDataAndUpdate ) { - auto summaryPlot = firstAncestorOrThisOfType(); - RimSummaryMultiPlot* summaryMultiPlot = dynamic_cast( m_objectForSourceStepping.p() ); if ( summaryMultiPlot ) { @@ -537,10 +535,16 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi( const caf::PdmFieldHandle* } else { - summaryPlot->updatePlotTitle(); - summaryPlot->loadDataAndUpdate(); - summaryPlot->updateConnectedEditors(); - summaryPlot->curvesChanged.send(); + RimSummaryPlot* summaryPlot = dynamic_cast( m_objectForSourceStepping.p() ); + if ( !summaryPlot ) summaryPlot = firstAncestorOrThisOfType(); + + if ( summaryPlot ) + { + summaryPlot->updatePlotTitle(); + summaryPlot->loadDataAndUpdate(); + summaryPlot->updateConnectedEditors(); + summaryPlot->curvesChanged.send(); + } } updateAllRequiredEditors(); @@ -1352,6 +1356,40 @@ void RimSummaryPlotSourceStepping::setStepDimension( RimSummaryDataSourceSteppin m_stepDimension = dimension; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimSummaryPlotSourceStepping::isAtEnd( int direction ) +{ + caf::PdmValueField* valueField = fieldToModify(); + if ( !valueField ) return true; + + QList options = calculateValueOptions( valueField ); + if ( options.isEmpty() ) return true; + + QVariant currentValue = valueField->toQVariant(); + caf::PdmPointer currentHandle = currentValue.value>(); + int currentIndex = -1; + for ( int i = 0; i < options.size(); i++ ) + { + QVariant optionValue = options[i].value(); + caf::PdmPointer optionHandle = optionValue.value>(); + if ( optionHandle ) + { + if ( currentHandle == optionHandle ) currentIndex = i; + } + else if ( currentValue == optionValue ) + { + currentIndex = i; + } + } + + if ( currentIndex == -1 ) return false; + + int nextIndex = currentIndex + direction; + return ( nextIndex < 0 || nextIndex >= options.size() ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h index e1195df1d0..033f72aa61 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h @@ -60,6 +60,8 @@ public: RimSummaryCase* stepCase( int direction ); RimSummaryEnsemble* stepEnsemble( int direction ); + bool isAtEnd( int direction ); + void syncWithStepper( RimSummaryPlotSourceStepping* other ); void setStep( QString stepIdentifier );