Update toggle icon automatically on UI change and after read

This commit is contained in:
Magne Sjaastad committed 2026-10-17 13:23:22 +02:00
1 parent 95bee61f91
commit 3de9b3c1aa
37 files changed
+32 -147

No files matched your search

@@ -142,7 +142,6 @@ void RimAnnotationCollectionBase::fieldChangedByUi( const caf::PdmFieldHandle* c
{
if ( changedField == objectToggleField() )
{
updateUiIconFromToggleField();
scheduleRedrawOfRelevantViews();
}
}
@@ -110,7 +110,6 @@ void RimAnnotationGroupCollection::fieldChangedByUi( const caf::PdmFieldHandle*
{
if ( changedField == objectToggleField() )
{
updateUiIconFromToggleField();
updateViews();
}
}
@@ -226,10 +226,6 @@ void RimAnnotationInViewCollection::defineUiOrdering( QString uiConfigName, caf:
//--------------------------------------------------------------------------------------------------
void RimAnnotationInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == objectToggleField() )
{
updateUiIconFromToggleField();
}
scheduleRedrawOfRelevantViews();
}
@@ -505,8 +505,6 @@ void RimContourMapInView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde
//--------------------------------------------------------------------------------------------------
void RimContourMapInView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( changedField == &m_mapPosition || changedField == &m_projectSurfaceOnGeometry || changedField == &m_projectLinesOnGeometry ||
changedField == &m_lineColorMode || changedField == &m_showContourLines || changedField == &m_showMapSurface ||
changedField == &m_showContourLabels )
@@ -519,11 +517,3 @@ void RimContourMapInView::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
view->scheduleCreateDisplayModelAndRedraw();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimContourMapInView::initAfterRead()
{
updateUiIconFromToggleField();
}
@@ -108,7 +108,6 @@ public:
protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
caf::PdmFieldHandle* userDescriptionField() override;
@@ -263,8 +263,6 @@ void RimContourMapInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle*
{
RimCheckableNamedObject::fieldChangedByUi( changedField, oldValue, newValue );
updateUiIconFromToggleField();
if ( changedField == &m_isChecked )
{
if ( auto view = firstAncestorOfType<Rim3dView>() )
@@ -273,11 +271,3 @@ void RimContourMapInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle*
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimContourMapInViewCollection::initAfterRead()
{
updateUiIconFromToggleField();
}
@@ -78,7 +78,6 @@ public:
protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
private:
RimContourMapInView* findContourMapInViewForSource( const RimEclipseContourMapView* contourMapView ) const;
@@ -76,8 +76,6 @@ caf::PdmFieldHandle* RimFaultInView::userDescriptionField()
//--------------------------------------------------------------------------------------------------
void RimFaultInView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( &faultColor == changedField || &showFault == changedField )
{
auto reservoirView = firstAncestorOrThisOfType<RimEclipseView>();
@@ -89,14 +87,6 @@ void RimFaultInView::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultInView::initAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -54,7 +54,6 @@ public:
caf::PdmFieldHandle* objectToggleField() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override;
@@ -196,8 +196,6 @@ int RimFaultInViewCollection::meshLineThickness() const
//--------------------------------------------------------------------------------------------------
void RimFaultInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( &m_faultLabelColor == changedField )
{
parentView()->scheduleReservoirGridGeometryRegen();
@@ -68,8 +68,6 @@ int RimGeoMechPart::partId() const
//--------------------------------------------------------------------------------------------------
void RimGeoMechPart::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( changedField == objectToggleField() )
{
auto ownerView = firstAncestorOrThisOfType<RimGeoMechView>();
@@ -899,8 +899,6 @@ void RimGeoMechView::initAfterRead()
{
RimGridView::initAfterRead();
cellResult()->setGeoMechCase( m_geomechCase );
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -480,7 +480,6 @@ void RimIntersectionCollection::fieldChangedByUi( const caf::PdmFieldHandle* cha
if ( changedField == &m_isActive )
{
updateUiIconFromToggleField();
rebuildView = true;
}
else if ( changedField == &m_depthThresholdOverridden )
@@ -349,8 +349,6 @@ void RimIntersectionResultDefinition::fieldChangedByUi( const caf::PdmFieldHandl
update2dIntersectionViews();
}
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -457,8 +455,6 @@ void RimIntersectionResultDefinition::defineUiTreeOrdering( caf::PdmUiTreeOrderi
void RimIntersectionResultDefinition::initAfterRead()
{
updateCaseInResultDefinitions();
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -111,21 +111,11 @@ void RimIntersectionResultsDefinitionCollection::fieldChangedByUi( const caf::Pd
const QVariant& oldValue,
const QVariant& newValue )
{
updateUiIconFromToggleField();
auto gridView = firstAncestorOrThisOfType<RimGridView>();
if ( gridView ) gridView->scheduleCreateDisplayModelAndRedraw();
if ( !intersectionResultsDefinitions().empty() ) intersectionResultsDefinitions()[0]->update2dIntersectionViews();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersectionResultsDefinitionCollection::initAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -47,7 +47,6 @@ public:
protected:
caf::PdmFieldHandle* objectToggleField() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
private:
caf::PdmField<bool> m_isActive;
@@ -186,8 +186,6 @@ void RimCellEdgeColors::loadResult()
//--------------------------------------------------------------------------------------------------
void RimCellEdgeColors::initAfterRead()
{
updateUiIconFromToggleField();
if ( m_singleVarEdgeResultColors_OBSOLETE->resultVariableUiName() != RiaResultNames::undefinedResultName() )
{
m_selectedKeywords.v().push_back( m_singleVarEdgeResultColors_OBSOLETE->resultVariableUiName() );
@@ -202,11 +200,6 @@ void RimCellEdgeColors::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
loadResult();
if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw();
if ( changedField == objectToggleField() )
{
updateUiIconFromToggleField();
}
}
namespace caf
@@ -68,8 +68,6 @@ void RimEclipseFaultColors::setReservoirView( RimEclipseView* ownerReservoirView
//--------------------------------------------------------------------------------------------------
void RimEclipseFaultColors::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw();
}
@@ -79,8 +77,6 @@ void RimEclipseFaultColors::fieldChangedByUi( const caf::PdmFieldHandle* changed
void RimEclipseFaultColors::initAfterRead()
{
m_customFaultResultColors->initAfterRead();
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -1259,8 +1259,6 @@ void RimEclipseResultDefinition::initAfterRead()
m_flowSolutionUiField = m_flowSolution();
m_selectedInjectorTracersUiField = m_selectedInjectorTracers;
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -1390,8 +1390,6 @@ void RimEclipseView::initAfterRead()
// Re-resolve the data filter source (case or ensemble) now that the view is attached to the tree.
propagateEclipseCaseToChildObjects();
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -324,8 +324,6 @@ void RimRegularLegendConfig::fieldChangedByUi( const caf::PdmFieldHandle* change
{
rftPlot->onLegendDefinitionChanged();
}
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -674,8 +672,6 @@ void RimRegularLegendConfig::initAfterRead()
}
updateFieldVisibility();
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -321,11 +321,6 @@ bool RimSimWellInViewCollection::hasVisibleWellPipes()
//--------------------------------------------------------------------------------------------------
void RimSimWellInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( &isActive == changedField )
{
updateUiIconFromToggleField();
}
if ( &m_showWellLabel == changedField )
{
for ( RimSimWellInView* w : wells )
@@ -192,11 +192,6 @@ void RimStimPlanColors::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
sourceView->scheduleCreateDisplayModelAndRedraw();
}
if ( changedField == objectToggleField() )
{
updateUiIconFromToggleField();
}
if ( changedField == &m_resultNameAndUnit )
{
updateStimPlanTemplates();
@@ -80,16 +80,6 @@ void RimViewLinkerCollection::fieldChangedByUi( const caf::PdmFieldHandle* chang
viewLinker()->updateWindowTitles();
}
}
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinkerCollection::initAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -46,5 +46,4 @@ protected:
caf::PdmFieldHandle* objectToggleField() override { return &isActive; }
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void initAfterRead() override;
};
@@ -348,7 +348,6 @@ void RimViewWindow::fieldChangedByUi( const caf::PdmFieldHandle* changedField, c
{
updateDockWindowVisibility();
}
uiCapability()->updateUiIconFromToggleField();
}
}
@@ -98,8 +98,6 @@ void RimVirtualPerforationResults::fieldChangedByUi( const caf::PdmFieldHandle*
{
if ( changedField == &m_isActive )
{
updateUiIconFromToggleField();
loadData();
}
@@ -126,11 +124,3 @@ void RimVirtualPerforationResults::defineUiOrdering( QString uiConfigName, caf::
uiOrdering.skipRemainingFields( true );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimVirtualPerforationResults::initAfterRead()
{
updateUiIconFromToggleField();
}
@@ -48,7 +48,6 @@ private:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
caf::PdmFieldHandle* objectToggleField() override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void initAfterRead() override;
private:
caf::PdmField<bool> m_isActive;
@@ -288,8 +288,6 @@ void RimSurfaceInView::updateLegendRangesTextAndVisibility( RiuViewer* nativeOrO
//--------------------------------------------------------------------------------------------------
void RimSurfaceInView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
bool scheduleRedraw = false;
if ( changedField == &m_useSeparateDataSource || changedField == &m_separateDataSource )
@@ -356,11 +354,3 @@ caf::PdmFieldHandle* RimSurfaceInView::userDescriptionField()
{
return &m_name;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceInView::initAfterRead()
{
updateUiIconFromToggleField();
}
@@ -77,8 +77,6 @@ public:
bool isMeshLinesEnabled() const;
protected:
void initAfterRead() override;
private:
RimIntersectionResultsDefinitionCollection* findSeparateResultsCollection() override;
@@ -396,8 +396,6 @@ void RimSurfaceInViewCollection::appendPartsToModel( cvf::ModelBasicList* model,
//--------------------------------------------------------------------------------------------------
void RimSurfaceInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
updateUiIconFromToggleField();
if ( changedField == &m_isChecked || changedField == &m_surfaceColorMode )
{
auto ownerView = firstAncestorOrThisOfTypeAsserted<Rim3dView>();
@@ -405,14 +403,6 @@ void RimSurfaceInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* ch
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceInViewCollection::initAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -84,7 +84,6 @@ public:
std::vector<const RivIntersectionGeometryGeneratorInterface*> intersectionGeometryGenerators() const;
protected:
void initAfterRead() override;
caf::PdmFieldHandle* userDescriptionField() override;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
@@ -7,6 +7,9 @@ class PdmObjectCapability
public:
PdmObjectCapability() {}
virtual ~PdmObjectCapability() {}
// Called for each capability of an object after its fields are read, before PdmXmlObjectHandle::initAfterRead()
virtual void onAfterRead() {}
};
} // End namespace caf
@@ -72,6 +72,9 @@ void PdmUiFieldHandle::notifyFieldChanged( const QVariant& oldFieldValue, const
PdmUiObjectHandle* uiObjHandle = uiObj( ownerObjectHandle );
if ( uiObjHandle )
{
// Keep the icon in sync with the toggle field before notifying the object
if ( fieldHandle == uiObjHandle->objectToggleField() ) uiObjHandle->updateUiIconFromToggleField();
uiObjHandle->fieldChangedByUi( fieldHandle, oldFieldValue, newFieldValue );
uiObjHandle->updateConnectedEditors();
@@ -213,17 +213,23 @@ void PdmUiObjectHandle::expandUiTree( PdmUiTreeOrdering* root, const QString& ui
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiObjectHandle::updateUiIconFromToggleField()
void PdmUiObjectHandle::updateUiIconFromToggleField( const QString& uiConfigName )
{
if ( objectToggleField() )
{
PdmUiFieldHandle* uiFieldHandle = objectToggleField()->uiCapability();
if ( uiFieldHandle )
{
bool active = uiFieldHandle->uiValue().toBool();
updateUiIconFromState( active );
}
}
auto* toggleField = objectToggleField();
if ( !toggleField ) return;
auto* uiFieldHandle = toggleField->uiCapability();
if ( !uiFieldHandle ) return;
updateUiIconFromState( uiFieldHandle->uiValue().toBool(), uiConfigName );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void PdmUiObjectHandle::onAfterRead()
{
updateUiIconFromToggleField();
}
//--------------------------------------------------------------------------------------------------
@@ -47,7 +47,11 @@ public:
/// Field used to control if field change of and object should be covered by undo/redo framework
virtual bool useUndoRedoForFieldChanged() { return true; }
void updateUiIconFromToggleField();
// Updates the icon active state from the object toggle field. Done automatically when the toggle field is changed
// and after the object is read. Call explicitly when the toggle field is set without notification
void updateUiIconFromToggleField( const QString& uiConfigName = "" );
void onAfterRead() override;
/// Append actions to menu builder
virtual void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const {}
@@ -401,6 +401,11 @@ void PdmXmlObjectHandle::initAfterReadRecursively( PdmObjectHandle* object )
initAfterReadRecursively( children[cIdx] );
}
for ( auto& [capability, takeOwnership] : object->m_capabilities )
{
capability->onAfterRead();
}
PdmXmlObjectHandle* xmlObject = xmlObj( object );
if ( xmlObject )
{