#2691 Complete curve set vector selection from the property panel

This commit is contained in:
Bjørn Erik Jensen
2018-04-18 21:38:50 +02:00
parent 305fdfcfc8
commit fff5ee4ea1
2 changed files with 189 additions and 63 deletions

View File

@@ -20,6 +20,8 @@
#include "RiaApplication.h"
#include "RiuSummaryCurveDefSelectionDialog.h"
#include "RifReaderEclipseSummary.h"
#include "RimProject.h"
@@ -105,7 +107,7 @@ RimEnsambleCurveSet::RimEnsambleCurveSet()
CAF_PDM_InitFieldNoDefault(&m_yValuesSelectedVariableDisplayField, "SelectedVariableDisplayVar", "Vector", "", "", "");
m_yValuesSelectedVariableDisplayField.xmlCapability()->disableIO();
//m_yValuesSelectedVariableDisplayField.uiCapability()->setUiReadOnly(true);
m_yValuesSelectedVariableDisplayField.uiCapability()->setUiReadOnly(true);
CAF_PDM_InitFieldNoDefault(&m_yValuesSummaryFilter, "VarListFilter", "Filter", "", "", "");
m_yValuesSummaryFilter.uiCapability()->setUiTreeChildrenHidden(true);
@@ -126,6 +128,7 @@ RimEnsambleCurveSet::RimEnsambleCurveSet()
CAF_PDM_InitFieldNoDefault(&m_yPushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "");
caf::PdmUiPushButtonEditor::configureEditorForField(&m_yPushButtonSelectSummaryAddress);
m_yPushButtonSelectSummaryAddress = false;
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiReadOnly(true);
m_yValuesCurveVariable = new RimSummaryAddress;
@@ -135,6 +138,8 @@ RimEnsambleCurveSet::RimEnsambleCurveSet()
CAF_PDM_InitField(&m_ensambleParameter, "EnsambleParameter", QString(""), "Ensamble Parameter", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_plotAxis, "PlotAxis", "Axis", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_legendConfig, "LegendConfig", "", "", "", "");
m_legendConfig = new RimRegularLegendConfig();
}
@@ -177,6 +182,10 @@ void RimEnsambleCurveSet::setColor(cvf::Color3f color)
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::loadDataAndUpdate(bool updateParentPlot)
{
m_yValuesSelectedVariableDisplayField = QString::fromStdString(m_yValuesCurveVariable->address().uiText());
m_yValuesSummaryFilter->updateFromAddress(m_yValuesCurveVariable->address());
for (RimSummaryCurve* curve : m_curves)
{
curve->loadDataAndUpdate(false);
@@ -451,46 +460,26 @@ RimRegularLegendConfig* RimEnsambleCurveSet::legendConfig()
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
CVF_ASSERT(plot);
if (changedField == &m_showCurves)
{
loadDataAndUpdate(true);
}
else if (changedField == &m_yValuesSummaryGroup || changedField == &m_yValuesSelectedVariableDisplayField)
else if (changedField == &m_yValuesUiFilterResultSelection)
{
// Update backing field
m_yValuesCurveVariable->setAddress(m_yValuesSelectedVariableDisplayField);
m_yValuesCurveVariable->setAddress(m_yValuesUiFilterResultSelection());
deleteAllCurves();
createNewCurves();
RimSummaryPlot* plot;
firstAncestorOrThisOfType(plot);
if (plot) plot->loadDataAndUpdate();
RimSummaryCaseCollection* group = m_yValuesSummaryGroup();
RifEclipseSummaryAddress addr = m_yValuesSelectedVariableDisplayField();
if (group && plot && addr.category() != RifEclipseSummaryAddress::SUMMARY_INVALID)
{
for (auto& sumCase : group->allSummaryCases())
{
RimSummaryCurve* curve = new RimSummaryCurve();
curve->setSummaryCaseY(sumCase);
curve->setSummaryAddressY(addr);
addCurve(curve);
curve->updateCurveVisibility(true);
curve->loadDataAndUpdate(true);
}
RimSummaryPlot* plot;
firstAncestorOrThisOfType(plot);
if (plot && plot->qwtPlot())
{
plot->qwtPlot()->replot();
plot->updateAxes();
}
}
updateCurveColors();
//RiuMainPlotWindow* mainPlotWindow = RiaApplication::instance()->mainPlotWindow();
//mainPlotWindow->updateSummaryPlotToolBar();
}
else if (changedField == &m_yValuesSummaryGroup)
{
createNewCurves();
}
else if (changedField == &m_ensambleParameter ||
changedField == &m_color ||
@@ -498,14 +487,49 @@ void RimEnsambleCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* changedFie
{
updateCurveColors();
}
}
else if (changedField == &m_plotAxis)
{
for (RimSummaryCurve* curve : curves())
{
curve->setLeftOrRightAxisY(m_plotAxis());
}
updateQwtPlotAxis();
plot->updateAxes();
}
else if (changedField == &m_yPushButtonSelectSummaryAddress)
{
//RiuSummaryCurveDefSelectionDialog dlg(nullptr);
//RimSummaryCase* candidateCase = m_yValuesSummaryCase();
//RifEclipseSummaryAddress candicateAddress = m_yValuesCurveVariable->address();
//if (candidateCase == nullptr)
//{
// candidateCase = m_xValuesSummaryCase();
//}
//if (!candicateAddress.isValid())
//{
// candicateAddress = m_xValuesCurveVariable->address();
//}
//dlg.setCaseAndAddress(candidateCase, candicateAddress);
//if (dlg.exec() == QDialog::Accepted)
//{
// auto curveSelection = dlg.curveSelection();
// if (curveSelection.size() > 0)
// {
// m_yValuesSummaryCase = curveSelection[0].summaryCase();
// m_yValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
// crossPlotTestForMatchingTimeSteps = true;
// loadAndUpdate = true;
// }
//}
//m_yPushButtonSelectSummaryAddress = false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::initAfterRead()
{
m_yValuesSelectedVariableDisplayField = m_yValuesCurveVariable->address();
}
//--------------------------------------------------------------------------------------------------
@@ -518,6 +542,7 @@ void RimEnsambleCurveSet::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroupWithKeyword(curveDataGroupName, "Summary Vector Y");
curveDataGroup->add(&m_yValuesSummaryGroup);
curveDataGroup->add(&m_yValuesSelectedVariableDisplayField);
curveDataGroup->add(&m_plotAxis);
curveDataGroup->add(&m_yPushButtonSelectSummaryAddress);
QString curveVarSelectionGroupName = "Vector Selection Filter Y";
@@ -592,12 +617,18 @@ caf::PdmFieldHandle* RimEnsambleCurveSet::objectToggleField()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::defineObjectEditorAttribute(QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
void RimEnsambleCurveSet::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
{
caf::PdmUiTreeViewEditorAttribute* myAttr = dynamic_cast<caf::PdmUiTreeViewEditorAttribute*>(attribute);
if (myAttr && m_currentSummaryCurve.notNull())
//caf::PdmUiTreeViewEditorAttribute* myAttr = dynamic_cast<caf::PdmUiTreeViewEditorAttribute*>(attribute);
//if (myAttr && m_currentSummaryCurve.notNull())
//{
// myAttr->currentObject = m_currentSummaryCurve.p();
//}
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*> (attribute);
if (attrib)
{
myAttr->currentObject = m_currentSummaryCurve.p();
attrib->m_buttonText = "Vector Selection Dialog";
}
}
@@ -644,25 +675,30 @@ QList<caf::PdmOptionItemInfo> RimEnsambleCurveSet::calculateValueOptions(const c
}
}
}
else if (fieldNeedingOptions == &m_yValuesUiFilterResultSelection)
{
appendOptionItemsForSummaryAddresses(&options, m_yValuesSummaryGroup(), m_yValuesSummaryFilter());
}
else if (fieldNeedingOptions == &m_yValuesSelectedVariableDisplayField)
{
RimSummaryCaseCollection* group = m_yValuesSummaryGroup;
std::map<QString, RifEclipseSummaryAddress> allOpts;
if (group)
{
for (auto& sumCase : group->allSummaryCases())
{
std::map<QString, RifEclipseSummaryAddress> opts;
RimSummaryFilter filter;
getOptionsForSummaryAddresses(&opts, sumCase, &filter);
//RimSummaryCaseCollection* group = m_yValuesSummaryGroup;
//std::map<QString, RifEclipseSummaryAddress> allOpts;
for (auto& opt : opts) allOpts.insert(opt);
}
}
//if (group)
//{
// for (auto& sumCase : group->allSummaryCases())
// {
// std::map<QString, RifEclipseSummaryAddress> opts;
// RimSummaryFilter filter;
// getOptionsForSummaryAddresses(&opts, sumCase, &filter);
for (const auto& opt : allOpts) options.push_back(caf::PdmOptionItemInfo(opt.first, QVariant::fromValue(opt.second)));
options.push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), QVariant::fromValue(RifEclipseSummaryAddress())));
// for (auto& opt : opts) allOpts.insert(opt);
// }
//}
//for (const auto& opt : allOpts) options.push_back(caf::PdmOptionItemInfo(opt.first, QVariant::fromValue(opt.second)));
//options.push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), QVariant::fromValue(RifEclipseSummaryAddress())));
}
//else if (fieldNeedingOptions == &m_yValuesUiFilterResultSelection)
@@ -699,6 +735,37 @@ void RimEnsambleCurveSet::getOptionsForSummaryAddresses(std::map<QString, RifEcl
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::appendOptionItemsForSummaryAddresses(QList<caf::PdmOptionItemInfo>* options,
RimSummaryCaseCollection* summaryCaseGroup,
RimSummaryFilter* summaryFilter)
{
// BEJ
RimSummaryCase* summaryCase = summaryCaseGroup->allSummaryCases().front();
if (summaryCase)
{
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
if (reader)
{
const std::vector<RifEclipseSummaryAddress> allAddresses = reader->allResultAddresses();
for (auto& address : allAddresses)
{
if (summaryFilter && !summaryFilter->isIncludedByFilter(address)) continue;
std::string name = address.uiText();
QString s = QString::fromStdString(name);
options->push_back(caf::PdmOptionItemInfo(s, QVariant::fromValue(address)));
}
}
options->push_front(caf::PdmOptionItemInfo(RiaDefines::undefinedResultName(), QVariant::fromValue(RifEclipseSummaryAddress())));
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -751,3 +818,54 @@ void RimEnsambleCurveSet::updateCurveColors()
firstAncestorOrThisOfType(plot);
if (plot && plot->qwtPlot()) plot->qwtPlot()->replot();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::updateQwtPlotAxis()
{
for (RimSummaryCurve* curve : curves())
{
curve->updateQwtPlotAxis();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsambleCurveSet::createNewCurves()
{
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
CVF_ASSERT(plot);
deleteAllCurves();
plot->loadDataAndUpdate();
RimSummaryCaseCollection* group = m_yValuesSummaryGroup();
RimSummaryAddress* addr = m_yValuesCurveVariable();
if (group && plot && addr->address().category() != RifEclipseSummaryAddress::SUMMARY_INVALID)
{
for (auto& sumCase : group->allSummaryCases())
{
RimSummaryCurve* curve = new RimSummaryCurve();
curve->setSummaryCaseY(sumCase);
curve->setSummaryAddressY(addr->address());
addCurve(curve);
curve->updateCurveVisibility(true);
curve->loadDataAndUpdate(true);
}
RimSummaryPlot* plot;
firstAncestorOrThisOfType(plot);
if (plot->qwtPlot())
{
plot->qwtPlot()->replot();
plot->updateAxes();
}
}
updateCurveColors();
}

View File

@@ -21,6 +21,8 @@
#include "RifEclipseSummaryAddress.h"
#include "RiaDefines.h"
#include "RimRegularLegendConfig.h"
#include "cafPdmFieldCvfColor.h"
@@ -83,8 +85,7 @@ public:
private:
caf::PdmFieldHandle* objectToggleField();
virtual void defineObjectEditorAttribute(QString uiConfigName,
caf::PdmUiEditorAttribute* attribute) override;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly);
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
@@ -92,13 +93,18 @@ private:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField,
const QVariant& oldValue, const QVariant& newValue) override;
virtual void initAfterRead() override;
static void getOptionsForSummaryAddresses(std::map<QString, RifEclipseSummaryAddress>* options,
RimSummaryCase* summaryCase,
RimSummaryFilter* summaryFilter);
static void appendOptionItemsForSummaryAddresses(QList<caf::PdmOptionItemInfo>* options,
RimSummaryCaseCollection* summaryCaseGroup,
RimSummaryFilter* summaryFilter);
void updateCurveColors();
void updateQwtPlotAxis();
void createNewCurves();
private:
caf::PdmField<bool> m_showCurves;
@@ -113,7 +119,7 @@ private:
// Y values
caf::PdmPtrField<RimSummaryCaseCollection*> m_yValuesSummaryGroup;
caf::PdmChildField<RimSummaryAddress*> m_yValuesCurveVariable;
caf::PdmField<RifEclipseSummaryAddress> m_yValuesSelectedVariableDisplayField;
caf::PdmField<QString> m_yValuesSelectedVariableDisplayField;
caf::PdmChildField<RimSummaryFilter*> m_yValuesSummaryFilter;
caf::PdmField<RifEclipseSummaryAddress> m_yValuesUiFilterResultSelection;
caf::PdmField<bool> m_yPushButtonSelectSummaryAddress;
@@ -122,6 +128,8 @@ private:
caf::PdmField<cvf::Color3f> m_color;
caf::PdmField<QString> m_ensambleParameter;
caf::PdmField<caf::AppEnum< RiaDefines::PlotAxis>> m_plotAxis;
caf::PdmChildField<RimRegularLegendConfig*> m_legendConfig;
};