(#395) Moved managed views from RimView to RimProject

This commit is contained in:
Magne Sjaastad 2015-09-01 17:14:22 +02:00
parent 52281633d6
commit 7969e22364
16 changed files with 324 additions and 152 deletions

View File

@ -21,7 +21,7 @@
#include "RiaApplication.h"
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RimManagedViewConfig.h"
#include "RimProject.h"
#include "RimView.h"
@ -57,28 +57,32 @@ void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked)
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimView*> views;
proj->allVisibleViews(views);
CVF_ASSERT(views.size() > 1);
RimView* masterView = views[0];
RimManagedViewCollection* managedViewCollection = masterView->managedViewCollection();
RimLinkedViews* linkedViews = new RimLinkedViews;
linkedViews->mainView = masterView;
for (size_t i = 1; i < views.size(); i++)
{
RimView* rimView = views[i];
RimManagedViewConfig* viewConfig = new RimManagedViewConfig;
viewConfig->managedView = rimView;
managedViewCollection->viewConfigs.push_back(viewConfig);
linkedViews->viewConfigs.push_back(viewConfig);
viewConfig->initAfterReadRecursively();
}
managedViewCollection->applyAllOperations();
managedViewCollection->updateConnectedEditors();
proj->linkedViews.push_back(linkedViews);
proj->linkedViews.uiCapability()->updateConnectedEditors();
linkedViews->applyAllOperations();
linkedViews->updateConnectedEditors();
// Set managed view collection to selected and expanded in project tree
caf::PdmUiTreeView* projTreeView = RiuMainWindow::instance()->projectTreeView();
QModelIndex modIndex = projTreeView->findModelIndex(managedViewCollection);
QModelIndex modIndex = projTreeView->findModelIndex(linkedViews);
projTreeView->treeView()->setCurrentIndex(modIndex);
projTreeView->treeView()->setExpanded(modIndex, true);

View File

@ -60,12 +60,12 @@ ${CEE_CURRENT_LIST_DIR}RimView.h
${CEE_CURRENT_LIST_DIR}RimCase.h
${CEE_CURRENT_LIST_DIR}RimTreeViewStateSerializer.h
${CEE_CURRENT_LIST_DIR}RimManagedViewConfig.h
${CEE_CURRENT_LIST_DIR}RimManagedViewCollection.h
${CEE_CURRENT_LIST_DIR}RimMainPlotCollection.h
${CEE_CURRENT_LIST_DIR}RimWellLogPlotCollection.h
${CEE_CURRENT_LIST_DIR}RimWellLogPlot.h
${CEE_CURRENT_LIST_DIR}RimWellLogPlotTrace.h
${CEE_CURRENT_LIST_DIR}RimWellLogPlotCurve.h
${CEE_CURRENT_LIST_DIR}RimLinkedViews.h
)
set (SOURCE_GROUP_SOURCE_FILES
@ -124,12 +124,12 @@ ${CEE_CURRENT_LIST_DIR}RimView.cpp
${CEE_CURRENT_LIST_DIR}RimCase.cpp
${CEE_CURRENT_LIST_DIR}RimTreeViewStateSerializer.cpp
${CEE_CURRENT_LIST_DIR}RimManagedViewConfig.cpp
${CEE_CURRENT_LIST_DIR}RimManagedViewCollection.cpp
${CEE_CURRENT_LIST_DIR}RimMainPlotCollection.cpp
${CEE_CURRENT_LIST_DIR}RimWellLogPlotCollection.cpp
${CEE_CURRENT_LIST_DIR}RimWellLogPlot.cpp
${CEE_CURRENT_LIST_DIR}RimWellLogPlotTrace.cpp
${CEE_CURRENT_LIST_DIR}RimWellLogPlotCurve.cpp
${CEE_CURRENT_LIST_DIR}RimLinkedViews.cpp
)
list(APPEND CODE_HEADER_FILES

View File

@ -31,7 +31,8 @@
#include "RimEclipseView.h"
#include "RimGeoMechCase.h"
#include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RimProject.h"
#include "cafPdmUiEditorHandle.h"
@ -147,16 +148,22 @@ void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* c
//--------------------------------------------------------------------------------------------------
void RimCellRangeFilterCollection::updateDisplayModeNotifyManagedViews()
{
RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView);
RimView* view = NULL;
firstAnchestorOrThisOfType(view);
rimView->scheduleGeometryRegen(RANGE_FILTERED);
rimView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
view->scheduleGeometryRegen(RANGE_FILTERED);
view->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
rimView->scheduleCreateDisplayModelAndRedraw();
view->scheduleCreateDisplayModelAndRedraw();
// Notify managed views of range filter change in master view
rimView->managedViewCollection()->updateRangeFilters();
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(view);
if (linkedViews)
{
linkedViews->updateRangeFilters();
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -23,7 +23,8 @@
#include "RimEclipseCellColors.h"
#include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h"
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RimProject.h"
#include "cafPdmUiEditorHandle.h"
@ -145,6 +146,12 @@ void RimEclipsePropertyFilterCollection::updateDisplayModelNotifyManagedViews()
view->scheduleGeometryRegen(PROPERTY_FILTERED);
view->scheduleCreateDisplayModelAndRedraw();
// Notify managed views of range filter change in master view
view->managedViewCollection()->updatePropertyFilters();
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(view);
if (linkedViews)
{
linkedViews->updatePropertyFilters();
}
}

View File

@ -28,11 +28,12 @@
#include "RimEclipseFaultColors.h"
#include "RimEclipsePropertyFilter.h"
#include "RimEclipseView.h"
#include "RimManagedViewCollection.h"
#include "RimReservoirCellResultsStorage.h"
#include "RimView.h"
#include "cafPdmUiListEditor.h"
#include "RimProject.h"
#include "RimLinkedViews.h"
CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition");
@ -153,10 +154,16 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
this->firstAnchestorOrThisOfType(view);
if (view)
{
view->managedViewCollection->updateCellResult();
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(view);
if (linkedViews)
{
linkedViews->updateCellResult();
}
}
}
}
RimEclipsePropertyFilter* propFilter = dynamic_cast<RimEclipsePropertyFilter*>(this->parentField()->ownerObject());

