(#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();
viewLinker->setMasterView(activeView);
viewLinker->updateDependentViews();
viewLinker->addDependentView(previousMasterView);
viewLinker->updateDependentViews();
proj->viewLinkerCollection.uiCapability()->updateConnectedEditors();
proj->updateConnectedEditors();

View File

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

View File

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

View File

@ -147,11 +147,11 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
{
if (changedField == &m_isActive)
{
updateCameraLink();
updateTimeStepLink();
updateResultColorsControl();
updateOverrides();
updateResultColorsControl();
updateCameraLink();
updateDisplayNameAndIcon();
updateTimeStepLink();
}
else if (changedField == &m_syncCamera)
{
@ -175,7 +175,7 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
}
else if (changedField == &m_syncRangeFilters)
{
updateRangeFiltersControl();
updateOverrides();
}
else if (changedField == &m_syncPropertyFilters)
{
@ -203,9 +203,9 @@ void RimViewController::fieldChangedByUi(const caf::PdmFieldHandle* changedField
//--------------------------------------------------------------------------------------------------
void RimViewController::initAfterRead()
{
updateOptionSensitivity();
updateOverrides();
updateDisplayNameAndIcon();
updateOptionSensitivity();
}
//--------------------------------------------------------------------------------------------------
@ -287,6 +287,8 @@ void RimViewController::updateOverrides()
}
}
this->updateRangeFilterOverrides(NULL);
if (manGeoView)
{
manGeoView->updateIconStateForFilterCollections();
@ -318,6 +320,8 @@ void RimViewController::removeOverrides(RimView* view)
if (manEclView) manEclView->setOverridePropertyFilterCollection(NULL);
if (manGeoView) manGeoView->setOverridePropertyFilterCollection(NULL);
view->setOverrideRangeFilterCollection(NULL);
}
}
@ -386,12 +390,13 @@ RimView* RimViewController::managedView()
void RimViewController::setManagedView(RimView* view)
{
m_managedView = view;
updateCameraLink();
updateTimeStepLink();
updateResultColorsControl();
updateOverrides();
updateOptionSensitivity();
updateOverrides();
updateResultColorsControl();
updateCameraLink();
updateDisplayNameAndIcon();
updateTimeStepLink();
}
//--------------------------------------------------------------------------------------------------
@ -465,17 +470,6 @@ void RimViewController::updateResultColorsControl()
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 (!sourceView)
if (!isRangeFiltersControlled())
{
filterCollectionCopy->rangeFilters.deleteAllChildObjects();
managedView()->rangeFilterCollection()->uiCapability()->updateConnectedEditors();
managedView()->setOverrideRangeFilterCollection(NULL);
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
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 updateTimeStepLink();
void updateResultColorsControl();
void updateRangeFiltersControl();
bool isMasterAndDepViewDifferentType();
bool isRangeFilterControlPossible();
void updateRangeFilterCollectionOverride(RimView* sourceView, RimCellRangeFilter* changedRangeFilter);
RimEclipseView* managedEclipseView();
RimGeoMechView* managedGeoView();
static void removeOverrides(RimView* view);

View File

@ -64,9 +64,9 @@ RimViewLinker::RimViewLinker(void)
m_masterView.uiCapability()->setUiChildrenHidden(true);
m_masterView.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&viewLinks, "ManagedViews", "Managed Views", "", "", "");
viewLinks.uiCapability()->setUiHidden(true);
viewLinks.uiCapability()->setUiChildrenHidden(true);
CAF_PDM_InitFieldNoDefault(&m_viewControllers, "ManagedViews", "Managed Views", "", "", "");
m_viewControllers.uiCapability()->setUiHidden(true);
m_viewControllers.uiCapability()->setUiChildrenHidden(true);
}
//--------------------------------------------------------------------------------------------------
@ -76,7 +76,7 @@ RimViewLinker::~RimViewLinker(void)
{
removeOverrides();
viewLinks.deleteAllChildObjects();
m_viewControllers.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
@ -105,9 +105,9 @@ void RimViewLinker::updateTimeStep(RimView* sourceView, int 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;
@ -132,9 +132,9 @@ void RimViewLinker::updateCellResult()
{
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())
{
@ -161,9 +161,9 @@ void RimViewLinker::updateCellResult()
{
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())
{
@ -189,9 +189,9 @@ void RimViewLinker::updateCellResult()
//--------------------------------------------------------------------------------------------------
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);
}
}
@ -201,9 +201,9 @@ void RimViewLinker::updateRangeFilters(RimCellRangeFilter* changedRangeFilter)
//--------------------------------------------------------------------------------------------------
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())
{
viewLink->updateOverrides();
@ -220,11 +220,11 @@ void RimViewLinker::updateOverrides()
//--------------------------------------------------------------------------------------------------
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());
}
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()
{
updateOverrides();
updateRangeFilters(NULL);
updateCellResult();
updateTimeStep(m_masterView, m_masterView->currentTimeStep());
updateScaleZ(m_masterView, m_masterView->scaleZ());
updateCamera(m_masterView);
updateTimeStep(m_masterView, m_masterView->currentTimeStep());
}
//--------------------------------------------------------------------------------------------------
@ -297,7 +294,7 @@ void RimViewLinker::setMasterView(RimView* view)
if (previousViewController)
{
delete previousViewController;
this->viewLinks.removeChildObject(NULL);
this->m_viewControllers.removeChildObject(NULL);
}
this->removeOverrides();
@ -322,11 +319,11 @@ void RimViewLinker::allViews(std::vector<RimView*>& views)
{
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)
{
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()
{
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);
RimViewController* viewLink = new RimViewController;
this->viewLinks.push_back(viewLink);
RimViewController* viewContr = new RimViewController;
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)
{
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);
private:
caf::PdmChildArrayField<RimViewController*> viewLinks;
caf::PdmChildArrayField<RimViewController*> m_viewControllers;
caf::PdmPtrField<RimView*> m_masterView;
caf::PdmField<QString> m_name;
QIcon m_originalIcon;