(#401) WIP: Refactoring Linked views update system.

Preparing for linking of visible Cells.
This commit is contained in:
Jacob Støren 2015-09-13 08:54:32 +02:00
parent 665d233c38
commit f81cf98580
12 changed files with 125 additions and 29 deletions

View File

@ -21,6 +21,7 @@
enum RivCellSetEnum
{
OVERRIDDEN_CELL_VISIBILITY, ////< Use the total visibility from a different case directly
ALL_CELLS,
ACTIVE, ///< All Active cells without ALL_WELL_CELLS
ALL_WELL_CELLS, ///< All cells ever having a connection to a well (Might be inactive cells as well. Wellhead cells typically)

View File

@ -155,7 +155,7 @@ void RimCellRangeFilterCollection::updateDisplayModeNotifyManagedViews()
view->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
view->scheduleCreateDisplayModelAndRedraw();
/*
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
@ -164,6 +164,7 @@ void RimCellRangeFilterCollection::updateDisplayModeNotifyManagedViews()
{
viewLinker->updateRangeFilters();
}
*/
}
//--------------------------------------------------------------------------------------------------

View File

@ -149,9 +149,11 @@ void RimEclipsePropertyFilterCollection::updateDisplayModelNotifyManagedViews()
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
/*
RimViewLinker* viewLinker = proj->findViewLinkerFromView(view);
if (viewLinker)
{
viewLinker->updatePropertyFilters();
}
*/
}

View File

@ -61,6 +61,7 @@
#include <QMessageBox>
#include <limits.h>
#include "RimViewLinker.h"
@ -835,7 +836,13 @@ RigActiveCellInfo* RimEclipseView::currentActiveCellInfo()
//--------------------------------------------------------------------------------------------------
void RimEclipseView::scheduleGeometryRegen(RivCellSetEnum geometryType)
{
m_reservoirGridPartManager->scheduleGeometryRegen(static_cast<RivCellSetEnum>(geometryType));
m_reservoirGridPartManager->scheduleGeometryRegen(geometryType);
RimViewLinker* viewLinker = viewLinkerWithDepViews();
if (viewLinker)
{
viewLinker->scheduleGeometryRegenForDepViews(geometryType);
}
}
//--------------------------------------------------------------------------------------------------
@ -1536,4 +1543,7 @@ const RimEclipsePropertyFilterCollection* RimEclipseView::propertyFilterCollecti
void RimEclipseView::setOverridePropertyFilterCollection(RimEclipsePropertyFilterCollection* pfc)
{
m_overridePropertyFilterCollection = pfc;
this->scheduleGeometryRegen(PROPERTY_FILTERED);
this->scheduleCreateDisplayModelAndRedraw();
}

View File

@ -151,9 +151,11 @@ void RimGeoMechPropertyFilterCollection::updateDisplayModelNotifyManagedViews()
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
/*
RimViewLinker* viewLinker = proj->findViewLinkerFromView(view);
if (viewLinker)
{
viewLinker->updatePropertyFilters();
}
*/
}

View File

@ -54,6 +54,7 @@
#include "cvfqtUtils.h"
#include <QMessageBox>
#include "RimViewLinker.h"
@ -514,6 +515,12 @@ RimCase* RimGeoMechView::ownerCase()
void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType)
{
m_vizLogic->scheduleGeometryRegen(geometryType);
RimViewLinker* viewLinker = viewLinkerWithDepViews();
if (viewLinker)
{
viewLinker->scheduleGeometryRegenForDepViews(geometryType);
}
}
//--------------------------------------------------------------------------------------------------
@ -522,6 +529,9 @@ void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType)
void RimGeoMechView::setOverridePropertyFilterCollection(RimGeoMechPropertyFilterCollection* pfc)
{
m_overridePropertyFilterCollection = pfc;
this->scheduleGeometryRegen(PROPERTY_FILTERED);
this->scheduleCreateDisplayModelAndRedraw();
}
//--------------------------------------------------------------------------------------------------

View File

@ -191,6 +191,11 @@ void RimView::updateViewerWidget()
void RimView::scheduleCreateDisplayModelAndRedraw()
{
RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this);
RimViewLinker* viewLinker = viewLinkerWithDepViews();
if (viewLinker)
{
viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews();
}
}
//--------------------------------------------------------------------------------------------------
@ -563,6 +568,10 @@ const RimCellRangeFilterCollection* RimView::rangeFilterCollection() const
void RimView::setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc)
{
m_overrideRangeFilterCollection = rfc;
this->scheduleGeometryRegen(RANGE_FILTERED);
this->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
this->scheduleCreateDisplayModelAndRedraw();
}
//--------------------------------------------------------------------------------------------------
@ -709,7 +718,7 @@ bool RimView::isBoundingBoxesOverlappingOrClose(const cvf::BoundingBox& sourceBB
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimViewLinker* RimView::dependentViews()
RimViewLinker* RimView::viewLinkerWithDepViews()
{
RimViewLinker* viewLinker = NULL;
std::vector<caf::PdmObjectHandle*> reffingObjs;

View File

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

View File

@ -217,6 +217,7 @@ void RimViewLink::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons
else if (&syncVisibleCells == changedField)
{
updateOptionSensitivity();
configureOverridesUpdateDisplayModel();
}
}
@ -258,7 +259,7 @@ 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();
@ -275,7 +276,7 @@ void RimViewLink::configureOverridesUpdateDisplayModel()
{
geoView->propertyFilterCollection()->updateDisplayModelNotifyManagedViews();
}
*/
// Todo : Notify the managed view of the possible change of visualCellsOverride
}

