From 7b6574327e90bb6b3cea1583066c9edd2b09598d Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 27 Jan 2017 15:50:17 +0100 Subject: [PATCH] #1094 Gray out wells not visible because they do not intersect visible cells --- .../ProjectDataModel/RimEclipseView.cpp | 7 ++++++ .../ProjectDataModel/RimEclipseWell.cpp | 25 +++++++++++++++++++ .../ProjectDataModel/RimEclipseWell.h | 1 + 3 files changed, 33 insertions(+) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 7546f3855e..4b441e6994 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -791,6 +791,13 @@ void RimEclipseView::updateDisplayModelVisibility() m_viewer->update(); faultCollection->updateConnectedEditors(); + + // This is required to update the read-only state of simulation wells + // when a range filter is manipulated and visible simulation wells might change + // + // The visibility is controlled by RimEclipseWell::defineUiTreeOrdering + // updateConnectedEditors will call recursively on child objects + wellCollection->updateConnectedEditors(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseWell.cpp b/ApplicationCode/ProjectDataModel/RimEclipseWell.cpp index eb724d4a51..553d2b8829 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseWell.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseWell.cpp @@ -231,6 +231,31 @@ void RimEclipseWell::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseWell::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/) +{ + const RimEclipseView* reservoirView = nullptr; + this->firstAncestorOrThisOfType(reservoirView); + if (!reservoirView) return; + + const RimEclipseWellCollection* wellColl = nullptr; + this->firstAncestorOrThisOfType(wellColl); + if (!wellColl) return; + + if (wellColl->showWellsIntersectingVisibleCells() && !this->intersectsVisibleCells(static_cast(reservoirView->currentTimeStep()))) + { + // Mark well as read only if well is not intersecting visible cells + + this->uiCapability()->setUiReadOnly(true); + } + else + { + this->uiCapability()->setUiReadOnly(false); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseWell.h b/ApplicationCode/ProjectDataModel/RimEclipseWell.h index 2ce9fe629c..5946d6ef57 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseWell.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseWell.h @@ -83,6 +83,7 @@ public: protected: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "") override; private: bool intersectsVisibleCells(size_t frameIndex) const;