From cf287160df61680540086358f5998a1f7295d57f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 16 Jun 2016 16:10:16 +0200 Subject: [PATCH] #756 Curve creation and syncronization with filter and selection. --- .../ProjectDataModel/RimSummaryCurve.cpp | 28 ++++- .../ProjectDataModel/RimSummaryCurve.h | 4 + .../RimSummaryCurveFilter.cpp | 106 +++++++++++++++++- .../ProjectDataModel/RimSummaryCurveFilter.h | 10 +- 4 files changed, 139 insertions(+), 9 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/RimSummaryCurve.cpp index 92e482574f..6a704581f8 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurve.cpp @@ -186,6 +186,14 @@ void RimSummaryCurve::setSummaryCase(RimSummaryCase* sumCase) m_summaryCase = sumCase; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCase* RimSummaryCurve::summaryCase() +{ + return m_summaryCase(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -194,6 +202,22 @@ void RimSummaryCurve::setVariable(QString varName) m_curveVariable->setAddress(RifEclipseSummaryAddress::fieldVarAddress(varName.toStdString())); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifEclipseSummaryAddress RimSummaryCurve::summaryAddress() +{ + return m_curveVariable->address(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurve::setSummaryAddress(const RifEclipseSummaryAddress& address) +{ + m_curveVariable->setAddress(address); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -335,7 +359,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField, { this->RimPlotCurve::fieldChangedByUi(changedField,oldValue,newValue); - if(changedField = &m_uiFilterResultSelection) + if(changedField == &m_uiFilterResultSelection) { if (0 <= m_uiFilterResultSelection() && m_uiFilterResultSelection() < summaryReader()->allResultAddresses().size()) { @@ -367,7 +391,7 @@ RifReaderEclipseSummary* RimSummaryCurve::summaryReader() //-------------------------------------------------------------------------------------------------- void RimSummaryCurve::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/) { - + } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurve.h b/ApplicationCode/ProjectDataModel/RimSummaryCurve.h index f14f246a9b..96c791e96e 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurve.h +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurve.h @@ -73,8 +73,12 @@ public: virtual ~RimSummaryCurve(); void setSummaryCase(RimSummaryCase* sumCase); + RimSummaryCase* summaryCase(); void setVariable(QString varName); + RifEclipseSummaryAddress summaryAddress(); + void setSummaryAddress(const RifEclipseSummaryAddress& address); + protected: // RimPlotCurve overrides diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp index c182c1bf80..09aecb2dbf 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp @@ -35,6 +35,8 @@ #include "RimSummaryCase.h" #include "RigSummaryCaseData.h" #include "RimSummaryCurve.h" +#include "cafPdmUiPushButtonEditor.h" +#include "WellLogCommands\RicWellLogPlotCurveFeatureImpl.h" QTextStream& operator << (QTextStream& str, const std::vector& sobj) @@ -81,7 +83,15 @@ RimSummaryCurveFilter::RimSummaryCurveFilter() CAF_PDM_InitFieldNoDefault(&m_curves, "FilteredCurves", "Filtered Curves", "", "", ""); m_curves.uiCapability()->setUiHidden(true); - m_curves.uiCapability()->setUiChildrenHidden(true); + m_curves.uiCapability()->setUiChildrenHidden(false); + + CAF_PDM_InitFieldNoDefault(&m_applyButtonField, "ApplySelection", "Apply", "", "", ""); + m_applyButtonField.xmlCapability()->setIOWritable(false); + m_applyButtonField.xmlCapability()->setIOReadable(false); + m_applyButtonField = false; + m_applyButtonField.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName()); + m_applyButtonField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + } //-------------------------------------------------------------------------------------------------- @@ -89,6 +99,7 @@ RimSummaryCurveFilter::RimSummaryCurveFilter() //-------------------------------------------------------------------------------------------------- RimSummaryCurveFilter::~RimSummaryCurveFilter() { + delete m_summaryFilter(); m_curves.deleteAllChildObjects(); } @@ -168,7 +179,7 @@ void RimSummaryCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd m_summaryFilter->defineUiOrdering(uiConfigName, *curveVarSelectionGroup); curveVarSelectionGroup->add(&m_uiFilterResultMultiSelection); - + uiOrdering.add(&m_applyButtonField); uiOrdering.setForgetRemainingFields(true); } @@ -178,9 +189,15 @@ void RimSummaryCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd //-------------------------------------------------------------------------------------------------- void RimSummaryCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - if(changedField = &m_uiFilterResultMultiSelection) + if(changedField == &m_uiFilterResultMultiSelection) { - this->loadDataAndUpdate(); + + } + else if (changedField == &m_applyButtonField) + { + syncCurvesFromUiSelection(); + loadDataAndUpdate(); + m_applyButtonField = false; } } @@ -202,6 +219,7 @@ RifReaderEclipseSummary* RimSummaryCurveFilter::summaryReader() //-------------------------------------------------------------------------------------------------- void RimSummaryCurveFilter::setParentQwtPlot(QwtPlot* plot) { + m_parentQwtPlot = plot; for (RimSummaryCurve* curve : m_curves) { curve->setParentQwtPlot(plot); @@ -222,8 +240,86 @@ void RimSummaryCurveFilter::detachQwtCurve() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryCurveFilter::syncronizeCurves() +void RimSummaryCurveFilter::syncCurvesFromUiSelection() { + // Create a search map containing whats supposed to be + + std::set > newCurveDefinitions; + + // Populate the newCurveDefinitions from the Gui + for (int caseIdx = 0; caseIdx < 1; ++caseIdx) + { + RimSummaryCase* currentCase = m_selectedSummaryCase(); + for(const RifEclipseSummaryAddress& addr: m_uiFilterResultMultiSelection.v()) + { + newCurveDefinitions.insert(std::make_pair(currentCase, addr)); + } + } + + // Delete all existing curves that is not matching + // Remove the entries in the search set that we already have + for(RimSummaryCurve* curve: m_curves) + { + auto foundIt = newCurveDefinitions.find(std::make_pair(curve->summaryCase(), curve->summaryAddress() )); + if (foundIt == newCurveDefinitions.end()) + { + delete curve; + } + else + { + newCurveDefinitions.erase(foundIt); + } + } + m_curves.removeChildObject(nullptr); + + // Create all new curves that is missing + + for (auto& caseAddrPair: newCurveDefinitions) + { + RimSummaryCase* currentCase = caseAddrPair.first; + RimSummaryCurve* curve = new RimSummaryCurve(); + + curve->setParentQwtPlot(m_parentQwtPlot); + curve->setSummaryCase(currentCase); + curve->setSummaryAddress(caseAddrPair.second); + cvf::Color3f curveColor = RicWellLogPlotCurveFeatureImpl::curveColorFromTable(); + curve->setColor(curveColor); + m_curves.push_back(curve); + } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveFilter::syncUiSelectionFromCurves() +{ + + for(RimSummaryCurve* curve: m_curves) + { + + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute) +{ + if(&m_applyButtonField == field) + { + caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast (attribute); + attrib->m_buttonText = "Apply" ; + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveFilter::loadDataAndUpdate() +{ + for (RimSummaryCurve* curve: m_curves) + { + curve->loadDataAndUpdate(); + } +} diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h index e573ff7f1f..953843716e 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h @@ -50,18 +50,22 @@ public: RimSummaryCurveFilter(); virtual ~RimSummaryCurveFilter(); - void loadDataAndUpdate() {} + void loadDataAndUpdate(); void setParentQwtPlot(QwtPlot* plot); void detachQwtCurve(); private: RifReaderEclipseSummary* summaryReader(); - void syncronizeCurves(); + void syncCurvesFromUiSelection(); + void syncUiSelectionFromCurves(); // Overridden PDM methods virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly); virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute) override; + + QPointer m_parentQwtPlot; // Fields caf::PdmPtrField m_selectedSummaryCase; @@ -73,5 +77,7 @@ private: caf::PdmChildField m_summaryFilter; caf::PdmField > m_uiFilterResultMultiSelection; + caf::PdmField m_applyButtonField; + };