View File

@ -22,9 +22,10 @@
#include "RimGeoMechCellColors.h"
#include "RimGeoMechPropertyFilter.h"
#include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RimProject.h"
#include "cvfAssert.h"
#include "RimLinkedViews.h"
CAF_PDM_SOURCE_INIT(RimGeoMechPropertyFilterCollection, "GeoMechPropertyFilters");
@ -147,6 +148,12 @@ void RimGeoMechPropertyFilterCollection::updateDisplayModelNotifyManagedViews()
view->scheduleGeometryRegen(PROPERTY_FILTERED);
view->scheduleCreateDisplayModelAndRedraw();
// Notify managed views of range filter change in master view
view->managedViewCollection()->updatePropertyFilters();
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(view);
if (linkedViews)
{
linkedViews->updatePropertyFilters();
}
}

View File

@ -30,11 +30,12 @@
#include "RimGeoMechCellColors.h"
#include "RimGeoMechPropertyFilter.h"
#include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RiuMainWindow.h"
#include "cafPdmUiListEditor.h"
#include "RimProject.h"
#include "RimLinkedViews.h"
namespace caf {
@ -188,7 +189,19 @@ void RimGeoMechResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
if (dynamic_cast<RimGeoMechCellColors*>(this))
{
if (view) view->managedViewCollection->updateCellResult();
RimView* view = NULL;
this->firstAnchestorOrThisOfType(view);
if (view)
{
RimProject* proj = NULL;
view->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(view);
if (linkedViews)
{
linkedViews->updateCellResult();
}
}
}
}
}

View File

