diff --git a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp index 93e4e99635..e41390c543 100644 --- a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp +++ b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp @@ -38,6 +38,7 @@ bool RicToggleItemsFeatureImpl::isToggleCommandsAvailable() caf::PdmUiObjectHandle* uiObjectHandle = dynamic_cast(selectedItems[0]); QModelIndex modIndex = RiuMainWindow::instance()->projectTreeView()->findModelIndex(selectedItems[0]); caf::PdmUiTreeOrdering* treeItem = static_cast(modIndex.internalPointer()); + if (!treeItem) return false; for (int cIdx = 0; cIdx < treeItem->childCount(); ++ cIdx) { diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index 5877a4c0a7..027cc9d6b3 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -59,6 +59,8 @@ ${CEE_CURRENT_LIST_DIR}RimGeoMechCellColors.h ${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 ) set (SOURCE_GROUP_SOURCE_FILES @@ -116,6 +118,8 @@ ${CEE_CURRENT_LIST_DIR}RimGeoMechCellColors.cpp ${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 ) diff --git a/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp b/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp new file mode 100644 index 0000000000..1d81743235 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp @@ -0,0 +1,95 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimConnectedViews.h" + +#include "RimView.h" + +#include "cafPdmFieldHandle.h" +#include "RimProject.h" +#include "RiaApplication.h" +#include "RimCase.h" + +CAF_PDM_SOURCE_INIT(RimConnectedViews, "RimConnectedViews"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimConnectedViews::RimConnectedViews(void) +{ + CAF_PDM_InitObject("Connected Views", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&masterView, "MasterView", "Master View", "", "", ""); + CAF_PDM_InitFieldNoDefault(&slaveView, "SlaveView", "Slave View", "", "", ""); + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimConnectedViews::~RimConnectedViews(void) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimConnectedViews::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList optionList; + + std::vector views; + allViews(views); + + for (size_t i = 0; i< views.size(); i++) + { + optionList.push_back(caf::PdmOptionItemInfo(views[i]->name(), QVariant::fromValue(caf::PdmPointer(views[i])))); + } + + if (optionList.size() > 0) + { + optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer(NULL)))); + } + + return optionList; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimConnectedViews::allViews(std::vector& views) +{ + RimProject* proj = RiaApplication::instance()->project(); + + if (proj) + { + std::vector cases; + proj->allCases(cases); + for (size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++) + { + RimCase* rimCase = cases[caseIdx]; + + std::vector caseViews = rimCase->views(); + for (size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++) + { + views.push_back(caseViews[viewIdx]); + } + } + } +} + diff --git a/ApplicationCode/ProjectDataModel/RimConnectedViews.h b/ApplicationCode/ProjectDataModel/RimConnectedViews.h new file mode 100644 index 0000000000..81f6640028 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimConnectedViews.h @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmObject.h" +#include "cafPdmPtrField.h" + +class RimView; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimConnectedViews : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimConnectedViews(void); + virtual ~RimConnectedViews(void); + + caf::PdmPtrField masterView; + caf::PdmPtrField slaveView; + +protected: + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); + +private: + void allViews(std::vector& views); + +}; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index f72e409d20..855adb2d97 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -22,13 +22,17 @@ #include "RigCaseCellResultsData.h" #include "RigCaseData.h" + #include "RimEclipseCase.h" -#include "RimReservoirCellResultsStorage.h" +#include "RimEclipseCellColors.h" +#include "RimEclipseFaultColors.h" +#include "RimEclipsePropertyFilter.h" #include "RimEclipseView.h" +#include "RimManagedViewCollection.h" +#include "RimReservoirCellResultsStorage.h" +#include "RimView.h" #include "cafPdmUiListEditor.h" -#include "RimEclipsePropertyFilter.h" -#include "RimEclipseFaultColors.h" CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition"); @@ -139,6 +143,16 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha m_reservoirView->scheduleCreateDisplayModelAndRedraw(); } + if (dynamic_cast(this)) + { + RimView* view = NULL; + this->firstAnchestorOrThisOfType(view); + if (view) + { + view->managedViewCollection->updateResult(this); + } + } + } RimEclipsePropertyFilter* propFilter = dynamic_cast(this->parentField()->ownerObject()); diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp new file mode 100644 index 0000000000..eeb14079b1 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp @@ -0,0 +1,118 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimManagedViewCollection.h" + +#include "RimEclipseCellColors.h" +#include "RimEclipseResultDefinition.h" +#include "RimEclipseView.h" +#include "RimManagedViewConfig.h" +#include "RimView.h" + +#include "RiuViewer.h" + +#include "cvfCamera.h" +#include "cvfMatrix4.h" + + + +CAF_PDM_SOURCE_INIT(RimManagedViewCollection, "RimManagedViewCollection"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewCollection::RimManagedViewCollection(void) +{ + CAF_PDM_InitObject("Managed Views", ":/chain.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&managedViews, "ManagedViews", "Managed Views", "", "", ""); + managedViews.push_back(new RimManagedViewConfig); + managedViews.uiCapability()->setUiHidden(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewCollection::~RimManagedViewCollection(void) +{ +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateViewers(RiuViewer* masterViewer) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncCamera() && managedViewConfig->managedView()->viewer()) + { + const cvf::Mat4d mat = masterViewer->mainCamera()->viewMatrix(); + + managedViewConfig->managedView()->viewer()->mainCamera()->setViewMatrix(mat); + managedViewConfig->managedView()->viewer()->update(); + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateTimeStep(int timeStep) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer()) + { + managedViewConfig->managedView()->viewer()->slotSetCurrentFrame(timeStep); + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateResult(RimEclipseResultDefinition* resultDefinition) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncCellResult()) + { + RimView* rimView = managedViewConfig->managedView(); + RimEclipseView* eclipeView = dynamic_cast(rimView); + if (eclipeView) + { + eclipeView->cellResult()->setPorosityModel(resultDefinition->porosityModel()); + eclipeView->cellResult()->setResultType(resultDefinition->resultType()); + eclipeView->cellResult()->setResultVariable(resultDefinition->resultVariable()); + } + } + } + } +} diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h new file mode 100644 index 0000000000..d1677b9359 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RimDefines.h" + +#include "cafPdmChildArrayField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" + +class RimEclipseResultDefinition; +class RimManagedViewConfig; +class RiuViewer; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimManagedViewCollection : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimManagedViewCollection(void); + virtual ~RimManagedViewCollection(void); + + caf::PdmChildArrayField managedViews; + + void updateViewers(RiuViewer* masterViewer); + void updateTimeStep(int timeStep); + void updateResult(RimEclipseResultDefinition* resultDefinition); +}; diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp new file mode 100644 index 0000000000..5d15f5e24f --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp @@ -0,0 +1,117 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimManagedViewConfig.h" + +#include "RiaApplication.h" + +#include "RimCase.h" +#include "RimProject.h" +#include "RimView.h" + +#include "cafPdmUiTreeOrdering.h" + + +CAF_PDM_SOURCE_INIT(RimManagedViewConfig, "RimManagedViewConfig"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewConfig::RimManagedViewConfig(void) +{ + CAF_PDM_InitObject("View Config", ":/chain.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&managedView, "ManagedView", "Managed View", "", "", ""); + managedView.uiCapability()->setUiChildrenHidden(true); + + CAF_PDM_InitField(&syncCamera, "SyncCamera", true, "Sync Camera", "", "", ""); + CAF_PDM_InitField(&syncCellResult, "SyncCellResult", true, "Sync Cell Result", "", "", ""); + CAF_PDM_InitField(&syncTimeStep, "SyncTimeStep", true, "Sync Time Step", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewConfig::~RimManagedViewConfig(void) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimManagedViewConfig::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList optionList; + + if (fieldNeedingOptions == &managedView) + { + std::vector views; + allVisibleViews(views); + + for (size_t i = 0; i< views.size(); i++) + { + optionList.push_back(caf::PdmOptionItemInfo(views[i]->name(), QVariant::fromValue(caf::PdmPointer(views[i])))); + } + + if (optionList.size() > 0) + { + optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer(NULL)))); + } + } + + return optionList; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewConfig::allVisibleViews(std::vector& views) +{ + RimProject* proj = RiaApplication::instance()->project(); + + RimView* masterView = NULL; + firstAnchestorOrThisOfType(masterView); + + if (proj) + { + std::vector cases; + proj->allCases(cases); + for (size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++) + { + RimCase* rimCase = cases[caseIdx]; + + std::vector caseViews = rimCase->views(); + for (size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++) + { + if (caseViews[viewIdx]->viewer() && caseViews[viewIdx] != masterView) + { + views.push_back(caseViews[viewIdx]); + } + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewConfig::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/) +{ + uiTreeOrdering.setForgetRemainingFields(true); +} + diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h new file mode 100644 index 0000000000..de605eab07 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2015- Statoil ASA +// Copyright (C) 2015- Ceetron Solutions AS +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmField.h" +#include "cafPdmObject.h" +#include "cafPdmPtrField.h" + +class RimView; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimManagedViewConfig : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimManagedViewConfig(void); + virtual ~RimManagedViewConfig(void); + + caf::PdmPtrField managedView; + + caf::PdmField syncCamera; + caf::PdmField syncCellResult; + caf::PdmField syncTimeStep; + +protected: + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); + virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = ""); + +private: + void allVisibleViews(std::vector& views); +}; diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index 0eea6062e7..2f5b44731a 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -26,34 +26,37 @@ #include "RigCaseData.h" +#include "RiaApplication.h" +#include "RimCalcScript.h" #include "RimCaseCollection.h" #include "RimCommandObject.h" #include "RimEclipseCase.h" #include "RimEclipseCaseCollection.h" +#include "RimEclipseInputProperty.h" +#include "RimEclipseInputPropertyCollection.h" +#include "RimEclipseStatisticsCase.h" +#include "RimEclipseStatisticsCaseCollection.h" #include "RimEclipseView.h" #include "RimGeoMechCase.h" #include "RimGeoMechModels.h" #include "RimIdenticalGridCaseGroup.h" +#include "RimManagedViewCollection.h" +#include "RimManagedViewConfig.h" #include "RimOilField.h" #include "RimScriptCollection.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" #include "RimWellPathImport.h" -#include "RimCalcScript.h" #include "RiuMainWindow.h" -#include "RiaApplication.h" +#include "ToggleCommands/RicToggleItemsFeatureImpl.h" +#include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h" + +#include "cafCmdFeature.h" #include "cafPdmUiTreeOrdering.h" #include -#include "cafCmdFeature.h" -#include "ToggleCommands/RicToggleItemsFeatureImpl.h" -#include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h" -#include "RimEclipseStatisticsCaseCollection.h" -#include "RimEclipseStatisticsCase.h" -#include "RimEclipseInputProperty.h" -#include "RimEclipseInputPropertyCollection.h" CAF_PDM_SOURCE_INIT(RimProject, "ResInsightProject"); //-------------------------------------------------------------------------------------------------- @@ -704,6 +707,22 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu) commandIds << "RicAddScriptPathFeature"; commandIds << "RicDeleteScriptPathFeature"; } + else if (dynamic_cast(uiItem)) + { + commandIds << "RicDeleteItemFeature"; + } + + if (dynamic_cast(uiItem)) + { + RimManagedViewCollection* viewCollection = dynamic_cast(uiItem); + caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&viewCollection->managedViews); + + commandIds << "PdmListField_AddItem"; + } + else + { + caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(NULL); + } } if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable()) diff --git a/ApplicationCode/ProjectDataModel/RimProject.h b/ApplicationCode/ProjectDataModel/RimProject.h index 903ad98f6e..40149edc89 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.h +++ b/ApplicationCode/ProjectDataModel/RimProject.h @@ -65,6 +65,7 @@ public: caf::PdmField treeViewState; caf::PdmField currentModelIndexPath; + void setScriptDirectories(const QString& scriptDirectories); QString projectFileVersionString() const; void close(); diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index a256f7258b..52787befa4 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -1,24 +1,29 @@ #include "RimView.h" -#include "cafPdmObjectFactory.h" #include "RiaApplication.h" #include "RiaPreferences.h" + #include "Rim3dOverlayInfoConfig.h" -#include "RiuViewer.h" +#include "RimOilField.h" +#include "RimProject.h" +#include "RimManagedViewCollection.h" +#include "RimWellPathCollection.h" + #include "RiuMainWindow.h" +#include "RiuViewer.h" + +#include "RivWellPathCollectionPartMgr.h" + +#include "cafFrameAnimationControl.h" +#include "cafPdmObjectFactory.h" #include "cvfCamera.h" #include "cvfModel.h" #include "cvfModelBasicList.h" #include "cvfPart.h" #include "cvfScene.h" #include "cvfViewport.h" -#include "cafFrameAnimationControl.h" #include -#include "RimOilField.h" -#include "RimWellPathCollection.h" -#include "RimProject.h" -#include "RivWellPathCollectionPartMgr.h" namespace caf { @@ -80,6 +85,10 @@ 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(&overlayInfoConfig, "OverlayInfoConfig", "Info Box", "", "", ""); overlayInfoConfig = new Rim3dOverlayInfoConfig(); overlayInfoConfig->setReservoirView(this); @@ -443,6 +452,8 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV if (m_viewer) { m_viewer->update(); + + managedViewCollection->updateTimeStep(m_currentTimeStep); } } else if (changedField == &backgroundColor) diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index 0392f83cbb..30f3b894ee 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -20,6 +20,7 @@ #pragma once #include "cafAppEnum.h" +#include "cafPdmChildArrayField.h" #include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" @@ -30,16 +31,17 @@ #include -class RiuViewer; class Rim3dOverlayInfoConfig; class RimCase; class RimCellRangeFilterCollection; +class RimManagedViewCollection; +class RiuViewer; namespace cvf { class BoundingBox; - class Scene; class ModelBasicList; + class Scene; class Transform; } @@ -67,7 +69,9 @@ public: caf::PdmField maximumFrameRate; caf::PdmField hasUserRequestedAnimation; - caf::PdmChildField rangeFilterCollection; + caf::PdmChildField rangeFilterCollection; + + caf::PdmChildField managedViewCollection; // Draw style diff --git a/ApplicationCode/Resources/ResInsight.qrc b/ApplicationCode/Resources/ResInsight.qrc index 873569505e..7415b7b637 100644 --- a/ApplicationCode/Resources/ResInsight.qrc +++ b/ApplicationCode/Resources/ResInsight.qrc @@ -46,7 +46,8 @@ draw_style_surface_w_fault_mesh_24x24.png InfoBox16x16.png GeoMechCase48x48.png - GeoMechCases48x48.png + GeoMechCases48x48.png + chain.png fs_CellFace.glsl diff --git a/ApplicationCode/Resources/chain.png b/ApplicationCode/Resources/chain.png new file mode 100644 index 0000000000..c5205dd598 Binary files /dev/null and b/ApplicationCode/Resources/chain.png differ diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index 795a5ac4ce..4032e5ac68 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -64,6 +64,8 @@ #include "RigFemPartCollection.h" #include "RigFemPart.h" #include "RigFemPartGrid.h" +#include "RimProject.h" +#include "RimManagedViewCollection.h" using cvf::ManipulatorTrackball; @@ -278,6 +280,12 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex) if (m_reservoirView) m_reservoirView->setCurrentTimeStep(frameIndex); caf::Viewer::slotSetCurrentFrame(frameIndex); + + if (m_reservoirView) + { + m_reservoirView->managedViewCollection()->updateTimeStep(frameIndex); + } + } //-------------------------------------------------------------------------------------------------- @@ -489,3 +497,16 @@ void RiuViewer::updateNavigationPolicy() break; } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuViewer::paintEvent(QPaintEvent* event) +{ + caf::Viewer::paintEvent(event); + + if (m_reservoirView) + { + m_reservoirView->managedViewCollection()->updateViewers(this); + } +} diff --git a/ApplicationCode/UserInterface/RiuViewer.h b/ApplicationCode/UserInterface/RiuViewer.h index 4374af1d8d..571c589e0e 100644 --- a/ApplicationCode/UserInterface/RiuViewer.h +++ b/ApplicationCode/UserInterface/RiuViewer.h @@ -83,6 +83,8 @@ private: void mouseReleaseEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event); + virtual void paintEvent(QPaintEvent* event); + QLabel* m_InfoLabel; QLabel* m_versionInfoLabel; bool m_showInfoText;;