diff --git a/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp b/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp index 38ab515b89..c3597598ff 100644 --- a/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp +++ b/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp @@ -71,9 +71,10 @@ void RicSetMasterViewFeature::onActionTriggered(bool isChecked) RimView* previousMasterView = viewLinker->masterView(); viewLinker->setMasterView(activeView); + viewLinker->updateDependentViews(); + viewLinker->addDependentView(previousMasterView); - viewLinker->updateDependentViews(); proj->viewLinkerCollection.uiCapability()->updateConnectedEditors(); proj->updateConnectedEditors(); diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index 0afafb07f8..bc512c057b 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -105,7 +105,6 @@ RimView::RimView(void) windowGeometry.uiCapability()->setUiHidden(true); CAF_PDM_InitFieldNoDefault(&m_rangeFilterCollection, "RangeFilters", "Range Filters", "", "", ""); - m_rangeFilterCollection = new RimCellRangeFilterCollection(); m_rangeFilterCollection.uiCapability()->setUiHidden(true); CAF_PDM_InitFieldNoDefault(&m_overrideRangeFilterCollection, "RangeFiltersControlled", "Range Filters (controlled)", "", "", ""); @@ -566,6 +565,7 @@ RimCellRangeFilterCollection* RimView::rangeFilterCollection() { if (this->viewController() && this->viewController()->isRangeFiltersControlled()) { + CVF_ASSERT(m_overrideRangeFilterCollection()); return m_overrideRangeFilterCollection; } else @@ -581,6 +581,7 @@ const RimCellRangeFilterCollection* RimView::rangeFilterCollection() const { if (this->viewController() && this->viewController()->isRangeFiltersControlled()) { + CVF_ASSERT(m_overrideRangeFilterCollection()); return m_overrideRangeFilterCollection; } else @@ -594,6 +595,8 @@ const RimCellRangeFilterCollection* RimView::rangeFilterCollection() const //-------------------------------------------------------------------------------------------------- void RimView::setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc) { + if (m_overrideRangeFilterCollection()) delete m_overrideRangeFilterCollection(); + m_overrideRangeFilterCollection = rfc; this->scheduleGeometryRegen(RANGE_FILTERED); this->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); @@ -697,7 +700,7 @@ bool RimView::isMasterView() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimCellRangeFilterCollection* RimView::rangeFilterCollectionCopy() +RimCellRangeFilterCollection* RimView::overrideRangeFilterCollection() { return m_overrideRangeFilterCollection(); } diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index 6cc5e30779..be5d5c2edf 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -79,7 +79,8 @@ class RimView : public caf::PdmObject RimCellRangeFilterCollection* rangeFilterCollection(); const RimCellRangeFilterCollection* rangeFilterCollection() const; - RimCellRangeFilterCollection* rangeFilterCollectionCopy(); + RimCellRangeFilterCollection* overrideRangeFilterCollection(); + void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc); caf::PdmField< std::vector > windowGeometry; @@ -182,7 +183,6 @@ class RimView : public caf::PdmObject private: RimViewLinker* viewLinkerIfMasterView() const; - void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc); private: bool m_previousGridModeMeshLinesWasFaults; diff --git a/ApplicationCode/ProjectDataModel/RimViewController.cpp b/ApplicationCode/ProjectDataModel/RimViewController.cpp index 9739f49be5..7ec5e117bc 100644 --- a/ApplicationCode/ProjectDataModel/RimViewController.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewController.cpp @@ -147,11 +147,11 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField { if (changedField == &m_isActive) { - updateCameraLink(); - updateTimeStepLink(); - updateResultColorsControl(); updateOverrides(); + updateResultColorsControl(); + updateCameraLink(); updateDisplayNameAndIcon(); + updateTimeStepLink(); } else if (changedField == &m_syncCamera) { @@ -175,7 +175,7 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField } else if (changedField == &m_syncRangeFilters) { - updateRangeFiltersControl(); + updateOverrides(); } else if (changedField == &m_syncPropertyFilters) { @@ -203,9 +203,9 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField //-------------------------------------------------------------------------------------------------- void RimViewController::initAfterRead() { + updateOptionSensitivity(); updateOverrides(); updateDisplayNameAndIcon(); - updateOptionSensitivity(); } //-------------------------------------------------------------------------------------------------- @@ -286,6 +286,8 @@ void RimViewController::updateOverrides() } } } + + this->updateRangeFilterOverrides(NULL); if (manGeoView) { @@ -318,6 +320,8 @@ void RimViewController::removeOverrides(RimView* view) if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL); if (manGeoView) manGeoView->setOverridePropertyFilterCollection(NULL); + + view->setOverrideRangeFilterCollection(NULL); } } @@ -386,12 +390,13 @@ RimView* RimViewController::managedView() void RimViewController::setManagedView(RimView* view) { m_managedView = view; - updateCameraLink(); - updateTimeStepLink(); - updateResultColorsControl(); - updateOverrides(); + updateOptionSensitivity(); + updateOverrides(); + updateResultColorsControl(); + updateCameraLink(); updateDisplayNameAndIcon(); + updateTimeStepLink(); } //-------------------------------------------------------------------------------------------------- @@ -465,17 +470,6 @@ void RimViewController::updateResultColorsControl() viewLinker->updateCellResult(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewController::updateRangeFiltersControl() -{ - if (!this->isRangeFiltersControlled()) return; - - RimViewLinker* viewLinker = ownerViewLinker(); - viewLinker->updateRangeFilters(NULL); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -758,57 +752,24 @@ bool RimViewController::isPropertyFilterOveridden() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimViewController::updateRangeFilterCollectionOverride(RimView* sourceView, RimCellRangeFilter* changedRangeFilter) +void RimViewController::updateRangeFilterOverrides(RimCellRangeFilter* changedRangeFilter) { - RimCellRangeFilterCollection* filterCollectionCopy = managedView()->rangeFilterCollectionCopy(); - - if (!sourceView) + if (!isRangeFiltersControlled()) { - filterCollectionCopy->rangeFilters.deleteAllChildObjects(); - - managedView()->rangeFilterCollection()->uiCapability()->updateConnectedEditors(); + managedView()->setOverrideRangeFilterCollection(NULL); return; } - RimCellRangeFilterCollection* sourceFilterCollection = sourceView->rangeFilterCollection(); + RimCellRangeFilterCollection* sourceFilterCollection = masterView()->rangeFilterCollection(); + QString xmlRangeFilterCollCopy = sourceFilterCollection->writeObjectToXmlString(); - // TODO: Convert ijk values in source to correct ijk values in our range filter collection + PdmObjectHandle* objectCopy = PdmXmlObjectHandle::readUnknownObjectFromXmlString(xmlRangeFilterCollCopy, caf::PdmDefaultObjectFactory::instance()); - filterCollectionCopy->rangeFilters.deleteAllChildObjects(); - - // Filter copy if ijk-ranges are identical - for (size_t i = 0; i < sourceFilterCollection->rangeFilters.size(); i++) - { - RimCellRangeFilter* sourceFilter = sourceFilterCollection->rangeFilters[i]; - - RimCellRangeFilter* filter = new RimCellRangeFilter; - filter->startIndexI = sourceFilter->startIndexI; - filter->startIndexJ = sourceFilter->startIndexJ; - filter->startIndexK = sourceFilter->startIndexK; - - filter->cellCountI = sourceFilter->cellCountI; - filter->cellCountJ = sourceFilter->cellCountJ; - filter->cellCountK = sourceFilter->cellCountK; - - filterCollectionCopy->rangeFilters.push_back(filter); - } + RimCellRangeFilterCollection* overrideRangeFilter = dynamic_cast(objectCopy); + managedView()->setOverrideRangeFilterCollection(overrideRangeFilter); - managedView()->rangeFilterCollection()->uiCapability()->updateConnectedEditors(); -} + // TODO: Convert ijk values in source to correct ijk values in our range filter collection -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewController::updateRangeFilterOverrides(RimCellRangeFilter* changedRangeFilter) -{ - if (isRangeFiltersControlled()) - { - updateRangeFilterCollectionOverride(masterView(), changedRangeFilter); - } - else - { - updateRangeFilterCollectionOverride(NULL, NULL); - } } diff --git a/ApplicationCode/ProjectDataModel/RimViewController.h b/ApplicationCode/ProjectDataModel/RimViewController.h index 1ec5059819..f206b45b7c 100644 --- a/ApplicationCode/ProjectDataModel/RimViewController.h +++ b/ApplicationCode/ProjectDataModel/RimViewController.h @@ -90,14 +90,10 @@ class RimViewController : public caf::PdmObject void updateCameraLink(); void updateTimeStepLink(); void updateResultColorsControl(); - void updateRangeFiltersControl(); bool isMasterAndDepViewDifferentType(); bool isRangeFilterControlPossible(); - void updateRangeFilterCollectionOverride(RimView* sourceView, RimCellRangeFilter* changedRangeFilter); - - RimEclipseView* managedEclipseView(); RimGeoMechView* managedGeoView(); static void removeOverrides(RimView* view); diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp index 2b6df8a264..417871c61c 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp @@ -64,9 +64,9 @@ RimViewLinker::RimViewLinker(void) m_masterView.uiCapability()->setUiChildrenHidden(true); m_masterView.uiCapability()->setUiHidden(true); - CAF_PDM_InitFieldNoDefault(&viewLinks, "ManagedViews", "Managed Views", "", "", ""); - viewLinks.uiCapability()->setUiHidden(true); - viewLinks.uiCapability()->setUiChildrenHidden(true); + CAF_PDM_InitFieldNoDefault(&m_viewControllers, "ManagedViews", "Managed Views", "", "", ""); + m_viewControllers.uiCapability()->setUiHidden(true); + m_viewControllers.uiCapability()->setUiChildrenHidden(true); } //-------------------------------------------------------------------------------------------------- @@ -76,7 +76,7 @@ RimViewLinker::~RimViewLinker(void) { removeOverrides(); - viewLinks.deleteAllChildObjects(); + m_viewControllers.deleteAllChildObjects(); } //-------------------------------------------------------------------------------------------------- @@ -105,9 +105,9 @@ void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep) m_masterView->viewer()->animationControl()->setCurrentFrameOnly(timeStep); } - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - RimViewController* viewLink = viewLinks[i]; + RimViewController* viewLink = m_viewControllers[i]; if (!viewLink->isTimeStepLinked()) continue; @@ -132,9 +132,9 @@ void RimViewLinker::updateCellResult() { RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult(); - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - RimViewController* viewLink = viewLinks[i]; + RimViewController* viewLink = m_viewControllers[i]; if (viewLink->managedView()) { @@ -161,9 +161,9 @@ void RimViewLinker::updateCellResult() { RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult(); - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - RimViewController* viewLink = viewLinks[i]; + RimViewController* viewLink = m_viewControllers[i]; if (viewLink->managedView()) { @@ -189,9 +189,9 @@ void RimViewLinker::updateCellResult() //-------------------------------------------------------------------------------------------------- void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter) { - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - RimViewController* viewLink = viewLinks[i]; + RimViewController* viewLink = m_viewControllers[i]; viewLink->updateRangeFilterOverrides(changedRangeFilter); } } @@ -201,9 +201,9 @@ void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter) //-------------------------------------------------------------------------------------------------- void RimViewLinker::updateOverrides() { - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - RimViewController* viewLink = viewLinks[i]; + RimViewController* viewLink = m_viewControllers[i]; if (viewLink->isActive()) { viewLink->updateOverrides(); @@ -220,11 +220,11 @@ void RimViewLinker::updateOverrides() //-------------------------------------------------------------------------------------------------- void RimViewLinker::removeOverrides() { - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - if (viewLinks[i]->managedView()) + if (m_viewControllers[i]->managedView()) { - viewLinks[i]->removeOverrides(); + m_viewControllers[i]->removeOverrides(); } } } @@ -241,13 +241,13 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector views.push_back(m_masterView()); } - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - if (viewLinks[i]->managedView() && source != viewLinks[i]->managedView()) + if (m_viewControllers[i]->managedView() && source != m_viewControllers[i]->managedView()) { - if (viewLinks[i]->isCameraLinked()) + if (m_viewControllers[i]->isCameraLinked()) { - views.push_back(viewLinks[i]->managedView()); + views.push_back(m_viewControllers[i]->managedView()); } } } @@ -259,13 +259,10 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector void RimViewLinker::updateDependentViews() { updateOverrides(); - updateRangeFilters(NULL); - updateCellResult(); - updateTimeStep(m_masterView, m_masterView->currentTimeStep()); - updateScaleZ(m_masterView, m_masterView->scaleZ()); updateCamera(m_masterView); + updateTimeStep(m_masterView, m_masterView->currentTimeStep()); } //-------------------------------------------------------------------------------------------------- @@ -297,7 +294,7 @@ void RimViewLinker::setMasterView(RimView* view) if (previousViewController) { delete previousViewController; - this->viewLinks.removeChildObject(NULL); + this->m_viewControllers.removeChildObject(NULL); } this->removeOverrides(); @@ -322,11 +319,11 @@ void RimViewLinker::allViews(std::vector& views) { views.push_back(m_masterView()); - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - if (viewLinks[i]->managedView()) + if (m_viewControllers[i]->managedView()) { - views.push_back(viewLinks[i]->managedView()); + views.push_back(m_viewControllers[i]->managedView()); } } } @@ -411,9 +408,9 @@ void RimViewLinker::updateUiNameAndIcon() //-------------------------------------------------------------------------------------------------- void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType) { - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - viewLinks[i]->scheduleGeometryRegenForDepViews(geometryType); + m_viewControllers[i]->scheduleGeometryRegenForDepViews(geometryType); } } @@ -422,9 +419,9 @@ void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType //-------------------------------------------------------------------------------------------------- void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews() { - for (size_t i = 0; i < viewLinks.size(); i++) + for (size_t i = 0; i < m_viewControllers.size(); i++) { - viewLinks[i]->scheduleCreateDisplayModelAndRedrawForDependentView(); + m_viewControllers[i]->scheduleCreateDisplayModelAndRedrawForDependentView(); } } @@ -598,10 +595,10 @@ void RimViewLinker::addDependentView(RimView* view) { CVF_ASSERT(view && view != m_masterView); - RimViewController* viewLink = new RimViewController; - this->viewLinks.push_back(viewLink); + RimViewController* viewContr = new RimViewController; + this->m_viewControllers.push_back(viewContr); - viewLink->setManagedView(view); + viewContr->setManagedView(view); } @@ -611,9 +608,9 @@ void RimViewLinker::addDependentView(RimView* view) //-------------------------------------------------------------------------------------------------- void RimViewLinker::addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering) { - for (size_t j = 0; j < viewLinks.size(); j++) + for (size_t j = 0; j < m_viewControllers.size(); j++) { - uiTreeOrdering.add(viewLinks()[j]); + uiTreeOrdering.add(m_viewControllers()[j]); } } diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.h b/ApplicationCode/ProjectDataModel/RimViewLinker.h index c080931bdb..a43f690cae 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.h +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.h @@ -93,7 +93,7 @@ class RimViewLinker : public caf::PdmObject static bool isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB); private: - caf::PdmChildArrayField viewLinks; + caf::PdmChildArrayField m_viewControllers; caf::PdmPtrField m_masterView; caf::PdmField m_name; QIcon m_originalIcon;