From f9b26ce1049ff3026770d0828d7b674c8e4b63d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Sat, 23 Sep 2017 08:01:46 +0200 Subject: [PATCH] #1923 Replace int-based vector selection list with a summaryaddress based one This removes a loop over all the adresses in the summary case for each curve, and makes the highlight of the selection more stable --- .../FileInterface/CMakeLists_files.cmake | 1 + .../RifEclipseSummaryAddressQMetaType.h | 24 +++++++ .../Summary/RimSummaryCurve.cpp | 66 +++++++------------ .../Summary/RimSummaryCurve.h | 6 +- .../Summary/RimSummaryCurveFilter.cpp | 1 + .../Summary/RimSummaryCurveFilter.h | 4 +- 6 files changed, 56 insertions(+), 46 deletions(-) create mode 100644 ApplicationCode/FileInterface/RifEclipseSummaryAddressQMetaType.h diff --git a/ApplicationCode/FileInterface/CMakeLists_files.cmake b/ApplicationCode/FileInterface/CMakeLists_files.cmake index 0fac37d248..48b02c67b5 100644 --- a/ApplicationCode/FileInterface/CMakeLists_files.cmake +++ b/ApplicationCode/FileInterface/CMakeLists_files.cmake @@ -24,6 +24,7 @@ ${CEE_CURRENT_LIST_DIR}RifReaderInterface.h ${CEE_CURRENT_LIST_DIR}RifReaderMockModel.h ${CEE_CURRENT_LIST_DIR}RifReaderSettings.h ${CEE_CURRENT_LIST_DIR}RifEclipseSummaryAddress.h +${CEE_CURRENT_LIST_DIR}RifEclipseSummaryAddressQMetaType.h ${CEE_CURRENT_LIST_DIR}RifWellPathImporter.h ${CEE_CURRENT_LIST_DIR}RifHdf5ReaderInterface.h diff --git a/ApplicationCode/FileInterface/RifEclipseSummaryAddressQMetaType.h b/ApplicationCode/FileInterface/RifEclipseSummaryAddressQMetaType.h new file mode 100644 index 0000000000..99bae175b5 --- /dev/null +++ b/ApplicationCode/FileInterface/RifEclipseSummaryAddressQMetaType.h @@ -0,0 +1,24 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 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 +#include "RifEclipseSummaryAddress.h" + +Q_DECLARE_METATYPE(RifEclipseSummaryAddress); + diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index 7d1b68df7e..cc74730e88 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -40,6 +40,20 @@ #include "qwt_date.h" +// See also corresponding fake implementations in RimSummaryCurveFilter + +QTextStream& operator << (QTextStream& str, const RifEclipseSummaryAddress& sobj) +{ + CVF_ASSERT(false); + return str; +} + +QTextStream& operator >> (QTextStream& str, RifEclipseSummaryAddress& sobj) +{ + CVF_ASSERT(false); + return str; +} + CAF_PDM_SOURCE_INIT(RimSummaryAddress, "SummaryAddress"); @@ -311,27 +325,21 @@ QList RimSummaryCurve::calculateValueOptions(const caf:: if(m_summaryCase) { RifSummaryReaderInterface* reader = summaryReader(); - int addressCount = 0; if(reader) { const std::vector allAddresses = reader->allResultAddresses(); - addressCount = static_cast(allAddresses.size()); - std::map addrToIdxMap; - for(int i = 0; i isIncludedByFilter(allAddresses[i] )) continue; - addrToIdxMap[allAddresses[i]] = i; - } - for (const auto& addrIntPair: addrToIdxMap) + for(auto& address : allAddresses) { - std::string name = addrIntPair.first.uiText(); + if (!m_summaryFilter->isIncludedByFilter(address )) continue; + + std::string name = address.uiText(); QString s = QString::fromStdString(name); - options.push_back(caf::PdmOptionItemInfo(s, addrIntPair.second)); + options.push_back(caf::PdmOptionItemInfo(s, QVariant::fromValue( address))); } } - options.push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), addressCount)); + options.push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), QVariant::fromValue( RifEclipseSummaryAddress() ))); if(useOptionsOnly) *useOptionsOnly = true; } @@ -366,22 +374,12 @@ void RimSummaryCurve::onLoadDataAndUpdate() { this->RimPlotCurve::updateCurvePresentation(); + updateCurveAppearance(); + m_selectedVariableDisplayField = QString::fromStdString(m_curveVariable->address().uiText()); - RifSummaryReaderInterface* reader = summaryReader(); - if (reader) - { - const std::vector allAddresses = reader->allResultAddresses(); - - for (size_t i = 0; i < allAddresses.size(); i++) - { - if (allAddresses[i].uiText() == m_curveVariable->address().uiText()) - { - m_uiFilterResultSelection = static_cast(i); - updateConnectedEditors(); - } - } - } + m_uiFilterResultSelection = m_curveVariable->address(); + updateConnectedEditors(); if (isCurveVisible()) { @@ -502,21 +500,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField, if(changedField == &m_uiFilterResultSelection) { - if (summaryReader()) - { - if (0 <= m_uiFilterResultSelection() && static_cast(m_uiFilterResultSelection()) < summaryReader()->allResultAddresses().size()) - { - m_curveVariable->setAddress(summaryReader()->allResultAddresses()[m_uiFilterResultSelection()]); - } - else - { - m_curveVariable->setAddress(RifEclipseSummaryAddress()); - } - } - else - { - m_curveVariable->setAddress(RifEclipseSummaryAddress()); - } + m_curveVariable->setAddress(m_uiFilterResultSelection()); this->calculateCurveInterpolationFromAddress(); this->loadDataAndUpdate(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h index a67a9d8e80..f4c7e16f33 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -25,19 +25,19 @@ #include "cafPdmPtrField.h" #include "cafPdmChildField.h" -#include "RifEclipseSummaryAddress.h" +#include "RifEclipseSummaryAddressQMetaType.h" #include "RiaDefines.h" #include "RimPlotCurve.h" #include "cafAppEnum.h" - class RifSummaryReaderInterface; class RimSummaryCase; class RimSummaryFilter; class RiuLineSegmentQwtPlotCurve; class RimSummaryCurveAutoName; + class RimSummaryAddress: public caf::PdmObject { CAF_PDM_HEADER_INIT; @@ -124,5 +124,5 @@ private: // Filter fields caf::PdmChildField m_summaryFilter; - caf::PdmField m_uiFilterResultSelection; + caf::PdmField m_uiFilterResultSelection; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.cpp index 82e05e5358..f6dbbb726e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.cpp @@ -41,6 +41,7 @@ #include "cafPdmUiListEditor.h" #include "cafPdmUiPushButtonEditor.h" +// See also corresponding fake implementations in RimSummaryCurve QTextStream& operator << (QTextStream& str, const std::vector& sobj) { diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.h index 3c7b546510..155ecfa194 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveFilter.h @@ -28,7 +28,7 @@ #include "cafAppEnum.h" #include "cafPdmPtrArrayField.h" -#include "RifEclipseSummaryAddress.h" +#include "RifEclipseSummaryAddressQMetaType.h" #include "RiaDefines.h" #include "RimSummaryCurveAppearanceCalculator.h" @@ -43,7 +43,7 @@ class RiuLineSegmentQwtPlotCurve; class RimSummaryCurveAutoName; -Q_DECLARE_METATYPE(RifEclipseSummaryAddress); + //================================================================================================== ///