Refactored funtions used to find viewLinker and viewLink

This commit is contained in:
Magne Sjaastad 2015-09-23 11:01:46 +02:00
parent 3b98d77324
commit c8944d8801
9 changed files with 97 additions and 153 deletions

View File

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

View File

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

View File

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

View File

@ -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);
}
//--------------------------------------------------------------------------------------------------

View File

@ -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<caf::PdmObjectHandle*> reffingObjs;
this->objectsWithReferringPtrFields(reffingObjs);
for (size_t i = 0; i < reffingObjs.size(); ++i)
{
viewLinker = dynamic_cast<RimViewLinker*>(reffingObjs[i]);
if (viewLinker ) break;
}
return viewLinker;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimViewLink* RimView::controllingViewLink() const
{
RimViewLink* viewLink = NULL;
std::vector<caf::PdmObjectHandle*> reffingObjs;
this->objectsWithReferringPtrFields(reffingObjs);
for (size_t i = 0; i < reffingObjs.size(); ++i)
{
viewLink = dynamic_cast<RimViewLink*>(reffingObjs[i]);
if (viewLink) break;
}
return viewLink;
return RimViewLinker::viewLinkForView(this);
}
//--------------------------------------------------------------------------------------------------

View File

@ -138,7 +138,6 @@ public:
virtual caf::PdmFieldHandle* userDescriptionField() { return &name; }
protected:
RimViewLinker* viewLinkerWithMyDepViews();
void setDefaultView();
void addWellPathsToModel(cvf::ModelBasicList* wellPathModelBasicList,

View File

@ -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<RimEclipseView*>(rimView);
if (eclipeView)
{
eclipeView->scheduleGeometryRegen(RANGE_FILTERED);
eclipeView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
eclipeView->scheduleCreateDisplayModelAndRedraw();
}
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(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<RimEclipseView*>(rimView);
if (eclipeView)
{
eclipeView->scheduleGeometryRegen(PROPERTY_FILTERED);
eclipeView->scheduleCreateDisplayModelAndRedraw();
}
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(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<RimView*> 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<caf::PdmObjectHandle*> reffingObjs;
view->objectsWithReferringPtrFields(reffingObjs);
for (size_t i = 0; i < reffingObjs.size(); ++i)
{
viewLink = dynamic_cast<RimViewLink*>(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<caf::PdmObjectHandle*> reffingObjs;
view->objectsWithReferringPtrFields(reffingObjs);
for (size_t i = 0; i < reffingObjs.size(); ++i)
{
viewLinker = dynamic_cast<RimViewLinker*>(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;
}

View File

@ -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; }

View File

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