(#449) Minor fixes related to isActive

This commit is contained in:
Magne Sjaastad 2015-09-15 10:45:39 +02:00
parent 9aeb949b06
commit 08e266c2f3
6 changed files with 94 additions and 69 deletions

View File

@ -94,7 +94,7 @@ void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked)
viewLink->initAfterReadRecursively(); viewLink->initAfterReadRecursively();
viewLink->updateOptionSensitivity(); viewLink->updateOptionSensitivity();
viewLink->updateUiIcon(); viewLink->updateUiIconFromActiveState();
} }
proj->viewLinkerCollection()->viewLinkers().push_back(linkedViews); proj->viewLinkerCollection()->viewLinkers().push_back(linkedViews);

View File

@ -447,8 +447,8 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) if (viewLinker)
{ {
RimViewLink* linkedView = viewLinker->viewLinkFromView(this); RimViewLink* viewLink = viewLinker->viewLinkFromView(this);
if (!linkedView || linkedView->syncCamera()) if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera()))
{ {
viewLinker->updateScaleZ(this, scaleZ); viewLinker->updateScaleZ(this, scaleZ);
} }
@ -484,11 +484,15 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
this->firstAnchestorOrThisOfType(proj); this->firstAnchestorOrThisOfType(proj);
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) 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);
} }
} }
} }
}
else if (changedField == &backgroundColor) else if (changedField == &backgroundColor)
{ {
if (viewer() != NULL) if (viewer() != NULL)
@ -590,10 +594,9 @@ void RimView::notifyCameraHasChanged()
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) 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 (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera()))
if (!linkedView || linkedView->syncCamera())
{ {
viewLinker->allViewsForCameraSync(this, viewsToUpdate); viewLinker->allViewsForCameraSync(this, viewsToUpdate);
} }

View File

