#282 Added category list if category values are present

This commit is contained in:
Magne Sjaastad 2016-08-05 08:31:15 +02:00
parent 261ccd33e5
commit c5d4519eb1
5 changed files with 111 additions and 7 deletions

View File

@ -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<int>();
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<caf::PdmOptionItemInfo> RimEclipsePropertyFilter::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> 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<int> 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();
}

View File

@ -49,6 +49,7 @@ public:
caf::PdmField<double> lowerBound;
caf::PdmField<double> 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<caf::PdmOptionItemInfo> 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<int> > selectedCategoryValues;
caf::PdmField<bool> useRangeInsteadOfCategories;
double m_minimumResultValue;
double m_maximumResultValue;
public:
@ -82,6 +90,6 @@ public:
};
private:
caf::PdmField< caf::AppEnum< EvaluationRegionType > > obsoleteField_evaluationRegion;
std::vector<int> m_uniqueCellValues;
};

View File

@ -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);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -58,6 +58,7 @@ public:
bool hasDynamicResult() const;
bool hasResult() const;
bool isTernarySaturationSelected() const;
bool hasCategoryResult() const;
RimReservoirCellResultsStorage* currentGridCellResults() const;

View File

@ -94,7 +94,9 @@ bool PdmUiOrdering::contains(const PdmUiItem* item)
void PdmUiOrdering::add(const PdmFieldHandle* field)
{
PdmUiFieldHandle* uiItem = const_cast<PdmFieldHandle*>(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<PdmObjectHandle*>(obj));
assert(uiItem);
assert(!this->contains(uiItem));
m_ordering.push_back(uiItem);
}