Support copy of property filters to linked views

* Copy and overwrite property filters when linked
When linking property filters between different cases, the property filter settings are copied and the property filter is evaluated per case. The previous implementation worked only for a single case.

* Move field to private
This commit is contained in:
Magne Sjaastad
2022-11-28 14:34:26 +01:00
committed by GitHub
parent 7065d5eaf4
commit 9995af07a1
15 changed files with 216 additions and 88 deletions
@@ -61,7 +61,7 @@ std::vector<RimEclipsePropertyFilterCollection*> RicEclipsePropertyFilterFeature
void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyFilterCollection* propertyFilterCollection ) void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyFilterCollection* propertyFilterCollection )
{ {
RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter(); RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter();
propertyFilterCollection->propertyFilters.push_back( propertyFilter ); propertyFilterCollection->propertyFiltersField().push_back( propertyFilter );
setDefaults( propertyFilter ); setDefaults( propertyFilter );
propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED );
@@ -69,6 +69,8 @@ void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyF
propertyFilterCollection->updateConnectedEditors(); propertyFilterCollection->updateConnectedEditors();
Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter, false ); Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter, false );
propertyFilterCollection->onChildAdded( nullptr );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -78,7 +80,7 @@ void RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( RimEclipseProper
size_t index ) size_t index )
{ {
RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter(); RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter();
propertyFilterCollection->propertyFilters.insertAt( static_cast<int>( index ), propertyFilter ); propertyFilterCollection->propertyFiltersField().insertAt( static_cast<int>( index ), propertyFilter );
setDefaults( propertyFilter ); setDefaults( propertyFilter );
propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED );
@@ -59,8 +59,8 @@ void RicEclipsePropertyFilterInsertExec::redo()
RimEclipsePropertyFilterCollection* propertyFilterCollection = nullptr; RimEclipsePropertyFilterCollection* propertyFilterCollection = nullptr;
m_propertyFilter->firstAncestorOrThisOfTypeAsserted( propertyFilterCollection ); m_propertyFilter->firstAncestorOrThisOfTypeAsserted( propertyFilterCollection );
size_t index = propertyFilterCollection->propertyFilters.indexOf( m_propertyFilter ); size_t index = propertyFilterCollection->propertyFiltersField().indexOf( m_propertyFilter );
CVF_ASSERT( index < propertyFilterCollection->propertyFilters.size() ); CVF_ASSERT( index < propertyFilterCollection->propertyFilters().size() );
RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( propertyFilterCollection, index ); RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( propertyFilterCollection, index );
} }
@@ -69,7 +69,7 @@ void RicEclipsePropertyFilterNewExec::redo()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicEclipsePropertyFilterNewExec::undo() void RicEclipsePropertyFilterNewExec::undo()
{ {
m_propertyFilterCollection->propertyFilters.erase( m_propertyFilterCollection->propertyFilters.size() - 1 ); m_propertyFilterCollection->propertyFiltersField().erase( m_propertyFilterCollection->propertyFilters().size() - 1 );
m_propertyFilterCollection->updateConnectedEditors(); m_propertyFilterCollection->updateConnectedEditors();
} }
@@ -40,6 +40,7 @@
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "cafPdmUiDoubleSliderEditor.h" #include "cafPdmUiDoubleSliderEditor.h"
#include "cafPdmUiTreeAttributes.h"
#include "cvfAssert.h" #include "cvfAssert.h"
@@ -76,6 +77,9 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter()
CAF_PDM_InitField( &m_useCategorySelection, "CategorySelection", false, "Category Selection" ); CAF_PDM_InitField( &m_useCategorySelection, "CategorySelection", false, "Category Selection" );
m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_isDuplicatedFromLinkedView, "IsDuplicatedFromLinkedView", false, "Duplicated" );
m_isDuplicatedFromLinkedView.uiCapability()->setUiHidden( true );
// HEADLESS HACK // HEADLESS HACK
if ( RiaGuiApplication::isRunning() ) if ( RiaGuiApplication::isRunning() )
{ {
@@ -124,6 +128,14 @@ bool RimEclipsePropertyFilter::isCategorySelectionActive() const
return false; return false;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilter::setIsDuplicatedFromLinkedView( bool isDuplicated )
{
m_isDuplicatedFromLinkedView = isDuplicated;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -131,23 +143,20 @@ void RimEclipsePropertyFilter::fieldChangedByUi( const caf::PdmFieldHandle* chan
const QVariant& oldValue, const QVariant& oldValue,
const QVariant& newValue ) const QVariant& newValue )
{ {
// clang-format off if ( &m_lowerBound == changedField || &m_upperBound == changedField || &m_isActive == changedField ||
if ( &m_lowerBound == changedField &m_filterMode == changedField || &m_selectedCategoryValues == changedField ||
|| &m_upperBound == changedField &m_useCategorySelection == changedField )
|| &m_isActive == changedField
|| &m_filterMode == changedField
|| &m_selectedCategoryValues == changedField
|| &m_useCategorySelection == changedField)
{ {
m_isDuplicatedFromLinkedView = false;
this->m_resultDefinition->loadResult(); this->m_resultDefinition->loadResult();
this->computeResultValueRange(); this->computeResultValueRange();
updateFilterName(); updateFilterName();
this->updateIconState(); this->updateIconState();
this->uiCapability()->updateConnectedEditors(); this->uiCapability()->updateConnectedEditors();
parentContainer()->updateDisplayModelNotifyManagedViews(this); parentContainer()->updateDisplayModelNotifyManagedViews( this );
} }
// clang-format on
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -341,6 +350,31 @@ void RimEclipsePropertyFilter::defineEditorAttribute( const caf::PdmFieldHandle*
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilter::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( !m_isDuplicatedFromLinkedView ) return;
Rim3dView* rimView = nullptr;
firstAncestorOrThisOfTypeAsserted( rimView );
RimViewController* vc = rimView->viewController();
if ( vc && vc->isPropertyFilterDuplicationActive() )
{
auto* treeItemAttribute = dynamic_cast<caf::PdmUiTreeViewItemAttribute*>( attribute );
if ( treeItemAttribute )
{
treeItemAttribute->tags.clear();
auto tag = caf::PdmUiTreeViewItemAttribute::Tag::create();
tag->icon = caf::IconProvider( ":/chain.png" );
treeItemAttribute->tags.push_back( std::move( tag ) );
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -44,6 +44,8 @@ public:
void rangeValues( double* lower, double* upper ) const; void rangeValues( double* lower, double* upper ) const;
bool isCategorySelectionActive() const; bool isCategorySelectionActive() const;
void setIsDuplicatedFromLinkedView( bool isControlled );
void setToDefaultValues(); void setToDefaultValues();
void updateFilterName(); void updateFilterName();
void computeResultValueRange(); void computeResultValueRange();
@@ -62,6 +64,9 @@ private:
QString uiConfigName, QString uiConfigName,
caf::PdmUiEditorAttribute* attribute ) override; caf::PdmUiEditorAttribute* attribute ) override;
private:
void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
private: private:
friend class RimEclipsePropertyFilterCollection; friend class RimEclipsePropertyFilterCollection;
friend class RicEclipsePropertyFilterFeatureImpl; friend class RicEclipsePropertyFilterFeatureImpl;
@@ -79,6 +84,7 @@ private:
caf::PdmField<QString> m_rangeLabelText; caf::PdmField<QString> m_rangeLabelText;
caf::PdmField<double> m_lowerBound; caf::PdmField<double> m_lowerBound;
caf::PdmField<double> m_upperBound; caf::PdmField<double> m_upperBound;
caf::PdmField<bool> m_isDuplicatedFromLinkedView;
caf::PdmField<bool> m_useCategorySelection; caf::PdmField<bool> m_useCategorySelection;
@@ -38,8 +38,8 @@ RimEclipsePropertyFilterCollection::RimEclipsePropertyFilterCollection()
{ {
CAF_PDM_InitObject( "Property Filters", ":/CellFilter_Values.png" ); CAF_PDM_InitObject( "Property Filters", ":/CellFilter_Values.png" );
CAF_PDM_InitFieldNoDefault( &propertyFilters, "PropertyFilters", "Property Filters" ); CAF_PDM_InitFieldNoDefault( &m_propertyFilters, "PropertyFilters", "Property Filters" );
propertyFilters.uiCapability()->setUiTreeHidden( true ); m_propertyFilters.uiCapability()->setUiTreeHidden( true );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -47,7 +47,7 @@ RimEclipsePropertyFilterCollection::RimEclipsePropertyFilterCollection()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimEclipsePropertyFilterCollection::~RimEclipsePropertyFilterCollection() RimEclipsePropertyFilterCollection::~RimEclipsePropertyFilterCollection()
{ {
propertyFilters.deleteChildren(); m_propertyFilters.deleteChildren();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -61,12 +61,39 @@ RimEclipseView* RimEclipsePropertyFilterCollection::reservoirView()
return eclipseView; return eclipseView;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilterCollection::setIsDuplicatedFromLinkedView()
{
for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters )
{
propertyFilter->setIsDuplicatedFromLinkedView( true );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimEclipsePropertyFilter*> RimEclipsePropertyFilterCollection::propertyFilters() const
{
return m_propertyFilters.children();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmChildArrayField<RimEclipsePropertyFilter*>& RimEclipsePropertyFilterCollection::propertyFiltersField()
{
return m_propertyFilters;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilterCollection::loadAndInitializePropertyFilters() void RimEclipsePropertyFilterCollection::loadAndInitializePropertyFilters()
{ {
for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters )
{ {
propertyFilter->resultDefinition()->setEclipseCase( reservoirView()->eclipseCase() ); propertyFilter->resultDefinition()->setEclipseCase( reservoirView()->eclipseCase() );
propertyFilter->initAfterRead(); propertyFilter->initAfterRead();
@@ -93,7 +120,7 @@ bool RimEclipsePropertyFilterCollection::hasActiveFilters() const
{ {
if ( !isActive ) return false; if ( !isActive ) return false;
for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters )
{ {
if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasResult() ) return true; if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasResult() ) return true;
} }
@@ -108,7 +135,7 @@ bool RimEclipsePropertyFilterCollection::hasActiveDynamicFilters() const
{ {
if ( !isActive ) return false; if ( !isActive ) return false;
for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters )
{ {
if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasDynamicResult() ) return true; if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasDynamicResult() ) return true;
} }
@@ -123,7 +150,7 @@ bool RimEclipsePropertyFilterCollection::isUsingFormationNames() const
{ {
if ( !isActive ) return false; if ( !isActive ) return false;
for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters )
{ {
if ( propertyFilter->isActive() && if ( propertyFilter->isActive() &&
propertyFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES && propertyFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES &&
@@ -159,7 +186,7 @@ void RimEclipsePropertyFilterCollection::updateIconState()
updateUiIconFromState( activeIcon ); updateUiIconFromState( activeIcon );
for ( RimEclipsePropertyFilter* cellFilter : propertyFilters ) for ( RimEclipsePropertyFilter* cellFilter : m_propertyFilters )
{ {
cellFilter->updateActiveState(); cellFilter->updateActiveState();
cellFilter->updateIconState(); cellFilter->updateIconState();
@@ -171,7 +198,7 @@ void RimEclipsePropertyFilterCollection::updateIconState()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilterCollection::updateFromCurrentTimeStep() void RimEclipsePropertyFilterCollection::updateFromCurrentTimeStep()
{ {
for ( RimEclipsePropertyFilter* cellFilter : propertyFilters() ) for ( RimEclipsePropertyFilter* cellFilter : m_propertyFilters() )
{ {
cellFilter->updateFromCurrentTimeStep(); cellFilter->updateFromCurrentTimeStep();
} }
@@ -40,11 +40,11 @@ public:
~RimEclipsePropertyFilterCollection() override; ~RimEclipsePropertyFilterCollection() override;
RimEclipseView* reservoirView(); RimEclipseView* reservoirView();
void setIsDuplicatedFromLinkedView();
// Fields: std::vector<RimEclipsePropertyFilter*> propertyFilters() const;
caf::PdmChildArrayField<RimEclipsePropertyFilter*> propertyFilters; caf::PdmChildArrayField<RimEclipsePropertyFilter*>& propertyFiltersField();
// Methods
bool hasActiveFilters() const override; bool hasActiveFilters() const override;
bool hasActiveDynamicFilters() const override; bool hasActiveDynamicFilters() const override;
bool isUsingFormationNames() const; bool isUsingFormationNames() const;
@@ -55,6 +55,8 @@ public:
void updateFromCurrentTimeStep(); void updateFromCurrentTimeStep();
protected: protected:
// Overridden methods
void initAfterRead() override; void initAfterRead() override;
private:
caf::PdmChildArrayField<RimEclipsePropertyFilter*> m_propertyFilters;
}; };
@@ -66,16 +66,21 @@ void RimPropertyFilterCollection::updateDisplayModelNotifyManagedViews( RimPrope
view->scheduleCreateDisplayModelAndRedraw(); view->scheduleCreateDisplayModelAndRedraw();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPropertyFilterCollection::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, void RimPropertyFilterCollection::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) std::vector<caf::PdmObjectHandle*>& referringObjects )
{ {
Rim3dView* view = nullptr; updateDisplayModelNotifyManagedViews( nullptr );
this->firstAncestorOrThisOfType( view ); }
CVF_ASSERT( view );
if ( !view ) return;
view->scheduleGeometryRegen( PROPERTY_FILTERED ); //--------------------------------------------------------------------------------------------------
view->scheduleCreateDisplayModelAndRedraw(); ///
//--------------------------------------------------------------------------------------------------
void RimPropertyFilterCollection::onChildAdded( caf::PdmFieldHandle* containerForNewObject )
{
updateDisplayModelNotifyManagedViews( nullptr );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -48,6 +48,7 @@ public:
virtual void updateIconState() = 0; virtual void updateIconState() = 0;
void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray,
std::vector<caf::PdmObjectHandle*>& referringObjects ) override; std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
void onChildAdded( caf::PdmFieldHandle* containerForNewObject ) override;
protected: protected:
// Overridden methods // Overridden methods
@@ -543,7 +543,7 @@ void RimEclipseCase::updateFormationNamesData()
} }
RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection(); RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection();
for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters ) for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters() )
{ {
if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES ) if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES )
{ {
@@ -553,7 +553,7 @@ void RimEclipseCase::updateFormationNamesData()
} }
RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection(); RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection();
for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters ) for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters() )
{ {
if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES ) if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES )
{ {
@@ -1836,7 +1836,7 @@ void RimEclipseView::calculateCompletionTypeAndRedrawIfRequired()
isDependingOnCompletionType = true; isDependingOnCompletionType = true;
} }
for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters ) for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters() )
{ {
if ( propFilter->isActive() && if ( propFilter->isActive() &&
propFilter->resultDefinition()->resultVariable() == RiaResultNames::completionTypeResultName() ) propFilter->resultDefinition()->resultVariable() == RiaResultNames::completionTypeResultName() )
@@ -1859,7 +1859,7 @@ void RimEclipseView::calculateCompletionTypeAndRedrawIfRequired()
} }
} }
for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters ) for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters() )
{ {
if ( propFilter->isActive() && if ( propFilter->isActive() &&
propFilter->resultDefinition()->resultVariable() == RiaResultNames::completionTypeResultName() ) propFilter->resultDefinition()->resultVariable() == RiaResultNames::completionTypeResultName() )
@@ -78,13 +78,11 @@ RimViewController::RimViewController()
CAF_PDM_InitField( &m_syncCellResult, "SyncCellResult", false, "Cell Result" ); CAF_PDM_InitField( &m_syncCellResult, "SyncCellResult", false, "Cell Result" );
CAF_PDM_InitField( &m_syncLegendDefinitions, "SyncLegendDefinitions", true, " Color Legend" ); CAF_PDM_InitField( &m_syncLegendDefinitions, "SyncLegendDefinitions", true, " Color Legend" );
CAF_PDM_InitField( &m_syncVisibleCells, "SyncVisibleCells", false, "Visible Cells" );
/// We do not support this. Consider to remove sometime
m_syncVisibleCells.uiCapability()->setUiHidden( true );
m_syncVisibleCells.xmlCapability()->disableIO();
CAF_PDM_InitField( &m_syncCellFilters, "SyncRangeFilters", false, "Cell Filters" ); CAF_PDM_InitField( &m_syncCellFilters, "SyncRangeFilters", false, "Cell Filters" );
CAF_PDM_InitField( &m_syncPropertyFilters, "SyncPropertyFilters", false, "Property Filters" ); CAF_PDM_InitField( &m_syncPropertyFilters, "SyncPropertyFilters", false, "Property Filters" );
m_syncPropertyFilters.uiCapability()->setUiHidden( true );
CAF_PDM_InitField( &m_duplicatePropertyFilters, "DuplicatePropertyFilters", false, "Property Filters" );
setDeletable( true ); setDeletable( true );
} }
@@ -165,6 +163,7 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
} }
updateOverrides(); updateOverrides();
updateDuplicatedPropertyFilters();
updateResultColorsControl(); updateResultColorsControl();
updateCameraLink(); updateCameraLink();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
@@ -215,6 +214,10 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
{ {
updateOverrides(); updateOverrides();
} }
else if ( changedField == &m_duplicatePropertyFilters )
{
updateDuplicatedPropertyFilters();
}
else if ( changedField == &m_managedView ) else if ( changedField == &m_managedView )
{ {
PdmObjectHandle* prevValue = oldValue.value<caf::PdmPointer<PdmObjectHandle>>().rawPtr(); PdmObjectHandle* prevValue = oldValue.value<caf::PdmPointer<PdmObjectHandle>>().rawPtr();
@@ -225,11 +228,6 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
m_name.uiCapability()->updateConnectedEditors(); m_name.uiCapability()->updateConnectedEditors();
} }
else if ( &m_syncVisibleCells == changedField )
{
updateOptionSensitivity();
updateOverrides();
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -432,8 +430,6 @@ void RimViewController::updateOptionSensitivity()
this->m_showCursor.uiCapability()->setUiReadOnly( true ); this->m_showCursor.uiCapability()->setUiReadOnly( true );
this->m_showCursor = false; this->m_showCursor = false;
} }
m_syncVisibleCells.uiCapability()->setUiReadOnly( !this->isMasterAndDepViewDifferentType() );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -453,6 +449,7 @@ void RimViewController::setManagedView( Rim3dView* view )
updateOptionSensitivity(); updateOptionSensitivity();
updateOverrides(); updateOverrides();
updateDuplicatedPropertyFilters();
updateResultColorsControl(); updateResultColorsControl();
updateCameraLink(); updateCameraLink();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
@@ -481,9 +478,9 @@ void RimViewController::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi
scriptGroup->add( &m_syncLegendDefinitions ); scriptGroup->add( &m_syncLegendDefinitions );
caf::PdmUiGroup* visibleCells = uiOrdering.addNewGroup( "Link Cell Filters" ); caf::PdmUiGroup* visibleCells = uiOrdering.addNewGroup( "Link Cell Filters" );
visibleCells->add( &m_syncVisibleCells );
visibleCells->add( &m_syncCellFilters ); visibleCells->add( &m_syncCellFilters );
visibleCells->add( &m_syncPropertyFilters ); visibleCells->add( &m_syncPropertyFilters );
visibleCells->add( &m_duplicatePropertyFilters );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -497,6 +494,46 @@ void RimViewController::updateDisplayNameAndIcon()
setUiIcon( iconProvider ); setUiIcon( iconProvider );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::updateDuplicatedPropertyFilters()
{
if ( !m_duplicatePropertyFilters ) return;
RimViewLinker* viewLinker = ownerViewLinker();
auto masterView = viewLinker->masterView();
CVF_ASSERT( masterView );
if ( m_managedView )
{
RimEclipseView* manEclView = managedEclipseView();
auto* masterEclipseView = dynamic_cast<RimEclipseView*>( masterView );
if ( masterEclipseView && manEclView )
{
auto propertyString = masterEclipseView->eclipsePropertyFilterCollection()->writeObjectToXmlString();
manEclView->eclipsePropertyFilterCollection()->readObjectFromXmlString( propertyString,
caf::PdmDefaultObjectFactory::instance() );
manEclView->eclipsePropertyFilterCollection()->loadAndInitializePropertyFilters();
manEclView->eclipsePropertyFilterCollection()->setIsDuplicatedFromLinkedView();
manEclView->eclipsePropertyFilterCollection()->updateAllRequiredEditors();
}
auto* masterGeoView = dynamic_cast<RimGeoMechView*>( masterView );
RimGeoMechView* manGeoView = managedGeoView();
if ( masterGeoView && manGeoView )
{
auto propertyString = masterGeoView->geoMechPropertyFilterCollection()->writeObjectToXmlString();
manGeoView->geoMechPropertyFilterCollection()->readObjectFromXmlString( propertyString,
caf::PdmDefaultObjectFactory::instance() );
managedGeoView()->geoMechPropertyFilterCollection()->loadAndInitializePropertyFilters();
managedGeoView()->geoMechPropertyFilterCollection()->updateAllRequiredEditors();
}
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -781,16 +818,6 @@ bool RimViewController::isLegendDefinitionsControlled() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimViewController::isVisibleCellsOveridden() const bool RimViewController::isVisibleCellsOveridden() const
{ {
if ( isMasterAndDepViewDifferentType() )
{
if ( ownerViewLinker()->isActive() && this->m_isActive() )
{
return m_syncVisibleCells();
}
return false;
}
return false; return false;
} }
@@ -891,7 +918,7 @@ bool RimViewController::isPropertyFilterControlPossible() const
{ {
RimEclipseView* depEclipseView = managedEclipseView(); RimEclipseView* depEclipseView = managedEclipseView();
if ( depEclipseView && eclipseView->eclipseCase() && depEclipseView->eclipseCase() && if ( depEclipseView && eclipseView->eclipseCase() && depEclipseView->eclipseCase() &&
eclipseView->eclipseCase()->isGridSizeEqualTo( depEclipseView->eclipseCase() ) ) eclipseView->eclipseCase() == depEclipseView->eclipseCase() )
{ {
return true; return true;
} }
@@ -915,6 +942,14 @@ bool RimViewController::isPropertyFilterOveridden() const
return false; return false;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimViewController::isPropertyFilterDuplicationActive() const
{
return m_duplicatePropertyFilters;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -1043,6 +1078,7 @@ void RimViewController::updateCellFilterOverrides( const RimCellFilter* changedF
void RimViewController::updatePropertyFilterOverrides( RimPropertyFilter* changedPropertyFilter ) void RimViewController::updatePropertyFilterOverrides( RimPropertyFilter* changedPropertyFilter )
{ {
updateOverrides(); updateOverrides();
updateDuplicatedPropertyFilters();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -69,6 +69,7 @@ public:
bool isVisibleCellsOveridden() const; bool isVisibleCellsOveridden() const;
bool isPropertyFilterOveridden() const; bool isPropertyFilterOveridden() const;
bool isPropertyFilterDuplicationActive() const;
void scheduleCreateDisplayModelAndRedrawForDependentView() const; void scheduleCreateDisplayModelAndRedrawForDependentView() const;
void scheduleGeometryRegenForDepViews( RivCellSetEnum geometryType ) const; void scheduleGeometryRegenForDepViews( RivCellSetEnum geometryType ) const;
@@ -76,6 +77,7 @@ public:
void updateOptionSensitivity(); void updateOptionSensitivity();
void removeOverrides(); void removeOverrides();
void updateDisplayNameAndIcon(); void updateDisplayNameAndIcon();
void updateDuplicatedPropertyFilters();
void updateCellFilterOverrides( const RimCellFilter* changedFilter ); void updateCellFilterOverrides( const RimCellFilter* changedFilter );
void applyCellFilterCollectionByUserChoice(); void applyCellFilterCollectionByUserChoice();
@@ -118,13 +120,12 @@ private:
caf::PdmField<bool> m_showCursor; caf::PdmField<bool> m_showCursor;
caf::PdmField<bool> m_syncTimeStep; caf::PdmField<bool> m_syncTimeStep;
// Overridden properties
caf::PdmField<bool> m_syncCellResult; caf::PdmField<bool> m_syncCellResult;
caf::PdmField<bool> m_syncLegendDefinitions; caf::PdmField<bool> m_syncLegendDefinitions;
caf::PdmField<bool> m_syncCellFilters; caf::PdmField<bool> m_syncCellFilters;
caf::PdmField<bool> m_syncVisibleCells;
caf::PdmField<bool> m_syncPropertyFilters; caf::PdmField<bool> m_syncPropertyFilters;
caf::PdmField<bool> m_duplicatePropertyFilters;
cvf::ref<RigCaseToCaseCellMapper> m_caseToCaseCellMapper; cvf::ref<RigCaseToCaseCellMapper> m_caseToCaseCellMapper;
}; };
@@ -112,13 +112,14 @@ void RimViewLinker::updateTimeStep( Rim3dView* sourceView, int timeStep )
m_masterView->viewer()->setCurrentFrame( timeStep ); m_masterView->viewer()->setCurrentFrame( timeStep );
} }
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( !viewLink->isTimeStepLinked() ) continue; if ( !viewController->isTimeStepLinked() ) continue;
if ( viewLink->managedView() && viewLink->managedView() != sourceView && viewLink->managedView()->viewer() ) if ( viewController->managedView() && viewController->managedView() != sourceView &&
viewController->managedView()->viewer() )
{ {
viewLink->managedView()->viewer()->setCurrentFrame( timeStep ); viewController->managedView()->viewer()->setCurrentFrame( timeStep );
} }
} }
} }
@@ -134,20 +135,20 @@ void RimViewLinker::updateCellResult()
{ {
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult(); RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( viewLink->managedView() ) if ( viewController->managedView() )
{ {
Rim3dView* managedView = viewLink->managedView(); Rim3dView* managedView = viewController->managedView();
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>( managedView ); RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>( managedView );
if ( eclipseView ) if ( eclipseView )
{ {
if ( viewLink->isResultColorControlled() ) if ( viewController->isResultColorControlled() )
{ {
eclipseView->cellResult()->simpleCopy( eclipseCellResultDefinition ); eclipseView->cellResult()->simpleCopy( eclipseCellResultDefinition );
eclipseView->cellResult()->loadResult(); eclipseView->cellResult()->loadResult();
if ( viewLink->isLegendDefinitionsControlled() ) if ( viewController->isLegendDefinitionsControlled() )
{ {
eclipseView->cellResult()->legendConfig()->setUiValuesFromLegendConfig( eclipseView->cellResult()->legendConfig()->setUiValuesFromLegendConfig(
masterEclipseView->cellResult()->legendConfig() ); masterEclipseView->cellResult()->legendConfig() );
@@ -172,19 +173,19 @@ void RimViewLinker::updateCellResult()
{ {
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult(); RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( viewLink->managedView() ) if ( viewController->managedView() )
{ {
Rim3dView* managedView = viewLink->managedView(); Rim3dView* managedView = viewController->managedView();
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>( managedView ); RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>( managedView );
if ( geoView ) if ( geoView )
{ {
if ( viewLink->isResultColorControlled() ) if ( viewController->isResultColorControlled() )
{ {
geoView->cellResult()->setResultAddress( geoMechResultDefinition->resultAddress() ); geoView->cellResult()->setResultAddress( geoMechResultDefinition->resultAddress() );
if ( viewLink->isLegendDefinitionsControlled() ) if ( viewController->isLegendDefinitionsControlled() )
{ {
geoView->cellResult()->legendConfig()->setUiValuesFromLegendConfig( geoView->cellResult()->legendConfig()->setUiValuesFromLegendConfig(
masterGeoView->cellResult()->legendConfig() ); masterGeoView->cellResult()->legendConfig() );
@@ -207,9 +208,9 @@ void RimViewLinker::updateCellResult()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updateCellFilters( const RimCellFilter* changedFilter ) void RimViewLinker::updateCellFilters( const RimCellFilter* changedFilter )
{ {
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
viewLink->updateCellFilterOverrides( changedFilter ); viewController->updateCellFilterOverrides( changedFilter );
} }
} }
@@ -218,15 +219,15 @@ void RimViewLinker::updateCellFilters( const RimCellFilter* changedFilter )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updateOverrides() void RimViewLinker::updateOverrides()
{ {
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( viewLink->isActive() ) if ( viewController->isActive() )
{ {
viewLink->updateOverrides(); viewController->updateOverrides();
} }
else else
{ {
viewLink->removeOverrides(); viewController->removeOverrides();
} }
} }
} }
@@ -238,15 +239,26 @@ void RimViewLinker::updateWindowTitles()
{ {
if ( m_masterView ) m_masterView->updateMdiWindowTitle(); if ( m_masterView ) m_masterView->updateMdiWindowTitle();
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( auto view = viewLink->managedView() ) if ( auto view = viewController->managedView() )
{ {
view->updateMdiWindowTitle(); view->updateMdiWindowTitle();
} }
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::updateDuplicatedPropertyFilters()
{
for ( RimViewController* viewController : m_viewControllers )
{
viewController->updateDuplicatedPropertyFilters();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -271,11 +283,11 @@ void RimViewLinker::updateScaleWidgetVisibility()
if ( masterView() ) masterView()->scheduleCreateDisplayModelAndRedraw(); if ( masterView() ) masterView()->scheduleCreateDisplayModelAndRedraw();
for ( RimViewController* viewLink : m_viewControllers ) for ( RimViewController* viewController : m_viewControllers )
{ {
if ( viewLink->managedView() ) if ( viewController->managedView() )
{ {
viewLink->managedView()->scheduleCreateDisplayModelAndRedraw(); viewController->managedView()->scheduleCreateDisplayModelAndRedraw();
} }
} }
} }
@@ -312,6 +324,7 @@ void RimViewLinker::updateDependentViews()
if ( m_viewControllers.empty() ) return; if ( m_viewControllers.empty() ) return;
updateOverrides(); updateOverrides();
updateDuplicatedPropertyFilters();
updateCellResult(); updateCellResult();
updateScaleZ( m_masterView, m_masterView->scaleZ() ); updateScaleZ( m_masterView, m_masterView->scaleZ() );
updateCamera( m_masterView ); updateCamera( m_masterView );
@@ -68,6 +68,7 @@ public:
void updateOverrides(); void updateOverrides();
void updateWindowTitles(); void updateWindowTitles();
void updateDuplicatedPropertyFilters();
void updateCamera( Rim3dView* sourceView ); void updateCamera( Rim3dView* sourceView );
void updateTimeStep( Rim3dView* sourceView, int timeStep ); void updateTimeStep( Rim3dView* sourceView, int timeStep );