From 450d1177f6cf5326bea06ba998c6b4129c96a95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Fri, 11 May 2018 13:24:46 +0200 Subject: [PATCH] #2898 Ensemble curves. Add vector selection button and dialog --- .../Summary/RimEnsembleCurveSet.cpp | 35 ++++++- .../Summary/RimSummaryCurve.cpp | 2 + .../RiuSummaryCurveDefSelection.cpp | 95 ++++++++++++------- .../RiuSummaryCurveDefSelection.h | 5 + .../RiuSummaryCurveDefSelectionDialog.cpp | 43 ++++++++- .../RiuSummaryCurveDefSelectionDialog.h | 4 + 6 files changed, 145 insertions(+), 39 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index 3b97e9d3a5..4289d715d7 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -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 || diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index ba698dda55..b96cf025b8 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -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) diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp index 346d318386..a88eacc11d 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp @@ -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 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); + } } } } diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.h b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.h index d0b0df5783..5c17420571 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.h +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.h @@ -58,6 +58,8 @@ public: void setSelectedCurveDefinitions(const std::vector& curveDefinitions); std::vector selectedCurveDefinitions() const; void setMultiSelectionMode(bool multiSelectionMode); + void hideEnsembles(bool hide); + void hideSummaryCases(bool hide); void setFieldChangedHandler(const std::function& handlerFunc); void setDefaultSelection(const std::vector& defaultCases); @@ -105,6 +107,9 @@ private: std::map> m_identifierFieldsMap; bool m_multiSelectionMode; + + bool m_hideEnsembles; + bool m_hideSummaryCases; std::function m_toggleChangedHandler; }; diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.cpp b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.cpp index 31abcd6971..3ba3327b16 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.cpp @@ -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 sumCasePairs; - sumCasePairs.push_back(RiaSummaryCurveDefinition(summaryCase, address)); - summaryAddressSelection()->setSelectedCurveDefinitions(sumCasePairs); + std::vector 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 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 RiuSummaryCurveDefSelectionDialog::curveS return summaryAddressSelection()->selectedCurveDefinitions(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSummaryCurveDefSelectionDialog::hideEnsembles() +{ + summaryAddressSelection()->hideEnsembles(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSummaryCurveDefSelectionDialog::hideSummaryCases() +{ + summaryAddressSelection()->hideSummaryCases(true); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.h b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.h index c3cc896f32..f8784337fc 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.h +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelectionDialog.h @@ -40,8 +40,12 @@ public: ~RiuSummaryCurveDefSelectionDialog(); void setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address); + void setEnsembleAndAddress(RimSummaryCaseCollection* ensemble, const RifEclipseSummaryAddress& address); std::vector curveSelection() const; + void hideEnsembles(); + void hideSummaryCases(); + private: RiuSummaryCurveDefSelection* summaryAddressSelection() const; void updateLabel();