(#540) Override range filter update system improved

Rename of forgotten viewLink ->viewController
Remember to update group of linked views before adding a new dependent view.
This commit is contained in:
Jacob Støren 2015-10-20 11:13:31 +02:00
parent 4fc0553451
commit 8b894d8515
7 changed files with 69 additions and 111 deletions

View File

@ -71,9 +71,10 @@ void RicSetMasterViewFeature::onActionTriggered(bool isChecked)
RimView* previousMasterView = viewLinker->masterView(); RimView* previousMasterView = viewLinker->masterView();
viewLinker->setMasterView(activeView); viewLinker->setMasterView(activeView);
viewLinker->updateDependentViews();
viewLinker->addDependentView(previousMasterView); viewLinker->addDependentView(previousMasterView);
viewLinker->updateDependentViews();
proj->viewLinkerCollection.uiCapability()->updateConnectedEditors(); proj->viewLinkerCollection.uiCapability()->updateConnectedEditors();
proj->updateConnectedEditors(); proj->updateConnectedEditors();

View File

@ -105,7 +105,6 @@ RimView::RimView(void)
windowGeometry.uiCapability()->setUiHidden(true); windowGeometry.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&m_rangeFilterCollection, "RangeFilters", "Range Filters", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_rangeFilterCollection, "RangeFilters", "Range Filters", "", "", "");
m_rangeFilterCollection = new RimCellRangeFilterCollection();
m_rangeFilterCollection.uiCapability()->setUiHidden(true); m_rangeFilterCollection.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&m_overrideRangeFilterCollection, "RangeFiltersControlled", "Range Filters (controlled)", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_overrideRangeFilterCollection, "RangeFiltersControlled", "Range Filters (controlled)", "", "", "");
@ -566,6 +565,7 @@ RimCellRangeFilterCollection* RimView::rangeFilterCollection()
{ {
if (this->viewController() && this->viewController()->isRangeFiltersControlled()) if (this->viewController() && this->viewController()->isRangeFiltersControlled())
{ {
CVF_ASSERT(m_overrideRangeFilterCollection());
return m_overrideRangeFilterCollection; return m_overrideRangeFilterCollection;
} }
else else
@ -581,6 +581,7 @@ const RimCellRangeFilterCollection* RimView::rangeFilterCollection() const
{ {
if (this->viewController() && this->viewController()->isRangeFiltersControlled()) if (this->viewController() && this->viewController()->isRangeFiltersControlled())
{ {
CVF_ASSERT(m_overrideRangeFilterCollection());
return m_overrideRangeFilterCollection; return m_overrideRangeFilterCollection;
} }
else else
@ -594,6 +595,8 @@ const RimCellRangeFilterCollection* RimView::rangeFilterCollection() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimView::setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc) void RimView::setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc)
{ {
if (m_overrideRangeFilterCollection()) delete m_overrideRangeFilterCollection();
m_overrideRangeFilterCollection = rfc; m_overrideRangeFilterCollection = rfc;
this->scheduleGeometryRegen(RANGE_FILTERED); this->scheduleGeometryRegen(RANGE_FILTERED);
this->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); this->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
@ -697,7 +700,7 @@ bool RimView::isMasterView() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimCellRangeFilterCollection* RimView::rangeFilterCollectionCopy() RimCellRangeFilterCollection* RimView::overrideRangeFilterCollection()
{ {
return m_overrideRangeFilterCollection(); return m_overrideRangeFilterCollection();
} }

View File

@ -79,7 +79,8 @@ public:
RimCellRangeFilterCollection* rangeFilterCollection(); RimCellRangeFilterCollection* rangeFilterCollection();
const RimCellRangeFilterCollection* rangeFilterCollection() const; const RimCellRangeFilterCollection* rangeFilterCollection() const;
RimCellRangeFilterCollection* rangeFilterCollectionCopy(); RimCellRangeFilterCollection* overrideRangeFilterCollection();
void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc);
caf::PdmField< std::vector<int> > windowGeometry; caf::PdmField< std::vector<int> > windowGeometry;
@ -182,7 +183,6 @@ protected:
private: private:
RimViewLinker* viewLinkerIfMasterView() const; RimViewLinker* viewLinkerIfMasterView() const;
void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc);
private: private:
bool m_previousGridModeMeshLinesWasFaults; bool m_previousGridModeMeshLinesWasFaults;

View File

@ -147,11 +147,11 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
{ {
if (changedField == &m_isActive) if (changedField == &m_isActive)
{ {
updateCameraLink();
updateTimeStepLink();
updateResultColorsControl();
updateOverrides(); updateOverrides();
updateResultColorsControl();
updateCameraLink();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateTimeStepLink();
} }
else if (changedField == &m_syncCamera) else if (changedField == &m_syncCamera)
{ {
@ -175,7 +175,7 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
} }
else if (changedField == &m_syncRangeFilters) else if (changedField == &m_syncRangeFilters)
{ {
updateRangeFiltersControl(); updateOverrides();
} }
else if (changedField == &m_syncPropertyFilters) else if (changedField == &m_syncPropertyFilters)
{ {
@ -203,9 +203,9 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewController::initAfterRead() void RimViewController::initAfterRead()
{ {
updateOptionSensitivity();
updateOverrides(); updateOverrides();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateOptionSensitivity();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -286,6 +286,8 @@ void RimViewController::updateOverrides()
} }
} }
} }
this->updateRangeFilterOverrides(NULL);
if (manGeoView) if (manGeoView)
{ {
@ -318,6 +320,8 @@ void RimViewController::removeOverrides(RimView* view)
if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL); if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL);
if (manGeoView) manGeoView->setOverridePropertyFilterCollection(NULL); if (manGeoView) manGeoView->setOverridePropertyFilterCollection(NULL);
view->setOverrideRangeFilterCollection(NULL);
} }
} }
@ -386,12 +390,13 @@ RimView* RimViewController::managedView()
void RimViewController::setManagedView(RimView* view) void RimViewController::setManagedView(RimView* view)
{ {
m_managedView = view; m_managedView = view;
updateCameraLink();
updateTimeStepLink();
updateResultColorsControl();
updateOverrides();
updateOptionSensitivity(); updateOptionSensitivity();
updateOverrides();
updateResultColorsControl();
updateCameraLink();
updateDisplayNameAndIcon(); updateDisplayNameAndIcon();
updateTimeStepLink();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -465,17 +470,6 @@ void RimViewController::updateResultColorsControl()
viewLinker->updateCellResult(); viewLinker->updateCellResult();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::updateRangeFiltersControl()
{
if (!this->isRangeFiltersControlled()) return;
RimViewLinker* viewLinker = ownerViewLinker();
viewLinker->updateRangeFilters(NULL);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -758,57 +752,24 @@ bool RimViewController::isPropertyFilterOveridden()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewController::updateRangeFilterCollectionOverride(RimView* sourceView, RimCellRangeFilter* changedRangeFilter) void RimViewController::updateRangeFilterOverrides(RimCellRangeFilter* changedRangeFilter)
{ {
RimCellRangeFilterCollection* filterCollectionCopy = managedView()->rangeFilterCollectionCopy(); if (!isRangeFiltersControlled())
if (!sourceView)
{ {
filterCollectionCopy->rangeFilters.deleteAllChildObjects(); managedView()->setOverrideRangeFilterCollection(NULL);
managedView()->rangeFilterCollection()->uiCapability()->updateConnectedEditors();
return; return;
} }
RimCellRangeFilterCollection* sourceFilterCollection = sourceView->rangeFilterCollection(); RimCellRangeFilterCollection* sourceFilterCollection = masterView()->rangeFilterCollection();
QString xmlRangeFilterCollCopy = sourceFilterCollection->writeObjectToXmlString();
PdmObjectHandle* objectCopy = PdmXmlObjectHandle::readUnknownObjectFromXmlString(xmlRangeFilterCollCopy, caf::PdmDefaultObjectFactory::instance());
RimCellRangeFilterCollection* overrideRangeFilter = dynamic_cast<RimCellRangeFilterCollection*>(objectCopy);
managedView()->setOverrideRangeFilterCollection(overrideRangeFilter);
// TODO: Convert ijk values in source to correct ijk values in our range filter collection // TODO: Convert ijk values in source to correct ijk values in our range filter collection
filterCollectionCopy->rangeFilters.deleteAllChildObjects();
// Filter copy if ijk-ranges are identical
for (size_t i = 0; i < sourceFilterCollection->rangeFilters.size(); i++)
{
RimCellRangeFilter* sourceFilter = sourceFilterCollection->rangeFilters[i];
RimCellRangeFilter* filter = new RimCellRangeFilter;
filter->startIndexI = sourceFilter->startIndexI;
filter->startIndexJ = sourceFilter->startIndexJ;
filter->startIndexK = sourceFilter->startIndexK;
filter->cellCountI = sourceFilter->cellCountI;
filter->cellCountJ = sourceFilter->cellCountJ;
filter->cellCountK = sourceFilter->cellCountK;
filterCollectionCopy->rangeFilters.push_back(filter);
}
managedView()->rangeFilterCollection()->uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::updateRangeFilterOverrides(RimCellRangeFilter* changedRangeFilter)
{
if (isRangeFiltersControlled())
{
updateRangeFilterCollectionOverride(masterView(), changedRangeFilter);
}
else
{
updateRangeFilterCollectionOverride(NULL, NULL);
}
} }

View File

@ -90,14 +90,10 @@ private:
void updateCameraLink(); void updateCameraLink();
void updateTimeStepLink(); void updateTimeStepLink();
void updateResultColorsControl(); void updateResultColorsControl();
void updateRangeFiltersControl();
bool isMasterAndDepViewDifferentType(); bool isMasterAndDepViewDifferentType();
bool isRangeFilterControlPossible(); bool isRangeFilterControlPossible();
void updateRangeFilterCollectionOverride(RimView* sourceView, RimCellRangeFilter* changedRangeFilter);
RimEclipseView* managedEclipseView(); RimEclipseView* managedEclipseView();
RimGeoMechView* managedGeoView(); RimGeoMechView* managedGeoView();
static void removeOverrides(RimView* view); static void removeOverrides(RimView* view);

View File

@ -64,9 +64,9 @@ RimViewLinker::RimViewLinker(void)
m_masterView.uiCapability()->setUiChildrenHidden(true); m_masterView.uiCapability()->setUiChildrenHidden(true);
m_masterView.uiCapability()->setUiHidden(true); m_masterView.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&viewLinks, "ManagedViews", "Managed Views", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_viewControllers, "ManagedViews", "Managed Views", "", "", "");
viewLinks.uiCapability()->setUiHidden(true); m_viewControllers.uiCapability()->setUiHidden(true);
viewLinks.uiCapability()->setUiChildrenHidden(true); m_viewControllers.uiCapability()->setUiChildrenHidden(true);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -76,7 +76,7 @@ RimViewLinker::~RimViewLinker(void)
{ {
removeOverrides(); removeOverrides();
viewLinks.deleteAllChildObjects(); m_viewControllers.deleteAllChildObjects();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -105,9 +105,9 @@ void RimViewLinker::updateTimeStep(RimView* sourceView, int timeStep)
m_masterView->viewer()->animationControl()->setCurrentFrameOnly(timeStep); m_masterView->viewer()->animationControl()->setCurrentFrameOnly(timeStep);
} }
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = m_viewControllers[i];
if (!viewLink->isTimeStepLinked()) continue; if (!viewLink->isTimeStepLinked()) continue;
@ -132,9 +132,9 @@ void RimViewLinker::updateCellResult()
{ {
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult(); RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = m_viewControllers[i];
if (viewLink->managedView()) if (viewLink->managedView())
{ {
@ -161,9 +161,9 @@ void RimViewLinker::updateCellResult()
{ {
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult(); RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = m_viewControllers[i];
if (viewLink->managedView()) if (viewLink->managedView())
{ {
@ -189,9 +189,9 @@ void RimViewLinker::updateCellResult()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter) void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter)
{ {
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = m_viewControllers[i];
viewLink->updateRangeFilterOverrides(changedRangeFilter); viewLink->updateRangeFilterOverrides(changedRangeFilter);
} }
} }
@ -201,9 +201,9 @@ void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::updateOverrides() void RimViewLinker::updateOverrides()
{ {
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
RimViewController* viewLink = viewLinks[i]; RimViewController* viewLink = m_viewControllers[i];
if (viewLink->isActive()) if (viewLink->isActive())
{ {
viewLink->updateOverrides(); viewLink->updateOverrides();
@ -220,11 +220,11 @@ void RimViewLinker::updateOverrides()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::removeOverrides() void RimViewLinker::removeOverrides()
{ {
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
if (viewLinks[i]->managedView()) if (m_viewControllers[i]->managedView())
{ {
viewLinks[i]->removeOverrides(); m_viewControllers[i]->removeOverrides();
} }
} }
} }
@ -241,13 +241,13 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector<RimView*>
views.push_back(m_masterView()); views.push_back(m_masterView());
} }
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
if (viewLinks[i]->managedView() && source != viewLinks[i]->managedView()) if (m_viewControllers[i]->managedView() && source != m_viewControllers[i]->managedView())
{ {
if (viewLinks[i]->isCameraLinked()) if (m_viewControllers[i]->isCameraLinked())
{ {
views.push_back(viewLinks[i]->managedView()); views.push_back(m_viewControllers[i]->managedView());
} }
} }
} }
@ -259,13 +259,10 @@ void RimViewLinker::allViewsForCameraSync(RimView* source, std::vector<RimView*>
void RimViewLinker::updateDependentViews() void RimViewLinker::updateDependentViews()
{ {
updateOverrides(); updateOverrides();
updateRangeFilters(NULL);
updateCellResult(); updateCellResult();
updateTimeStep(m_masterView, m_masterView->currentTimeStep());
updateScaleZ(m_masterView, m_masterView->scaleZ()); updateScaleZ(m_masterView, m_masterView->scaleZ());
updateCamera(m_masterView); updateCamera(m_masterView);
updateTimeStep(m_masterView, m_masterView->currentTimeStep());
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -297,7 +294,7 @@ void RimViewLinker::setMasterView(RimView* view)
if (previousViewController) if (previousViewController)
{ {
delete previousViewController; delete previousViewController;
this->viewLinks.removeChildObject(NULL); this->m_viewControllers.removeChildObject(NULL);
} }
this->removeOverrides(); this->removeOverrides();
@ -322,11 +319,11 @@ void RimViewLinker::allViews(std::vector<RimView*>& views)
{ {
views.push_back(m_masterView()); views.push_back(m_masterView());
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
if (viewLinks[i]->managedView()) if (m_viewControllers[i]->managedView())
{ {
views.push_back(viewLinks[i]->managedView()); views.push_back(m_viewControllers[i]->managedView());
} }
} }
} }
@ -411,9 +408,9 @@ void RimViewLinker::updateUiNameAndIcon()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType) void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType)
{ {
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
viewLinks[i]->scheduleGeometryRegenForDepViews(geometryType); m_viewControllers[i]->scheduleGeometryRegenForDepViews(geometryType);
} }
} }
@ -422,9 +419,9 @@ void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews() void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews()
{ {
for (size_t i = 0; i < viewLinks.size(); i++) for (size_t i = 0; i < m_viewControllers.size(); i++)
{ {
viewLinks[i]->scheduleCreateDisplayModelAndRedrawForDependentView(); m_viewControllers[i]->scheduleCreateDisplayModelAndRedrawForDependentView();
} }
} }
@ -598,10 +595,10 @@ void RimViewLinker::addDependentView(RimView* view)
{ {
CVF_ASSERT(view && view != m_masterView); CVF_ASSERT(view && view != m_masterView);
RimViewController* viewLink = new RimViewController; RimViewController* viewContr = new RimViewController;
this->viewLinks.push_back(viewLink); this->m_viewControllers.push_back(viewContr);
viewLink->setManagedView(view); viewContr->setManagedView(view);
} }
@ -611,9 +608,9 @@ void RimViewLinker::addDependentView(RimView* view)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimViewLinker::addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering) void RimViewLinker::addViewControllers(caf::PdmUiTreeOrdering& uiTreeOrdering)
{ {
for (size_t j = 0; j < viewLinks.size(); j++) for (size_t j = 0; j < m_viewControllers.size(); j++)
{ {
uiTreeOrdering.add(viewLinks()[j]); uiTreeOrdering.add(m_viewControllers()[j]);
} }
} }

View File

@ -93,7 +93,7 @@ private:
static bool isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB); static bool isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB);
private: private:
caf::PdmChildArrayField<RimViewController*> viewLinks; caf::PdmChildArrayField<RimViewController*> m_viewControllers;
caf::PdmPtrField<RimView*> m_masterView; caf::PdmPtrField<RimView*> m_masterView;
caf::PdmField<QString> m_name; caf::PdmField<QString> m_name;
QIcon m_originalIcon; QIcon m_originalIcon;