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(); RimView* previousMasterView = viewLinker->mainView();
RimViewLink* previousViewLink = viewLinker->viewLinkFromView(activeView); RimViewLink* previousViewLink = RimViewLinker::viewLinkForView(activeView);
if (previousViewLink) if (previousViewLink)
{ {
size_t indexToErase = cvf::UNDEFINED_SIZE_T; size_t indexToErase = cvf::UNDEFINED_SIZE_T;

View File

@@ -846,7 +846,7 @@ void RimEclipseView::scheduleGeometryRegen(RivCellSetEnum geometryType)
{ {
m_reservoirGridPartManager->scheduleGeometryRegen(geometryType); m_reservoirGridPartManager->scheduleGeometryRegen(geometryType);
RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this);
if (viewLinker) if (viewLinker)
{ {
viewLinker->scheduleGeometryRegenForDepViews(geometryType); viewLinker->scheduleGeometryRegenForDepViews(geometryType);

View File

@@ -512,7 +512,7 @@ void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType)
{ {
m_vizLogic->scheduleGeometryRegen(geometryType); m_vizLogic->scheduleGeometryRegen(geometryType);
RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this);
if (viewLinker) if (viewLinker)
{ {
viewLinker->scheduleGeometryRegenForDepViews(geometryType); viewLinker->scheduleGeometryRegenForDepViews(geometryType);

View File

@@ -987,19 +987,7 @@ void RimProject::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QS
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimViewLinker* RimProject::findViewLinkerFromView(RimView* view) RimViewLinker* RimProject::findViewLinkerFromView(RimView* view)
{ {
if (viewLinkerCollection()->viewLinker()) return RimViewLinker::viewLinkerForMainOrControlledView(view);
{
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;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -191,7 +191,7 @@ void RimView::updateViewerWidget()
void RimView::scheduleCreateDisplayModelAndRedraw() void RimView::scheduleCreateDisplayModelAndRedraw()
{ {
RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this); RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this);
RimViewLinker* viewLinker = viewLinkerWithMyDepViews(); RimViewLinker* viewLinker = RimViewLinker::viewLinkerIfMainView(this);
if (viewLinker) if (viewLinker)
{ {
viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews(); viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews();
@@ -448,16 +448,10 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
updateScaleTransform(); updateScaleTransform();
createDisplayModelAndRedraw(); createDisplayModelAndRedraw();
RimProject* proj = NULL; RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(this);
this->firstAnchestorOrThisOfType(proj);
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) if (viewLinker)
{ {
RimViewLink* viewLink = viewLinker->viewLinkFromView(this); viewLinker->updateScaleZ(this, scaleZ);
if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera()))
{
viewLinker->updateScaleZ(this, scaleZ);
}
} }
m_viewer->navigationPolicyUpdate(); m_viewer->navigationPolicyUpdate();
@@ -486,16 +480,10 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
{ {
m_viewer->update(); m_viewer->update();
RimProject* proj = NULL; RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(this);
this->firstAnchestorOrThisOfType(proj);
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) if (viewLinker)
{ {
RimViewLink* viewLink = viewLinker->viewLinkFromView(this); viewLinker->updateTimeStep(this, m_currentTimeStep);
if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep()))
{
viewLinker->updateTimeStep(this, m_currentTimeStep);
}
} }
} }
} }
@@ -600,7 +588,7 @@ void RimView::notifyCameraHasChanged()
RimViewLinker* viewLinker = proj->findViewLinkerFromView(this); RimViewLinker* viewLinker = proj->findViewLinkerFromView(this);
if (viewLinker) if (viewLinker)
{ {
RimViewLink* viewLink = viewLinker->viewLinkFromView(this); RimViewLink* viewLink = viewLinker->viewLinkForView(this);
if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera())) if (this == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncCamera()))
{ {
@@ -726,42 +714,13 @@ bool RimView::isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB
return false; 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* RimView::controllingViewLink() const
{ {
RimViewLink* viewLink = NULL; return RimViewLinker::viewLinkForView(this);
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;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

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

View File

@@ -80,12 +80,19 @@ RimViewLinker::~RimViewLinker(void)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep) void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep)
{ {
CVF_ASSERT(sourceView);
if (!isActive()) return; if (!isActive()) return;
RimViewLink* sourceLinkedView = viewLinkFromView(sourceView); if (mainView() != sourceView)
if (sourceLinkedView && !sourceLinkedView->syncTimeStep())
{ {
return; RimViewLink* sourceViewLink = viewLinkForView(sourceView);
CVF_ASSERT(sourceViewLink);
if (!sourceViewLink->isActive() || !sourceViewLink->syncTimeStep())
{
return;
}
} }
if (m_mainView && m_mainView->viewer() && sourceView != m_mainView) if (m_mainView && m_mainView->viewer() && sourceView != m_mainView)
@@ -182,37 +189,6 @@ void RimViewLinker::updateRangeFilters()
this->scheduleGeometryRegenForDepViews(RANGE_FILTERED); this->scheduleGeometryRegenForDepViews(RANGE_FILTERED);
this->scheduleGeometryRegenForDepViews(RANGE_FILTERED_INACTIVE); this->scheduleGeometryRegenForDepViews(RANGE_FILTERED_INACTIVE);
this->scheduleCreateDisplayModelAndRedrawForDependentViews(); 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; if (!isActive()) return;
this->scheduleGeometryRegenForDepViews(PROPERTY_FILTERED); this->scheduleGeometryRegenForDepViews(PROPERTY_FILTERED);
this->scheduleCreateDisplayModelAndRedrawForDependentViews(); 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(); configureOverrides();
updateCellResult(); updateCellResult();
updateTimeStep(NULL, m_mainView->currentTimeStep()); updateTimeStep(m_mainView, m_mainView->currentTimeStep());
updateRangeFilters(); updateRangeFilters();
updatePropertyFilters(); updatePropertyFilters();
updateScaleZ(m_mainView, m_mainView->scaleZ()); updateScaleZ(m_mainView, m_mainView->scaleZ());
@@ -328,19 +275,6 @@ QString RimViewLinker::displayNameForView(RimView* view)
return displayName; 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; std::vector<RimView*> views;
allViewsForCameraSync(source, views); allViewsForCameraSync(sourceView, views);
// Make sure scale factors are identical // Make sure scale factors are identical
for (size_t i = 0; i < views.size(); i++) 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: public:
static QString displayNameForView(RimView* view); 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: protected:
virtual caf::PdmFieldHandle* userDescriptionField() { return &m_name; } virtual caf::PdmFieldHandle* userDescriptionField() { return &m_name; }

View File

@@ -260,16 +260,10 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex)
if (m_reservoirView) if (m_reservoirView)
{ {
RimProject* proj = NULL; RimViewLinker* viewLinker = RimViewLinker::viewLinkerForMainOrControlledView(m_reservoirView);
m_reservoirView->firstAnchestorOrThisOfType(proj);
RimViewLinker* viewLinker = proj->findViewLinkerFromView(m_reservoirView);
if (viewLinker) if (viewLinker)
{ {
RimViewLink* viewLink = viewLinker->viewLinkFromView(m_reservoirView); viewLinker->updateTimeStep(m_reservoirView, frameIndex);
if (m_reservoirView == viewLinker->mainView() || (viewLink && viewLink->isActive() && viewLink->syncTimeStep()))
{
viewLinker->updateTimeStep(m_reservoirView, frameIndex);
}
} }
} }
} }