mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#756 Curve creation and syncronization with filter and selection.
This commit is contained in:
parent
45cf15a941
commit
cf287160df
@ -186,6 +186,14 @@ void RimSummaryCurve::setSummaryCase(RimSummaryCase* sumCase)
|
|||||||
m_summaryCase = sumCase;
|
m_summaryCase = sumCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RimSummaryCase* RimSummaryCurve::summaryCase()
|
||||||
|
{
|
||||||
|
return m_summaryCase();
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -194,6 +202,22 @@ void RimSummaryCurve::setVariable(QString varName)
|
|||||||
m_curveVariable->setAddress(RifEclipseSummaryAddress::fieldVarAddress(varName.toStdString()));
|
m_curveVariable->setAddress(RifEclipseSummaryAddress::fieldVarAddress(varName.toStdString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RifEclipseSummaryAddress RimSummaryCurve::summaryAddress()
|
||||||
|
{
|
||||||
|
return m_curveVariable->address();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimSummaryCurve::setSummaryAddress(const RifEclipseSummaryAddress& address)
|
||||||
|
{
|
||||||
|
m_curveVariable->setAddress(address);
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -335,7 +359,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
{
|
{
|
||||||
this->RimPlotCurve::fieldChangedByUi(changedField,oldValue,newValue);
|
this->RimPlotCurve::fieldChangedByUi(changedField,oldValue,newValue);
|
||||||
|
|
||||||
if(changedField = &m_uiFilterResultSelection)
|
if(changedField == &m_uiFilterResultSelection)
|
||||||
{
|
{
|
||||||
if (0 <= m_uiFilterResultSelection() && m_uiFilterResultSelection() < summaryReader()->allResultAddresses().size())
|
if (0 <= m_uiFilterResultSelection() && m_uiFilterResultSelection() < summaryReader()->allResultAddresses().size())
|
||||||
{
|
{
|
||||||
@ -367,7 +391,7 @@ RifReaderEclipseSummary* RimSummaryCurve::summaryReader()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimSummaryCurve::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/)
|
void RimSummaryCurve::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -73,8 +73,12 @@ public:
|
|||||||
virtual ~RimSummaryCurve();
|
virtual ~RimSummaryCurve();
|
||||||
|
|
||||||
void setSummaryCase(RimSummaryCase* sumCase);
|
void setSummaryCase(RimSummaryCase* sumCase);
|
||||||
|
RimSummaryCase* summaryCase();
|
||||||
void setVariable(QString varName);
|
void setVariable(QString varName);
|
||||||
|
|
||||||
|
RifEclipseSummaryAddress summaryAddress();
|
||||||
|
void setSummaryAddress(const RifEclipseSummaryAddress& address);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// RimPlotCurve overrides
|
// RimPlotCurve overrides
|
||||||
|
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
#include "RimSummaryCase.h"
|
#include "RimSummaryCase.h"
|
||||||
#include "RigSummaryCaseData.h"
|
#include "RigSummaryCaseData.h"
|
||||||
#include "RimSummaryCurve.h"
|
#include "RimSummaryCurve.h"
|
||||||
|
#include "cafPdmUiPushButtonEditor.h"
|
||||||
|
#include "WellLogCommands\RicWellLogPlotCurveFeatureImpl.h"
|
||||||
|
|
||||||
|
|
||||||
QTextStream& operator << (QTextStream& str, const std::vector<RifEclipseSummaryAddress>& sobj)
|
QTextStream& operator << (QTextStream& str, const std::vector<RifEclipseSummaryAddress>& sobj)
|
||||||
@ -81,7 +83,15 @@ RimSummaryCurveFilter::RimSummaryCurveFilter()
|
|||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault(&m_curves, "FilteredCurves", "Filtered Curves", "", "", "");
|
CAF_PDM_InitFieldNoDefault(&m_curves, "FilteredCurves", "Filtered Curves", "", "", "");
|
||||||
m_curves.uiCapability()->setUiHidden(true);
|
m_curves.uiCapability()->setUiHidden(true);
|
||||||
m_curves.uiCapability()->setUiChildrenHidden(true);
|
m_curves.uiCapability()->setUiChildrenHidden(false);
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_applyButtonField, "ApplySelection", "Apply", "", "", "");
|
||||||
|
m_applyButtonField.xmlCapability()->setIOWritable(false);
|
||||||
|
m_applyButtonField.xmlCapability()->setIOReadable(false);
|
||||||
|
m_applyButtonField = false;
|
||||||
|
m_applyButtonField.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
|
||||||
|
m_applyButtonField.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -89,6 +99,7 @@ RimSummaryCurveFilter::RimSummaryCurveFilter()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimSummaryCurveFilter::~RimSummaryCurveFilter()
|
RimSummaryCurveFilter::~RimSummaryCurveFilter()
|
||||||
{
|
{
|
||||||
|
delete m_summaryFilter();
|
||||||
m_curves.deleteAllChildObjects();
|
m_curves.deleteAllChildObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +179,7 @@ void RimSummaryCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd
|
|||||||
m_summaryFilter->defineUiOrdering(uiConfigName, *curveVarSelectionGroup);
|
m_summaryFilter->defineUiOrdering(uiConfigName, *curveVarSelectionGroup);
|
||||||
|
|
||||||
curveVarSelectionGroup->add(&m_uiFilterResultMultiSelection);
|
curveVarSelectionGroup->add(&m_uiFilterResultMultiSelection);
|
||||||
|
uiOrdering.add(&m_applyButtonField);
|
||||||
uiOrdering.setForgetRemainingFields(true);
|
uiOrdering.setForgetRemainingFields(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,9 +189,15 @@ void RimSummaryCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrd
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimSummaryCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
void RimSummaryCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||||
{
|
{
|
||||||
if(changedField = &m_uiFilterResultMultiSelection)
|
if(changedField == &m_uiFilterResultMultiSelection)
|
||||||
{
|
{
|
||||||
this->loadDataAndUpdate();
|
|
||||||
|
}
|
||||||
|
else if (changedField == &m_applyButtonField)
|
||||||
|
{
|
||||||
|
syncCurvesFromUiSelection();
|
||||||
|
loadDataAndUpdate();
|
||||||
|
m_applyButtonField = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,6 +219,7 @@ RifReaderEclipseSummary* RimSummaryCurveFilter::summaryReader()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimSummaryCurveFilter::setParentQwtPlot(QwtPlot* plot)
|
void RimSummaryCurveFilter::setParentQwtPlot(QwtPlot* plot)
|
||||||
{
|
{
|
||||||
|
m_parentQwtPlot = plot;
|
||||||
for (RimSummaryCurve* curve : m_curves)
|
for (RimSummaryCurve* curve : m_curves)
|
||||||
{
|
{
|
||||||
curve->setParentQwtPlot(plot);
|
curve->setParentQwtPlot(plot);
|
||||||
@ -222,8 +240,86 @@ void RimSummaryCurveFilter::detachQwtCurve()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimSummaryCurveFilter::syncronizeCurves()
|
void RimSummaryCurveFilter::syncCurvesFromUiSelection()
|
||||||
{
|
{
|
||||||
|
// Create a search map containing whats supposed to be
|
||||||
|
|
||||||
|
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> > newCurveDefinitions;
|
||||||
|
|
||||||
|
// Populate the newCurveDefinitions from the Gui
|
||||||
|
|
||||||
|
for (int caseIdx = 0; caseIdx < 1; ++caseIdx)
|
||||||
|
{
|
||||||
|
RimSummaryCase* currentCase = m_selectedSummaryCase();
|
||||||
|
for(const RifEclipseSummaryAddress& addr: m_uiFilterResultMultiSelection.v())
|
||||||
|
{
|
||||||
|
newCurveDefinitions.insert(std::make_pair(currentCase, addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete all existing curves that is not matching
|
||||||
|
// Remove the entries in the search set that we already have
|
||||||
|
for(RimSummaryCurve* curve: m_curves)
|
||||||
|
{
|
||||||
|
auto foundIt = newCurveDefinitions.find(std::make_pair(curve->summaryCase(), curve->summaryAddress() ));
|
||||||
|
if (foundIt == newCurveDefinitions.end())
|
||||||
|
{
|
||||||
|
delete curve;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newCurveDefinitions.erase(foundIt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_curves.removeChildObject(nullptr);
|
||||||
|
|
||||||
|
// Create all new curves that is missing
|
||||||
|
|
||||||
|
for (auto& caseAddrPair: newCurveDefinitions)
|
||||||
|
{
|
||||||
|
RimSummaryCase* currentCase = caseAddrPair.first;
|
||||||
|
RimSummaryCurve* curve = new RimSummaryCurve();
|
||||||
|
|
||||||
|
curve->setParentQwtPlot(m_parentQwtPlot);
|
||||||
|
curve->setSummaryCase(currentCase);
|
||||||
|
curve->setSummaryAddress(caseAddrPair.second);
|
||||||
|
cvf::Color3f curveColor = RicWellLogPlotCurveFeatureImpl::curveColorFromTable();
|
||||||
|
curve->setColor(curveColor);
|
||||||
|
m_curves.push_back(curve);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimSummaryCurveFilter::syncUiSelectionFromCurves()
|
||||||
|
{
|
||||||
|
|
||||||
|
for(RimSummaryCurve* curve: m_curves)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimSummaryCurveFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute)
|
||||||
|
{
|
||||||
|
if(&m_applyButtonField == field)
|
||||||
|
{
|
||||||
|
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*> (attribute);
|
||||||
|
attrib->m_buttonText = "Apply" ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimSummaryCurveFilter::loadDataAndUpdate()
|
||||||
|
{
|
||||||
|
for (RimSummaryCurve* curve: m_curves)
|
||||||
|
{
|
||||||
|
curve->loadDataAndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -50,18 +50,22 @@ public:
|
|||||||
RimSummaryCurveFilter();
|
RimSummaryCurveFilter();
|
||||||
virtual ~RimSummaryCurveFilter();
|
virtual ~RimSummaryCurveFilter();
|
||||||
|
|
||||||
void loadDataAndUpdate() {}
|
void loadDataAndUpdate();
|
||||||
void setParentQwtPlot(QwtPlot* plot);
|
void setParentQwtPlot(QwtPlot* plot);
|
||||||
void detachQwtCurve();
|
void detachQwtCurve();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RifReaderEclipseSummary* summaryReader();
|
RifReaderEclipseSummary* summaryReader();
|
||||||
void syncronizeCurves();
|
void syncCurvesFromUiSelection();
|
||||||
|
void syncUiSelectionFromCurves();
|
||||||
|
|
||||||
// Overridden PDM methods
|
// Overridden PDM methods
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly);
|
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly);
|
||||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
|
void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute * attribute) override;
|
||||||
|
|
||||||
|
QPointer<QwtPlot> m_parentQwtPlot;
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
caf::PdmPtrField<RimSummaryCase*> m_selectedSummaryCase;
|
caf::PdmPtrField<RimSummaryCase*> m_selectedSummaryCase;
|
||||||
@ -73,5 +77,7 @@ private:
|
|||||||
caf::PdmChildField<RimSummaryFilter*> m_summaryFilter;
|
caf::PdmChildField<RimSummaryFilter*> m_summaryFilter;
|
||||||
caf::PdmField<std::vector<RifEclipseSummaryAddress> > m_uiFilterResultMultiSelection;
|
caf::PdmField<std::vector<RifEclipseSummaryAddress> > m_uiFilterResultMultiSelection;
|
||||||
|
|
||||||
|
caf::PdmField<bool> m_applyButtonField;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user