@ -17,31 +17,41 @@
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RiaApplication.h"
#include "RimCase.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h"
#include "RimGeoMechCellColors.h"
#include "RimGeoMechResultDefinition.h"
#include "RimGeoMechView.h"
#include "RimManagedViewConfig.h"
#include "RimProject.h"
#include "RimView.h"
#include "RiuViewer.h"
#include "cvfCamera.h"
#include "cvfMatrix4.h"
#include "RimGeoMechView.h"
#include "RimGeoMechResultDefinition.h"
#include "RimGeoMechCellColors.h"
#include "cafPdmUiTreeOrdering.h"
CAF_PDM_SOURCE_INIT(RimManagedViewCollection, "RimManagedViewCollection");
CAF_PDM_SOURCE_INIT(RimLinkedViews, "RimLinkedViews");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimManagedViewCollection::RimManagedViewCollection(void)
RimLinkedViews::RimLinkedViews(void)
{
CAF_PDM_InitObject("Managed Views", ":/chain.png", "", "");
CAF_PDM_InitObject("Linked Views", ":/chain.png", "", "");
CAF_PDM_InitField(&name, "Name", QString("View Group Name"), "View Group Name", "", "", "");
CAF_PDM_InitFieldNoDefault(&mainView, "MainView", "Main View", "", "", "");
mainView.uiCapability()->setUiChildrenHidden(true);
CAF_PDM_InitFieldNoDefault(&viewConfigs, "ManagedViews", "Managed Views", "", "", "");
viewConfigs.uiCapability()->setUiHidden(true);
@ -50,23 +60,38 @@ RimManagedViewCollection::RimManagedViewCollection(void)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimManagedViewCollection::~RimManagedViewCollection(void)
RimLinkedViews::~RimLinkedViews(void)
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updateTimeStep(int timeStep)
void RimLinkedViews::updateTimeStep(RimView* sourceView, int timeStep)
{
RimManagedViewConfig* sourceViewConfig = viewConfigForView(sourceView);
if (sourceViewConfig && !sourceViewConfig->syncTimeStep())
{
return;
}
if (sourceView && sourceView != mainView)
{
mainView->viewer()->setCurrentFrame(timeStep);
}
else
{
mainView->viewer()->setCurrentFrame(timeStep);
}
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
if (managedViewConfig->managedView() && managedViewConfig->managedView() != sourceView)
{
if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer())
{
managedViewConfig->managedView()->viewer()->slotSetCurrentFrame(timeStep);
managedViewConfig->managedView()->viewer()->setCurrentFrame(timeStep);
}
}
}
@ -75,12 +100,10 @@ void RimManagedViewCollection::updateTimeStep(int timeStep)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updateCellResult()
void RimLinkedViews::updateCellResult()
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
RimEclipseView* masterEclipseView = dynamic_cast<RimEclipseView*>(masterView);
RimView* rimView = mainView;
RimEclipseView* masterEclipseView = dynamic_cast<RimEclipseView*>(rimView);
if (masterEclipseView && masterEclipseView->cellResult())
{
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
@ -101,14 +124,11 @@ void RimManagedViewCollection::updateCellResult()
eclipeView->cellResult()->setResultVariable(eclipseCellResultDefinition->resultVariable());
}
}
// Notify recursively
managedViewConfig->managedView()->managedViewCollection()->updateCellResult();
}
}
}
RimGeoMechView* masterGeoView = dynamic_cast<RimGeoMechView*>(masterView);
RimGeoMechView* masterGeoView = dynamic_cast<RimGeoMechView*>(rimView);
if (masterGeoView && masterGeoView->cellResult())
{
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
@ -128,9 +148,6 @@ void RimManagedViewCollection::updateCellResult()
geoView->scheduleCreateDisplayModelAndRedraw();
}
}
// Notify recursively
managedViewConfig->managedView()->managedViewCollection()->updateCellResult();
}
}
}
@ -139,7 +156,7 @@ void RimManagedViewCollection::updateCellResult()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updateRangeFilters()
void RimLinkedViews::updateRangeFilters()
{
for (size_t i = 0; i < viewConfigs.size(); i++)
{
@ -167,9 +184,6 @@ void RimManagedViewCollection::updateRangeFilters()
geoView->scheduleCreateDisplayModelAndRedraw();
}
}
// Notify recursively
managedViewConfig->managedView()->managedViewCollection()->updateRangeFilters();
}
}
}
@ -177,7 +191,7 @@ void RimManagedViewCollection::updateRangeFilters()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updatePropertyFilters()
void RimLinkedViews::updatePropertyFilters()
{
for (size_t i = 0; i < viewConfigs.size(); i++)
{
@ -190,8 +204,7 @@ void RimManagedViewCollection::updatePropertyFilters()
RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView);
if (eclipeView)
{
eclipeView->scheduleGeometryRegen(RANGE_FILTERED);
eclipeView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
eclipeView->scheduleGeometryRegen(PROPERTY_FILTERED);
eclipeView->scheduleCreateDisplayModelAndRedraw();
}
@ -204,9 +217,6 @@ void RimManagedViewCollection::updatePropertyFilters()
geoView->scheduleCreateDisplayModelAndRedraw();
}
}
// Notify recursively
managedViewConfig->managedView()->managedViewCollection()->updatePropertyFilters();
}
}
}
@ -214,7 +224,7 @@ void RimManagedViewCollection::updatePropertyFilters()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::configureOverrides()
void RimLinkedViews::configureOverrides()
{
for (size_t i = 0; i < viewConfigs.size(); i++)
{
@ -226,15 +236,15 @@ void RimManagedViewCollection::configureOverrides()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::allViewsForCameraSync(std::vector<RimView*>& views)
void RimLinkedViews::allViewsForCameraSync(std::vector<RimView*>& views)
{
views.push_back(mainView());
for (size_t i = 0; i < viewConfigs.size(); i++)
{
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView())
{
views.push_back(viewConfigs[i]->managedView());
viewConfigs[i]->managedView()->managedViewCollection()->allViewsForCameraSync(views);
}
}
}
@ -242,15 +252,82 @@ void RimManagedViewCollection::allViewsForCameraSync(std::vector<RimView*>& view
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::applyAllOperations()
void RimLinkedViews::applyAllOperations()
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
configureOverrides();
updateCellResult();
updateTimeStep(masterView->currentTimeStep());
updateTimeStep(NULL, mainView->currentTimeStep());
updateRangeFilters();
updatePropertyFilters();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimLinkedViews::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> optionList;
if (fieldNeedingOptions == &mainView)
{
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimView*> views;
proj->allVisibleViews(views);
for (size_t i = 0; i < views.size(); i++)
{
optionList.push_back(caf::PdmOptionItemInfo(displayNameForView(views[i]), QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(views[i]))));
}
if (optionList.size() > 0)
{
optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(NULL))));
}
}
return optionList;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimLinkedViews::displayNameForView(RimView* view)
{
RimCase* rimCase = NULL;
view->firstAnchestorOrThisOfType(rimCase);
QString displayName = rimCase->caseUserDescription() + " : " + view->name;
return displayName;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimLinkedViews::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/)
{
for (size_t cIdx = 0; cIdx < viewConfigs.size(); ++cIdx)
{
PdmObjectHandle* childObject = viewConfigs[cIdx];
if (childObject)
{
uiTreeOrdering.add(childObject);
}
}
uiTreeOrdering.setForgetRemainingFields(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimManagedViewConfig* RimLinkedViews::viewConfigForView(RimView* view)
{
for (size_t i = 0; i < viewConfigs.size(); i++)
{
if (viewConfigs[i]->managedView() == view) return viewConfigs[i];
}
return NULL;
}

View File

@ -24,6 +24,7 @@
#include "cafPdmChildArrayField.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include "cafPdmPtrField.h"
class RimManagedViewConfig;
class RiuViewer;
@ -33,19 +34,22 @@ class RimView;
///
///
//==================================================================================================
class RimManagedViewCollection : public caf::PdmObject
class RimLinkedViews : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RimManagedViewCollection(void);
virtual ~RimManagedViewCollection(void);
RimLinkedViews(void);
virtual ~RimLinkedViews(void);
caf::PdmPtrField<RimView*> mainView;
caf::PdmField<QString> name;
caf::PdmChildArrayField<RimManagedViewConfig*> viewConfigs;
void applyAllOperations();
void updateTimeStep(int timeStep);
void updateTimeStep(RimView* sourceView, int timeStep);
void updateCellResult();
void updateRangeFilters();
@ -54,4 +58,13 @@ public:
void configureOverrides();
void allViewsForCameraSync(std::vector<RimView*>& views);
public:
static QString displayNameForView(RimView* view);
RimManagedViewConfig* viewConfigForView(RimView* view);
protected:
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly);
virtual caf::PdmFieldHandle* userDescriptionField() { return &name; }
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
};

