mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3056 Ensemble curve filters. Add new filter button. Fix delete filter bug, use internal garbage collector to achieve delayed object delete
This commit is contained in:
parent
cbb467a4a4
commit
bc28b4b8f1
@ -205,9 +205,6 @@ void RimEnsembleCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changed
|
||||
curveSet->filterCollection()->removeFilter(this);
|
||||
curveSet->filterCollection()->updateConnectedEditors();
|
||||
curveSet->updateAllCurves();
|
||||
|
||||
// Must be last statement before return
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,12 +25,20 @@
|
||||
|
||||
#include <cafPdmUiTableViewEditor.h>
|
||||
#include <cafPdmUiTreeOrdering.h>
|
||||
#include <cafPdmUiPushButtonEditor.h>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimEnsembleCurveFilterCollection, "RimEnsembleCurveFilterCollection");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Internal variables
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
static std::vector<RimEnsembleCurveFilter*> _removedFilters;
|
||||
|
||||
static void garbageCollectFilters();
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -44,6 +52,11 @@ RimEnsembleCurveFilterCollection::RimEnsembleCurveFilterCollection()
|
||||
m_filters.uiCapability()->setUiTreeChildrenHidden(true);
|
||||
//m_filters.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
|
||||
m_filters.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_newFilterButton, "NewEnsembleFilter", "New Filter", "", "", "");
|
||||
m_newFilterButton = false;
|
||||
m_newFilterButton.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
|
||||
m_newFilterButton.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -51,6 +64,8 @@ RimEnsembleCurveFilterCollection::RimEnsembleCurveFilterCollection()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter(const QString& ensembleParameterName)
|
||||
{
|
||||
garbageCollectFilters();
|
||||
|
||||
auto newFilter = new RimEnsembleCurveFilter(ensembleParameterName);
|
||||
m_filters.push_back(newFilter);
|
||||
return newFilter;
|
||||
@ -61,7 +76,13 @@ RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter(const QStrin
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::removeFilter(RimEnsembleCurveFilter* filter)
|
||||
{
|
||||
garbageCollectFilters();
|
||||
|
||||
size_t sizeBefore = m_filters.size();
|
||||
m_filters.removeChildObject(filter);
|
||||
size_t sizeAfter = m_filters.size();
|
||||
|
||||
if(sizeAfter < sizeBefore) _removedFilters.push_back(filter);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -95,11 +116,22 @@ QList<caf::PdmOptionItemInfo> RimEnsembleCurveFilterCollection::calculateValueOp
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||
{
|
||||
RimEnsembleCurveSet* curveSet;
|
||||
firstAncestorOrThisOfType(curveSet);
|
||||
if (!curveSet) return;
|
||||
|
||||
if (changedField == &m_active)
|
||||
{
|
||||
RimEnsembleCurveSet* curveSet;
|
||||
firstAncestorOrThisOfType(curveSet);
|
||||
if (curveSet) curveSet->updateAllCurves();
|
||||
curveSet->updateAllCurves();
|
||||
}
|
||||
else if (changedField == &m_newFilterButton)
|
||||
{
|
||||
m_newFilterButton = false;
|
||||
|
||||
addFilter();
|
||||
updateConnectedEditors();
|
||||
curveSet->updateAllCurves();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,6 +140,8 @@ void RimEnsembleCurveFilterCollection::fieldChangedByUi(const caf::PdmFieldHandl
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||
{
|
||||
uiOrdering.add(&m_newFilterButton);
|
||||
|
||||
for (auto& filter : m_filters)
|
||||
{
|
||||
QString groupTitle;
|
||||
@ -149,6 +183,20 @@ void RimEnsembleCurveFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrderi
|
||||
uiTreeOrdering.skipRemainingChildren(true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEnsembleCurveFilterCollection::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
|
||||
{
|
||||
if (field == &m_newFilterButton)
|
||||
{
|
||||
caf::PdmUiPushButtonEditorAttribute* attr = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>(attribute);
|
||||
if (!attr) return;
|
||||
|
||||
attr->m_buttonText = "Add Ensemble Curve Filter";
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -164,3 +212,15 @@ caf::PdmFieldHandle* RimEnsembleCurveFilterCollection::objectToggleField()
|
||||
{
|
||||
return &m_active;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void garbageCollectFilters()
|
||||
{
|
||||
for (auto filter : _removedFilters)
|
||||
{
|
||||
delete filter;
|
||||
}
|
||||
_removedFilters.clear();
|
||||
}
|
||||
|
@ -48,10 +48,12 @@ private:
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /* = "" */);
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
|
||||
|
||||
virtual caf::PdmFieldHandle* objectToggleField();
|
||||
|
||||
private:
|
||||
caf::PdmField<bool> m_active;
|
||||
caf::PdmChildArrayField<RimEnsembleCurveFilter*> m_filters;
|
||||
caf::PdmField<bool> m_newFilterButton;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user