#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 "RimSummaryPlot.h"
#include "RiuPlotMainWindow.h"
#include "RiuSummaryQwtPlot.h"
#include "RiuSummaryCurveDefSelectionDialog.h"
#include "cafPdmUiTreeOrdering.h"
#include "cafPdmUiListEditor.h"
@ -112,8 +114,6 @@ RimEnsembleCurveSet::RimEnsembleCurveSet()
CAF_PDM_InitFieldNoDefault(&m_yPushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "");
caf::PdmUiPushButtonEditor::configureEditorForField(&m_yPushButtonSelectSummaryAddress);
m_yPushButtonSelectSummaryAddress = false;
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiReadOnly(true);
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiHidden(true);
m_yValuesCurveVariable = new RimSummaryAddress;
@ -418,6 +418,37 @@ void RimEnsembleCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* changedFie
{
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 ||
changedField == &m_userDefinedName ||

View File

@ -697,6 +697,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
candicateAddress = m_xValuesCurveVariable->address();
}
dlg.hideEnsembles();
dlg.setCaseAndAddress(candidateCase, candicateAddress);
if (dlg.exec() == QDialog::Accepted)
@ -730,6 +731,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
candicateAddress = m_yValuesCurveVariable->address();
}
dlg.hideEnsembles();
dlg.setCaseAndAddress(candidateCase, candicateAddress);
if (dlg.exec() == QDialog::Accepted)

View File

@ -228,6 +228,8 @@ RiuSummaryCurveDefSelection::RiuSummaryCurveDefSelection() : m_identifierFieldsM
m_currentSummaryCategory.uiCapability()->setUiHidden(true);
m_multiSelectionMode = false;
m_hideEnsembles = false;
m_hideSummaryCases = false;
}
//--------------------------------------------------------------------------------------------------
@ -308,6 +310,22 @@ void RiuSummaryCurveDefSelection::setMultiSelectionMode(bool 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();
if (sumCaseMainColl)
{
// Top level cases
for (const auto& sumCase : sumCaseMainColl->topLevelSummaryCases())
if (!m_hideSummaryCases)
{
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
bool ensembleHeaderCreated = false;
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
if (!m_hideEnsembles)
{
if (!sumCaseColl->isEnsemble()) continue;
if (!ensembleHeaderCreated)
bool ensembleHeaderCreated = false;
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
{
options.push_back(caf::PdmOptionItemInfo::createHeader("Ensembles", true));
ensembleHeaderCreated = true;
}
if (!sumCaseColl->isEnsemble()) continue;
auto optionItem = caf::PdmOptionItemInfo(sumCaseColl->name(), sumCaseColl);
optionItem.setLevel(1);
options.push_back(optionItem);
}
if (!ensembleHeaderCreated)
{
options.push_back(caf::PdmOptionItemInfo::createHeader("Ensembles", true));
ensembleHeaderCreated = true;
}
// Grouped cases
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);
auto optionItem = caf::PdmOptionItemInfo(sumCaseColl->name(), sumCaseColl);
optionItem.setLevel(1);
options.push_back(optionItem);
}
}
// Observed data
auto observedDataColl = oilField->observedDataCollection();
if (observedDataColl->allObservedData().size() > 0)
if (!m_hideSummaryCases)
{
options.push_back(caf::PdmOptionItemInfo::createHeader("Observed Data", true));
for (const auto& obsData : observedDataColl->allObservedData())
// Grouped cases
for (const auto& sumCaseColl : sumCaseMainColl->summaryCaseCollections())
{
auto optionItem = caf::PdmOptionItemInfo(obsData->caseName(), obsData);
optionItem.setLevel(1);
options.push_back(optionItem);
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);
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);
std::vector<RiaSummaryCurveDefinition> selectedCurveDefinitions() const;
void setMultiSelectionMode(bool multiSelectionMode);
void hideEnsembles(bool hide);
void hideSummaryCases(bool hide);
void setFieldChangedHandler(const std::function<void()>& handlerFunc);
void setDefaultSelection(const std::vector<RimSummaryCase*>& defaultCases);
@ -105,6 +107,9 @@ private:
std::map<RifEclipseSummaryAddress::SummaryVarCategory, std::vector<SummaryIdentifierAndField*>> m_identifierFieldsMap;
bool m_multiSelectionMode;
bool m_hideEnsembles;
bool m_hideSummaryCases;
std::function<void()> m_toggleChangedHandler;
};

View File

@ -20,6 +20,8 @@
#include "RiaSummaryCurveDefinition.h"
#include "RimSummaryCaseCollection.h"
#include "RiuSummaryCurveDefSelection.h"
#include "RiuSummaryCurveDefSelectionEditor.h"
#include "RiuTools.h"
@ -77,9 +79,28 @@ void RiuSummaryCurveDefSelectionDialog::setCaseAndAddress(RimSummaryCase* summar
{
if (summaryCase)
{
std::vector<RiaSummaryCurveDefinition> sumCasePairs;
sumCasePairs.push_back(RiaSummaryCurveDefinition(summaryCase, address));
summaryAddressSelection()->setSelectedCurveDefinitions(sumCasePairs);
std::vector<RiaSummaryCurveDefinition> curveDefs;
curveDefs.push_back(RiaSummaryCurveDefinition(summaryCase, address));
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();
@ -94,6 +115,22 @@ std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelectionDialog::curveS
return summaryAddressSelection()->selectedCurveDefinitions();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelectionDialog::hideEnsembles()
{
summaryAddressSelection()->hideEnsembles(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelectionDialog::hideSummaryCases()
{
summaryAddressSelection()->hideSummaryCases(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -40,8 +40,12 @@ public:
~RiuSummaryCurveDefSelectionDialog();
void setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address);
void setEnsembleAndAddress(RimSummaryCaseCollection* ensemble, const RifEclipseSummaryAddress& address);
std::vector<RiaSummaryCurveDefinition> curveSelection() const;
void hideEnsembles();
void hideSummaryCases();
private:
RiuSummaryCurveDefSelection* summaryAddressSelection() const;
void updateLabel();