View File

@ -27,7 +27,7 @@
#include "RimEclipseView.h"
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RimProject.h"
#include "RimView.h"
@ -46,6 +46,7 @@ RimManagedViewConfig::RimManagedViewConfig(void)
QString defaultName = "View Config : Empty view";
CAF_PDM_InitField(&name, "Name", defaultName, "Managed View Name", "", "", "");
name.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&managedView, "ManagedView", "Managed View", "", "", "");
managedView.uiCapability()->setUiChildrenHidden(true);
@ -110,26 +111,25 @@ void RimManagedViewConfig::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOr
//--------------------------------------------------------------------------------------------------
void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if (changedField == &syncCamera || changedField == &syncTimeStep)
if (changedField == &syncCamera && syncCamera())
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
masterView->viewer()->update();
if (managedView && managedView->viewer()) managedView->viewer()->update();
}
else if (changedField == &syncCellResult)
else if (changedField == &syncTimeStep && syncTimeStep())
{
// When cell result is activated, update cell result in managed views
// Original result Will not be restored when cell result is disabled
if (syncCellResult())
if (managedView)
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
masterView->managedViewCollection()->updateCellResult();
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateTimeStep(managedView, managedView->currentTimeStep());
}
}
else if (changedField == &syncCellResult && syncCellResult())
{
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
}
else if (changedField == &syncRangeFilters)
{
configureOverridesUpdateDisplayModel();
@ -146,10 +146,9 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
{
if (syncCellResult())
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
masterView->managedViewCollection()->updateCellResult();
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
}
name = displayNameForView(managedView);
@ -174,7 +173,9 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
geoView->setOverridePropertyFilterCollection(NULL);
}
rimView->managedViewCollection()->configureOverrides();
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->configureOverrides();
}
updateDisplayName();
@ -241,8 +242,10 @@ void RimManagedViewConfig::configureOverridesUpdateDisplayModel()
//--------------------------------------------------------------------------------------------------
void RimManagedViewConfig::configureOverrides()
{
RimView* masterView = NULL;
firstAnchestorOrThisOfType(masterView);
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
RimView* masterView = linkedViews->mainView();
if (managedView)
{
@ -288,9 +291,6 @@ void RimManagedViewConfig::configureOverrides()
}
}
}
// Propagate overrides in current view to managed views
managedView->managedViewCollection()->configureOverrides();
}
}
@ -299,6 +299,8 @@ void RimManagedViewConfig::configureOverrides()
//--------------------------------------------------------------------------------------------------
QString RimManagedViewConfig::displayNameForView(RimView* view)
{
return RimLinkedViews::displayNameForView(view);
/*
CVF_ASSERT(view);
RimCase* rimCase = NULL;
@ -307,6 +309,7 @@ QString RimManagedViewConfig::displayNameForView(RimView* view)
QString displayName = rimCase->caseUserDescription() + " : " + view->name;
return displayName;
*/
}
//--------------------------------------------------------------------------------------------------