@ -30,6 +30,7 @@
#include "RimProject.h" #include "RimProject.h"
#include "RimView.h" #include "RimView.h"
#include "RimViewLinker.h" #include "RimViewLinker.h"
#include "RimViewLinkerCollection.h"
#include "RiuViewer.h" #include "RiuViewer.h"
@ -42,7 +43,7 @@ CAF_PDM_SOURCE_INIT(RimViewLink, "RimViewLink");
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimViewLink::RimViewLink(void) RimViewLink::RimViewLink(void)
{ {
CAF_PDM_InitObject("View Config", "", "", ""); CAF_PDM_InitObject("View Link", "", "", "");
CAF_PDM_InitField(&isActive, "Active", true, "Active", "", "", ""); CAF_PDM_InitField(&isActive, "Active", true, "Active", "", "", "");
isActive.uiCapability()->setUiHidden(true); isActive.uiCapability()->setUiHidden(true);
@ -138,46 +139,35 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons
{ {
if (changedField == &isActive) if (changedField == &isActive)
{ {
updateUiIcon(); updateUiIconFromActiveState();
if (syncCamera()) doSyncCamera();
if (syncTimeStep()) doSyncTimeStep();
if (syncCellResult()) doSyncCellResult();
configureOverrides(); configureOverrides();
} }
else if (changedField == &syncCamera && syncCamera()) else if (changedField == &syncCamera && syncCamera())
{ {
RimViewLinker* linkedViews = NULL; doSyncCamera();
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateScaleZ(linkedViews->mainView(), linkedViews->mainView()->scaleZ());
if (m_managedView && m_managedView->viewer())
{
m_managedView->viewer()->navigationPolicyUpdate();
}
} }
else if (changedField == &syncTimeStep && syncTimeStep()) else if (changedField == &syncTimeStep && syncTimeStep())
{ {
if (m_managedView) doSyncTimeStep();
{
RimViewLinker* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateTimeStep(m_managedView, m_managedView->currentTimeStep());
}
} }
else if (changedField == &syncCellResult && syncCellResult()) else if (changedField == &syncCellResult && syncCellResult())
{ {
RimViewLinker* linkedViews = NULL; doSyncCellResult();
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
} }
else if (changedField == &syncRangeFilters) else if (changedField == &syncRangeFilters)
{ {
configureOverridesUpdateDisplayModel(); configureOverrides();
} }
else if (changedField == &syncPropertyFilters) else if (changedField == &syncPropertyFilters)
{ {
configureOverridesUpdateDisplayModel(); configureOverrides();
} }
else if (changedField == &m_managedView) else if (changedField == &m_managedView)
{ {
configureOverridesUpdateDisplayModel(); configureOverrides();
if (m_managedView) if (m_managedView)
{ {
@ -222,14 +212,14 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons
updateOptionSensitivity(); updateOptionSensitivity();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateUiIcon(); updateUiIconFromActiveState();
name.uiCapability()->updateConnectedEditors(); name.uiCapability()->updateConnectedEditors();
} }
else if (&syncVisibleCells == changedField) else if (&syncVisibleCells == changedField)
{ {
updateOptionSensitivity(); updateOptionSensitivity();
configureOverridesUpdateDisplayModel(); configureOverrides();
} }
} }
@ -240,7 +230,7 @@ void RimViewLink::initAfterRead()
{ {
configureOverrides(); configureOverrides();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateUiIcon(); updateUiIconFromActiveState();
updateOptionSensitivity(); updateOptionSensitivity();
} }
@ -264,40 +254,15 @@ RimGeoMechView* RimViewLink::managedGeoView()
return dynamic_cast<RimGeoMechView*>(rimView); return dynamic_cast<RimGeoMechView*>(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() void RimViewLink::configureOverrides()
{ {
RimViewLinkerCollection* viewLinkerColl = NULL;
this->firstAnchestorOrThisOfType(viewLinkerColl);
if (!viewLinkerColl->isActive()) return;
RimViewLinker* viewLinker = NULL; RimViewLinker* viewLinker = NULL;
this->firstAnchestorOrThisOfType(viewLinker); this->firstAnchestorOrThisOfType(viewLinker);
@ -472,7 +437,7 @@ void RimViewLink::removeOverrides()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLink::updateUiIcon() void RimViewLink::updateUiIconFromActiveState()
{ {
RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive()); RimViewLinker::applyIconEnabledState(this, m_originalIcon, !isActive());
} }
@ -485,3 +450,53 @@ void RimViewLink::updateDisplayNameAndIcon()
RimViewLinker::findNameAndIconFromView(&name.v(), &m_originalIcon, managedView()); 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();
}

View File

@ -59,10 +59,9 @@ public:
void updateOptionSensitivity(); void updateOptionSensitivity();
void removeOverrides(); void removeOverrides();
void updateUiIcon(); void updateUiIconFromActiveState();
void updateDisplayNameAndIcon(); void updateDisplayNameAndIcon();
protected: protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly);
@ -72,9 +71,10 @@ protected:
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering);
virtual caf::PdmFieldHandle* objectToggleField() { return &isActive; } virtual caf::PdmFieldHandle* objectToggleField() { return &isActive; }
private: private:
void configureOverridesUpdateDisplayModel(); void doSyncCamera();
void doSyncTimeStep();
void doSyncCellResult();
RimEclipseView* managedEclipseView(); RimEclipseView* managedEclipseView();
RimGeoMechView* managedGeoView(); RimGeoMechView* managedGeoView();

View File

@ -305,6 +305,8 @@ void RimViewLinker::applyAllOperations()
updateRangeFilters(); updateRangeFilters();
updatePropertyFilters(); updatePropertyFilters();
updateScaleZ(m_mainView, m_mainView->scaleZ()); updateScaleZ(m_mainView, m_mainView->scaleZ());
m_mainView->notifyCameraHasChanged();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -25,6 +25,7 @@
#include "RimProject.h" #include "RimProject.h"
#include "RimView.h" #include "RimView.h"
#include "RimViewLink.h"
#include "RimViewLinker.h" #include "RimViewLinker.h"
#include "RiuCadNavigation.h" #include "RiuCadNavigation.h"
@ -263,11 +264,15 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex)
m_reservoirView->firstAnchestorOrThisOfType(proj); m_reservoirView->firstAnchestorOrThisOfType(proj);
RimViewLinker* viewLinker = proj->findViewLinkerFromView(m_reservoirView); RimViewLinker* viewLinker = proj->findViewLinkerFromView(m_reservoirView);
if (viewLinker) 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);
} }
} }
} }
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///