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 );