mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2088 Curve Calculator : Ask user to calculate curves when expression has changed
This commit is contained in:
parent
2e6c37c266
commit
9adb9ba4b1
@ -21,8 +21,12 @@
|
|||||||
#include "RicSummaryCurveCalculator.h"
|
#include "RicSummaryCurveCalculator.h"
|
||||||
#include "RicSummaryCurveCalculatorEditor.h"
|
#include "RicSummaryCurveCalculatorEditor.h"
|
||||||
|
|
||||||
|
#include "RimSummaryCalculationCollection.h"
|
||||||
|
#include "RimSummaryCalculation.h"
|
||||||
|
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -58,7 +62,45 @@ void RicSummaryCurveCalculatorDialog::setCalculationAndUpdateUi(RimSummaryCalcul
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicSummaryCurveCalculatorDialog::slotTryCloseDialog()
|
void RicSummaryCurveCalculatorDialog::slotTryCloseDialog()
|
||||||
{
|
{
|
||||||
// Test for dirty
|
RimSummaryCalculationCollection* calculationCollection = RicSummaryCurveCalculator::calculationCollection();
|
||||||
|
|
||||||
|
if (dirtyCount() > 0)
|
||||||
|
{
|
||||||
|
QMessageBox msgBox(this);
|
||||||
|
msgBox.setIcon(QMessageBox::Question);
|
||||||
|
|
||||||
|
QString questionText = QString("Detected calculation expression text modifications.");
|
||||||
|
|
||||||
|
msgBox.setText(questionText);
|
||||||
|
msgBox.setInformativeText("Do you want to trigger calculation?");
|
||||||
|
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
|
||||||
|
|
||||||
|
int ret = msgBox.exec();
|
||||||
|
if (ret == QMessageBox::No)
|
||||||
|
{
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
else if (ret == QMessageBox::Yes)
|
||||||
|
{
|
||||||
|
for (auto c : calculationCollection->calculations())
|
||||||
|
{
|
||||||
|
if (c->isDirty())
|
||||||
|
{
|
||||||
|
c->calculate();
|
||||||
|
c->updateDependentCurvesAndPlots();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dirtyCount() > 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
accept();
|
accept();
|
||||||
}
|
}
|
||||||
@ -82,3 +124,21 @@ void RicSummaryCurveCalculatorDialog::setUp()
|
|||||||
m_summaryCalcEditor->updateUi();
|
m_summaryCalcEditor->updateUi();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
size_t RicSummaryCurveCalculatorDialog::dirtyCount() const
|
||||||
|
{
|
||||||
|
size_t count = 0;
|
||||||
|
|
||||||
|
RimSummaryCalculationCollection* calculationCollection = RicSummaryCurveCalculator::calculationCollection();
|
||||||
|
for (auto c : calculationCollection->calculations())
|
||||||
|
{
|
||||||
|
if (c->isDirty())
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
@ -41,8 +41,10 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void slotTryCloseDialog();
|
void slotTryCloseDialog();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setUp();
|
void setUp();
|
||||||
|
size_t dirtyCount() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<RicSummaryCurveCalculatorEditor> m_summaryCalcEditor;
|
std::unique_ptr<RicSummaryCurveCalculatorEditor> m_summaryCalcEditor;
|
||||||
|
@ -65,6 +65,8 @@ RimSummaryCalculation::RimSummaryCalculation()
|
|||||||
CAF_PDM_InitFieldNoDefault(&m_timesteps, "TimeSteps", "Time Steps", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_timesteps, "TimeSteps", "Time Steps", "", "", "");
|
||||||
|
|
||||||
m_exprContextMenuMgr = std::unique_ptr<RiuExpressionContextMenuManager>(new RiuExpressionContextMenuManager());
|
m_exprContextMenuMgr = std::unique_ptr<RiuExpressionContextMenuManager>(new RiuExpressionContextMenuManager());
|
||||||
|
|
||||||
|
m_isDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -83,6 +85,14 @@ QString RimSummaryCalculation::description() const
|
|||||||
return m_description;
|
return m_description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RimSummaryCalculation::isDirty() const
|
||||||
|
{
|
||||||
|
return m_isDirty;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -300,6 +310,8 @@ bool RimSummaryCalculation::calculate()
|
|||||||
{
|
{
|
||||||
// Copy time vector from source
|
// Copy time vector from source
|
||||||
m_timesteps = sourceTimeSteps;
|
m_timesteps = sourceTimeSteps;
|
||||||
|
|
||||||
|
m_isDirty = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -357,6 +369,16 @@ void RimSummaryCalculation::attachToWidget()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimSummaryCalculation::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||||
|
{
|
||||||
|
m_isDirty = true;
|
||||||
|
|
||||||
|
PdmObject::fieldChangedByUi(changedField, oldValue, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -42,6 +42,8 @@ public:
|
|||||||
void setDescription(const QString& description);
|
void setDescription(const QString& description);
|
||||||
QString description() const;
|
QString description() const;
|
||||||
|
|
||||||
|
bool isDirty() const;
|
||||||
|
|
||||||
caf::PdmChildArrayFieldHandle* variables();
|
caf::PdmChildArrayFieldHandle* variables();
|
||||||
|
|
||||||
const std::vector<double>& values() const;
|
const std::vector<double>& values() const;
|
||||||
@ -60,7 +62,11 @@ public:
|
|||||||
static QString findLeftHandSide(const QString& expresion);
|
static QString findLeftHandSide(const QString& expresion);
|
||||||
void attachToWidget();
|
void attachToWidget();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue,
|
||||||
|
const QVariant& newValue) override;
|
||||||
|
|
||||||
RimSummaryCalculationVariable* findByName(const QString& name) const;
|
RimSummaryCalculationVariable* findByName(const QString& name) const;
|
||||||
RimSummaryCalculationVariable* addVariable(const QString& name);
|
RimSummaryCalculationVariable* addVariable(const QString& name);
|
||||||
void deleteVariable(RimSummaryCalculationVariable* calcVariable);
|
void deleteVariable(RimSummaryCalculationVariable* calcVariable);
|
||||||
@ -78,4 +84,6 @@ private:
|
|||||||
caf::PdmField<std::vector<time_t>> m_timesteps;
|
caf::PdmField<std::vector<time_t>> m_timesteps;
|
||||||
|
|
||||||
std::unique_ptr<RiuExpressionContextMenuManager> m_exprContextMenuMgr;
|
std::unique_ptr<RiuExpressionContextMenuManager> m_exprContextMenuMgr;
|
||||||
|
|
||||||
|
bool m_isDirty;
|
||||||
};
|
};
|
||||||
|
@ -113,14 +113,7 @@ void RimSummaryCalculationCollection::deleteCalculation(RimSummaryCalculation* c
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::vector<RimSummaryCalculation*> RimSummaryCalculationCollection::calculations() const
|
std::vector<RimSummaryCalculation*> RimSummaryCalculationCollection::calculations() const
|
||||||
{
|
{
|
||||||
std::vector<RimSummaryCalculation*> calcs;
|
return m_calcuations.childObjects();
|
||||||
|
|
||||||
for (auto c : m_calcuations)
|
|
||||||
{
|
|
||||||
calcs.push_back(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
return calcs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user