View File

@ -44,12 +44,13 @@ public:
RimView* managedView();
void setManagedView(RimView* view);
// Linked (both ways) properties
caf::PdmField<bool> syncCamera;
caf::PdmField<bool> syncTimeStep;
// Overridden properties
caf::PdmField<bool> syncCellResult;
caf::PdmField<bool> syncVisibleCells;
caf::PdmField<bool> syncRangeFilters;
caf::PdmField<bool> syncPropertyFilters;

View File

@ -172,6 +172,11 @@ void RimViewLinker::updateRangeFilters()
{
if (!isActive()) return;
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];
@ -200,6 +205,7 @@ void RimViewLinker::updateRangeFilters()
}
}
}
#endif
}
//--------------------------------------------------------------------------------------------------
@ -208,7 +214,11 @@ void RimViewLinker::updateRangeFilters()
void RimViewLinker::updatePropertyFilters()
{
if (!isActive()) return;
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];
@ -235,6 +245,7 @@ void RimViewLinker::updatePropertyFilters()
}
}
}
#endif
}
//--------------------------------------------------------------------------------------------------
@ -459,3 +470,47 @@ void RimViewLinker::setNameAndIcon()
m_originalIcon = icon;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType)
{
for (size_t i = 0; i < viewLinks.size(); i++)
{
if ( viewLinks[i]->syncVisibleCells()
|| viewLinks[i]->syncPropertyFilters()
|| viewLinks[i]->syncRangeFilters()
)
{
if (viewLinks[i]->managedView())
{
if (viewLinks[i]->syncVisibleCells()) {
viewLinks[i]->managedView()->scheduleGeometryRegen(OVERRIDDEN_CELL_VISIBILITY);
}else{
viewLinks[i]->managedView()->scheduleGeometryRegen(geometryType);
}
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewLinker::scheduleCreateDisplayModelAndRedrawForDependentViews()
{
for (size_t i = 0; i < viewLinks.size(); i++)
{
if (viewLinks[i]->syncVisibleCells()
|| viewLinks[i]->syncPropertyFilters()
|| viewLinks[i]->syncRangeFilters()
)
{
if (viewLinks[i]->managedView())
{
viewLinks[i]->managedView()->scheduleCreateDisplayModelAndRedraw();
}
}
}
}

View File

@ -25,6 +25,7 @@
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include "cafPdmPtrField.h"
#include "RivCellSetEnum.h"
class RimViewLink;
class RiuViewer;
@ -42,30 +43,33 @@ public:
RimViewLinker(void);
virtual ~RimViewLinker(void);
void setMainView(RimView* view);
RimView* mainView();
void setMainView(RimView* view);
RimView* mainView();
caf::PdmChildArrayField<RimViewLink*> viewLinks;
caf::PdmChildArrayField<RimViewLink*> viewLinks;
void applyAllOperations();
void applyAllOperations();
void updateTimeStep(RimView* sourceView, int timeStep);
void updateCellResult();
void updateTimeStep(RimView* sourceView, int timeStep);
void updateScaleZ(RimView* source, double scaleZ);
void allViewsForCameraSync(RimView* source, std::vector<RimView*>& views);
void updateRangeFilters();
void updatePropertyFilters();
void updateCellResult();
void updateRangeFilters();
void updatePropertyFilters();
void configureOverrides();
void scheduleGeometryRegenForDepViews(RivCellSetEnum geometryType);
void scheduleCreateDisplayModelAndRedrawForDependentViews();
void updateScaleZ(RimView* source, double scaleZ);
void allViewsForCameraSync(RimView* source, std::vector<RimView*>& views);
void allViews(std::vector<RimView*>& views);
void configureOverrides();
void updateUiIcon();
void allViews(std::vector<RimView*>& views);
void updateUiIcon();
public:
static QString displayNameForView(RimView* view);
RimViewLink* viewLinkFromView(RimView* view);
static QString displayNameForView(RimView* view);
RimViewLink* viewLinkFromView(RimView* view);
protected:
virtual caf::PdmFieldHandle* userDescriptionField() { return &m_name; }
@ -73,16 +77,16 @@ protected:
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
virtual void initAfterRead();
void setNameAndIcon();
void setNameAndIcon();
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
private:
bool isActive();
bool isActive();
private:
caf::PdmField<bool> m_isActive;
caf::PdmPtrField<RimView*> m_mainView;
caf::PdmField<QString> m_name;
QIcon m_originalIcon;
caf::PdmField<bool> m_isActive;
caf::PdmPtrField<RimView*> m_mainView;
caf::PdmField<QString> m_name;
QIcon m_originalIcon;
};