Replace PdmUiPushButtonEditor fields with dynamic buttons

Replace boolean push button fields used as UI triggers with dynamic buttons
added via addNewButton in defineUiOrdering, removing unnecessary field
boilerplate across multiple classes.
This commit is contained in:
Magne Sjaastad
2026-03-31 09:16:52 +02:00
parent 062fe388f7
commit a8ac98ce06
21 changed files with 343 additions and 454 deletions
@@ -41,9 +41,9 @@
#include "RiuSummaryVectorSelectionDialog.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiToolButtonEditor.h"
#include "qwt_plot.h"
@@ -67,10 +67,6 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
CAF_PDM_InitFieldNoDefault( &m_dataSources, "AnalysisPlotData", "" );
m_dataSources.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_pushButtonSelectSummaryAddress );
m_pushButtonSelectSummaryAddress = false;
CAF_PDM_InitFieldNoDefault( &m_timeStepFilter, "TimeStepFilter", "Available Time Steps" );
CAF_PDM_InitFieldNoDefault( &m_timeStep, "TimeStep", "Time Step" );
@@ -139,40 +135,7 @@ void RimAbstractCorrelationPlot::setTimeStep( std::time_t timeStep )
void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
RimPlot::fieldChangedByUi( changedField, oldValue, newValue );
if ( changedField == &m_pushButtonSelectSummaryAddress )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( m_selectMultipleVectors )
{
dlg.enableMultiSelect( true );
}
dlg.hideSummaryCases();
dlg.setCurveSelection( curveDefinitions() );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
m_dataSources.deleteChildren();
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
{
auto plotEntry = new RimAnalysisPlotDataEntry();
plotEntry->setFromCurveDefinition( vectorDef );
m_dataSources.push_back( plotEntry );
}
connectAllCaseSignals();
loadDataAndUpdate();
updateConnectedEditors();
}
}
m_pushButtonSelectSummaryAddress = false;
}
else if ( changedField == &m_timeStep )
if ( changedField == &m_timeStep )
{
loadDataAndUpdate();
updateConnectedEditors();
@@ -234,11 +197,6 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
//--------------------------------------------------------------------------------------------------
void RimAbstractCorrelationPlot::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "...";
}
}
//--------------------------------------------------------------------------------------------------
@@ -751,7 +709,9 @@ void RimAbstractCorrelationPlot::appendDataSourceFields( QString uiConfigName, c
m_selectedVarsUiField = selectedVectorNamesText();
curveDataGroup->add( &m_selectedVarsUiField );
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
curveDataGroup->addNewButton( "...",
[this]() { onSelectVariablesButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
curveDataGroup->add( &m_timeStepFilter );
curveDataGroup->add( &m_timeStep );
curveDataGroup->add( &m_useCaseFilter );
@@ -802,3 +762,38 @@ void RimAbstractCorrelationPlot::onFilterSourceChanged( const caf::SignalEmitter
{
if ( m_useCaseFilter() ) loadDataAndUpdate();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAbstractCorrelationPlot::onSelectVariablesButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( m_selectMultipleVectors )
{
dlg.enableMultiSelect( true );
}
dlg.hideSummaryCases();
dlg.setCurveSelection( curveDefinitions() );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
m_dataSources.deleteChildren();
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
{
auto plotEntry = new RimAnalysisPlotDataEntry();
plotEntry->setFromCurveDefinition( vectorDef );
m_dataSources.push_back( plotEntry );
}
connectAllCaseSignals();
loadDataAndUpdate();
updateConnectedEditors();
}
}
}
@@ -130,6 +130,7 @@ private:
void connectAllCaseSignals();
void connectCurveFilterSignals();
void onFilterSourceChanged( const caf::SignalEmitter* emitter );
void onSelectVariablesButtonClicked();
RiaSummaryCurveDefinitionAnalyser* getOrCreateSelectedCurveDefAnalyser() const;
@@ -140,7 +141,6 @@ protected:
bool m_selectMultipleVectors;
caf::PdmField<QString> m_selectedVarsUiField;
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
caf::PdmField<TimeStepFilterEnum> m_timeStepFilter;
caf::PdmField<QDateTime> m_timeStep;
@@ -258,8 +258,6 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
{
RimAbstractCorrelationPlot::fieldChangedByUi( changedField, oldValue, newValue );
bool sendSelectedSignal = false;
if ( changedField == &m_showAbsoluteValues || changedField == &m_sortByValues || changedField == &m_sortByAbsoluteValues ||
changedField == &m_showOnlyTopNCorrelations || changedField == &m_topNFilterCount ||
changedField == &m_excludeParametersWithoutVariation || changedField == &m_selectedParametersList )
@@ -271,16 +269,7 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
updateLegend();
loadDataAndUpdate();
updateConnectedEditors();
sendSelectedSignal = true;
}
if ( changedField == &m_pushButtonSelectSummaryAddress )
{
sendSelectedSignal = true;
}
if ( sendSelectedSignal )
{
auto curves = curveDefinitions();
auto parameters = m_selectedParametersList();
if ( !curves.empty() && !parameters.empty() )