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

View File

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

View File

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

View File

@ -28,11 +28,12 @@
#include "RimEclipseFaultColors.h" #include "RimEclipseFaultColors.h"
#include "RimEclipsePropertyFilter.h" #include "RimEclipsePropertyFilter.h"
#include "RimEclipseView.h" #include "RimEclipseView.h"
#include "RimManagedViewCollection.h"
#include "RimReservoirCellResultsStorage.h" #include "RimReservoirCellResultsStorage.h"
#include "RimView.h" #include "RimView.h"
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
#include "RimProject.h"
#include "RimLinkedViews.h"
CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition"); CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition");
@ -153,10 +154,16 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
this->firstAnchestorOrThisOfType(view); this->firstAnchestorOrThisOfType(view);
if (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()); RimEclipsePropertyFilter* propFilter = dynamic_cast<RimEclipsePropertyFilter*>(this->parentField()->ownerObject());

View File

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

View File

@ -30,11 +30,12 @@
#include "RimGeoMechCellColors.h" #include "RimGeoMechCellColors.h"
#include "RimGeoMechPropertyFilter.h" #include "RimGeoMechPropertyFilter.h"
#include "RimGeoMechView.h" #include "RimGeoMechView.h"
#include "RimManagedViewCollection.h"
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
#include "RimProject.h"
#include "RimLinkedViews.h"
namespace caf { namespace caf {
@ -188,7 +189,19 @@ void RimGeoMechResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha
if (dynamic_cast<RimGeoMechCellColors*>(this)) 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 "RimEclipseCellColors.h"
#include "RimEclipseResultDefinition.h" #include "RimEclipseResultDefinition.h"
#include "RimEclipseView.h" #include "RimEclipseView.h"
#include "RimGeoMechCellColors.h"
#include "RimGeoMechResultDefinition.h"
#include "RimGeoMechView.h"
#include "RimManagedViewConfig.h" #include "RimManagedViewConfig.h"
#include "RimProject.h"
#include "RimView.h" #include "RimView.h"
#include "RiuViewer.h" #include "RiuViewer.h"
#include "cvfCamera.h" #include "cvfCamera.h"
#include "cvfMatrix4.h" #include "cvfMatrix4.h"
#include "RimGeoMechView.h" #include "cafPdmUiTreeOrdering.h"
#include "RimGeoMechResultDefinition.h"
#include "RimGeoMechCellColors.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", "", "", ""); CAF_PDM_InitFieldNoDefault(&viewConfigs, "ManagedViews", "Managed Views", "", "", "");
viewConfigs.uiCapability()->setUiHidden(true); 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++) for (size_t i = 0; i < viewConfigs.size(); i++)
{ {
RimManagedViewConfig* managedViewConfig = viewConfigs[i]; RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView()) if (managedViewConfig->managedView() && managedViewConfig->managedView() != sourceView)
{ {
if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer()) 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; RimView* rimView = mainView;
firstAnchestorOrThisOfType(masterView); RimEclipseView* masterEclipseView = dynamic_cast<RimEclipseView*>(rimView);
RimEclipseView* masterEclipseView = dynamic_cast<RimEclipseView*>(masterView);
if (masterEclipseView && masterEclipseView->cellResult()) if (masterEclipseView && masterEclipseView->cellResult())
{ {
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult(); RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
@ -101,14 +124,11 @@ void RimManagedViewCollection::updateCellResult()
eclipeView->cellResult()->setResultVariable(eclipseCellResultDefinition->resultVariable()); 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()) if (masterGeoView && masterGeoView->cellResult())
{ {
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult(); RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
@ -128,9 +148,6 @@ void RimManagedViewCollection::updateCellResult()
geoView->scheduleCreateDisplayModelAndRedraw(); 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++) for (size_t i = 0; i < viewConfigs.size(); i++)
{ {
@ -167,9 +184,6 @@ void RimManagedViewCollection::updateRangeFilters()
geoView->scheduleCreateDisplayModelAndRedraw(); 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++) for (size_t i = 0; i < viewConfigs.size(); i++)
{ {
@ -190,8 +204,7 @@ void RimManagedViewCollection::updatePropertyFilters()
RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView); RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView);
if (eclipeView) if (eclipeView)
{ {
eclipeView->scheduleGeometryRegen(RANGE_FILTERED); eclipeView->scheduleGeometryRegen(PROPERTY_FILTERED);
eclipeView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
eclipeView->scheduleCreateDisplayModelAndRedraw(); eclipeView->scheduleCreateDisplayModelAndRedraw();
} }
@ -204,9 +217,6 @@ void RimManagedViewCollection::updatePropertyFilters()
geoView->scheduleCreateDisplayModelAndRedraw(); 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++) 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++) for (size_t i = 0; i < viewConfigs.size(); i++)
{ {
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView()) if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView())
{ {
views.push_back(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(); configureOverrides();
updateCellResult(); updateCellResult();
updateTimeStep(masterView->currentTimeStep()); updateTimeStep(NULL, mainView->currentTimeStep());
updateRangeFilters(); updateRangeFilters();
updatePropertyFilters(); 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 "cafPdmChildArrayField.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrField.h"
class RimManagedViewConfig; class RimManagedViewConfig;
class RiuViewer; class RiuViewer;
@ -33,19 +34,22 @@ class RimView;
/// ///
/// ///
//================================================================================================== //==================================================================================================
class RimManagedViewCollection : public caf::PdmObject class RimLinkedViews : public caf::PdmObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public: public:
RimManagedViewCollection(void); RimLinkedViews(void);
virtual ~RimManagedViewCollection(void); virtual ~RimLinkedViews(void);
caf::PdmPtrField<RimView*> mainView;
caf::PdmField<QString> name;
caf::PdmChildArrayField<RimManagedViewConfig*> viewConfigs; caf::PdmChildArrayField<RimManagedViewConfig*> viewConfigs;
void applyAllOperations(); void applyAllOperations();
void updateTimeStep(int timeStep); void updateTimeStep(RimView* sourceView, int timeStep);
void updateCellResult(); void updateCellResult();
void updateRangeFilters(); void updateRangeFilters();
@ -54,4 +58,13 @@ public:
void configureOverrides(); void configureOverrides();
void allViewsForCameraSync(std::vector<RimView*>& views); 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 "RimEclipseView.h"
#include "RimGeoMechPropertyFilterCollection.h" #include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechView.h" #include "RimGeoMechView.h"
#include "RimManagedViewCollection.h" #include "RimLinkedViews.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimView.h" #include "RimView.h"
@ -46,6 +46,7 @@ RimManagedViewConfig::RimManagedViewConfig(void)
QString defaultName = "View Config : Empty view"; QString defaultName = "View Config : Empty view";
CAF_PDM_InitField(&name, "Name", defaultName, "Managed View Name", "", "", ""); CAF_PDM_InitField(&name, "Name", defaultName, "Managed View Name", "", "", "");
name.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&managedView, "ManagedView", "Managed View", "", "", ""); CAF_PDM_InitFieldNoDefault(&managedView, "ManagedView", "Managed View", "", "", "");
managedView.uiCapability()->setUiChildrenHidden(true); 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) 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; if (managedView && managedView->viewer()) managedView->viewer()->update();
firstAnchestorOrThisOfType(masterView);
masterView->viewer()->update();
} }
else if (changedField == &syncCellResult) else if (changedField == &syncTimeStep && syncTimeStep())
{ {
// When cell result is activated, update cell result in managed views if (managedView)
// Original result Will not be restored when cell result is disabled
if (syncCellResult())
{ {
RimView* masterView = NULL; RimLinkedViews* linkedViews = NULL;
firstAnchestorOrThisOfType(masterView); this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateTimeStep(managedView, managedView->currentTimeStep());
masterView->managedViewCollection()->updateCellResult();
} }
} }
else if (changedField == &syncCellResult && syncCellResult())
{
RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
}
else if (changedField == &syncRangeFilters) else if (changedField == &syncRangeFilters)
{ {
configureOverridesUpdateDisplayModel(); configureOverridesUpdateDisplayModel();
@ -146,10 +146,9 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
{ {
if (syncCellResult()) if (syncCellResult())
{ {
RimView* masterView = NULL; RimLinkedViews* linkedViews = NULL;
firstAnchestorOrThisOfType(masterView); this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->updateCellResult();
masterView->managedViewCollection()->updateCellResult();
} }
name = displayNameForView(managedView); name = displayNameForView(managedView);
@ -174,7 +173,9 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
geoView->setOverridePropertyFilterCollection(NULL); geoView->setOverridePropertyFilterCollection(NULL);
} }
rimView->managedViewCollection()->configureOverrides(); RimLinkedViews* linkedViews = NULL;
this->firstAnchestorOrThisOfType(linkedViews);
linkedViews->configureOverrides();
} }
updateDisplayName(); updateDisplayName();
@ -241,8 +242,10 @@ void RimManagedViewConfig::configureOverridesUpdateDisplayModel()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimManagedViewConfig::configureOverrides() void RimManagedViewConfig::configureOverrides()
{ {
RimView* masterView = NULL; RimLinkedViews* linkedViews = NULL;
firstAnchestorOrThisOfType(masterView); this->firstAnchestorOrThisOfType(linkedViews);
RimView* masterView = linkedViews->mainView();
if (managedView) 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) QString RimManagedViewConfig::displayNameForView(RimView* view)
{ {
return RimLinkedViews::displayNameForView(view);
/*
CVF_ASSERT(view); CVF_ASSERT(view);
RimCase* rimCase = NULL; RimCase* rimCase = NULL;
@ -307,6 +309,7 @@ QString RimManagedViewConfig::displayNameForView(RimView* view)
QString displayName = rimCase->caseUserDescription() + " : " + view->name; QString displayName = rimCase->caseUserDescription() + " : " + view->name;
return displayName; return displayName;
*/
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -40,7 +40,6 @@
#include "RimGeoMechCase.h" #include "RimGeoMechCase.h"
#include "RimGeoMechModels.h" #include "RimGeoMechModels.h"
#include "RimIdenticalGridCaseGroup.h" #include "RimIdenticalGridCaseGroup.h"
#include "RimManagedViewCollection.h"
#include "RimManagedViewConfig.h" #include "RimManagedViewConfig.h"
#include "RimOilField.h" #include "RimOilField.h"
#include "RimScriptCollection.h" #include "RimScriptCollection.h"
@ -50,6 +49,7 @@
#include "RimMainPlotCollection.h" #include "RimMainPlotCollection.h"
#include "RimWellLogPlotCollection.h" #include "RimWellLogPlotCollection.h"
#include "RimWellLogPlot.h" #include "RimWellLogPlot.h"
#include "RimLinkedViews.h"
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
@ -92,6 +92,9 @@ RimProject::RimProject(void)
CAF_PDM_InitFieldNoDefault(&mainPlotCollection, "MainPlotCollection", "Plots", ":/Default.png", "", ""); CAF_PDM_InitFieldNoDefault(&mainPlotCollection, "MainPlotCollection", "Plots", ":/Default.png", "", "");
mainPlotCollection.uiCapability()->setUiHidden(true); mainPlotCollection.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&linkedViews, "LinkedViews", "Linked Views", ":/chain.png", "", "");
linkedViews.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&commandObjects, "CommandObjects", "CommandObjects", "", "", ""); CAF_PDM_InitFieldNoDefault(&commandObjects, "CommandObjects", "CommandObjects", "", "", "");
//wellPathImport.uiCapability()->setUiHidden(true); //wellPathImport.uiCapability()->setUiHidden(true);
@ -751,6 +754,10 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
{ {
commandIds << "RicDeleteItemFeature"; commandIds << "RicDeleteItemFeature";
} }
else if (dynamic_cast<RimLinkedViews*>(uiItem))
{
commandIds << "RicDeleteItemFeature";
}
else if (dynamic_cast<RimWellLogPlotCollection*>(uiItem)) else if (dynamic_cast<RimWellLogPlotCollection*>(uiItem))
{ {
commandIds << "RicNewWellLogPlotFeature"; commandIds << "RicNewWellLogPlotFeature";
@ -769,18 +776,6 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
{ {
commandIds << "RicDeleteItemFeature"; 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()) if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable())
@ -911,6 +906,28 @@ void RimProject::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QS
} }
} }
uiTreeOrdering.add(&linkedViews);
uiTreeOrdering.setForgetRemainingFields(true); 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 RimCommandObject;
class RimEclipseCase; class RimEclipseCase;
class RimIdenticalGridCaseGroup; class RimIdenticalGridCaseGroup;
class RimLinkedViews;
class RimMainPlotCollection;
class RimOilField; class RimOilField;
class RimScriptCollection; class RimScriptCollection;
class RimWellPathImport;
class RimMainPlotCollection;
class RimView; class RimView;
class RimWellPathImport;
namespace caf namespace caf
{ {
@ -64,6 +65,7 @@ public:
caf::PdmChildField<RimScriptCollection*> scriptCollection; caf::PdmChildField<RimScriptCollection*> scriptCollection;
caf::PdmChildField<RimWellPathImport*> wellPathImport; caf::PdmChildField<RimWellPathImport*> wellPathImport;
caf::PdmChildField<RimMainPlotCollection*> mainPlotCollection; caf::PdmChildField<RimMainPlotCollection*> mainPlotCollection;
caf::PdmChildArrayField<RimLinkedViews*> linkedViews;
caf::PdmChildArrayField<RimCommandObject*> commandObjects; caf::PdmChildArrayField<RimCommandObject*> commandObjects;
caf::PdmField<QString> treeViewState; caf::PdmField<QString> treeViewState;
caf::PdmField<QString> currentModelIndexPath; caf::PdmField<QString> currentModelIndexPath;
@ -89,6 +91,8 @@ public:
void actionsBasedOnSelection(QMenu& contextMenu); void actionsBasedOnSelection(QMenu& contextMenu);
RimLinkedViews* findLinkedViewsGroupForView(RimView* view);
protected: protected:
// Overridden methods // Overridden methods
void initScriptDirectories(); void initScriptDirectories();

View File

@ -5,7 +5,7 @@
#include "Rim3dOverlayInfoConfig.h" #include "Rim3dOverlayInfoConfig.h"
#include "RimCellRangeFilterCollection.h" #include "RimCellRangeFilterCollection.h"
#include "RimManagedViewCollection.h" #include "RimLinkedViews.h"
#include "RimOilField.h" #include "RimOilField.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimWellPathCollection.h" #include "RimWellPathCollection.h"
@ -86,10 +86,6 @@ RimView::RimView(void)
CAF_PDM_InitField(&m_currentTimeStep, "CurrentTimeStep", 0, "Current Time Step", "", "", ""); CAF_PDM_InitField(&m_currentTimeStep, "CurrentTimeStep", 0, "Current Time Step", "", "", "");
m_currentTimeStep.uiCapability()->setUiHidden(true); 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", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_overlayInfoConfig, "OverlayInfoConfig", "Info Box", "", "", "");
m_overlayInfoConfig = new Rim3dOverlayInfoConfig(); m_overlayInfoConfig = new Rim3dOverlayInfoConfig();
m_overlayInfoConfig->setReservoirView(this); m_overlayInfoConfig->setReservoirView(this);
@ -456,7 +452,13 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
{ {
m_viewer->issueBaseClassUpdate(); 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) else if (changedField == &backgroundColor)

View File

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

View File

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