mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3056 Ensemble curve filters. Add dynamic groups for filtering
This commit is contained in:
parent
9f1e4fa721
commit
65de617935
@ -22,6 +22,7 @@
|
||||
#include "RimSummaryCase.h"
|
||||
|
||||
#include "cafPdmUiDoubleSliderEditor.h"
|
||||
#include "cafPdmUiPushButtonEditor.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@ -29,14 +30,21 @@
|
||||
CAF_PDM_SOURCE_INIT(RimEnsembleCurveFilter, "RimEnsembleCurveFilter");
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Internal constants
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
#define DOUBLE_INF std::numeric_limits<double>::infinity()
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilter::RimEnsembleCurveFilter() : m_lowerLimit(0), m_upperLimit(0)
|
||||
RimEnsembleCurveFilter::RimEnsembleCurveFilter() : m_lowerLimit(DOUBLE_INF), m_upperLimit(DOUBLE_INF)
|
||||
{
|
||||
CAF_PDM_InitObject("Ensemble Curve Filter", ":/EnsembleCurveSet16x16.png", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_active, "Active", "Active", "", "", "");
|
||||
m_active = true;
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_ensembleParameterName, "EnsembleParameter", "Ensemble Parameter", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_minValue, "MinValue", "Min", "", "", "");
|
||||
@ -46,6 +54,19 @@ RimEnsembleCurveFilter::RimEnsembleCurveFilter() : m_lowerLimit(0), m_upperLimit
|
||||
m_maxValue.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_categories, "Categories", "Categories", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_deleteButton, "DeleteEnsembleFilter", "Delete Filter", "", "", "");
|
||||
m_deleteButton = false;
|
||||
m_deleteButton.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
|
||||
m_deleteButton.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilter::RimEnsembleCurveFilter(const QString& ensembleParameterName) : RimEnsembleCurveFilter()
|
||||
{
|
||||
m_ensembleParameterName = ensembleParameterName;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -59,6 +80,22 @@ bool RimEnsembleCurveFilter::isActive() const
|
||||
return (!coll || coll->isActive()) && m_active;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimEnsembleCurveFilter::minValue() const
|
||||
{
|
||||
return m_minValue;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimEnsembleCurveFilter::maxValue() const
|
||||
{
|
||||
return m_maxValue;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -68,6 +105,22 @@ std::set<QString> RimEnsembleCurveFilter::categories() const
|
||||
return std::set<QString>(cs.begin(), cs.end());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimEnsembleCurveFilter::ensembleParameterName() const
|
||||
{
|
||||
return m_ensembleParameterName;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimEnsembleCurveFilter::filterId() const
|
||||
{
|
||||
return QString("%1").arg((int64_t)this);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -128,13 +181,33 @@ void RimEnsembleCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changed
|
||||
}
|
||||
}
|
||||
curveSet->updateAllCurves();
|
||||
|
||||
auto collection = parentCurveFilterCollection();
|
||||
if (collection) collection->updateConnectedEditors();
|
||||
}
|
||||
else if (changedField == &m_active ||
|
||||
changedField == &m_minValue ||
|
||||
changedField == &m_maxValue ||
|
||||
changedField == &m_categories)
|
||||
{
|
||||
if (curveSet) curveSet->updateAllCurves();
|
||||
if (curveSet)
|
||||
{
|
||||
curveSet->updateAllCurves();
|
||||
curveSet->filterCollection()->updateConnectedEditors();
|
||||
}
|
||||
}
|
||||
else if (changedField == &m_deleteButton)
|
||||
{
|
||||
m_deleteButton = false;
|
||||
|
||||
if (!curveSet) return;
|
||||
|
||||
curveSet->filterCollection()->removeFilter(this);
|
||||
curveSet->filterCollection()->updateConnectedEditors();
|
||||
curveSet->updateAllCurves();
|
||||
|
||||
// Must be last statement before return
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,9 +220,17 @@ void RimEnsembleCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOr
|
||||
|
||||
uiOrdering.add(&m_active);
|
||||
uiOrdering.add(&m_ensembleParameterName);
|
||||
uiOrdering.add(&m_minValue);
|
||||
uiOrdering.add(&m_maxValue);
|
||||
uiOrdering.add(&m_categories);
|
||||
|
||||
if (eParam.isNumeric())
|
||||
{
|
||||
uiOrdering.add(&m_minValue);
|
||||
uiOrdering.add(&m_maxValue);
|
||||
}
|
||||
else if(eParam.isText())
|
||||
{
|
||||
uiOrdering.add(&m_categories);
|
||||
}
|
||||
uiOrdering.add(&m_deleteButton);
|
||||
|
||||
uiOrdering.skipRemainingFields(true);
|
||||
}
|
||||
@ -170,6 +251,13 @@ void RimEnsembleCurveFilter::defineEditorAttribute(const caf::PdmFieldHandle* fi
|
||||
myAttr->m_minimum = m_lowerLimit;
|
||||
myAttr->m_maximum = m_upperLimit;
|
||||
}
|
||||
else if (field == &m_deleteButton)
|
||||
{
|
||||
caf::PdmUiPushButtonEditorAttribute* attr = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>(attribute);
|
||||
if (!attr) return;
|
||||
|
||||
attr->m_buttonText = "Delete";
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -244,6 +332,16 @@ RimEnsembleCurveSet * RimEnsembleCurveFilter::parentCurveSet() const
|
||||
return curveSet;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilterCollection* RimEnsembleCurveFilter::parentCurveFilterCollection() const
|
||||
{
|
||||
RimEnsembleCurveFilterCollection* coll;
|
||||
firstAncestorOrThisOfType(coll);
|
||||
return coll;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -25,6 +25,7 @@
|
||||
class EnsembleParameter;
|
||||
class RimEnsembleCurveSet;
|
||||
class RimSummaryCase;
|
||||
class RimEnsembleCurveFilterCollection;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -35,9 +36,14 @@ class RimEnsembleCurveFilter : public caf::PdmObject
|
||||
|
||||
public:
|
||||
RimEnsembleCurveFilter();
|
||||
RimEnsembleCurveFilter(const QString& ensembleParameterName);
|
||||
|
||||
bool isActive() const;
|
||||
double minValue() const;
|
||||
double maxValue() const;
|
||||
std::set<QString> categories() const;
|
||||
QString ensembleParameterName() const;
|
||||
QString filterId() const;
|
||||
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
@ -47,17 +53,19 @@ public:
|
||||
std::vector<RimSummaryCase*> applyFilter(const std::vector<RimSummaryCase*>& allSumCases);
|
||||
|
||||
void loadDataAndUpdate();
|
||||
EnsembleParameter selectedEnsembleParameter() const;
|
||||
|
||||
protected:
|
||||
virtual caf::PdmFieldHandle* objectToggleField();
|
||||
|
||||
private:
|
||||
RimEnsembleCurveSet * parentCurveSet() const;
|
||||
RimEnsembleCurveFilterCollection* parentCurveFilterCollection() const;
|
||||
void setDefaultValues();
|
||||
EnsembleParameter selectedEnsembleParameter() const;
|
||||
|
||||
private:
|
||||
caf::PdmField<bool> m_active;
|
||||
caf::PdmField<bool> m_deleteButton;
|
||||
caf::PdmField<QString> m_ensembleParameterName;
|
||||
caf::PdmField<double> m_minValue;
|
||||
caf::PdmField<double> m_maxValue;
|
||||
|
@ -42,16 +42,16 @@ RimEnsembleCurveFilterCollection::RimEnsembleCurveFilterCollection()
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_filters, "CurveFilters", "", "", "", "");
|
||||
m_filters.uiCapability()->setUiTreeChildrenHidden(true);
|
||||
m_filters.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
|
||||
//m_filters.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
|
||||
m_filters.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter()
|
||||
RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter(const QString& ensembleParameterName)
|
||||
{
|
||||
auto newFilter = new RimEnsembleCurveFilter();
|
||||
auto newFilter = new RimEnsembleCurveFilter(ensembleParameterName);
|
||||
m_filters.push_back(newFilter);
|
||||
return newFilter;
|
||||
}
|
||||
@ -61,7 +61,7 @@ RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::removeFilter(RimEnsembleCurveFilter* filter)
|
||||
{
|
||||
std::remove_if(m_filters.begin(), m_filters.end(), [&](RimEnsembleCurveFilter* f) { return f == filter; });
|
||||
m_filters.removeChildObject(filter);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -108,7 +108,37 @@ void RimEnsembleCurveFilterCollection::fieldChangedByUi(const caf::PdmFieldHandl
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||
{
|
||||
for (auto& filter : m_filters)
|
||||
{
|
||||
QString groupTitle;
|
||||
auto selEnsembleParam = filter->selectedEnsembleParameter();
|
||||
if (selEnsembleParam.isNumeric())
|
||||
{
|
||||
if (!filter->isActive()) groupTitle = "DISABLED - ";
|
||||
groupTitle += QString("%1. Min: %2, Max: %3")
|
||||
.arg(filter->ensembleParameterName())
|
||||
.arg(QString::number(filter->minValue()))
|
||||
.arg(QString::number(filter->maxValue()));
|
||||
}
|
||||
else if (selEnsembleParam.isText())
|
||||
{
|
||||
if (!filter->isActive()) groupTitle = "DISABLED - ";
|
||||
groupTitle += QString("%1. Categories: ")
|
||||
.arg(filter->ensembleParameterName());
|
||||
|
||||
bool first = true;
|
||||
for (auto cat : filter->categories())
|
||||
{
|
||||
if (!first) groupTitle += ", ";
|
||||
groupTitle += cat;
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
caf::PdmUiGroup* filterGroup = uiOrdering.addNewGroupWithKeyword(groupTitle, QString("EnsembleFilter_") + filter->filterId());
|
||||
filter->defineUiOrdering(uiConfigName, *filterGroup);
|
||||
}
|
||||
|
||||
uiOrdering.skipRemainingFields(true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -36,7 +36,7 @@ class RimEnsembleCurveFilterCollection : public caf::PdmObject
|
||||
public:
|
||||
RimEnsembleCurveFilterCollection();
|
||||
|
||||
RimEnsembleCurveFilter* addFilter();
|
||||
RimEnsembleCurveFilter* addFilter(const QString& ensembleParameterName = "");
|
||||
void removeFilter(RimEnsembleCurveFilter* filter);
|
||||
std::vector<RimEnsembleCurveFilter*> filters() const;
|
||||
|
||||
|
@ -378,6 +378,14 @@ RimSummaryCaseCollection* RimEnsembleCurveSet::summaryCaseCollection() const
|
||||
return m_yValuesSummaryGroup();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilterCollection* RimEnsembleCurveSet::filterCollection() const
|
||||
{
|
||||
return m_curveFilters;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -587,8 +595,8 @@ void RimEnsembleCurveSet::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
|
||||
}
|
||||
|
||||
caf::PdmUiGroup* statGroup = uiOrdering.addNewGroup("Statistics");
|
||||
|
||||
m_statistics->defineUiOrdering(uiConfigName, *statGroup);
|
||||
|
||||
uiOrdering.skipRemainingFields(true);
|
||||
}
|
||||
|
||||
|
@ -91,6 +91,8 @@ public:
|
||||
void setSummaryCaseCollection(RimSummaryCaseCollection* sumCaseCollection);
|
||||
RimSummaryCaseCollection* summaryCaseCollection() const;
|
||||
|
||||
RimEnsembleCurveFilterCollection* filterCollection() const;
|
||||
|
||||
ColorMode colorMode() const;
|
||||
void updateEnsembleLegendItem();
|
||||
EnsembleParameter::Type currentEnsembleParameterType() const;
|
||||
|
Loading…
Reference in New Issue
Block a user