From 74fde9edef36320db83f85c04475756b3b9d0cef Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 6 May 2026 12:28:34 +0200 Subject: [PATCH] CellFilters: Mirror source filter's name in the per-view wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RimDataFilterInView previously copied the source filter's name once, in setSourceFilter() and initAfterRead() via syncNameFromSource(). That left the wrapper showing the default "Combined Filter" when the source was renamed after the wrapper was created — typical for the Python add_combined_filter(name=...) flow, where the wrapper is constructed during addFilter() before the user-supplied name reaches the source. Replace the wrapper's reliance on its inherited m_name field for display with a caf::PdmProxyValueField that delegates the read to m_sourceFilter()->name() and the write to setName(). Override userDescriptionField() so the PDM tree label and property panel route through the proxy — both directions of rename now propagate. Matches the m_nameProxy pattern already established in RimCellFilter. The inherited m_name is no longer the display source of truth but is left in place so RimNamedObject's serialization stays unchanged. --- .../CellFilters/RimDataFilterInView.cpp | 29 ++++++++++++++----- .../CellFilters/RimDataFilterInView.h | 7 +++-- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.cpp index f79a6643b0..e86b32d6c5 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.cpp @@ -36,7 +36,14 @@ RimDataFilterInView::RimDataFilterInView() CAF_PDM_InitFieldNoDefault( &m_sourceFilter, "SourceFilter", "Source Filter" ); m_sourceFilter.uiCapability()->setUiHidden( true ); - setCheckState( true ); + // Proxy delegates the wrapper's user-visible name to the source filter in both directions. + // The inherited m_name (from RimNamedObject) is no longer the source of truth for display. + CAF_PDM_InitFieldNoDefault( &m_displayName, "DisplayName", "Name" ); + m_displayName.registerGetMethod( this, &RimDataFilterInView::sourceName ); + m_displayName.registerSetMethod( this, &RimDataFilterInView::setSourceName ); + m_displayName.xmlCapability()->disableIO(); + + setCheckState( false ); } //-------------------------------------------------------------------------------------------------- @@ -58,7 +65,7 @@ RimCellFilter* RimDataFilterInView::sourceFilter() const void RimDataFilterInView::setSourceFilter( RimCellFilter* sourceFilter ) { m_sourceFilter = sourceFilter; - syncNameFromSource(); + updateConnectedEditors(); } //-------------------------------------------------------------------------------------------------- @@ -102,7 +109,7 @@ void RimDataFilterInView::fieldChangedByUi( const caf::PdmFieldHandle* changedFi //-------------------------------------------------------------------------------------------------- void RimDataFilterInView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.add( nameField() ); + uiOrdering.add( &m_displayName ); uiOrdering.skipRemainingFields( true ); } @@ -117,15 +124,23 @@ void RimDataFilterInView::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOr //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimDataFilterInView::initAfterRead() +caf::PdmFieldHandle* RimDataFilterInView::userDescriptionField() { - syncNameFromSource(); + return &m_displayName; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimDataFilterInView::syncNameFromSource() +QString RimDataFilterInView::sourceName() const { - if ( m_sourceFilter() ) setName( m_sourceFilter()->name() ); + return m_sourceFilter() ? m_sourceFilter()->name() : QString(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimDataFilterInView::setSourceName( const QString& name ) +{ + if ( m_sourceFilter() ) m_sourceFilter()->setName( name ); } diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.h index 79f60631f3..c530d469ef 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimDataFilterInView.h @@ -20,6 +20,7 @@ #include "RimCheckableNamedObject.h" +#include "cafPdmProxyValueField.h" #include "cafPdmPtrField.h" #include "cvfArray.h" @@ -51,10 +52,12 @@ protected: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; - void initAfterRead() override; + caf::PdmFieldHandle* userDescriptionField() override; private: - void syncNameFromSource(); + QString sourceName() const; + void setSourceName( const QString& name ); caf::PdmPtrField m_sourceFilter; + caf::PdmProxyValueField m_displayName; };