mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2898 Ensemble curves. Add vector selection button and dialog
This commit is contained in:
parent
ff9fbe95b8
commit
450d1177f6
@ -35,7 +35,9 @@
|
|||||||
#include "RimSummaryFilter.h"
|
#include "RimSummaryFilter.h"
|
||||||
#include "RimSummaryPlot.h"
|
#include "RimSummaryPlot.h"
|
||||||
|
|
||||||
|
#include "RiuPlotMainWindow.h"
|
||||||
#include "RiuSummaryQwtPlot.h"
|
#include "RiuSummaryQwtPlot.h"
|
||||||
|
#include "RiuSummaryCurveDefSelectionDialog.h"
|
||||||
|
|
||||||
#include "cafPdmUiTreeOrdering.h"
|
#include "cafPdmUiTreeOrdering.h"
|
||||||
#include "cafPdmUiListEditor.h"
|
#include "cafPdmUiListEditor.h"
|
||||||
@ -112,8 +114,6 @@ RimEnsembleCurveSet::RimEnsembleCurveSet()
|
|||||||
CAF_PDM_InitFieldNoDefault(&m_yPushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_yPushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "");
|
||||||
caf::PdmUiPushButtonEditor::configureEditorForField(&m_yPushButtonSelectSummaryAddress);
|
caf::PdmUiPushButtonEditor::configureEditorForField(&m_yPushButtonSelectSummaryAddress);
|
||||||
m_yPushButtonSelectSummaryAddress = false;
|
m_yPushButtonSelectSummaryAddress = false;
|
||||||
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiReadOnly(true);
|
|
||||||
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiHidden(true);
|
|
||||||
|
|
||||||
m_yValuesCurveVariable = new RimSummaryAddress;
|
m_yValuesCurveVariable = new RimSummaryAddress;
|
||||||
|
|
||||||
@ -418,6 +418,37 @@ void RimEnsembleCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* changedFie
|
|||||||
{
|
{
|
||||||
m_userDefinedName = createAutoName();
|
m_userDefinedName = createAutoName();
|
||||||
}
|
}
|
||||||
|
else if (changedField == &m_yPushButtonSelectSummaryAddress)
|
||||||
|
{
|
||||||
|
RiuSummaryCurveDefSelectionDialog dlg(nullptr);
|
||||||
|
RimSummaryCaseCollection* candidateEnsemble = m_yValuesSummaryGroup();
|
||||||
|
RifEclipseSummaryAddress candicateAddress = m_yValuesCurveVariable->address();
|
||||||
|
|
||||||
|
dlg.hideSummaryCases();
|
||||||
|
dlg.setEnsembleAndAddress(candidateEnsemble, candicateAddress);
|
||||||
|
|
||||||
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
|
{
|
||||||
|
auto curveSelection = dlg.curveSelection();
|
||||||
|
if (curveSelection.size() > 0)
|
||||||
|
{
|
||||||
|
m_yValuesSummaryGroup = curveSelection[0].ensemble();
|
||||||
|
m_yValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
|
||||||
|
|
||||||
|
this->loadDataAndUpdate(true);
|
||||||
|
|
||||||
|
plot->updateAxes();
|
||||||
|
plot->updatePlotTitle();
|
||||||
|
plot->updateConnectedEditors();
|
||||||
|
|
||||||
|
RiuPlotMainWindow* mainPlotWindow = RiaApplication::instance()->mainPlotWindow();
|
||||||
|
mainPlotWindow->updateSummaryPlotToolBar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_yPushButtonSelectSummaryAddress = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (changedField == &m_isUsingAutoName ||
|
if (changedField == &m_isUsingAutoName ||
|
||||||
changedField == &m_userDefinedName ||
|
changedField == &m_userDefinedName ||
|
||||||
|
@ -697,6 +697,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
candicateAddress = m_xValuesCurveVariable->address();
|
candicateAddress = m_xValuesCurveVariable->address();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dlg.hideEnsembles();
|
||||||
dlg.setCaseAndAddress(candidateCase, candicateAddress);
|
dlg.setCaseAndAddress(candidateCase, candicateAddress);
|
||||||
|
|
||||||
if (dlg.exec() == QDialog::Accepted)
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
@ -730,6 +731,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
candicateAddress = m_yValuesCurveVariable->address();
|
candicateAddress = m_yValuesCurveVariable->address();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dlg.hideEnsembles();
|
||||||
dlg.setCaseAndAddress(candidateCase, candicateAddress);
|
dlg.setCaseAndAddress(candidateCase, candicateAddress);
|
||||||
|
|
||||||
if (dlg.exec() == QDialog::Accepted)
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
|
@ -228,6 +228,8 @@ RiuSummaryCurveDefSelection::RiuSummaryCurveDefSelection() : m_identifierFieldsM
|
|||||||
|
|
||||||
m_currentSummaryCategory.uiCapability()->setUiHidden(true);
|
m_currentSummaryCategory.uiCapability()->setUiHidden(true);
|
||||||
m_multiSelectionMode = false;
|
m_multiSelectionMode = false;
|
||||||
|
m_hideEnsembles = false;
|
||||||
|
m_hideSummaryCases = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -308,6 +310,22 @@ void RiuSummaryCurveDefSelection::setMultiSelectionMode(bool multiSelectionMode)
|
|||||||
m_multiSelectionMode = multiSelectionMode;
|
m_multiSelectionMode = multiSelectionMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuSummaryCurveDefSelection::hideEnsembles(bool hide)
|
||||||
|
{
|
||||||
|
m_hideEnsembles = hide;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuSummaryCurveDefSelection::hideSummaryCases(bool hide)
|
||||||
|
{
|
||||||
|
m_hideSummaryCases = hide;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -458,55 +476,64 @@ QList<caf::PdmOptionItemInfo> RiuSummaryCurveDefSelection::calculateValueOptions
|
|||||||
RimSummaryCaseMainCollection* sumCaseMainColl = oilField->summaryCaseMainCollection();
|
RimSummaryCaseMainCollection* sumCaseMainColl = oilField->summaryCaseMainCollection();
|
||||||
if (sumCaseMainColl)
|
if (sumCaseMainColl)
|
||||||
{
|
{
|
||||||
// Top level cases
|
if (!m_hideSummaryCases)
|
||||||
for (const auto& sumCase : sumCaseMainColl->topLevelSummaryCases())
|
|
||||||
{
|
{
|
||||||
options.push_back(caf::PdmOptionItemInfo(sumCase->caseName(), sumCase));
|
// Top level cases
|
||||||
|
for (const auto& sumCase : sumCaseMainColl->topLevelSummaryCases())
|
||||||
|
{
|
||||||
|
options.push_back(caf::PdmOptionItemInfo(sumCase->caseName(), sumCase));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensembles
|
// Ensembles
|
||||||
bool ensembleHeaderCreated = false;
|
if (!m_hideEnsembles)
|
||||||
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
|
|
||||||
{
|
{
|
||||||
if (!sumCaseColl->isEnsemble()) continue;
|
bool ensembleHeaderCreated = false;
|
||||||
|
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
|
||||||
if (!ensembleHeaderCreated)
|
|
||||||
{
|
{
|
||||||
options.push_back(caf::PdmOptionItemInfo::createHeader("Ensembles", true));
|
if (!sumCaseColl->isEnsemble()) continue;
|
||||||
ensembleHeaderCreated = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto optionItem = caf::PdmOptionItemInfo(sumCaseColl->name(), sumCaseColl);
|
if (!ensembleHeaderCreated)
|
||||||
optionItem.setLevel(1);
|
{
|
||||||
options.push_back(optionItem);
|
options.push_back(caf::PdmOptionItemInfo::createHeader("Ensembles", true));
|
||||||
}
|
ensembleHeaderCreated = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Grouped cases
|
auto optionItem = caf::PdmOptionItemInfo(sumCaseColl->name(), sumCaseColl);
|
||||||
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
|
|
||||||
{
|
|
||||||
if (sumCaseColl->isEnsemble()) continue;
|
|
||||||
|
|
||||||
options.push_back(caf::PdmOptionItemInfo::createHeader(sumCaseColl->name(), true));
|
|
||||||
|
|
||||||
for (const auto& sumCase : sumCaseColl->allSummaryCases())
|
|
||||||
{
|
|
||||||
auto optionItem = caf::PdmOptionItemInfo(sumCase->caseName(), sumCase);
|
|
||||||
optionItem.setLevel(1);
|
optionItem.setLevel(1);
|
||||||
options.push_back(optionItem);
|
options.push_back(optionItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Observed data
|
if (!m_hideSummaryCases)
|
||||||
auto observedDataColl = oilField->observedDataCollection();
|
|
||||||
if (observedDataColl->allObservedData().size() > 0)
|
|
||||||
{
|
{
|
||||||
options.push_back(caf::PdmOptionItemInfo::createHeader("Observed Data", true));
|
// Grouped cases
|
||||||
|
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
|
||||||
for (const auto& obsData : observedDataColl->allObservedData())
|
|
||||||
{
|
{
|
||||||
auto optionItem = caf::PdmOptionItemInfo(obsData->caseName(), obsData);
|
if (sumCaseColl->isEnsemble()) continue;
|
||||||
optionItem.setLevel(1);
|
|
||||||
options.push_back(optionItem);
|
options.push_back(caf::PdmOptionItemInfo::createHeader(sumCaseColl->name(), true));
|
||||||
|
|
||||||
|
for (const auto& sumCase : sumCaseColl->allSummaryCases())
|
||||||
|
{
|
||||||
|
auto optionItem = caf::PdmOptionItemInfo(sumCase->caseName(), sumCase);
|
||||||
|
optionItem.setLevel(1);
|
||||||
|
options.push_back(optionItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Observed data
|
||||||
|
auto observedDataColl = oilField->observedDataCollection();
|
||||||
|
if (observedDataColl->allObservedData().size() > 0)
|
||||||
|
{
|
||||||
|
options.push_back(caf::PdmOptionItemInfo::createHeader("Observed Data", true));
|
||||||
|
|
||||||
|
for (const auto& obsData : observedDataColl->allObservedData())
|
||||||
|
{
|
||||||
|
auto optionItem = caf::PdmOptionItemInfo(obsData->caseName(), obsData);
|
||||||
|
optionItem.setLevel(1);
|
||||||
|
options.push_back(optionItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,8 @@ public:
|
|||||||
void setSelectedCurveDefinitions(const std::vector<RiaSummaryCurveDefinition>& curveDefinitions);
|
void setSelectedCurveDefinitions(const std::vector<RiaSummaryCurveDefinition>& curveDefinitions);
|
||||||
std::vector<RiaSummaryCurveDefinition> selectedCurveDefinitions() const;
|
std::vector<RiaSummaryCurveDefinition> selectedCurveDefinitions() const;
|
||||||
void setMultiSelectionMode(bool multiSelectionMode);
|
void setMultiSelectionMode(bool multiSelectionMode);
|
||||||
|
void hideEnsembles(bool hide);
|
||||||
|
void hideSummaryCases(bool hide);
|
||||||
void setFieldChangedHandler(const std::function<void()>& handlerFunc);
|
void setFieldChangedHandler(const std::function<void()>& handlerFunc);
|
||||||
|
|
||||||
void setDefaultSelection(const std::vector<RimSummaryCase*>& defaultCases);
|
void setDefaultSelection(const std::vector<RimSummaryCase*>& defaultCases);
|
||||||
@ -105,6 +107,9 @@ private:
|
|||||||
std::map<RifEclipseSummaryAddress::SummaryVarCategory, std::vector<SummaryIdentifierAndField*>> m_identifierFieldsMap;
|
std::map<RifEclipseSummaryAddress::SummaryVarCategory, std::vector<SummaryIdentifierAndField*>> m_identifierFieldsMap;
|
||||||
|
|
||||||
bool m_multiSelectionMode;
|
bool m_multiSelectionMode;
|
||||||
|
|
||||||
|
bool m_hideEnsembles;
|
||||||
|
bool m_hideSummaryCases;
|
||||||
|
|
||||||
std::function<void()> m_toggleChangedHandler;
|
std::function<void()> m_toggleChangedHandler;
|
||||||
};
|
};
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#include "RiaSummaryCurveDefinition.h"
|
#include "RiaSummaryCurveDefinition.h"
|
||||||
|
|
||||||
|
#include "RimSummaryCaseCollection.h"
|
||||||
|
|
||||||
#include "RiuSummaryCurveDefSelection.h"
|
#include "RiuSummaryCurveDefSelection.h"
|
||||||
#include "RiuSummaryCurveDefSelectionEditor.h"
|
#include "RiuSummaryCurveDefSelectionEditor.h"
|
||||||
#include "RiuTools.h"
|
#include "RiuTools.h"
|
||||||
@ -77,9 +79,28 @@ void RiuSummaryCurveDefSelectionDialog::setCaseAndAddress(RimSummaryCase* summar
|
|||||||
{
|
{
|
||||||
if (summaryCase)
|
if (summaryCase)
|
||||||
{
|
{
|
||||||
std::vector<RiaSummaryCurveDefinition> sumCasePairs;
|
std::vector<RiaSummaryCurveDefinition> curveDefs;
|
||||||
sumCasePairs.push_back(RiaSummaryCurveDefinition(summaryCase, address));
|
curveDefs.push_back(RiaSummaryCurveDefinition(summaryCase, address));
|
||||||
summaryAddressSelection()->setSelectedCurveDefinitions(sumCasePairs);
|
summaryAddressSelection()->setSelectedCurveDefinitions(curveDefs);
|
||||||
|
}
|
||||||
|
|
||||||
|
summaryAddressSelection()->updateConnectedEditors();
|
||||||
|
updateLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuSummaryCurveDefSelectionDialog::setEnsembleAndAddress(RimSummaryCaseCollection* ensemble, const RifEclipseSummaryAddress& address)
|
||||||
|
{
|
||||||
|
if (ensemble)
|
||||||
|
{
|
||||||
|
std::vector<RiaSummaryCurveDefinition> curveDefs;
|
||||||
|
for (const auto& summaryCase : ensemble->allSummaryCases())
|
||||||
|
{
|
||||||
|
curveDefs.push_back(RiaSummaryCurveDefinition(summaryCase, address, ensemble));
|
||||||
|
}
|
||||||
|
summaryAddressSelection()->setSelectedCurveDefinitions(curveDefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
summaryAddressSelection()->updateConnectedEditors();
|
summaryAddressSelection()->updateConnectedEditors();
|
||||||
@ -94,6 +115,22 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelectionDialog::curveS
|
|||||||
return summaryAddressSelection()->selectedCurveDefinitions();
|
return summaryAddressSelection()->selectedCurveDefinitions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuSummaryCurveDefSelectionDialog::hideEnsembles()
|
||||||
|
{
|
||||||
|
summaryAddressSelection()->hideEnsembles(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuSummaryCurveDefSelectionDialog::hideSummaryCases()
|
||||||
|
{
|
||||||
|
summaryAddressSelection()->hideSummaryCases(true);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -40,8 +40,12 @@ public:
|
|||||||
~RiuSummaryCurveDefSelectionDialog();
|
~RiuSummaryCurveDefSelectionDialog();
|
||||||
|
|
||||||
void setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address);
|
void setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address);
|
||||||
|
void setEnsembleAndAddress(RimSummaryCaseCollection* ensemble, const RifEclipseSummaryAddress& address);
|
||||||
std::vector<RiaSummaryCurveDefinition> curveSelection() const;
|
std::vector<RiaSummaryCurveDefinition> curveSelection() const;
|
||||||
|
|
||||||
|
void hideEnsembles();
|
||||||
|
void hideSummaryCases();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RiuSummaryCurveDefSelection* summaryAddressSelection() const;
|
RiuSummaryCurveDefSelection* summaryAddressSelection() const;
|
||||||
void updateLabel();
|
void updateLabel();
|
||||||
|
Loading…
Reference in New Issue
Block a user