From 8be822c5d7205d0e37665ecc6cc95af9e94c40ca Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Fri, 30 Nov 2018 11:25:56 +0100 Subject: [PATCH] #3801 Postpone assignment of old selectedTracer-field to producers and injectors * initAfterRead is too soon as the solver hasn't been set up yet. * wait until onEditorWidgetsCreated() --- .../RimEclipseResultDefinition.cpp | 79 ++++++++++--------- .../RimEclipseResultDefinition.h | 4 +- 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 936aa73dbe..54f7b8feeb 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -49,6 +49,7 @@ #include "cafPdmUiTreeSelectionEditor.h" #include "cafUtils.h" +#include #include namespace caf @@ -861,6 +862,11 @@ bool RimEclipseResultDefinition::hasDynamicResult() const //-------------------------------------------------------------------------------------------------- void RimEclipseResultDefinition::initAfterRead() { + if (m_flowSolution() == nullptr) + { + assignFlowSolutionFromCase(); + } + m_porosityModelUiField = m_porosityModel; m_resultTypeUiField = m_resultType; m_resultVariableUiField = m_resultVariable; @@ -868,42 +874,6 @@ void RimEclipseResultDefinition::initAfterRead() m_flowSolutionUiField = m_flowSolution(); m_selectedInjectorTracersUiField = m_selectedInjectorTracers; - if (m_flowSolution() == nullptr) - { - assignFlowSolutionFromCase(); - } - - if (m_flowSolution()) - { - std::vector selectedInjectorTracers; - std::vector selectedProducerTracers; - for (const QString& tracerName : m_selectedTracers_OBSOLETE()) - { - RimFlowDiagSolution::TracerStatusType tracerStatus = m_flowSolution()->tracerStatusOverall(tracerName); - if (tracerStatus == RimFlowDiagSolution::INJECTOR) - { - selectedInjectorTracers.push_back(tracerName); - } - else if (tracerStatus == RimFlowDiagSolution::PRODUCER) - { - selectedProducerTracers.push_back(tracerName); - } - else if (tracerStatus == RimFlowDiagSolution::VARYING || tracerStatus == RimFlowDiagSolution::UNDEFINED) - { - selectedInjectorTracers.push_back(tracerName); - selectedProducerTracers.push_back(tracerName); - } - } - if (!selectedInjectorTracers.empty()) - { - setSelectedInjectorTracers(selectedInjectorTracers); - } - if (!selectedProducerTracers.empty()) - { - setSelectedProducerTracers(selectedProducerTracers); - } - } - this->updateUiIconFromToggleField(); } @@ -1159,6 +1129,43 @@ void RimEclipseResultDefinition::defineEditorAttribute(const caf::PdmFieldHandle } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseResultDefinition::onEditorWidgetsCreated() +{ + if (m_flowSolution() && !m_selectedTracers_OBSOLETE().empty()) + { + std::vector selectedTracers; + selectedTracers.swap(m_selectedTracers_OBSOLETE.v()); + + std::set allInjectorTracers = setOfTracersOfType(true); + std::set allProducerTracers = setOfTracersOfType(false); + + std::vector selectedInjectorTracers; + std::vector selectedProducerTracers; + for (const QString& tracerName : selectedTracers) + { + if (allInjectorTracers.count(tracerName)) + { + selectedInjectorTracers.push_back(tracerName); + } + if (allProducerTracers.count(tracerName)) + { + selectedProducerTracers.push_back(tracerName); + } + } + if (!selectedInjectorTracers.empty()) + { + setSelectedInjectorTracers(selectedInjectorTracers); + } + if (!selectedProducerTracers.empty()) + { + setSelectedProducerTracers(selectedProducerTracers); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h index 1d7c7279d7..b84c8c371d 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h @@ -115,7 +115,7 @@ public: void updateUiFieldsFromActiveResult(); protected: - virtual void updateLegendCategorySettings() {}; + virtual void updateLegendCategorySettings() {}; QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override; void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; @@ -123,6 +123,7 @@ protected: void initAfterRead() override; void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override; + void onEditorWidgetsCreated() override; protected: caf::PdmField< caf::AppEnum< RiaDefines::ResultCatType > > m_resultType; @@ -174,6 +175,7 @@ private: QList calcOptionsForVariableUiFieldStandard(); QList calcOptionsForSelectedTracerField(bool injector); + QString timeOfFlightString(bool shorter) const; QString maxFractionTracerString(bool shorter) const;