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()->removeFilter(this);
|
||||||
curveSet->filterCollection()->updateConnectedEditors();
|
curveSet->filterCollection()->updateConnectedEditors();
|
||||||
curveSet->updateAllCurves();
|
curveSet->updateAllCurves();
|
||||||
|
|
||||||
// Must be last statement before return
|
|
||||||
delete this;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,12 +25,20 @@
|
|||||||
|
|
||||||
#include <cafPdmUiTableViewEditor.h>
|
#include <cafPdmUiTableViewEditor.h>
|
||||||
#include <cafPdmUiTreeOrdering.h>
|
#include <cafPdmUiTreeOrdering.h>
|
||||||
|
#include <cafPdmUiPushButtonEditor.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(RimEnsembleCurveFilterCollection, "RimEnsembleCurveFilterCollection");
|
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()->setUiTreeChildrenHidden(true);
|
||||||
//m_filters.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
|
//m_filters.uiCapability()->setUiEditorTypeName(caf::PdmUiTableViewEditor::uiEditorTypeName());
|
||||||
m_filters.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
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)
|
RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter(const QString& ensembleParameterName)
|
||||||
{
|
{
|
||||||
|
garbageCollectFilters();
|
||||||
|
|
||||||
auto newFilter = new RimEnsembleCurveFilter(ensembleParameterName);
|
auto newFilter = new RimEnsembleCurveFilter(ensembleParameterName);
|
||||||
m_filters.push_back(newFilter);
|
m_filters.push_back(newFilter);
|
||||||
return newFilter;
|
return newFilter;
|
||||||
@ -61,7 +76,13 @@ RimEnsembleCurveFilter* RimEnsembleCurveFilterCollection::addFilter(const QStrin
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimEnsembleCurveFilterCollection::removeFilter(RimEnsembleCurveFilter* filter)
|
void RimEnsembleCurveFilterCollection::removeFilter(RimEnsembleCurveFilter* filter)
|
||||||
{
|
{
|
||||||
|
garbageCollectFilters();
|
||||||
|
|
||||||
|
size_t sizeBefore = m_filters.size();
|
||||||
m_filters.removeChildObject(filter);
|
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)
|
void RimEnsembleCurveFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||||
{
|
{
|
||||||
|
RimEnsembleCurveSet* curveSet;
|
||||||
|
firstAncestorOrThisOfType(curveSet);
|
||||||
|
if (!curveSet) return;
|
||||||
|
|
||||||
if (changedField == &m_active)
|
if (changedField == &m_active)
|
||||||
{
|
{
|
||||||
RimEnsembleCurveSet* curveSet;
|
curveSet->updateAllCurves();
|
||||||
firstAncestorOrThisOfType(curveSet);
|
}
|
||||||
if (curveSet) 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)
|
void RimEnsembleCurveFilterCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||||
{
|
{
|
||||||
|
uiOrdering.add(&m_newFilterButton);
|
||||||
|
|
||||||
for (auto& filter : m_filters)
|
for (auto& filter : m_filters)
|
||||||
{
|
{
|
||||||
QString groupTitle;
|
QString groupTitle;
|
||||||
@ -149,6 +183,20 @@ void RimEnsembleCurveFilterCollection::defineUiTreeOrdering(caf::PdmUiTreeOrderi
|
|||||||
uiTreeOrdering.skipRemainingChildren(true);
|
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;
|
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 fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /* = "" */);
|
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /* = "" */);
|
||||||
|
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
|
||||||
|
|
||||||
virtual caf::PdmFieldHandle* objectToggleField();
|
virtual caf::PdmFieldHandle* objectToggleField();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmField<bool> m_active;
|
caf::PdmField<bool> m_active;
|
||||||
caf::PdmChildArrayField<RimEnsembleCurveFilter*> m_filters;
|
caf::PdmChildArrayField<RimEnsembleCurveFilter*> m_filters;
|
||||||
|
caf::PdmField<bool> m_newFilterButton;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user