From 08e266c2f360fe441f905f26c133a7066e820b38 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 15 Sep 2015 10:45:39 +0200 Subject: [PATCH] (#449) Minor fixes related to isActive --- .../Commands/RicLinkVisibleViewsFeature.cpp | 2 +- ApplicationCode/ProjectDataModel/RimView.cpp | 15 +- .../ProjectDataModel/RimViewLink.cpp | 129 ++++++++++-------- .../ProjectDataModel/RimViewLink.h | 8 +- .../ProjectDataModel/RimViewLinker.cpp | 2 + ApplicationCode/UserInterface/RiuViewer.cpp | 7 +- 6 files changed, 94 insertions(+), 69 deletions(-) diff --git a/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp b/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp index 4419a323ad..8042b6fe83 100644 --- a/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp +++ b/ApplicationCode/Commands/RicLinkVisibleViewsFeature.cpp @@ -94,7 +94,7 @@ void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked) viewLink->initAfterReadRecursively(); viewLink->updateOptionSensitivity(); - viewLink->updateUiIcon(); + viewLink->updateUiIconFromActiveState(); } proj->viewLinkerCollection()->viewLinkers().push_back(linkedViews); diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index c11be75300..366b94d56b 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -447,8 +447,8 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); if (viewLinker) { - RimViewLink* linkedView = viewLinker->viewLinkFromView(this); - if (!linkedView || linkedView->syncCamera()) + RimViewLink* viewLink = viewLinker->viewLinkFromView(this); + if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera())) { viewLinker->updateScaleZ(this, scaleZ); } @@ -485,7 +485,11 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); if (viewLinker) { - viewLinker->updateTimeStep(this, m_currentTimeStep); + RimViewLink* viewLink = viewLinker->viewLinkFromView(this); + if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep())) + { + viewLinker->updateTimeStep(this, m_currentTimeStep); + } } } } @@ -590,10 +594,9 @@ void RimView::notifyCameraHasChanged() RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); if (viewLinker) { - RimViewLink* linkedView = viewLinker->viewLinkFromView(this); + RimViewLink* viewLink = viewLinker->viewLinkFromView(this); - // There is no view config for a master view, but all views for sync must be updated - if (!linkedView || linkedView->syncCamera()) + if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera())) { viewLinker->allViewsForCameraSync(this, viewsToUpdate); } diff --git a/ApplicationCode/ProjectDataModel/RimViewLink.cpp b/ApplicationCode/ProjectDataModel/RimViewLink.cpp index d80b969504..7c6b625597 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLink.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLink.cpp @@ -30,6 +30,7 @@ #include "RimProject.h" #include "RimView.h" #include "RimViewLinker.h" +#include "RimViewLinkerCollection.h" #include "RiuViewer.h" @@ -42,7 +43,7 @@ CAF_PDM_SOURCE_INIT(RimViewLink, "RimViewLink"); //-------------------------------------------------------------------------------------------------- RimViewLink::RimViewLink(void) { - CAF_PDM_InitObject("View Config", "", "", ""); + CAF_PDM_InitObject("View Link", "", "", ""); CAF_PDM_InitField(&isActive, "Active", true, "Active", "", "", ""); isActive.uiCapability()->setUiHidden(true); @@ -56,9 +57,9 @@ RimViewLink::RimViewLink(void) CAF_PDM_InitField(&syncCamera, "SyncCamera", true, "Camera", "", "", ""); CAF_PDM_InitField(&syncTimeStep, "SyncTimeStep", true, "Time Step", "", "", ""); - CAF_PDM_InitField(&syncCellResult, "SyncCellResult", false, "Cell Result", "", "", ""); + CAF_PDM_InitField(&syncCellResult, "SyncCellResult", false, "Cell Result", "", "", ""); - CAF_PDM_InitField(&syncVisibleCells, "SyncVisibleCells", false, "Visible Cells", "", "", ""); + CAF_PDM_InitField(&syncVisibleCells, "SyncVisibleCells", false, "Visible Cells", "", "", ""); syncVisibleCells.uiCapability()->setUiHidden(true); // For now CAF_PDM_InitField(&syncRangeFilters, "SyncRangeFilters", true, "Range Filters", "", "", ""); @@ -138,46 +139,35 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons { if (changedField == &isActive) { - updateUiIcon(); + updateUiIconFromActiveState(); + if (syncCamera()) doSyncCamera(); + if (syncTimeStep()) doSyncTimeStep(); + if (syncCellResult()) doSyncCellResult(); configureOverrides(); } else if (changedField == &syncCamera && syncCamera()) { - RimViewLinker* linkedViews = NULL; - this->firstAnchestorOrThisOfType(linkedViews); - linkedViews->updateScaleZ(linkedViews->mainView(), linkedViews->mainView()->scaleZ()); - - if (m_managedView && m_managedView->viewer()) - { - m_managedView->viewer()->navigationPolicyUpdate(); - } + doSyncCamera(); } else if (changedField == &syncTimeStep && syncTimeStep()) { - if (m_managedView) - { - RimViewLinker* linkedViews = NULL; - this->firstAnchestorOrThisOfType(linkedViews); - linkedViews->updateTimeStep(m_managedView, m_managedView->currentTimeStep()); - } + doSyncTimeStep(); } else if (changedField == &syncCellResult && syncCellResult()) { - RimViewLinker* linkedViews = NULL; - this->firstAnchestorOrThisOfType(linkedViews); - linkedViews->updateCellResult(); + doSyncCellResult(); } else if (changedField == &syncRangeFilters) { - configureOverridesUpdateDisplayModel(); + configureOverrides(); } else if (changedField == &syncPropertyFilters) { - configureOverridesUpdateDisplayModel(); + configureOverrides(); } else if (changedField == &m_managedView) { - configureOverridesUpdateDisplayModel(); + configureOverrides(); if (m_managedView) { @@ -222,14 +212,14 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons updateOptionSensitivity(); updateDisplayNameAndIcon(); - updateUiIcon(); + updateUiIconFromActiveState(); name.uiCapability()->updateConnectedEditors(); } else if (&syncVisibleCells == changedField) { updateOptionSensitivity(); - configureOverridesUpdateDisplayModel(); + configureOverrides(); } } @@ -240,7 +230,7 @@ void RimViewLink::initAfterRead() { configureOverrides(); updateDisplayNameAndIcon(); - updateUiIcon(); + updateUiIconFromActiveState(); updateOptionSensitivity(); } @@ -264,40 +254,15 @@ RimGeoMechView* RimViewLink::managedGeoView() return dynamic_cast(rimView); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewLink::configureOverridesUpdateDisplayModel() -{ - configureOverrides(); - - // This update scheduling actually schedules update in the master view (not the managed view). Is that intentional ? JJS - /* - if (m_managedView) - { - m_managedView->rangeFilterCollection()->updateDisplayModeNotifyManagedViews(); - } - - RimEclipseView* eclipseView = managedEclipseView(); - if (eclipseView) - { - eclipseView->propertyFilterCollection()->updateDisplayModelNotifyManagedViews(); - } - - RimGeoMechView* geoView = managedGeoView(); - if (geoView) - { - geoView->propertyFilterCollection()->updateDisplayModelNotifyManagedViews(); - } - */ - // Todo : Notify the managed view of the possible change of visualCellsOverride -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimViewLink::configureOverrides() { + RimViewLinkerCollection* viewLinkerColl = NULL; + this->firstAnchestorOrThisOfType(viewLinkerColl); + if (!viewLinkerColl->isActive()) return; + RimViewLinker* viewLinker = NULL; this->firstAnchestorOrThisOfType(viewLinker); @@ -472,7 +437,7 @@ void RimViewLink::removeOverrides() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimViewLink::updateUiIcon() +void RimViewLink::updateUiIconFromActiveState() { RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive()); } @@ -485,3 +450,53 @@ void RimViewLink::updateDisplayNameAndIcon() RimViewLinker::findNameAndIconFromView(&name.v(), &m_originalIcon, managedView()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLink::doSyncCamera() +{ + RimViewLinkerCollection* viewLinkerColl = NULL; + this->firstAnchestorOrThisOfType(viewLinkerColl); + if (!viewLinkerColl->isActive()) return; + + RimViewLinker* viewLinker = NULL; + this->firstAnchestorOrThisOfType(viewLinker); + viewLinker->updateScaleZ(viewLinker->mainView(), viewLinker->mainView()->scaleZ()); + + if (m_managedView && m_managedView->viewer()) + { + m_managedView->viewer()->navigationPolicyUpdate(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLink::doSyncTimeStep() +{ + RimViewLinkerCollection* viewLinkerColl = NULL; + this->firstAnchestorOrThisOfType(viewLinkerColl); + if (!viewLinkerColl->isActive()) return; + + if (m_managedView) + { + RimViewLinker* linkedViews = NULL; + this->firstAnchestorOrThisOfType(linkedViews); + linkedViews->updateTimeStep(m_managedView, m_managedView->currentTimeStep()); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLink::doSyncCellResult() +{ + RimViewLinkerCollection* viewLinkerColl = NULL; + this->firstAnchestorOrThisOfType(viewLinkerColl); + if (!viewLinkerColl->isActive()) return; + + RimViewLinker* linkedViews = NULL; + this->firstAnchestorOrThisOfType(linkedViews); + linkedViews->updateCellResult(); +} + diff --git a/ApplicationCode/ProjectDataModel/RimViewLink.h b/ApplicationCode/ProjectDataModel/RimViewLink.h index cb7c465253..f5e3062322 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLink.h +++ b/ApplicationCode/ProjectDataModel/RimViewLink.h @@ -59,10 +59,9 @@ public: void updateOptionSensitivity(); void removeOverrides(); - void updateUiIcon(); + void updateUiIconFromActiveState(); void updateDisplayNameAndIcon(); - protected: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); @@ -72,9 +71,10 @@ protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); virtual caf::PdmFieldHandle* objectToggleField() { return &isActive; } - private: - void configureOverridesUpdateDisplayModel(); + void doSyncCamera(); + void doSyncTimeStep(); + void doSyncCellResult(); RimEclipseView* managedEclipseView(); RimGeoMechView* managedGeoView(); diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp index cd855fb07a..4c370c6071 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp @@ -305,6 +305,8 @@ void RimViewLinker::applyAllOperations() updateRangeFilters(); updatePropertyFilters(); updateScaleZ(m_mainView, m_mainView->scaleZ()); + + m_mainView->notifyCameraHasChanged(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index a859020a8a..fc7095b69d 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -25,6 +25,7 @@ #include "RimProject.h" #include "RimView.h" +#include "RimViewLink.h" #include "RimViewLinker.h" #include "RiuCadNavigation.h" @@ -264,7 +265,11 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex) RimViewLinker* viewLinker = proj->findViewLinkerFromView(m_reservoirView); if (viewLinker) { - viewLinker->updateTimeStep(m_reservoirView, frameIndex); + RimViewLink* viewLink = viewLinker->viewLinkFromView(m_reservoirView); + if (m_reservoirView == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep())) + { + viewLinker->updateTimeStep(m_reservoirView, frameIndex); + } } } }