#2088 Curve Calculator : Ask user to calculate curves when expression has changed

This commit is contained in:
Magne Sjaastad 2017-11-14 08:41:44 +01:00
parent 2e6c37c266
commit 9adb9ba4b1
5 changed files with 94 additions and 9 deletions

View File

@ -21,8 +21,12 @@
#include "RicSummaryCurveCalculator.h"
#include "RicSummaryCurveCalculatorEditor.h"
#include "RimSummaryCalculationCollection.h"
#include "RimSummaryCalculation.h"
#include <QDialogButtonBox>
#include <QVBoxLayout>
#include <QMessageBox>
//--------------------------------------------------------------------------------------------------
///
@ -58,7 +62,45 @@ void RicSummaryCurveCalculatorDialog::setCalculationAndUpdateUi(RimSummaryCalcul
//--------------------------------------------------------------------------------------------------
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();
}
@ -82,3 +124,21 @@ void RicSummaryCurveCalculatorDialog::setUp()
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;
}

View File

@ -41,8 +41,10 @@ public:
private slots:
void slotTryCloseDialog();
private:
void setUp();
size_t dirtyCount() const;
private:
std::unique_ptr<RicSummaryCurveCalculatorEditor> m_summaryCalcEditor;

View File

@ -65,6 +65,8 @@ RimSummaryCalculation::RimSummaryCalculation()
CAF_PDM_InitFieldNoDefault(&m_timesteps, "TimeSteps", "Time Steps", "", "", "");
m_exprContextMenuMgr = std::unique_ptr<RiuExpressionContextMenuManager>(new RiuExpressionContextMenuManager());
m_isDirty = false;
}
//--------------------------------------------------------------------------------------------------
@ -83,6 +85,14 @@ QString RimSummaryCalculation::description() const
return m_description;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimSummaryCalculation::isDirty() const
{
return m_isDirty;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -300,6 +310,8 @@ bool RimSummaryCalculation::calculate()
{
// Copy time vector from source
m_timesteps = sourceTimeSteps;
m_isDirty = false;
}
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);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -42,6 +42,8 @@ public:
void setDescription(const QString& description);
QString description() const;
bool isDirty() const;
caf::PdmChildArrayFieldHandle* variables();
const std::vector<double>& values() const;
@ -60,7 +62,11 @@ public:
static QString findLeftHandSide(const QString& expresion);
void attachToWidget();
private:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue,
const QVariant& newValue) override;
RimSummaryCalculationVariable* findByName(const QString& name) const;
RimSummaryCalculationVariable* addVariable(const QString& name);
void deleteVariable(RimSummaryCalculationVariable* calcVariable);
@ -78,4 +84,6 @@ private:
caf::PdmField<std::vector<time_t>> m_timesteps;
std::unique_ptr<RiuExpressionContextMenuManager> m_exprContextMenuMgr;
bool m_isDirty;
};

View File

@ -113,14 +113,7 @@ void RimSummaryCalculationCollection::deleteCalculation(RimSummaryCalculation* c
//--------------------------------------------------------------------------------------------------
std::vector<RimSummaryCalculation*> RimSummaryCalculationCollection::calculations() const
{
std::vector<RimSummaryCalculation*> calcs;
for (auto c : m_calcuations)
{
calcs.push_back(c);
}
return calcs;
return m_calcuations.childObjects();
}
//--------------------------------------------------------------------------------------------------