From 9995af07a15889c68cecfc7acdb2855976fba484 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 28 Nov 2022 14:34:26 +0100 Subject: [PATCH] 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 --- .../RicEclipsePropertyFilterFeatureImpl.cpp | 6 +- .../RicEclipsePropertyFilterInsertExec.cpp | 4 +- .../RicEclipsePropertyFilterNewExec.cpp | 2 +- .../CellFilters/RimEclipsePropertyFilter.cpp | 52 ++++++++++-- .../CellFilters/RimEclipsePropertyFilter.h | 6 ++ .../RimEclipsePropertyFilterCollection.cpp | 45 ++++++++-- .../RimEclipsePropertyFilterCollection.h | 10 ++- .../RimPropertyFilterCollection.cpp | 17 ++-- .../CellFilters/RimPropertyFilterCollection.h | 1 + .../ProjectDataModel/RimEclipseCase.cpp | 4 +- .../ProjectDataModel/RimEclipseView.cpp | 4 +- .../ProjectDataModel/RimViewController.cpp | 84 +++++++++++++------ .../ProjectDataModel/RimViewController.h | 5 +- .../ProjectDataModel/RimViewLinker.cpp | 63 ++++++++------ .../ProjectDataModel/RimViewLinker.h | 1 + 15 files changed, 216 insertions(+), 88 deletions(-) diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp index eb021bf7d3..e4ecc7b617 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp @@ -61,7 +61,7 @@ std::vector RicEclipsePropertyFilterFeature void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyFilterCollection* propertyFilterCollection ) { RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter(); - propertyFilterCollection->propertyFilters.push_back( propertyFilter ); + propertyFilterCollection->propertyFiltersField().push_back( propertyFilter ); setDefaults( propertyFilter ); propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); @@ -69,6 +69,8 @@ void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyF propertyFilterCollection->updateConnectedEditors(); Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter, false ); + + propertyFilterCollection->onChildAdded( nullptr ); } //-------------------------------------------------------------------------------------------------- @@ -78,7 +80,7 @@ void RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( RimEclipseProper size_t index ) { RimEclipsePropertyFilter* propertyFilter = new RimEclipsePropertyFilter(); - propertyFilterCollection->propertyFilters.insertAt( static_cast( index ), propertyFilter ); + propertyFilterCollection->propertyFiltersField().insertAt( static_cast( index ), propertyFilter ); setDefaults( propertyFilter ); propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterInsertExec.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterInsertExec.cpp index d6b5f6ff4f..b3b708d133 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterInsertExec.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterInsertExec.cpp @@ -59,8 +59,8 @@ void RicEclipsePropertyFilterInsertExec::redo() RimEclipsePropertyFilterCollection* propertyFilterCollection = nullptr; m_propertyFilter->firstAncestorOrThisOfTypeAsserted( propertyFilterCollection ); - size_t index = propertyFilterCollection->propertyFilters.indexOf( m_propertyFilter ); - CVF_ASSERT( index < propertyFilterCollection->propertyFilters.size() ); + size_t index = propertyFilterCollection->propertyFiltersField().indexOf( m_propertyFilter ); + CVF_ASSERT( index < propertyFilterCollection->propertyFilters().size() ); RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( propertyFilterCollection, index ); } diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewExec.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewExec.cpp index 9d74dfc81b..2e45cc47b6 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewExec.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewExec.cpp @@ -69,7 +69,7 @@ void RicEclipsePropertyFilterNewExec::redo() //-------------------------------------------------------------------------------------------------- void RicEclipsePropertyFilterNewExec::undo() { - m_propertyFilterCollection->propertyFilters.erase( m_propertyFilterCollection->propertyFilters.size() - 1 ); + m_propertyFilterCollection->propertyFiltersField().erase( m_propertyFilterCollection->propertyFilters().size() - 1 ); m_propertyFilterCollection->updateConnectedEditors(); } diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp index 172d9e1949..d4f9999339 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp @@ -40,6 +40,7 @@ #include "RiuMainWindow.h" #include "cafPdmUiDoubleSliderEditor.h" +#include "cafPdmUiTreeAttributes.h" #include "cvfAssert.h" @@ -76,6 +77,9 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter() CAF_PDM_InitField( &m_useCategorySelection, "CategorySelection", false, "Category Selection" ); m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); + CAF_PDM_InitField( &m_isDuplicatedFromLinkedView, "IsDuplicatedFromLinkedView", false, "Duplicated" ); + m_isDuplicatedFromLinkedView.uiCapability()->setUiHidden( true ); + // HEADLESS HACK if ( RiaGuiApplication::isRunning() ) { @@ -124,6 +128,14 @@ bool RimEclipsePropertyFilter::isCategorySelectionActive() const 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& newValue ) { - // clang-format off - if ( &m_lowerBound == changedField - || &m_upperBound == changedField - || &m_isActive == changedField - || &m_filterMode == changedField - || &m_selectedCategoryValues == changedField - || &m_useCategorySelection == changedField) + if ( &m_lowerBound == changedField || &m_upperBound == changedField || &m_isActive == changedField || + &m_filterMode == changedField || &m_selectedCategoryValues == changedField || + &m_useCategorySelection == changedField ) { + m_isDuplicatedFromLinkedView = false; + this->m_resultDefinition->loadResult(); this->computeResultValueRange(); updateFilterName(); this->updateIconState(); 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( 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 ) ); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h index 874ea880d9..8a535ae728 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h @@ -44,6 +44,8 @@ public: void rangeValues( double* lower, double* upper ) const; bool isCategorySelectionActive() const; + void setIsDuplicatedFromLinkedView( bool isControlled ); + void setToDefaultValues(); void updateFilterName(); void computeResultValueRange(); @@ -62,6 +64,9 @@ private: QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; +private: + void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; + private: friend class RimEclipsePropertyFilterCollection; friend class RicEclipsePropertyFilterFeatureImpl; @@ -79,6 +84,7 @@ private: caf::PdmField m_rangeLabelText; caf::PdmField m_lowerBound; caf::PdmField m_upperBound; + caf::PdmField m_isDuplicatedFromLinkedView; caf::PdmField m_useCategorySelection; diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.cpp index 857c378294..7eff5932f8 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.cpp @@ -38,8 +38,8 @@ RimEclipsePropertyFilterCollection::RimEclipsePropertyFilterCollection() { CAF_PDM_InitObject( "Property Filters", ":/CellFilter_Values.png" ); - CAF_PDM_InitFieldNoDefault( &propertyFilters, "PropertyFilters", "Property Filters" ); - propertyFilters.uiCapability()->setUiTreeHidden( true ); + CAF_PDM_InitFieldNoDefault( &m_propertyFilters, "PropertyFilters", "Property Filters" ); + m_propertyFilters.uiCapability()->setUiTreeHidden( true ); } //-------------------------------------------------------------------------------------------------- @@ -47,7 +47,7 @@ RimEclipsePropertyFilterCollection::RimEclipsePropertyFilterCollection() //-------------------------------------------------------------------------------------------------- RimEclipsePropertyFilterCollection::~RimEclipsePropertyFilterCollection() { - propertyFilters.deleteChildren(); + m_propertyFilters.deleteChildren(); } //-------------------------------------------------------------------------------------------------- @@ -61,12 +61,39 @@ RimEclipseView* RimEclipsePropertyFilterCollection::reservoirView() return eclipseView; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilterCollection::setIsDuplicatedFromLinkedView() +{ + for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters ) + { + propertyFilter->setIsDuplicatedFromLinkedView( true ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimEclipsePropertyFilterCollection::propertyFilters() const +{ + return m_propertyFilters.children(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmChildArrayField& RimEclipsePropertyFilterCollection::propertyFiltersField() +{ + return m_propertyFilters; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimEclipsePropertyFilterCollection::loadAndInitializePropertyFilters() { - for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) + for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters ) { propertyFilter->resultDefinition()->setEclipseCase( reservoirView()->eclipseCase() ); propertyFilter->initAfterRead(); @@ -93,7 +120,7 @@ bool RimEclipsePropertyFilterCollection::hasActiveFilters() const { if ( !isActive ) return false; - for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) + for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters ) { if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasResult() ) return true; } @@ -108,7 +135,7 @@ bool RimEclipsePropertyFilterCollection::hasActiveDynamicFilters() const { if ( !isActive ) return false; - for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) + for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters ) { if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->hasDynamicResult() ) return true; } @@ -123,7 +150,7 @@ bool RimEclipsePropertyFilterCollection::isUsingFormationNames() const { if ( !isActive ) return false; - for ( RimEclipsePropertyFilter* propertyFilter : propertyFilters ) + for ( RimEclipsePropertyFilter* propertyFilter : m_propertyFilters ) { if ( propertyFilter->isActive() && propertyFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES && @@ -159,7 +186,7 @@ void RimEclipsePropertyFilterCollection::updateIconState() updateUiIconFromState( activeIcon ); - for ( RimEclipsePropertyFilter* cellFilter : propertyFilters ) + for ( RimEclipsePropertyFilter* cellFilter : m_propertyFilters ) { cellFilter->updateActiveState(); cellFilter->updateIconState(); @@ -171,7 +198,7 @@ void RimEclipsePropertyFilterCollection::updateIconState() //-------------------------------------------------------------------------------------------------- void RimEclipsePropertyFilterCollection::updateFromCurrentTimeStep() { - for ( RimEclipsePropertyFilter* cellFilter : propertyFilters() ) + for ( RimEclipsePropertyFilter* cellFilter : m_propertyFilters() ) { cellFilter->updateFromCurrentTimeStep(); } diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.h index ae1b445007..00035095b8 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilterCollection.h @@ -40,11 +40,11 @@ public: ~RimEclipsePropertyFilterCollection() override; RimEclipseView* reservoirView(); + void setIsDuplicatedFromLinkedView(); - // Fields: - caf::PdmChildArrayField propertyFilters; + std::vector propertyFilters() const; + caf::PdmChildArrayField& propertyFiltersField(); - // Methods bool hasActiveFilters() const override; bool hasActiveDynamicFilters() const override; bool isUsingFormationNames() const; @@ -55,6 +55,8 @@ public: void updateFromCurrentTimeStep(); protected: - // Overridden methods void initAfterRead() override; + +private: + caf::PdmChildArrayField m_propertyFilters; }; diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.cpp index 4dd78b44c4..5417e122f2 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.cpp @@ -66,16 +66,21 @@ void RimPropertyFilterCollection::updateDisplayModelNotifyManagedViews( RimPrope view->scheduleCreateDisplayModelAndRedraw(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- void RimPropertyFilterCollection::onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, std::vector& referringObjects ) { - Rim3dView* view = nullptr; - this->firstAncestorOrThisOfType( view ); - CVF_ASSERT( view ); - if ( !view ) return; + updateDisplayModelNotifyManagedViews( nullptr ); +} - view->scheduleGeometryRegen( PROPERTY_FILTERED ); - view->scheduleCreateDisplayModelAndRedraw(); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPropertyFilterCollection::onChildAdded( caf::PdmFieldHandle* containerForNewObject ) +{ + updateDisplayModelNotifyManagedViews( nullptr ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.h index 849f6121d2..6984d6e079 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimPropertyFilterCollection.h @@ -48,6 +48,7 @@ public: virtual void updateIconState() = 0; void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, std::vector& referringObjects ) override; + void onChildAdded( caf::PdmFieldHandle* containerForNewObject ) override; protected: // Overridden methods diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp index 9ce9aeff4b..45e35ba716 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp @@ -543,7 +543,7 @@ void RimEclipseCase::updateFormationNamesData() } RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection(); - for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters ) + for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters() ) { if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES ) { @@ -553,7 +553,7 @@ void RimEclipseCase::updateFormationNamesData() } RimEclipsePropertyFilterCollection* eclFilColl = eclView->eclipsePropertyFilterCollection(); - for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters ) + for ( RimEclipsePropertyFilter* propFilter : eclFilColl->propertyFilters() ) { if ( propFilter->resultDefinition()->resultType() == RiaDefines::ResultCatType::FORMATION_NAMES ) { diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp index 7ccf1e5e5d..6b2bf24e78 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp @@ -1836,7 +1836,7 @@ void RimEclipseView::calculateCompletionTypeAndRedrawIfRequired() isDependingOnCompletionType = true; } - for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters ) + for ( const auto& propFilter : m_propertyFilterCollection()->propertyFilters() ) { if ( propFilter->isActive() && 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() && propFilter->resultDefinition()->resultVariable() == RiaResultNames::completionTypeResultName() ) diff --git a/ApplicationLibCode/ProjectDataModel/RimViewController.cpp b/ApplicationLibCode/ProjectDataModel/RimViewController.cpp index 86891bb3dd..6b8da7f0ae 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewController.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimViewController.cpp @@ -78,13 +78,11 @@ RimViewController::RimViewController() CAF_PDM_InitField( &m_syncCellResult, "SyncCellResult", false, "Cell Result" ); 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_syncPropertyFilters, "SyncPropertyFilters", false, "Property Filters" ); + m_syncPropertyFilters.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitField( &m_duplicatePropertyFilters, "DuplicatePropertyFilters", false, "Property Filters" ); setDeletable( true ); } @@ -165,6 +163,7 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel } updateOverrides(); + updateDuplicatedPropertyFilters(); updateResultColorsControl(); updateCameraLink(); updateDisplayNameAndIcon(); @@ -215,6 +214,10 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel { updateOverrides(); } + else if ( changedField == &m_duplicatePropertyFilters ) + { + updateDuplicatedPropertyFilters(); + } else if ( changedField == &m_managedView ) { PdmObjectHandle* prevValue = oldValue.value>().rawPtr(); @@ -225,11 +228,6 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel 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 = false; } - - m_syncVisibleCells.uiCapability()->setUiReadOnly( !this->isMasterAndDepViewDifferentType() ); } //-------------------------------------------------------------------------------------------------- @@ -453,6 +449,7 @@ void RimViewController::setManagedView( Rim3dView* view ) updateOptionSensitivity(); updateOverrides(); + updateDuplicatedPropertyFilters(); updateResultColorsControl(); updateCameraLink(); updateDisplayNameAndIcon(); @@ -481,9 +478,9 @@ void RimViewController::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi scriptGroup->add( &m_syncLegendDefinitions ); caf::PdmUiGroup* visibleCells = uiOrdering.addNewGroup( "Link Cell Filters" ); - visibleCells->add( &m_syncVisibleCells ); visibleCells->add( &m_syncCellFilters ); visibleCells->add( &m_syncPropertyFilters ); + visibleCells->add( &m_duplicatePropertyFilters ); } //-------------------------------------------------------------------------------------------------- @@ -497,6 +494,46 @@ void RimViewController::updateDisplayNameAndIcon() 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( 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( 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 { - if ( isMasterAndDepViewDifferentType() ) - { - if ( ownerViewLinker()->isActive() && this->m_isActive() ) - { - return m_syncVisibleCells(); - } - - return false; - } - return false; } @@ -891,7 +918,7 @@ bool RimViewController::isPropertyFilterControlPossible() const { RimEclipseView* depEclipseView = managedEclipseView(); if ( depEclipseView && eclipseView->eclipseCase() && depEclipseView->eclipseCase() && - eclipseView->eclipseCase()->isGridSizeEqualTo( depEclipseView->eclipseCase() ) ) + eclipseView->eclipseCase() == depEclipseView->eclipseCase() ) { return true; } @@ -915,6 +942,14 @@ bool RimViewController::isPropertyFilterOveridden() const return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimViewController::isPropertyFilterDuplicationActive() const +{ + return m_duplicatePropertyFilters; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1043,6 +1078,7 @@ void RimViewController::updateCellFilterOverrides( const RimCellFilter* changedF void RimViewController::updatePropertyFilterOverrides( RimPropertyFilter* changedPropertyFilter ) { updateOverrides(); + updateDuplicatedPropertyFilters(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimViewController.h b/ApplicationLibCode/ProjectDataModel/RimViewController.h index 64310d9966..40b8b625c1 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewController.h +++ b/ApplicationLibCode/ProjectDataModel/RimViewController.h @@ -69,6 +69,7 @@ public: bool isVisibleCellsOveridden() const; bool isPropertyFilterOveridden() const; + bool isPropertyFilterDuplicationActive() const; void scheduleCreateDisplayModelAndRedrawForDependentView() const; void scheduleGeometryRegenForDepViews( RivCellSetEnum geometryType ) const; @@ -76,6 +77,7 @@ public: void updateOptionSensitivity(); void removeOverrides(); void updateDisplayNameAndIcon(); + void updateDuplicatedPropertyFilters(); void updateCellFilterOverrides( const RimCellFilter* changedFilter ); void applyCellFilterCollectionByUserChoice(); @@ -118,13 +120,12 @@ private: caf::PdmField m_showCursor; caf::PdmField m_syncTimeStep; - // Overridden properties caf::PdmField m_syncCellResult; caf::PdmField m_syncLegendDefinitions; caf::PdmField m_syncCellFilters; - caf::PdmField m_syncVisibleCells; caf::PdmField m_syncPropertyFilters; + caf::PdmField m_duplicatePropertyFilters; cvf::ref m_caseToCaseCellMapper; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp index d7ec75a3ac..4682d1b018 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp @@ -112,13 +112,14 @@ void RimViewLinker::updateTimeStep( Rim3dView* sourceView, int 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(); - 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( managedView ); if ( eclipseView ) { - if ( viewLink->isResultColorControlled() ) + if ( viewController->isResultColorControlled() ) { eclipseView->cellResult()->simpleCopy( eclipseCellResultDefinition ); eclipseView->cellResult()->loadResult(); - if ( viewLink->isLegendDefinitionsControlled() ) + if ( viewController->isLegendDefinitionsControlled() ) { eclipseView->cellResult()->legendConfig()->setUiValuesFromLegendConfig( masterEclipseView->cellResult()->legendConfig() ); @@ -172,19 +173,19 @@ void RimViewLinker::updateCellResult() { 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( managedView ); if ( geoView ) { - if ( viewLink->isResultColorControlled() ) + if ( viewController->isResultColorControlled() ) { geoView->cellResult()->setResultAddress( geoMechResultDefinition->resultAddress() ); - if ( viewLink->isLegendDefinitionsControlled() ) + if ( viewController->isLegendDefinitionsControlled() ) { geoView->cellResult()->legendConfig()->setUiValuesFromLegendConfig( masterGeoView->cellResult()->legendConfig() ); @@ -207,9 +208,9 @@ void RimViewLinker::updateCellResult() //-------------------------------------------------------------------------------------------------- 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() { - for ( RimViewController* viewLink : m_viewControllers ) + for ( RimViewController* viewController : m_viewControllers ) { - if ( viewLink->isActive() ) + if ( viewController->isActive() ) { - viewLink->updateOverrides(); + viewController->updateOverrides(); } else { - viewLink->removeOverrides(); + viewController->removeOverrides(); } } } @@ -238,15 +239,26 @@ void RimViewLinker::updateWindowTitles() { 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(); } } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLinker::updateDuplicatedPropertyFilters() +{ + for ( RimViewController* viewController : m_viewControllers ) + { + viewController->updateDuplicatedPropertyFilters(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -271,11 +283,11 @@ void RimViewLinker::updateScaleWidgetVisibility() 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; updateOverrides(); + updateDuplicatedPropertyFilters(); updateCellResult(); updateScaleZ( m_masterView, m_masterView->scaleZ() ); updateCamera( m_masterView ); diff --git a/ApplicationLibCode/ProjectDataModel/RimViewLinker.h b/ApplicationLibCode/ProjectDataModel/RimViewLinker.h index 1e2a0e723a..d36d624734 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewLinker.h +++ b/ApplicationLibCode/ProjectDataModel/RimViewLinker.h @@ -68,6 +68,7 @@ public: void updateOverrides(); void updateWindowTitles(); + void updateDuplicatedPropertyFilters(); void updateCamera( Rim3dView* sourceView ); void updateTimeStep( Rim3dView* sourceView, int timeStep );