From c5d4519eb1374ef84754e4c9e33601b4836a6b47 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 5 Aug 2016 08:31:15 +0200 Subject: [PATCH] #282 Added category list if category values are present --- .../RimEclipsePropertyFilter.cpp | 87 ++++++++++++++++++- .../RimEclipsePropertyFilter.h | 14 ++- .../RimEclipseResultDefinition.cpp | 10 +++ .../RimEclipseResultDefinition.h | 1 + .../cafPdmUiCore/cafPdmUiOrdering.cpp | 6 +- 5 files changed, 111 insertions(+), 7 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp index 7c2c1503dc..a847cb15df 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp @@ -75,6 +75,11 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter() CAF_PDM_InitField(&upperBound, "UpperBound", 0.0, "Max", "", "", ""); upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); + CAF_PDM_InitFieldNoDefault(&selectedCategoryValues, "SelectedCategoryValues", "Categories", "", "", ""); + + CAF_PDM_InitField(&useRangeInsteadOfCategories, "UseRangeInsteadOfCategories", false, "Use Range selection for Categories", "", "", ""); + upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); + updateIconState(); m_minimumResultValue = cvf::UNDEFINED_DOUBLE; @@ -97,8 +102,7 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang if (&name == changedField) { } - - if ( &lowerBound == changedField + else if ( &lowerBound == changedField || &upperBound == changedField || &obsoleteField_evaluationRegion == changedField || &isActive == changedField @@ -110,6 +114,10 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang parentContainer()->updateDisplayModelNotifyManagedViews(); } + else if (&useRangeInsteadOfCategories == changedField) + { + updateFieldVisibility(); + } } //-------------------------------------------------------------------------------------------------- @@ -131,6 +139,11 @@ void RimEclipsePropertyFilter::setToDefaultValues() lowerBound = m_minimumResultValue; upperBound = m_maximumResultValue; + + selectedCategoryValues = std::vector(); + useRangeInsteadOfCategories = false; + + updateFieldVisibility(); } //-------------------------------------------------------------------------------------------------- @@ -150,11 +163,13 @@ void RimEclipsePropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi // Fields declared in RimCellFilter uiOrdering.add(&isActive); uiOrdering.add(&filterMode); + uiOrdering.add(&useRangeInsteadOfCategories); // Fields declared in this class (RimCellPropertyFilter) uiOrdering.add(&lowerBound); uiOrdering.add(&upperBound); - uiOrdering.add(&filterMode); + + uiOrdering.add(&selectedCategoryValues); updateReadOnlyStateOfAllFields(); } @@ -169,6 +184,27 @@ void RimEclipsePropertyFilter::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTr updateActiveState(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimEclipsePropertyFilter::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList optionList; + + if (&selectedCategoryValues == fieldNeedingOptions) + { + if (useOptionsOnly) *useOptionsOnly = true; + + for (auto it : m_uniqueCellValues) + { + QString str = QString::number(it); + optionList.push_back(caf::PdmOptionItemInfo(str, it)); + } + } + + return optionList; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -217,6 +253,38 @@ void RimEclipsePropertyFilter::updateActiveState() isActive.uiCapability()->setUiReadOnly(isPropertyFilterControlled()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilter::updateFieldVisibility() +{ + if (resultDefinition->hasCategoryResult()) + { + useRangeInsteadOfCategories.uiCapability()->setUiHidden(false); + + if (useRangeInsteadOfCategories) + { + selectedCategoryValues.uiCapability()->setUiHidden(true); + lowerBound.uiCapability()->setUiHidden(false); + upperBound.uiCapability()->setUiHidden(false); + } + else + { + selectedCategoryValues.uiCapability()->setUiHidden(false); + lowerBound.uiCapability()->setUiHidden(true); + upperBound.uiCapability()->setUiHidden(true); + } + } + else + { + lowerBound.uiCapability()->setUiHidden(false); + upperBound.uiCapability()->setUiHidden(false); + + selectedCategoryValues.uiCapability()->setUiHidden(true); + useRangeInsteadOfCategories.uiCapability()->setUiHidden(true); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -250,6 +318,8 @@ void RimEclipsePropertyFilter::computeResultValueRange() double min = 0.0; double max = 0.0; + m_uniqueCellValues.clear(); + size_t scalarIndex = resultDefinition->scalarResultIndex(); if (scalarIndex != cvf::UNDEFINED_SIZE_T) { @@ -257,6 +327,16 @@ void RimEclipsePropertyFilter::computeResultValueRange() if (results) { results->cellResults()->minMaxCellScalarValues(scalarIndex, min, max); + + if (resultDefinition->hasCategoryResult()) + { + std::set vals = results->cellResults()->uniqueCellScalarValues(scalarIndex); + + for (auto val : vals) + { + m_uniqueCellValues.push_back(val); + } + } } } @@ -291,5 +371,6 @@ void RimEclipsePropertyFilter::initAfterRead() resultDefinition->loadResult(); updateIconState(); computeResultValueRange(); + updateFieldVisibility(); } diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h index b4e45f6cde..864b36892b 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h @@ -49,6 +49,7 @@ public: caf::PdmField lowerBound; caf::PdmField upperBound; + RimEclipsePropertyFilterCollection* parentContainer(); void setToDefaultValues(); void updateFilterName(); @@ -57,20 +58,27 @@ public: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual void initAfterRead(); - void updateActiveState(); protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName); + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); private: + friend RimEclipsePropertyFilterCollection; + + void updateActiveState(); + void updateFieldVisibility(); void updateReadOnlyStateOfAllFields(); bool isPropertyFilterControlled(); private: - double m_minimumResultValue; + caf::PdmField< std::vector > selectedCategoryValues; + caf::PdmField useRangeInsteadOfCategories; + + double m_minimumResultValue; double m_maximumResultValue; public: @@ -82,6 +90,6 @@ public: }; private: caf::PdmField< caf::AppEnum< EvaluationRegionType > > obsoleteField_evaluationRegion; - + std::vector m_uniqueCellValues; }; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index b21398df1f..b67a215393 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -424,6 +424,16 @@ bool RimEclipseResultDefinition::isTernarySaturationSelected() const return isTernary; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimEclipseResultDefinition::hasCategoryResult() const +{ + if (!this->hasStaticResult()) return false; + + return this->resultVariable().contains("NUM", Qt::CaseInsensitive); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h index aad514465a..6070c4ae06 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.h @@ -58,6 +58,7 @@ public: bool hasDynamicResult() const; bool hasResult() const; bool isTernarySaturationSelected() const; + bool hasCategoryResult() const; RimReservoirCellResultsStorage* currentGridCellResults() const; diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiOrdering.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiOrdering.cpp index 5b94960a72..7bc8540cdb 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiOrdering.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafPdmUiOrdering.cpp @@ -94,7 +94,9 @@ bool PdmUiOrdering::contains(const PdmUiItem* item) void PdmUiOrdering::add(const PdmFieldHandle* field) { PdmUiFieldHandle* uiItem = const_cast(field)->uiCapability(); - assert(uiItem); + assert(uiItem); + assert(!this->contains(uiItem)); + m_ordering.push_back(uiItem); } @@ -105,6 +107,8 @@ void PdmUiOrdering::add(const PdmObjectHandle* obj) { PdmUiObjectHandle* uiItem = uiObj(const_cast(obj)); assert(uiItem); + assert(!this->contains(uiItem)); + m_ordering.push_back(uiItem); }