View File

@ -40,7 +40,6 @@
#include "RimGeoMechCase.h"
#include "RimGeoMechModels.h"
#include "RimIdenticalGridCaseGroup.h"
#include "RimManagedViewCollection.h"
#include "RimManagedViewConfig.h"
#include "RimOilField.h"
#include "RimScriptCollection.h"
@ -50,6 +49,7 @@
#include "RimMainPlotCollection.h"
#include "RimWellLogPlotCollection.h"
#include "RimWellLogPlot.h"
#include "RimLinkedViews.h"
#include "RiuMainWindow.h"
@ -92,6 +92,9 @@ RimProject::RimProject(void)
CAF_PDM_InitFieldNoDefault(&mainPlotCollection, "MainPlotCollection", "Plots", ":/Default.png", "", "");
mainPlotCollection.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&linkedViews, "LinkedViews", "Linked Views", ":/chain.png", "", "");
linkedViews.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&commandObjects, "CommandObjects", "CommandObjects", "", "", "");
//wellPathImport.uiCapability()->setUiHidden(true);
@ -751,6 +754,10 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
{
commandIds << "RicDeleteItemFeature";
}
else if (dynamic_cast<RimLinkedViews*>(uiItem))
{
commandIds << "RicDeleteItemFeature";
}
else if (dynamic_cast<RimWellLogPlotCollection*>(uiItem))
{
commandIds << "RicNewWellLogPlotFeature";
@ -769,18 +776,6 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
{
commandIds << "RicDeleteItemFeature";
}
if (dynamic_cast<RimManagedViewCollection*>(uiItem))
{
RimManagedViewCollection* viewCollection = dynamic_cast<RimManagedViewCollection*>(uiItem);
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&viewCollection->viewConfigs);
commandIds << "PdmListField_AddItem";
}
else
{
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(NULL);
}
}
if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable())
@ -911,6 +906,28 @@ void RimProject::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QS
}
}
uiTreeOrdering.add(&linkedViews);
uiTreeOrdering.setForgetRemainingFields(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimLinkedViews* RimProject::findLinkedViewsGroupForView(RimView* view)
{
for (size_t i = 0; i < linkedViews.size(); i++)
{
RimLinkedViews* group = linkedViews[i];
if (view == group->mainView()) return group;
for (size_t j = 0; j < group->viewConfigs.size(); j++)
{
RimManagedViewConfig* viewConfig = group->viewConfigs[j];
if (viewConfig->managedView() == view) return group;
}
}
return NULL;
}

View File

@ -33,11 +33,12 @@ class RimCase;
class RimCommandObject;
class RimEclipseCase;
class RimIdenticalGridCaseGroup;
class RimLinkedViews;
class RimMainPlotCollection;
class RimOilField;
class RimScriptCollection;
class RimWellPathImport;
class RimMainPlotCollection;
class RimView;
class RimWellPathImport;
namespace caf
{
@ -64,6 +65,7 @@ public:
caf::PdmChildField<RimScriptCollection*> scriptCollection;
caf::PdmChildField<RimWellPathImport*> wellPathImport;
caf::PdmChildField<RimMainPlotCollection*> mainPlotCollection;
caf::PdmChildArrayField<RimLinkedViews*> linkedViews;
caf::PdmChildArrayField<RimCommandObject*> commandObjects;
caf::PdmField<QString> treeViewState;
caf::PdmField<QString> currentModelIndexPath;
@ -89,6 +91,8 @@ public:
void actionsBasedOnSelection(QMenu& contextMenu);
RimLinkedViews* findLinkedViewsGroupForView(RimView* view);
protected:
// Overridden methods
void initScriptDirectories();

View File

@ -5,7 +5,7 @@
#include "Rim3dOverlayInfoConfig.h"
#include "RimCellRangeFilterCollection.h"
#include "RimManagedViewCollection.h"
#include "RimLinkedViews.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimWellPathCollection.h"
@ -86,10 +86,6 @@ RimView::RimView(void)
CAF_PDM_InitField(&m_currentTimeStep, "CurrentTimeStep", 0, "Current Time Step", "", "", "");
m_currentTimeStep.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&managedViewCollection, "ManagedViewCollection", "Managed View Collection", "", "", "");
managedViewCollection = new RimManagedViewCollection;
managedViewCollection.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&m_overlayInfoConfig, "OverlayInfoConfig", "Info Box", "", "", "");
m_overlayInfoConfig = new Rim3dOverlayInfoConfig();
m_overlayInfoConfig->setReservoirView(this);
@ -456,7 +452,13 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
{
m_viewer->issueBaseClassUpdate();
managedViewCollection->updateTimeStep(m_currentTimeStep);
RimProject* proj = NULL;
this->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(this);
if (linkedViews)
{
linkedViews->updateTimeStep(this, m_currentTimeStep);
}
}
}
else if (changedField == &backgroundColor)

