From 167f56f95a901ca136ba18a0795fb67507b08c0e Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 20 Oct 2017 10:20:53 +0200 Subject: [PATCH] #2026 Curve Calculator : Update calculated curves and plots --- .../RicSummaryCurveCalculator.cpp | 42 ++++++++++++++++--- .../RicSummaryCurveCalculator.h | 4 +- .../RicSummaryCurveCalculatorEditor.cpp | 4 ++ .../ProjectDataModel/RimCalculation.cpp | 38 +++++++++++++---- .../ProjectDataModel/RimCalculation.h | 3 +- 5 files changed, 75 insertions(+), 16 deletions(-) diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.cpp index ff9fb31b9f..1ac71e96dc 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.cpp @@ -27,6 +27,7 @@ #include "cafPdmUiListEditor.h" #include "cafPdmUiPushButtonEditor.h" #include "cafPdmUiTreeSelectionEditor.h" +#include "RiaSummaryTools.h" CAF_PDM_SOURCE_INIT(RicSummaryCurveCalculator, "RicSummaryCurveCalculator"); @@ -77,14 +78,26 @@ RimCalculation* RicSummaryCurveCalculator::currentCalculation() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicSummaryCurveCalculator::parseExpression() +bool RicSummaryCurveCalculator::parseExpression() const { if (m_currentCalculation()) { - m_currentCalculation()->parseExpression(); + QString previousCurveName = m_currentCalculation->description(); + if (!m_currentCalculation()->parseExpression()) + { + return false; + } - this->updateConnectedEditors(); + QString currentCurveName = m_currentCalculation->description(); + if (previousCurveName != currentCurveName) + { + RiaSummaryTools::notifyCalculatedCurveNameHasChanged(previousCurveName, currentCurveName); + } + + m_currentCalculation()->updateDependentCurvesAndPlots(); } + + return true; } //-------------------------------------------------------------------------------------------------- @@ -202,12 +215,31 @@ void RicSummaryCurveCalculator::assignPushButtonEditorText(caf::PdmUiEditorAttri //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicSummaryCurveCalculator::calculate() const +bool RicSummaryCurveCalculator::calculate() const { if (m_currentCalculation()) { - m_currentCalculation()->calculate(); + QString previousCurveName = m_currentCalculation->description(); + if (!m_currentCalculation()->parseExpression()) + { + return false; + } + + QString currentCurveName = m_currentCalculation->description(); + if (previousCurveName != currentCurveName) + { + RiaSummaryTools::notifyCalculatedCurveNameHasChanged(previousCurveName, currentCurveName); + } + + if (!m_currentCalculation()->calculate()) + { + return false; + } + + m_currentCalculation()->updateDependentCurvesAndPlots(); } + + return true; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.h b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.h index ade0aa7dc8..765bdf5631 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculator.h @@ -41,8 +41,8 @@ public: RimCalculation* currentCalculation() const; - void parseExpression(); - void calculate() const; + bool parseExpression() const; + bool calculate() const; private: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculatorEditor.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculatorEditor.cpp index 853055de20..9de333ea68 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculatorEditor.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicSummaryCurveCalculatorEditor.cpp @@ -186,6 +186,8 @@ QMinimizePanel* RicSummaryCurveCalculatorEditor::updateGroupBoxWithContent(caf:: void RicSummaryCurveCalculatorEditor::slotCalculate() { m_calculator->calculate(); + + m_calculator->updateConnectedEditors(); } //-------------------------------------------------------------------------------------------------- @@ -194,5 +196,7 @@ void RicSummaryCurveCalculatorEditor::slotCalculate() void RicSummaryCurveCalculatorEditor::slotParseExpression() { m_calculator->parseExpression(); + + m_calculator->updateConnectedEditors(); } diff --git a/ApplicationCode/ProjectDataModel/RimCalculation.cpp b/ApplicationCode/ProjectDataModel/RimCalculation.cpp index 1c81925202..8d223a35e0 100644 --- a/ApplicationCode/ProjectDataModel/RimCalculation.cpp +++ b/ApplicationCode/ProjectDataModel/RimCalculation.cpp @@ -22,14 +22,18 @@ #include "RiaLogging.h" #include "RiaSummaryCurveDefinition.h" +#include "RiaSummaryTools.h" +#include "RimCalculationCollection.h" #include "RimCalculationVariable.h" +#include "RimProject.h" #include "RimSummaryCurve.h" +#include "RimSummaryPlot.h" +#include "RimSummaryPlotCollection.h" #include "cafPdmUiTextEditor.h" #include -#include CAF_PDM_SOURCE_INIT(RimCalculation, "RimCalculation"); @@ -166,7 +170,7 @@ bool RimCalculation::parseExpression() } } - this->updateConnectedEditors(); + m_description = buildCalculationName(); return true; } @@ -176,8 +180,6 @@ bool RimCalculation::parseExpression() //-------------------------------------------------------------------------------------------------- bool RimCalculation::calculate() { - if (!parseExpression()) return false; - QString leftHandSideVariableName = RimCalculation::findLeftHandSide(m_expression); ExpressionParser parser; @@ -333,13 +335,35 @@ QString RimCalculation::buildCalculationName() const } return name; - } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimCalculation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +void RimCalculation::updateDependentCurvesAndPlots() { - m_description = buildCalculationName(); + RimCalculationCollection* calcColl = nullptr; + this->firstAncestorOrThisOfTypeAsserted(calcColl); + calcColl->rebuildCaseMetaData(); + + RimSummaryPlotCollection* summaryPlotCollection = RiaSummaryTools::summaryPlotCollection(); + for (RimSummaryPlot* sumPlot : summaryPlotCollection->summaryPlots()) + { + bool plotContainsCalculatedCurves = false; + + for (RimSummaryCurve* sumCurve : sumPlot->summaryCurves()) + { + if (sumCurve->summaryAddress().category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED) + { + sumCurve->updateConnectedEditors(); + + plotContainsCalculatedCurves = true; + } + } + + if (plotContainsCalculatedCurves) + { + sumPlot->loadDataAndUpdate(); + } + } } diff --git a/ApplicationCode/ProjectDataModel/RimCalculation.h b/ApplicationCode/ProjectDataModel/RimCalculation.h index 505b638f54..7fc7126753 100644 --- a/ApplicationCode/ProjectDataModel/RimCalculation.h +++ b/ApplicationCode/ProjectDataModel/RimCalculation.h @@ -47,6 +47,7 @@ public: bool parseExpression(); bool calculate(); + void updateDependentCurvesAndPlots(); virtual caf::PdmFieldHandle* userDescriptionField() override; @@ -56,8 +57,6 @@ private: QString buildCalculationName() const; - virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; - private: caf::PdmField m_description; caf::PdmField m_expression;