CellFilters: Unify view filter nodes under RimFilterInViewCollection

This commit is contained in:
Kristian Bendiksen committed 2026-05-15 08:37:46 +02:00
1 parent b15c8d383c
commit 6edc17892f
21 files changed
+451 -64

No files matched your search

@@ -34,10 +34,9 @@ CAF_CMD_SOURCE_INIT( RicAddLinkedEclipsePropertyFilterFeature, "RicAddLinkedEcli
//--------------------------------------------------------------------------------------------------
bool RicAddLinkedEclipsePropertyFilterFeature::isCommandEnabled() const
{
auto filterCollections = RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() == 1 )
if ( auto* target = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection() )
{
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( filterCollections[0] );
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( target );
}
return false;
@@ -48,11 +47,8 @@ bool RicAddLinkedEclipsePropertyFilterFeature::isCommandEnabled() const
//--------------------------------------------------------------------------------------------------
void RicAddLinkedEclipsePropertyFilterFeature::onActionTriggered( bool isChecked )
{
auto filterCollections = RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() == 1 )
if ( auto* coll = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection() )
{
auto coll = filterCollections[0];
auto filter = coll->addFilterLinkedToCellResult();
coll->updateAllRequiredEditors();
@@ -47,10 +47,9 @@ bool RicEclipseCombinedPropertyFilterNewFeature::isCommandEnabled() const
auto dataColls = caf::selectedObjectsByTypeStrict<RimDataFilterCollection*>();
if ( !dataColls.empty() ) return true;
auto filterCollections = RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() == 1 )
if ( auto* target = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection() )
{
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( filterCollections[0] );
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( target );
}
return false;
}
@@ -82,11 +81,11 @@ void RicEclipseCombinedPropertyFilterNewFeature::onActionTriggered( bool isCheck
return;
}
auto filterCollections = RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() != 1 ) return;
auto* target = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection();
if ( !target ) return;
RimCombinedFilter* created = filterCollections[0]->addNewCombinedFilter();
filterCollections[0]->updateConnectedEditors();
RimCombinedFilter* created = target->addNewCombinedFilter();
target->updateConnectedEditors();
if ( created )
{
Riu3DMainWindowTools::selectAsCurrentItem( created );
@@ -28,6 +28,7 @@
#include "RimEclipsePropertyFilterCollection.h"
#include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h"
#include "RimFilterInViewCollection.h"
#include "RimViewController.h"
#include "Riu3DMainWindowTools.h"
@@ -52,6 +53,20 @@ std::vector<RimEclipsePropertyFilterCollection*> RicEclipsePropertyFilterFeature
return caf::SelectionManager::instance()->objectsByType<RimEclipsePropertyFilterCollection>();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipsePropertyFilterCollection* RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection()
{
auto direct = caf::SelectionManager::instance()->objectsByType<RimEclipsePropertyFilterCollection>();
if ( !direct.empty() ) return direct.front();
auto facades = caf::SelectionManager::instance()->objectsByType<RimFilterInViewCollection>();
if ( !facades.empty() && facades.front()->propertyFilters() ) return facades.front()->propertyFilters();
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -40,6 +40,11 @@ public:
static std::vector<RimEclipsePropertyFilter*> selectedPropertyFilters();
static std::vector<RimEclipsePropertyFilterCollection*> selectedPropertyFilterCollections();
// Looks at the strict selection first, then at any selected RimFilterInViewCollection facade. Returns
// nullptr if neither is selected. Used by the property-filter "New ..." commands so they fire
// when invoked from the unified facade tree node.
static RimEclipsePropertyFilterCollection* resolveTargetPropertyFilterCollection();
static void addPropertyFilter( RimEclipsePropertyFilterCollection* propertyFilterCollection );
static RimEclipsePropertyFilter* addPropertyFilterToCombinedFilter( RimCombinedFilter* combined );
static void insertPropertyFilter( RimEclipsePropertyFilterCollection* propertyFilterCollection, size_t index );
@@ -50,11 +50,9 @@ bool RicEclipsePropertyFilterNewFeature::isCommandEnabled() const
auto dataColls = caf::selectedObjectsByTypeStrict<RimDataFilterCollection*>();
if ( !dataColls.empty() ) return true;
std::vector<RimEclipsePropertyFilterCollection*> filterCollections =
RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() == 1 )
if ( auto* target = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection() )
{
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( filterCollections[0] );
return RicEclipsePropertyFilterFeatureImpl::isPropertyFilterCommandAvailable( target );
}
return false;
@@ -92,11 +90,9 @@ void RicEclipsePropertyFilterNewFeature::onActionTriggered( bool isChecked )
return;
}
std::vector<RimEclipsePropertyFilterCollection*> filterCollections =
RicEclipsePropertyFilterFeatureImpl::selectedPropertyFilterCollections();
if ( filterCollections.size() == 1 )
if ( auto* target = RicEclipsePropertyFilterFeatureImpl::resolveTargetPropertyFilterCollection() )
{
RicEclipsePropertyFilterNewExec* filterExec = new RicEclipsePropertyFilterNewExec( filterCollections[0] );
RicEclipsePropertyFilterNewExec* filterExec = new RicEclipsePropertyFilterNewExec( target );
caf::CmdExecCommandManager::instance()->processExecuteCommand( filterExec );
}
}