View File

@ -34,7 +34,6 @@
class Rim3dOverlayInfoConfig;
class RimCase;
class RimCellRangeFilterCollection;
class RimManagedViewCollection;
class RiuViewer;
namespace cvf
@ -69,8 +68,6 @@ public:
caf::PdmField<int> maximumFrameRate;
caf::PdmField<bool> hasUserRequestedAnimation;
caf::PdmChildField<RimManagedViewCollection*> managedViewCollection;
RimCellRangeFilterCollection* rangeFilterCollection();
const RimCellRangeFilterCollection* rangeFilterCollection() const;
void setOverrideRangeFilterCollection(RimCellRangeFilterCollection* rfc);

View File

@ -42,7 +42,6 @@
#include "RimFaultCollection.h"
#include "RimGeoMechCase.h"
#include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RimManagedViewConfig.h"
#include "RimProject.h"
#include "RimReservoirCellResultsStorage.h"
@ -64,6 +63,7 @@
#include "cafNavigationPolicy.h"
#include "cafPdmFieldCvfColor.h"
#include "cafPdmFieldCvfMat4d.h"
#include "RimLinkedViews.h"
using cvf::ManipulatorTrackball;
@ -271,18 +271,18 @@ void RiuViewer::slotEndAnimation()
//--------------------------------------------------------------------------------------------------
void RiuViewer::slotSetCurrentFrame(int frameIndex)
{
cvf::Rendering* firstRendering = m_renderingSequence->firstRendering();
CVF_ASSERT(firstRendering);
if (m_reservoirView) m_reservoirView->setCurrentTimeStep(frameIndex);
caf::Viewer::slotSetCurrentFrame(frameIndex);
setCurrentFrame(frameIndex);
if (m_reservoirView)
{
m_reservoirView->managedViewCollection()->updateTimeStep(frameIndex);
RimProject* proj = NULL;
m_reservoirView->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(m_reservoirView);
if (linkedViews)
{
linkedViews->updateTimeStep(m_reservoirView, frameIndex);
}
}
}
//--------------------------------------------------------------------------------------------------
@ -509,29 +509,28 @@ void RiuViewer::update()
{
viewsToUpdate.push_back(m_reservoirView);
RimView* rimView = m_reservoirView;
std::vector<caf::PdmObjectHandle*> objects;
rimView->objectsWithReferringPtrFields(objects);
while (objects.size() > 0)
RimProject* proj = NULL;
m_reservoirView->firstAnchestorOrThisOfType(proj);
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(m_reservoirView);
if (linkedViews)
{
RimManagedViewConfig* viewConfig = dynamic_cast<RimManagedViewConfig*>(objects[0]);
objects.clear();
RimManagedViewConfig* viewConf = linkedViews->viewConfigForView(m_reservoirView);
if (viewConfig->syncCamera())
// There is no view config for a master view, but all views for sync must be updated
if (!viewConf || viewConf->syncCamera())
{
viewConfig->firstAnchestorOrThisOfType(rimView);
rimView->objectsWithReferringPtrFields(objects);
std::vector<RimView*> allViews;
linkedViews->allViewsForCameraSync(allViews);
for (size_t i = 0; i < allViews.size(); i++)
{
if (allViews[i] != m_reservoirView)
{
viewsToUpdate.push_back(allViews[i]);
}
}
}
}
if (rimView != m_reservoirView)
{
viewsToUpdate.push_back(rimView);
}
rimView->managedViewCollection()->allViewsForCameraSync(viewsToUpdate);
}
// Propagate view matrix to all relevant views
@ -560,3 +559,16 @@ void RiuViewer::issueBaseClassUpdate()
caf::OpenGLWidget::update();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::setCurrentFrame(int frameIndex)
{
cvf::Rendering* firstRendering = m_renderingSequence->firstRendering();
CVF_ASSERT(firstRendering);
if (m_reservoirView) m_reservoirView->setCurrentTimeStep(frameIndex);
caf::Viewer::slotSetCurrentFrame(frameIndex);
}

View File

@ -77,6 +77,8 @@ public:
virtual void update(); // Override of caf::Viewer::update()
void issueBaseClassUpdate();
void setCurrentFrame(int frameIndex);
public slots:
virtual void slotSetCurrentFrame(int frameIndex);
virtual void slotEndAnimation();