From 1bd070a8f5b3c3c12e3173501752fb54d28706e5 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 4 Nov 2016 14:32:39 +0100 Subject: [PATCH] #864 Added SummaryCurveAutoName --- .../Summary/CMakeLists_files.cmake | 2 + .../Summary/RimSummaryCurve.cpp | 43 ++-- .../Summary/RimSummaryCurve.h | 13 +- .../Summary/RimSummaryCurveAutoName.cpp | 243 ++++++++++++++++++ .../Summary/RimSummaryCurveAutoName.h | 59 +++++ 5 files changed, 331 insertions(+), 29 deletions(-) create mode 100644 ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp create mode 100644 ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.h diff --git a/ApplicationCode/ProjectDataModel/Summary/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/Summary/CMakeLists_files.cmake index e2108db6c1..4e539739a2 100644 --- a/ApplicationCode/ProjectDataModel/Summary/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/Summary/CMakeLists_files.cmake @@ -11,6 +11,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryCase.h ${CEE_CURRENT_LIST_DIR}RimSummaryCaseCollection.h ${CEE_CURRENT_LIST_DIR}RimSummaryCurve.h ${CEE_CURRENT_LIST_DIR}RimSummaryCurveAppearanceCalculator.h +${CEE_CURRENT_LIST_DIR}RimSummaryCurveAutoName.h ${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.h ${CEE_CURRENT_LIST_DIR}RimSummaryCurvesCalculator.h ${CEE_CURRENT_LIST_DIR}RimSummaryFilter.h @@ -27,6 +28,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryCase.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCaseCollection.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCurve.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCurveAppearanceCalculator.cpp +${CEE_CURRENT_LIST_DIR}RimSummaryCurveAutoName.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCurvesCalculator.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryFilter.cpp diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index d28580b5f4..5a88d63bee 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -28,6 +28,7 @@ #include "RimEclipseResultCase.h" #include "RimProject.h" #include "RimSummaryCase.h" +#include "RimSummaryCurveAutoName.h" #include "RimSummaryCurveFilter.h" #include "RimSummaryFilter.h" #include "RimSummaryPlot.h" @@ -156,7 +157,8 @@ RimSummaryCurve::RimSummaryCurve() m_summaryFilter.uiCapability()->setUiTreeChildrenHidden(true); m_summaryFilter.uiCapability()->setUiHidden(true); - m_summaryFilter = new RimSummaryFilter(); + m_summaryFilterObject = std::unique_ptr(new RimSummaryFilter); + m_summaryFilter = m_summaryFilterObject.get(); CAF_PDM_InitFieldNoDefault(&m_uiFilterResultSelection, "FilterResultSelection", "Filter Result", "", "", ""); m_uiFilterResultSelection.xmlCapability()->setIOWritable(false); @@ -165,18 +167,22 @@ RimSummaryCurve::RimSummaryCurve() m_uiFilterResultSelection.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); m_uiFilterResultSelection.uiCapability()->setAutoAddingOptionFromValue(false); - CAF_PDM_InitFieldNoDefault(&m_curveVariable, "SummaryAddress", "SummaryAddress", "", "", ""); m_curveVariable.uiCapability()->setUiHidden(true); m_curveVariable.uiCapability()->setUiTreeChildrenHidden(true); + m_curveVariableObject = std::unique_ptr(new RimSummaryAddress); + m_curveVariable = m_curveVariableObject.get(); + CAF_PDM_InitFieldNoDefault(&m_plotAxis, "PlotAxis", "Axis", "", "", ""); - m_curveVariable = new RimSummaryAddress; + CAF_PDM_InitFieldNoDefault(&m_curveNameConfig, "SummaryCurveNameConfig", "SummaryCurveNameConfig", "", "", ""); + m_curveNameConfig.uiCapability()->setUiHidden(true); + m_curveNameConfig.uiCapability()->setUiTreeChildrenHidden(true); + + m_curveNameConfigObject = std::unique_ptr(new RimSummaryCurveAutoName); + m_curveNameConfig = m_curveNameConfigObject.get(); - // Add some space before name to indicate these belong to the Auto Name field - CAF_PDM_InitField(&m_addCaseNameToCurveName, "AddCaseNameToCurveName", true, " Case Name", "", "", ""); - m_symbolSkipPixelDistance = 10.0f; m_curveThickness = 2; updateOptionSensitivity(); @@ -187,8 +193,6 @@ RimSummaryCurve::RimSummaryCurve() //-------------------------------------------------------------------------------------------------- RimSummaryCurve::~RimSummaryCurve() { - delete m_curveVariable(); - delete m_summaryFilter(); } //-------------------------------------------------------------------------------------------------- @@ -337,19 +341,7 @@ QList RimSummaryCurve::calculateValueOptions(const caf:: //-------------------------------------------------------------------------------------------------- QString RimSummaryCurve::createCurveAutoName() { - QString generatedCurveName = QString::fromStdString( m_curveVariable->address().uiText()) + "["+ this->unitName().c_str() + "]"; - - if (m_addCaseNameToCurveName && m_summaryCase()) - { - if (!generatedCurveName.isEmpty()) - { - generatedCurveName += ", "; - } - - generatedCurveName += m_summaryCase->shortName(); - } - - return generatedCurveName; + return m_curveNameConfig->curveName(m_curveVariable->address()); } //-------------------------------------------------------------------------------------------------- @@ -420,9 +412,11 @@ void RimSummaryCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& appearanceGroup->add(&m_lineStyle); appearanceGroup->add(&m_curveName); appearanceGroup->add(&m_isUsingAutoName); + if (m_isUsingAutoName) { - appearanceGroup->add(&m_addCaseNameToCurveName); + caf::PdmUiGroup* autoNameGroup = appearanceGroup->addNewGroup("Auto Name Config"); + m_curveNameConfig->defineUiOrdering(uiConfigName, *autoNameGroup); } uiOrdering.add(&m_plotAxis); @@ -478,11 +472,6 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField, { plot->updateAxes(); } - else if (changedField == &m_addCaseNameToCurveName) - { - this->uiCapability()->updateConnectedEditors(); - updateCurveName(); - } else if (changedField == &m_plotAxis) { updateQwtPlotAxis(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h index 5fc7cc31cb..63c7a250c0 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -31,10 +31,13 @@ #include "cafAppEnum.h" +#include + class RifReaderEclipseSummary; class RimSummaryCase; class RimSummaryFilter; class RiuLineSegmentQwtPlotCurve; +class RimSummaryCurveAutoName; class RimSummaryAddress: public caf::PdmObject { @@ -93,7 +96,7 @@ protected: // RimPlotCurve overrides virtual QString createCurveAutoName() override; - virtual void updateZoomInParentPlot() override; + virtual void updateZoomInParentPlot() override; virtual void onLoadDataAndUpdate() override; private: @@ -111,11 +114,17 @@ private: caf::PdmPtrField m_summaryCase; caf::PdmChildField m_curveVariable; caf::PdmField m_selectedVariableDisplayField; - caf::PdmField m_addCaseNameToCurveName; + + caf::PdmChildField m_curveNameConfig; caf::PdmField< caf::AppEnum< RimDefines::PlotAxis > > m_plotAxis; // Filter fields caf::PdmChildField m_summaryFilter; caf::PdmField m_uiFilterResultSelection; + + // Internal objects managed by unique_ptr + std::unique_ptr m_curveVariableObject; + std::unique_ptr m_summaryFilterObject; + std::unique_ptr m_curveNameConfigObject; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp new file mode 100644 index 0000000000..c73d8c8d07 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.cpp @@ -0,0 +1,243 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimSummaryCurveAutoName.h" + +#include "RifEclipseSummaryAddress.h" + +#include "RimSummaryCurve.h" +#include "RimSummaryCase.h" + + + +CAF_PDM_SOURCE_INIT(RimSummaryCurveAutoName, "SummaryCurveAutoName"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCurveAutoName::RimSummaryCurveAutoName() +{ + CAF_PDM_InitObject("RimSummaryCurveAutoName", "", "", ""); + + CAF_PDM_InitField(&m_quantity, "Quantity", true, "Quantity", "", "", ""); + CAF_PDM_InitField(&m_unit, "Unit", true, "Unit", "", "", ""); + CAF_PDM_InitField(&m_regionNumber, "RegionNumber", true, "RegionNumber", "", "", ""); + CAF_PDM_InitField(&m_wellGroupName, "WellGroupName", true, "WellGroupName", "", "", ""); + CAF_PDM_InitField(&m_wellName, "WellName", true, "WellName", "", "", ""); + CAF_PDM_InitField(&m_wellSegmentNumber, "WellSegmentNumber", true, "WellSegmentNumber", "", "", ""); + CAF_PDM_InitField(&m_lgrName, "LgrName", true, "LgrName", "", "", ""); + CAF_PDM_InitField(&m_completion, "Completion", true, "Completion", "", "", ""); + + CAF_PDM_InitField(&m_caseName, "CaseName", true, "CaseName", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimSummaryCurveAutoName::curveName(const RifEclipseSummaryAddress& summaryAddress) const +{ + std::string text; + + RimSummaryCurve* summaryCurve = nullptr; + this->firstAncestorOrThisOfType(summaryCurve); + + if (m_quantity) + { + text += summaryAddress.quantityName(); + + if (m_unit && summaryCurve) + { + text += "[" + summaryCurve->unitName() + "]"; + } + } + + switch (summaryAddress.category()) + { + case RifEclipseSummaryAddress::SUMMARY_REGION: + { + if (m_regionNumber) + { + if (text.size() > 0) text +=":"; + text += std::to_string(summaryAddress.regionNumber()); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_REGION_2_REGION: + { + if (m_regionNumber) + { + if (text.size() > 0) text += ":"; + text += std::to_string(summaryAddress.regionNumber()); + text += "-" + std::to_string(summaryAddress.regionNumber2()); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL_GROUP: + { + if (m_wellGroupName) + { + if (text.size() > 0) text += ":"; + text += summaryAddress.wellGroupName(); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL: + { + appendWellName(text, summaryAddress); + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION: + { + appendWellName(text, summaryAddress); + + if (m_completion) + { + if (text.size() > 0) text += ":"; + text += std::to_string(summaryAddress.cellI()) + ", " + + std::to_string(summaryAddress.cellJ()) + ", " + + std::to_string(summaryAddress.cellK()); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL_LGR: + { + appendLgrName(text, summaryAddress); + appendWellName(text, summaryAddress); + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION_LGR: + { + appendLgrName(text, summaryAddress); + appendWellName(text, summaryAddress); + + if (m_completion) + { + if (text.size() > 0) text += ":"; + text += std::to_string(summaryAddress.cellI()) + ", " + + std::to_string(summaryAddress.cellJ()) + ", " + + std::to_string(summaryAddress.cellK()); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT: + { + appendWellName(text, summaryAddress); + + if (m_wellSegmentNumber) + { + if (text.size() > 0) text += ":"; + text += ":" + summaryAddress.wellSegmentNumber(); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_BLOCK: + { + if (m_completion) + { + if (text.size() > 0) text += ":"; + text += std::to_string(summaryAddress.cellI()) + ", " + + std::to_string(summaryAddress.cellJ()) + ", " + + std::to_string(summaryAddress.cellK()); + } + } + break; + case RifEclipseSummaryAddress::SUMMARY_BLOCK_LGR: + { + appendLgrName(text, summaryAddress); + + if (m_completion) + { + if (text.size() > 0) text += ":"; + text += std::to_string(summaryAddress.cellI()) + ", " + + std::to_string(summaryAddress.cellJ()) + ", " + + std::to_string(summaryAddress.cellK()); + } + } + break; + } + + + if (summaryCurve) + { + if (m_caseName) + { + if (summaryCurve && summaryCurve->summaryCase()) + { + if (text.size() > 0) text += ", "; + text += summaryCurve->summaryCase()->caseName().toStdString(); + } + } + } + + return QString::fromStdString(text); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveAutoName::appendWellName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const +{ + if (m_wellName) + { + if (text.size() > 0) text += ":"; + text += summaryAddress.wellName(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveAutoName::appendLgrName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const +{ + if (m_lgrName) + { + if (text.size() > 0) text += ":"; + text += ":" + summaryAddress.lgrName(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveAutoName::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) +{ + RimSummaryCurve* summaryCurve = nullptr; + this->firstAncestorOrThisOfType(summaryCurve); + if (summaryCurve) + { + summaryCurve->updateCurveName(); + summaryCurve->updateConnectedEditors(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveAutoName::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + uiOrdering.add(&m_caseName); + uiOrdering.add(&m_quantity); + uiOrdering.add(&m_unit); + uiOrdering.add(&m_regionNumber); + uiOrdering.add(&m_wellGroupName); + uiOrdering.add(&m_wellName); + uiOrdering.add(&m_wellSegmentNumber); + uiOrdering.add(&m_lgrName); + uiOrdering.add(&m_completion); +} + diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.h new file mode 100644 index 0000000000..dc17db80dd --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveAutoName.h @@ -0,0 +1,59 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016 Statoil ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include "cafPdmField.h" +#include "cafPdmObject.h" + + +class RifEclipseSummaryAddress; + +class RimSummaryCurveAutoName : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; +public: + RimSummaryCurveAutoName();; + + QString curveName(const RifEclipseSummaryAddress& summaryAddress) const; + + + virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + +protected: + friend RimSummaryCurve; + virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + +private: + void appendWellName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const; + void appendLgrName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const; + +private: + caf::PdmField m_quantity; + caf::PdmField m_unit; + caf::PdmField m_regionNumber; + caf::PdmField m_wellGroupName; + caf::PdmField m_wellName; + caf::PdmField m_wellSegmentNumber; + caf::PdmField m_lgrName; + caf::PdmField m_completion; + + caf::PdmField m_caseName; +}; +