#756 Curve creation and syncronization with filter and selection.

This commit is contained in:
Jacob Støren 2016-06-16 16:10:16 +02:00
parent 45cf15a941
commit cf287160df
4 changed files with 139 additions and 9 deletions

View File

@ -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 /*= ""*/)
{ {
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -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

View File

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

View File

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