#2898 Ensemble curves. Add vector selection button and dialog

This commit is contained in:
Bjørn Erik Jensen 2018-05-11 13:24:46 +02:00
parent ff9fbe95b8
commit 450d1177f6
6 changed files with 145 additions and 39 deletions

View File

@ -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 ||

View File

@ -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)

View File

@ -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);
}
} }
} }
} }

View File

@ -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;
}; };

View File

@ -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);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -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();