Replaces push buttons with addNewButton

Removes the explicit usage of PdmUiPushButtonEditor and associated fields.

Replaces these with the more flexible addNewButton function in PdmUiOrdering.
This provides a more streamlined way to add buttons to the UI.
This commit is contained in:
Magne Sjaastad
2026-01-27 13:37:37 +01:00
parent de3758cf60
commit 5be1a4feb7
6 changed files with 56 additions and 130 deletions
@@ -55,7 +55,6 @@
#include "expressionparser/ExpressionParser.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
#include <QCheckBox>
@@ -105,9 +104,6 @@ RimGridCalculation::RimGridCalculation()
CAF_PDM_InitFieldNoDefault( &m_nonVisibleResultAddress, "NonVisibleResultAddress", "" );
m_nonVisibleResultAddress = new RimEclipseResultAddress;
CAF_PDM_InitField( &m_editNonVisibleResultAddress, "EditNonVisibleResultAddress", false, "Edit" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_editNonVisibleResultAddress );
CAF_PDM_InitFieldNoDefault( &m_nonVisibleResultText, "NonVisibleResultText", "" );
m_nonVisibleResultText.registerGetMethod( this, &RimGridCalculation::nonVisibleResultAddressText );
m_nonVisibleResultText.uiCapability()->setUiReadOnly( true );
@@ -362,7 +358,7 @@ void RimGridCalculation::defineUiOrdering( QString uiConfigName, caf::PdmUiOrder
if ( m_defaultValueType() == RimGridCalculation::DefaultValueType::FROM_PROPERTY )
{
filterGroup->add( &m_nonVisibleResultText );
filterGroup->add( &m_editNonVisibleResultAddress, { .newRow = false } );
filterGroup->addNewButton( "Edit", [this]() { onEditNonVisibleResultAddressButtonPressed(); }, { .newRow = false } );
}
else if ( m_defaultValueType() == RimGridCalculation::DefaultValueType::USER_DEFINED )
filterGroup->add( &m_defaultValue );
@@ -500,43 +496,20 @@ void RimGridCalculation::initAfterRead()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGridCalculation::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
void RimGridCalculation::onEditNonVisibleResultAddressButtonPressed()
{
RimUserDefinedCalculation::fieldChangedByUi( changedField, oldValue, newValue );
auto eclipseCase = m_nonVisibleResultAddress->eclipseCase();
if ( !eclipseCase ) eclipseCase = m_destinationCase;
if ( changedField == &m_editNonVisibleResultAddress )
RimResultSelectionUi selectionUi;
selectionUi.setEclipseResultAddress( eclipseCase, m_nonVisibleResultAddress->resultType(), m_nonVisibleResultAddress->resultName() );
caf::PdmUiPropertyViewDialog propertyDialog( nullptr, &selectionUi, "Select Result", "" );
if ( propertyDialog.exec() == QDialog::Accepted )
{
auto eclipseCase = m_nonVisibleResultAddress->eclipseCase();
if ( !eclipseCase ) eclipseCase = m_destinationCase;
RimResultSelectionUi selectionUi;
selectionUi.setEclipseResultAddress( eclipseCase, m_nonVisibleResultAddress->resultType(), m_nonVisibleResultAddress->resultName() );
caf::PdmUiPropertyViewDialog propertyDialog( nullptr, &selectionUi, "Select Result", "" );
if ( propertyDialog.exec() == QDialog::Accepted )
{
m_nonVisibleResultAddress->setEclipseCase( selectionUi.eclipseCase() );
m_nonVisibleResultAddress->setResultType( selectionUi.resultType() );
m_nonVisibleResultAddress->setResultName( selectionUi.resultVariable() );
}
m_editNonVisibleResultAddress = false;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGridCalculation::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
RimUserDefinedCalculation::defineEditorAttribute( field, uiConfigName, attribute );
if ( field == &m_editNonVisibleResultAddress )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attrib->m_buttonText = "Edit";
}
m_nonVisibleResultAddress->setEclipseCase( selectionUi.eclipseCase() );
m_nonVisibleResultAddress->setResultType( selectionUi.resultType() );
m_nonVisibleResultAddress->setResultName( selectionUi.resultVariable() );
}
}
@@ -131,12 +131,11 @@ protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void initAfterRead() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
private:
void onVariableUpdated( const SignalEmitter* emitter );
bool allSourceCasesAreEqualToDestinationCase() const;
void onEditNonVisibleResultAddressButtonPressed();
static std::pair<bool, QStringList> createStatisticsText( const std::vector<std::vector<double>>& values );
@@ -154,7 +153,6 @@ private:
caf::PdmProxyValueField<QString> m_nonVisibleResultText;
caf::PdmChildField<RimEclipseResultAddress*> m_nonVisibleResultAddress;
caf::PdmField<bool> m_editNonVisibleResultAddress;
caf::PdmField<bool> m_applyToAllCases_OBSOLETE;
@@ -30,7 +30,6 @@
#include "cafPdmUiLabelEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTableViewEditor.h"
#include "cafPdmUiTextEditor.h"
@@ -53,9 +52,6 @@ RimUserDefinedCalculation::RimUserDefinedCalculation()
CAF_PDM_InitField( &m_expression, "Expression", QString( "" ), "" );
m_expression.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_helpButton, "HelpButton", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_helpButton );
CAF_PDM_InitFieldNoDefault( &m_helpText,
"Label",
"Use the right-click menu inside the text area for quick access to operators and "
@@ -305,16 +301,6 @@ void RimUserDefinedCalculation::attachToWidget()
//--------------------------------------------------------------------------------------------------
void RimUserDefinedCalculation::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == &m_helpButton )
{
m_helpButton = false;
QString urlString = "https://resinsight.org/calculated-data/calculatorexpressions/";
RiaNetworkTools::openUrl( urlString );
return;
}
m_isDirty = true;
PdmObject::fieldChangedByUi( changedField, oldValue, newValue );
@@ -325,7 +311,12 @@ void RimUserDefinedCalculation::fieldChangedByUi( const caf::PdmFieldHandle* cha
//--------------------------------------------------------------------------------------------------
void RimUserDefinedCalculation::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_helpButton );
uiOrdering.addNewButton( "Open Help Page",
[]()
{
QString urlString = "https://resinsight.org/calculated-data/calculatorexpressions/";
RiaNetworkTools::openUrl( urlString );
} );
uiOrdering.add( &m_description );
uiOrdering.add( &m_expression );
uiOrdering.add( &m_helpText );
@@ -399,14 +390,6 @@ void RimUserDefinedCalculation::defineEditorAttribute( const caf::PdmFieldHandle
myAttr->enableDropTarget = true;
}
}
else if ( field == &m_helpButton )
{
auto* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Open Help Page";
}
}
else if ( field == &m_helpText )
{
auto* attrib = dynamic_cast<caf::PdmUiLabelEditorAttribute*>( attribute );
@@ -88,7 +88,6 @@ protected:
protected:
caf::PdmField<QString> m_description;
caf::PdmField<QString> m_expression;
caf::PdmField<bool> m_helpButton;
caf::PdmField<QString> m_helpText;
caf::PdmField<QString> m_unit;
@@ -129,10 +129,6 @@ RimWellTargetMapping::RimWellTargetMapping()
CAF_PDM_InitField( &m_transmissibility, "Transmissibility", 0.0, "Transmissibility" );
m_transmissibility.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_resetDefaultButton, "ResetDefaultButton", true, "Reset to Default" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_resetDefaultButton );
m_resetDefaultButton.xmlCapability()->disableIO();
CAF_PDM_InitField( &m_maxIterations, "Iterations", 100000, "Max Iterations" );
CAF_PDM_InitField( &m_maxNumTargets, "MaxNumTargets", 5, "Maximum Number of Well Targets" );
@@ -147,10 +143,6 @@ RimWellTargetMapping::RimWellTargetMapping()
CAF_PDM_InitField( &m_cellCountJ, "CellCountJ", 100, "Cell Count J" );
CAF_PDM_InitField( &m_cellCountK, "CellCountK", 10, "Cell Count K" );
CAF_PDM_InitField( &m_generateButton, "GenerateButton", true, "Generate" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_generateButton );
m_generateButton.xmlCapability()->disableIO();
CAF_PDM_InitFieldNoDefault( &m_filterView, "FilterView", "Filter By View" );
CAF_PDM_InitFieldNoDefault( &m_ensembleStatisticsCase, "EnsembleStatisticsCase", "Ensemble Statistics Case" );
@@ -191,41 +183,6 @@ RimWellTargetMapping::~RimWellTargetMapping()
void RimWellTargetMapping::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateAllBoundaries();
if ( changedField == &m_generateButton )
{
auto hasEnsembleParent = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>() != nullptr;
if ( hasEnsembleParent )
{
generateEnsembleStatistics();
}
else if ( auto eclipseCase = firstCase() )
{
generateCandidates( eclipseCase );
if ( auto views = eclipseCase->reservoirViews(); !views.empty() )
{
auto eclipseView = views.front();
eclipseView->cellResult()->setResultType( RiaDefines::ResultCatType::GENERATED );
eclipseView->cellResult()->setResultVariable( RigWellTargetMapping::wellTargetResultName() );
eclipseView->cellResult()->updateConnectedEditors();
if ( eclipseView->eclipsePropertyFilterCollection()->propertyFilters().empty() )
{
eclipseView->eclipsePropertyFilterCollection()->addFilterLinkedToCellResult();
eclipseView->eclipsePropertyFilterCollection()->updateConnectedEditors();
}
if ( RiaGuiApplication::isRunning() || RiuMainWindow::instance() )
{
RiuMainWindow::instance()->selectAsCurrentItem( eclipseView->cellResult() );
}
}
}
}
else if ( changedField == &m_resetDefaultButton )
{
resetMinimumCellValuesToDefault();
}
}
//--------------------------------------------------------------------------------------------------
@@ -385,22 +342,6 @@ void RimWellTargetMapping::defineEditorAttribute( const caf::PdmFieldHandle* fie
}
}
if ( field == &m_generateButton )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attrib->m_buttonText = "Generate";
}
}
if ( field == &m_resetDefaultButton )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attrib->m_buttonText = "Reset to Default";
}
}
if ( ( &m_userDefinedFloodingOil == field ) || ( &m_userDefinedFloodingGas == field ) )
{
if ( auto myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>( attribute ) )
@@ -526,7 +467,7 @@ void RimWellTargetMapping::defineUiOrdering( QString uiConfigName, caf::PdmUiOrd
minimumCellValuesGroup->add( &m_pressure );
minimumCellValuesGroup->add( &m_permeability );
minimumCellValuesGroup->add( &m_transmissibility );
minimumCellValuesGroup->add( &m_resetDefaultButton );
minimumCellValuesGroup->addNewButton( "Reset to Default", [this]() { resetMinimumCellValuesToDefault(); } );
if ( hasEnsembleParent )
{
@@ -540,7 +481,7 @@ void RimWellTargetMapping::defineUiOrdering( QString uiConfigName, caf::PdmUiOrd
advancedGroup->add( &m_maxNumTargets );
advancedGroup->setCollapsedByDefault();
uiOrdering.add( &m_generateButton );
uiOrdering.addNewButton( "Generate", [this]() { onGenerateButtonClicked(); } );
uiOrdering.skipRemainingFields();
@@ -691,6 +632,40 @@ void RimWellTargetMapping::resetMinimumCellValuesToDefault()
m_transmissibility = std::clamp( m_defaultTransmissibility, std::max( m_minimumTransmissibility, 0.1 ), m_maximumTransmissibility );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellTargetMapping::onGenerateButtonClicked()
{
auto hasEnsembleParent = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>() != nullptr;
if ( hasEnsembleParent )
{
generateEnsembleStatistics();
}
else if ( auto eclipseCase = firstCase() )
{
generateCandidates( eclipseCase );
if ( auto views = eclipseCase->reservoirViews(); !views.empty() )
{
auto eclipseView = views.front();
eclipseView->cellResult()->setResultType( RiaDefines::ResultCatType::GENERATED );
eclipseView->cellResult()->setResultVariable( RigWellTargetMapping::wellTargetResultName() );
eclipseView->cellResult()->updateConnectedEditors();
if ( eclipseView->eclipsePropertyFilterCollection()->propertyFilters().empty() )
{
eclipseView->eclipsePropertyFilterCollection()->addFilterLinkedToCellResult();
eclipseView->eclipsePropertyFilterCollection()->updateConnectedEditors();
}
if ( RiaGuiApplication::isRunning() || RiuMainWindow::instance() )
{
RiuMainWindow::instance()->selectAsCurrentItem( eclipseView->cellResult() );
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -71,6 +71,7 @@ private:
std::vector<double> getVisibilityFilter() const;
void resetMinimumCellValuesToDefault();
void onGenerateButtonClicked();
caf::PdmField<int> m_timeStep;
@@ -88,7 +89,6 @@ private:
caf::PdmField<double> m_pressure;
caf::PdmField<double> m_permeability;
caf::PdmField<double> m_transmissibility;
caf::PdmField<bool> m_resetDefaultButton;
caf::PdmField<int> m_maxIterations;
caf::PdmField<int> m_maxNumTargets;
@@ -99,8 +99,6 @@ private:
caf::PdmField<int> m_cellCountJ;
caf::PdmField<int> m_cellCountK;
caf::PdmField<bool> m_generateButton;
caf::PdmPtrField<RimEclipseView*> m_filterView;
caf::PdmChildField<RimEclipseCase*> m_ensembleStatisticsCase;