mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-31 09:14:11 -05:00
CellFilters: Invert dependency in RimCombinedFilter
Replace the six typed addNewXxxFilter factories with a single generic addNewFilter<T>(init) template. The combined filter no longer references any concrete RimCellFilter subclass; callers supply the type and an init lambda for type-specific configuration, while the combined filter handles cycle checks, parent-case propagation, signal wiring, and host notification. Addresses PR #13911 review feedback.
This commit is contained in:
1 parent
9d5a8c28f4
commit
5989785daf
8 files changed
+42
-107
No files matched your search
@@ -26,7 +26,6 @@
|
||||
#include "RimCombinedFilter.h"
|
||||
#include "RimGeoMechCase.h"
|
||||
#include "RimGridView.h"
|
||||
#include "RimUserDefinedFilter.h"
|
||||
#include "Riu3DMainWindowTools.h"
|
||||
|
||||
#include "cafSelectionManagerTools.h"
|
||||
@@ -59,9 +58,9 @@ void RicNewCellIndexFilterFeature::onActionTriggered( bool isChecked )
|
||||
if ( !combined.empty() )
|
||||
{
|
||||
RimCombinedFilter* target = combined.front();
|
||||
if ( RimCase* srcCase = target->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase() )
|
||||
if ( target->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase() )
|
||||
{
|
||||
RimCellIndexFilter* created = target->addNewCellIndexFilter( srcCase );
|
||||
RimCellIndexFilter* created = target->addNewFilter<RimCellIndexFilter>( []( RimCellIndexFilter* ) {} );
|
||||
if ( created ) Riu3DMainWindowTools::selectAsCurrentItem( created );
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -75,16 +75,30 @@ void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked )
|
||||
RimCase* srcCase = combined->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
|
||||
if ( !srcCase ) return;
|
||||
|
||||
auto addOne = [combined]( RimPolygon* polygon )
|
||||
{
|
||||
return combined->addNewFilter<RimPolygonFilter>(
|
||||
[polygon]( RimPolygonFilter* f )
|
||||
{
|
||||
f->setPolygon( polygon );
|
||||
f->configurePolygonEditor();
|
||||
if ( polygon )
|
||||
f->enableFilter( true );
|
||||
else
|
||||
f->enablePicking( true );
|
||||
} );
|
||||
};
|
||||
|
||||
RimPolygonFilter* lastItem = nullptr;
|
||||
if ( polygons.empty() )
|
||||
{
|
||||
lastItem = combined->addNewPolygonFilter( srcCase, nullptr );
|
||||
lastItem = addOne( nullptr );
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( auto polygon : polygons )
|
||||
{
|
||||
lastItem = combined->addNewPolygonFilter( srcCase, polygon );
|
||||
lastItem = addOne( polygon );
|
||||
}
|
||||
}
|
||||
if ( lastItem ) Riu3DMainWindowTools::selectAsCurrentItem( lastItem );
|
||||
|
||||
@@ -58,7 +58,13 @@ void RicNewRangeFilterSliceFeature::onActionTriggered( bool isChecked )
|
||||
RimCase* srcCase = target->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
|
||||
if ( srcCase )
|
||||
{
|
||||
RimCellFilter* created = target->addNewCellRangeFilter( srcCase, 0, m_sliceDirection );
|
||||
const int sliceDir = m_sliceDirection;
|
||||
auto* created = target->addNewFilter<RimCellRangeFilter>(
|
||||
[sliceDir]( RimCellRangeFilter* f )
|
||||
{
|
||||
f->setGridIndex( 0 );
|
||||
f->setDefaultValues( sliceDir, -1 );
|
||||
} );
|
||||
if ( created ) Riu3DMainWindowTools::selectAsCurrentItem( created );
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -45,7 +45,7 @@ void RicNewUserDefinedFilterFeature::onActionTriggered( bool isChecked )
|
||||
RimCase* srcCase = target->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
|
||||
if ( srcCase )
|
||||
{
|
||||
RimUserDefinedFilter* created = target->addNewUserDefinedFilter( srcCase );
|
||||
RimUserDefinedFilter* created = target->addNewFilter<RimUserDefinedFilter>( []( RimUserDefinedFilter* ) {} );
|
||||
if ( created ) Riu3DMainWindowTools::selectAsCurrentItem( created );
|
||||
}
|
||||
return;
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ void RicNewUserDefinedIndexFilterFeature::onActionTriggered( bool isChecked )
|
||||
RimCase* srcCase = target->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
|
||||
if ( srcCase )
|
||||
{
|
||||
auto* created = target->addNewUserDefinedIndexFilter( srcCase );
|
||||
auto* created = target->addNewFilter<RimUserDefinedIndexFilter>( []( RimUserDefinedIndexFilter* ) {} );
|
||||
if ( created ) Riu3DMainWindowTools::selectAsCurrentItem( created );
|
||||
}
|
||||
return;
|
||||
|
||||
Reference in new issue
Block a user