diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index 60dfbdb2ee..b05ebda414 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -80,6 +80,7 @@ ${CEE_CURRENT_LIST_DIR}RimGridCollection.h ${CEE_CURRENT_LIST_DIR}RimSummaryPlotCollection.h ${CEE_CURRENT_LIST_DIR}RimSummaryPlot.h ${CEE_CURRENT_LIST_DIR}RimSummaryCurve.h +${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.h ${CEE_CURRENT_LIST_DIR}RimSummaryCase.h ${CEE_CURRENT_LIST_DIR}RimGridSummaryCase.cpp ${CEE_CURRENT_LIST_DIR}RimFileSummaryCase.cpp @@ -164,6 +165,7 @@ ${CEE_CURRENT_LIST_DIR}RimGridCollection.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryPlotCollection.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryPlot.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCurve.cpp +${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryCase.cpp ${CEE_CURRENT_LIST_DIR}RimGridSummaryCase.cpp ${CEE_CURRENT_LIST_DIR}RimFileSummaryCase.cpp diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp new file mode 100644 index 0000000000..e91ea059e4 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.cpp @@ -0,0 +1,308 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 "RimSummaryCurveFilter.h" + +#include "RiaApplication.h" +#include "RifReaderEclipseSummary.h" +#include "RimDefines.h" +#include "RimEclipseResultCase.h" +#include "RimProject.h" +#include "RimSummaryPlot.h" +#include "RimSummaryPlotCollection.h" +#include "RiuSummaryQwtPlot.h" + +#include "cafPdmUiComboBoxEditor.h" +#include "cafPdmUiListEditor.h" +#include "cafPdmUiTreeOrdering.h" +#include "RiuLineSegmentQwtPlotCurve.h" +#include "qwt_date.h" +#include "RimSummaryCase.h" +#include "RigSummaryCaseData.h" +#include "RimSummaryCurve.h" + + + +CAF_PDM_SOURCE_INIT(RimSummaryCurveFilter, "SummaryCurveFilter"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCurveFilter::RimSummaryCurveFilter() +{ + CAF_PDM_InitObject("Curve Filter", ":/WellLogCurve16x16.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&m_selectedSummaryCase, "SummaryCases", "Cases", "", "", ""); + m_selectedSummaryCase.uiCapability()->setUiChildrenHidden(true); + + CAF_PDM_InitFieldNoDefault(&m_selectedVariableDisplayField, "SelectedVariableDisplayVar", "Variables", "", "", ""); + m_selectedVariableDisplayField.xmlCapability()->setIOWritable(false); + m_selectedVariableDisplayField.xmlCapability()->setIOReadable(false); + m_selectedVariableDisplayField.uiCapability()->setUiReadOnly(true); + + CAF_PDM_InitFieldNoDefault(&m_filterType,"SummaryFilterType","Filter Type","","",""); + m_filterType.xmlCapability()->setIOWritable(false); + m_filterType.xmlCapability()->setIOReadable(false); + + CAF_PDM_InitFieldNoDefault(&m_completeVarStringFilter, "SummaryCompleteVarStringFilter", "Filter", "", "", ""); + m_completeVarStringFilter.xmlCapability()->setIOWritable(false); + m_completeVarStringFilter.xmlCapability()->setIOReadable(false); + + CAF_PDM_InitFieldNoDefault(&m_filterQuantityName,"SummaryVarQuantityFilter","Quantity","","",""); + m_filterQuantityName.xmlCapability()->setIOWritable(false); + m_filterQuantityName.xmlCapability()->setIOReadable(false); + + CAF_PDM_InitFieldNoDefault(&m_regionNumberFilter ,"SummaryRegionNumberFilter","Region","","",""); + m_regionNumberFilter.xmlCapability()->setIOWritable(false); + m_regionNumberFilter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_regionNumber2Filter ,"SummaryRegionNumber2Filter","Region 2","","",""); + m_regionNumber2Filter.xmlCapability()->setIOWritable(false); + m_regionNumber2Filter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_wellGroupNameFilter, "SummaryWellGroupNameFilter", "Well Group", "", "", ""); + m_wellGroupNameFilter.xmlCapability()->setIOWritable(false); + m_wellGroupNameFilter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_wellNameFilter ,"SummaryWellNameFilter","Well","","",""); + m_wellNameFilter.xmlCapability()->setIOWritable(false); + m_wellNameFilter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_wellSegmentNumberFilter ,"SummaryWellSegmentNumberFilter","Segment","","",""); + m_wellSegmentNumberFilter.xmlCapability()->setIOWritable(false); + m_wellSegmentNumberFilter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_lgrNameFilter ,"SummaryLgrNameFilter","Lgr","","",""); + m_lgrNameFilter.xmlCapability()->setIOWritable(false); + m_lgrNameFilter.xmlCapability()->setIOReadable(false); + CAF_PDM_InitFieldNoDefault(&m_cellIJKFilter ,"SummaryCellIJKFilter","I, J, K","","",""); + m_cellIJKFilter.xmlCapability()->setIOWritable(false); + m_cellIJKFilter.xmlCapability()->setIOReadable(false); + + CAF_PDM_InitFieldNoDefault(&m_uiFilterResultMultiSelection, "FilterResultSelection", "Filter Result", "", "", ""); + m_cellIJKFilter.xmlCapability()->setIOWritable(false); + m_cellIJKFilter.xmlCapability()->setIOReadable(false); + m_uiFilterResultMultiSelection.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); + m_uiFilterResultMultiSelection.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN); + m_uiFilterResultMultiSelection.uiCapability()->setAutoAddingOptionFromValue(false); + + + CAF_PDM_InitFieldNoDefault(&m_curves, "FilteredCurves", "Filtered Curves", "", "", ""); + m_curves.uiCapability()->setUiHidden(true); + m_curves.uiCapability()->setUiChildrenHidden(true); + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCurveFilter::~RimSummaryCurveFilter() +{ + m_curves.deleteAllChildObjects(); +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimSummaryCurveFilter::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) +{ + QList optionList; + + if (fieldNeedingOptions == &m_selectedSummaryCase) + { + RimProject* proj = RiaApplication::instance()->project(); + std::vector cases; + + proj->allSummaryCases(cases); + + for (size_t i = 0; i < cases.size(); i++) + { + RimSummaryCase* rimCase = cases[i]; + + optionList.push_back(caf::PdmOptionItemInfo(rimCase->caseName(), QVariant::fromValue(caf::PdmPointer(rimCase)))); + } + + if (optionList.size() > 0) + { + optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer(NULL)))); + } + } + else if(fieldNeedingOptions == &m_uiFilterResultMultiSelection) + { + if(m_selectedSummaryCase) + { + RifReaderEclipseSummary* 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 add(&m_selectedSummaryCase); + curveDataGroup->add(&m_selectedVariableDisplayField); + + caf::PdmUiGroup* curveVarSelectionGroup = curveDataGroup->addNewGroup("Variable Selection"); + curveVarSelectionGroup->add(&m_filterType); + + caf::PdmUiGroup* curveVarFilterGroup = nullptr; + + if (m_filterType() == RimSummaryCurve::SUM_FILTER_VAR_STRING) + { + curveVarSelectionGroup->add(&m_completeVarStringFilter); + } + else + { + caf::PdmUiGroup* curveVarFilterGroup = curveVarSelectionGroup->addNewGroup("Filter Settings"); + + curveVarFilterGroup->add(&m_filterQuantityName); + + switch (m_filterType()) + { + case RimSummaryCurve::SUM_FILTER_ANY: + { + curveVarFilterGroup->add(&m_wellNameFilter); + curveVarFilterGroup->add(&m_wellGroupNameFilter); + curveVarFilterGroup->add(&m_regionNumberFilter); + curveVarFilterGroup->add(&m_regionNumber2Filter); + curveVarFilterGroup->add(&m_wellSegmentNumberFilter); + curveVarFilterGroup->add(&m_lgrNameFilter); + curveVarFilterGroup->add(&m_cellIJKFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_REGION: + { + curveVarFilterGroup->add(&m_regionNumberFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_REGION_2_REGION: + { + curveVarFilterGroup->add(&m_regionNumberFilter); + curveVarFilterGroup->add(&m_regionNumber2Filter); + + } + break; + case RimSummaryCurve::SUM_FILTER_WELL_GROUP: + { + curveVarFilterGroup->add(&m_wellGroupNameFilter); + + } + break; + case RimSummaryCurve::SUM_FILTER_WELL: + { + curveVarFilterGroup->add(&m_wellNameFilter); + + } + break; + case RimSummaryCurve::SUM_FILTER_WELL_COMPLETION: + { + curveVarFilterGroup->add(&m_wellNameFilter); + curveVarFilterGroup->add(&m_cellIJKFilter); + + } + break; + case RimSummaryCurve::SUM_FILTER_WELL_LGR: + { + curveVarFilterGroup->add(&m_wellNameFilter); + curveVarFilterGroup->add(&m_lgrNameFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_WELL_COMPLETION_LGR: + { + curveVarFilterGroup->add(&m_wellNameFilter); + curveVarFilterGroup->add(&m_lgrNameFilter); + curveVarFilterGroup->add(&m_cellIJKFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_WELL_SEGMENT: + { + curveVarFilterGroup->add(&m_wellNameFilter); + curveVarFilterGroup->add(&m_wellSegmentNumberFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_BLOCK: + { + curveVarFilterGroup->add(&m_cellIJKFilter); + } + break; + case RimSummaryCurve::SUM_FILTER_BLOCK_LGR: + { + curveVarFilterGroup->add(&m_lgrNameFilter); + curveVarFilterGroup->add(&m_cellIJKFilter); + } + break; + + } + } + curveVarSelectionGroup->add(&m_uiFilterResultMultiSelection); + +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) +{ + + if(changedField = &m_uiFilterResultMultiSelection) + { + + + this->loadDataAndUpdate(); + } +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifReaderEclipseSummary* RimSummaryCurveFilter::summaryReader() +{ + if(!m_selectedSummaryCase()) return nullptr; + + if(!m_selectedSummaryCase->caseData()) return nullptr; + + return m_selectedSummaryCase()->caseData()->summaryReader(); +} + diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h new file mode 100644 index 0000000000..c1ea820c3e --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurveFilter.h @@ -0,0 +1,83 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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" +#include "cafPdmPointer.h" +#include "cafPdmPtrField.h" +#include "cafPdmChildField.h" +#include "cafPdmChildArrayField.h" + +#include "RimPlotCurve.h" +#include "RifEclipseSummaryAddress.h" +#include "cafAppEnum.h" + +#include "RimSummaryCurve.h" + +class RimSummaryCase; +class RifReaderEclipseSummary; +class RiuLineSegmentQwtPlotCurve; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimSummaryCurveFilter : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; +public: + RimSummaryCurveFilter(); + virtual ~RimSummaryCurveFilter(); + + void loadDataAndUpdate() {} + +private: + RifReaderEclipseSummary* summaryReader(); + + // 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; + + // Fields + caf::PdmPtrField m_selectedSummaryCase; + caf::PdmChildArrayField m_curves; + + caf::PdmField m_selectedVariableDisplayField; + + // Filter fields + + caf::PdmField > + m_filterType; + caf::PdmField m_completeVarStringFilter; + + caf::PdmField m_filterQuantityName; + caf::PdmField m_regionNumberFilter; + caf::PdmField m_regionNumber2Filter; + caf::PdmField m_wellGroupNameFilter; + caf::PdmField m_wellNameFilter; + caf::PdmField m_wellSegmentNumberFilter; + caf::PdmField m_lgrNameFilter; + caf::PdmField m_cellIJKFilter; + + caf::PdmField > m_uiFilterResultMultiSelection; + +};