mirror of
https://github.com/OPM/ResInsight.git
synced 2026-08-27 05:37:21 -05:00
Replace PdmField<bool> push button pattern with addNewButton() lambdas in RiaPreferences, RiaPreferencesSummary, RicUserDefinedCalculatorUi, RimUserDefinedPolylinesAnnotation, RimPolygonFilter, RimFractureTemplate, RimEllipseFractureTemplate, RimMeshFractureTemplate, and RicSummaryPlotEditorWidgetCreator.
2.5 KiB
2.5 KiB
Push Button Refactoring: PdmField → PdmUiButton
Overview
Push buttons in the PDM UI can be implemented two ways:
- Old pattern:
caf::PdmField<bool>withPdmUiPushButtonEditor(deprecated for new code) - New pattern:
caf::PdmUiButtonadded viauiOrdering.addNewButton()indefineUiOrdering
The new pattern is preferred because it requires less boilerplate, eliminates the field lifecycle, and keeps the action logic co-located with the UI layout.
Old Pattern (to be replaced)
Header
caf::PdmField<bool> m_myButton;
Constructor
CAF_PDM_InitField( &m_myButton, "MyButton", false, "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_myButton );
m_myButton.xmlCapability()->disableIO(); // if not serialized
defineEditorAttribute
else if ( field == &m_myButton )
{
if ( auto* attr = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
attr->m_buttonText = "Click Me";
}
defineUiOrdering
group->add( &m_myButton );
fieldChangedByUi
else if ( changedField == &m_myButton )
{
doSomething();
m_myButton = false; // reset
}
Required include
#include "cafPdmUiPushButtonEditor.h"
New Pattern (PdmUiButton)
Header
No field declaration needed.
Constructor
No init call needed.
defineUiOrdering
group->addNewButton( "Click Me", [this]() { doSomething(); } );
With layout options:
group->addNewButton( "Click Me", [this]() { doSomething(); }, { .newRow = false, .totalColumnSpan = 1 } );
Required include
#include "cafPdmUiButton.h"
Migration Steps
- Header: Remove
caf::PdmField<bool> m_myButton; - Constructor: Remove
CAF_PDM_InitField,configureEditorLabelHidden, anddisableIOlines - defineEditorAttribute: Remove the
else if ( field == &m_myButton )block - defineUiOrdering: Replace
group->add( &m_myButton )withgroup->addNewButton( "Text", [this]() { ... } ) - fieldChangedByUi: Remove the
else if ( changedField == &m_myButton )block (move logic into lambda) - Includes: Replace
cafPdmUiPushButtonEditor.hwithcafPdmUiButton.h(if no other push button fields remain)
Files Already Migrated
ApplicationLibCode/Application/RiaPreferences.cpp— migratedm_deleteOsduToken,m_deleteSumoToken,m_importPreferences,m_exportPreferences
Files Still Using Old Pattern
Run the following to find remaining files:
grep -rl "configureEditorLabelHidden\|configureEditorLabelLeft" ApplicationLibCode/