From c8944d880129299241befc35276069b8c0c4e477 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 23 Sep 2015 11:01:46 +0200 Subject: [PATCH] Refactored funtions used to find viewLinker and viewLink --- .../ViewLink/RicSetMasterViewFeature.cpp | 2 +- .../ProjectDataModel/RimEclipseView.cpp | 2 +- .../ProjectDataModel/RimGeoMechView.cpp | 2 +- .../ProjectDataModel/RimProject.cpp | 14 +- ApplicationCode/ProjectDataModel/RimView.cpp | 55 +----- ApplicationCode/ProjectDataModel/RimView.h | 1 - .../ProjectDataModel/RimViewLinker.cpp | 160 +++++++++--------- .../ProjectDataModel/RimViewLinker.h | 4 +- ApplicationCode/UserInterface/RiuViewer.cpp | 10 +- 9 files changed, 97 insertions(+), 153 deletions(-) diff --git a/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp b/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp index 3d376f8bdd..4ec5b35c15 100644 --- a/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp +++ b/ApplicationCode/Commands/ViewLink/RicSetMasterViewFeature.cpp @@ -70,7 +70,7 @@ void RicSetMasterViewFeature::onActionTriggered(bool isChecked) RimView* previousMasterView = viewLinker->mainView(); - RimViewLink* previousViewLink = viewLinker->viewLinkFromView(activeView); + RimViewLink* previousViewLink = RimViewLinker::viewLinkForView(activeView); if (previousViewLink) { size_t indexToErase = cvf::UNDEFINED_SIZE_T; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 77288d9736..f0907611ca 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -846,7 +846,7 @@ void RimEclipseView::scheduleGeometryRegen(RivCellSetEnum geometryType) { m_reservoirGridPartManager->scheduleGeometryRegen(geometryType); - RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this); if (viewLinker) { viewLinker->scheduleGeometryRegenForDepViews(geometryType); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 6cd9192946..2744c65282 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -512,7 +512,7 @@ void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType) { m_vizLogic->scheduleGeometryRegen(geometryType); - RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this); if (viewLinker) { viewLinker->scheduleGeometryRegenForDepViews(geometryType); diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index de60953b2c..00acfcb552 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -987,19 +987,7 @@ void RimProject::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QS //-------------------------------------------------------------------------------------------------- RimViewLinker* RimProject::findViewLinkerFromView(RimView* view) { - if (viewLinkerCollection()->viewLinker()) - { - RimViewLinker* group = viewLinkerCollection()->viewLinker(); - if (view == group->mainView()) return group; - - for (size_t j = 0; j < group->viewLinks.size(); j++) - { - RimViewLink* viewConfig = group->viewLinks[j]; - if (viewConfig->managedView() == view) return group; - } - } - - return NULL; + return RimViewLinker::viewLinkerForMainOrControlledView(view); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index ea57abd627..c52c540ddd 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -191,7 +191,7 @@ void RimView::updateViewerWidget() void RimView::scheduleCreateDisplayModelAndRedraw() { RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this); - RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this); if (viewLinker) { viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews(); @@ -448,16 +448,10 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV updateScaleTransform(); createDisplayModelAndRedraw(); - RimProject* proj = NULL; - this->firstAnchestorOrThisOfType(proj); - RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(this); if (viewLinker) { - RimViewLink* viewLink = viewLinker->viewLinkFromView(this); - if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera())) - { - viewLinker->updateScaleZ(this, scaleZ); - } + viewLinker->updateScaleZ(this, scaleZ); } m_viewer->navigationPolicyUpdate(); @@ -486,16 +480,10 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV { m_viewer->update(); - RimProject* proj = NULL; - this->firstAnchestorOrThisOfType(proj); - RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(this); if (viewLinker) { - RimViewLink* viewLink = viewLinker->viewLinkFromView(this); - if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep())) - { - viewLinker->updateTimeStep(this, m_currentTimeStep); - } + viewLinker->updateTimeStep(this, m_currentTimeStep); } } } @@ -600,7 +588,7 @@ void RimView::notifyCameraHasChanged() RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); if (viewLinker) { - RimViewLink* viewLink = viewLinker->viewLinkFromView(this); + RimViewLink* viewLink = viewLinker->viewLinkForView(this); if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera())) { @@ -726,42 +714,13 @@ bool RimView::isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB return false; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimViewLinker* RimView::viewLinkerWithMyDepViews() -{ - RimViewLinker* viewLinker = NULL; - std::vector reffingObjs; - - this->objectsWithReferringPtrFields(reffingObjs); - - for (size_t i = 0; i < reffingObjs.size(); ++i) - { - viewLinker = dynamic_cast(reffingObjs[i]); - if (viewLinker ) break; - } - - return viewLinker; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimViewLink* RimView::controllingViewLink() const { - RimViewLink* viewLink = NULL; - std::vector reffingObjs; - - this->objectsWithReferringPtrFields(reffingObjs); - for (size_t i = 0; i < reffingObjs.size(); ++i) - { - viewLink = dynamic_cast(reffingObjs[i]); - if (viewLink) break; - } - - return viewLink; + return RimViewLinker::viewLinkForView(this); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index da0b41ec40..55d8f57230 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -138,7 +138,6 @@ public: virtual caf::PdmFieldHandle* userDescriptionField() { return &name; } protected: - RimViewLinker* viewLinkerWithMyDepViews(); void setDefaultView(); void addWellPathsToModel(cvf::ModelBasicList* wellPathModelBasicList, diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp index 25ef895d5e..142e773171 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp @@ -80,12 +80,19 @@ RimViewLinker::~RimViewLinker(void) //-------------------------------------------------------------------------------------------------- void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep) { + CVF_ASSERT(sourceView); + if (!isActive()) return; - RimViewLink* sourceLinkedView = viewLinkFromView(sourceView); - if (sourceLinkedView && !sourceLinkedView->syncTimeStep()) + if (mainView() != sourceView) { - return; + RimViewLink* sourceViewLink = viewLinkForView(sourceView); + CVF_ASSERT(sourceViewLink); + + if (!sourceViewLink->isActive() || !sourceViewLink->syncTimeStep()) + { + return; + } } if (m_mainView && m_mainView->viewer() && sourceView != m_mainView) @@ -182,37 +189,6 @@ void RimViewLinker::updateRangeFilters() this->scheduleGeometryRegenForDepViews(RANGE_FILTERED); this->scheduleGeometryRegenForDepViews(RANGE_FILTERED_INACTIVE); this->scheduleCreateDisplayModelAndRedrawForDependentViews(); - - #if 0 - for (size_t i = 0; i < viewLinks.size(); i++) - { - RimViewLink* managedViewConfig = viewLinks[i]; - if (managedViewConfig->managedView()) - { - if (managedViewConfig->syncRangeFilters()) - { - RimView* rimView = managedViewConfig->managedView(); - RimEclipseView* eclipeView = dynamic_cast(rimView); - if (eclipeView) - { - eclipeView->scheduleGeometryRegen(RANGE_FILTERED); - eclipeView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - eclipeView->scheduleCreateDisplayModelAndRedraw(); - } - - RimGeoMechView* geoView = dynamic_cast(rimView); - if (geoView) - { - geoView->scheduleGeometryRegen(RANGE_FILTERED); - geoView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); - - geoView->scheduleCreateDisplayModelAndRedraw(); - } - } - } - } - #endif } //-------------------------------------------------------------------------------------------------- @@ -223,35 +199,6 @@ void RimViewLinker::updatePropertyFilters() if (!isActive()) return; this->scheduleGeometryRegenForDepViews(PROPERTY_FILTERED); this->scheduleCreateDisplayModelAndRedrawForDependentViews(); - -#if 0 - for (size_t i = 0; i < viewLinks.size(); i++) - { - RimViewLink* managedViewConfig = viewLinks[i]; - if (managedViewConfig->managedView()) - { - if (managedViewConfig->syncPropertyFilters()) - { - RimView* rimView = managedViewConfig->managedView(); - RimEclipseView* eclipeView = dynamic_cast(rimView); - if (eclipeView) - { - eclipeView->scheduleGeometryRegen(PROPERTY_FILTERED); - - eclipeView->scheduleCreateDisplayModelAndRedraw(); - } - - RimGeoMechView* geoView = dynamic_cast(rimView); - if (geoView) - { - geoView->scheduleGeometryRegen(PROPERTY_FILTERED); - - geoView->scheduleCreateDisplayModelAndRedraw(); - } - } - } - } -#endif } //-------------------------------------------------------------------------------------------------- @@ -302,7 +249,7 @@ void RimViewLinker::applyAllOperations() configureOverrides(); updateCellResult(); - updateTimeStep(NULL, m_mainView->currentTimeStep()); + updateTimeStep(m_mainView, m_mainView->currentTimeStep()); updateRangeFilters(); updatePropertyFilters(); updateScaleZ(m_mainView, m_mainView->scaleZ()); @@ -328,19 +275,6 @@ QString RimViewLinker::displayNameForView(RimView* view) return displayName; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimViewLink* RimViewLinker::viewLinkFromView(RimView* view) -{ - for (size_t i = 0; i < viewLinks.size(); i++) - { - if (viewLinks[i]->managedView() == view) return viewLinks[i]; - } - - return NULL; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -388,10 +322,23 @@ void RimViewLinker::initAfterRead() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimViewLinker::updateScaleZ(RimView* source, double scaleZ) +void RimViewLinker::updateScaleZ(RimView* sourceView, double scaleZ) { + if (!isActive()) return; + + if (mainView() != sourceView) + { + RimViewLink* sourceViewLink = viewLinkForView(sourceView); + CVF_ASSERT(sourceViewLink); + + if (!sourceViewLink->isActive() || !sourceViewLink->syncCamera()) + { + return; + } + } + std::vector views; - allViewsForCameraSync(source, views); + allViewsForCameraSync(sourceView, views); // Make sure scale factors are identical for (size_t i = 0; i < views.size(); i++) @@ -540,3 +487,58 @@ void RimViewLinker::findNameAndIconFromView(QString* name, QIcon* icon, RimView* } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimViewLink* RimViewLinker::viewLinkForView(const RimView* view) +{ + RimViewLink* viewLink = NULL; + std::vector reffingObjs; + + view->objectsWithReferringPtrFields(reffingObjs); + for (size_t i = 0; i < reffingObjs.size(); ++i) + { + viewLink = dynamic_cast(reffingObjs[i]); + if (viewLink) break; + } + + return viewLink; +} + +//-------------------------------------------------------------------------------------------------- +/// Return view linker if view is the main view (controlling) view +//-------------------------------------------------------------------------------------------------- +RimViewLinker* RimViewLinker::viewLinkerIfMainView(RimView* view) +{ + RimViewLinker* viewLinker = NULL; + std::vector reffingObjs; + + view->objectsWithReferringPtrFields(reffingObjs); + + for (size_t i = 0; i < reffingObjs.size(); ++i) + { + viewLinker = dynamic_cast(reffingObjs[i]); + if (viewLinker) break; + } + + return viewLinker; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimViewLinker* RimViewLinker::viewLinkerForMainOrControlledView(RimView* view) +{ + RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(view); + if (!viewLinker) + { + RimViewLink* viewLink = RimViewLinker::viewLinkForView(view); + if (viewLink) + { + viewLinker = viewLink->ownerViewLinker(); + } + } + + return viewLinker; +} + diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.h b/ApplicationCode/ProjectDataModel/RimViewLinker.h index e7bb767f69..8a913f9894 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.h +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.h @@ -74,7 +74,9 @@ public: public: static QString displayNameForView(RimView* view); - RimViewLink* viewLinkFromView(RimView* view); + static RimViewLink* viewLinkForView(const RimView* view); + static RimViewLinker* viewLinkerIfMainView(RimView* view); + static RimViewLinker* viewLinkerForMainOrControlledView(RimView* view); protected: virtual caf::PdmFieldHandle* userDescriptionField() { return &m_name; } diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index fc7095b69d..0ca0a466ed 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -260,16 +260,10 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex) if (m_reservoirView) { - RimProject* proj = NULL; - m_reservoirView->firstAnchestorOrThisOfType(proj); - RimViewLinker* viewLinker = proj->findViewLinkerFromView(m_reservoirView); + RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(m_reservoirView); if (viewLinker) { - RimViewLink* viewLink = viewLinker->viewLinkFromView(m_reservoirView); - if (m_reservoirView == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep())) - { - viewLinker->updateTimeStep(m_reservoirView, frameIndex); - } + viewLinker->updateTimeStep(m_reservoirView, frameIndex); } } }