#2093 Cross Plot : Add push button to select curve address

This commit is contained in:
Magne Sjaastad 2017-11-15 15:20:47 +01:00
parent 3b31c4800f
commit 762a21d940
5 changed files with 118 additions and 21 deletions

View File

@ -25,7 +25,6 @@
#include "RimSummaryCase.h"
#include "RimSummaryCurve.h"
#include "RiuSummaryCurveDefSelection.h"
#include "RiuSummaryCurveDefSelectionDialog.h"
#include "cafPdmUiPushButtonEditor.h"
@ -86,22 +85,15 @@ void RimSummaryCalculationVariable::fieldChangedByUi(const caf::PdmFieldHandle*
{
RiuSummaryCurveDefSelectionDialog dlg(nullptr);
{
std::vector<RiaSummaryCurveDefinition> sumCasePairs;
sumCasePairs.push_back(RiaSummaryCurveDefinition(m_case(), m_summaryAddress->address()));
dlg.summaryAddressSelection()->setSelectedCurveDefinitions(sumCasePairs);
dlg.summaryAddressSelection()->updateConnectedEditors();
dlg.updateLabel();
}
dlg.setCaseAndAddress(m_case(), m_summaryAddress->address());
if (dlg.exec() == QDialog::Accepted)
{
std::vector<RiaSummaryCurveDefinition> sumCasePairs = dlg.summaryAddressSelection()->selectedCurveDefinitions();
if (sumCasePairs.size() == 1)
std::vector<RiaSummaryCurveDefinition> curveSelection = dlg.curveSelection();
if (curveSelection.size() > 0)
{
m_case = sumCasePairs[0].summaryCase();
m_summaryAddress->setAddress(sumCasePairs[0].summaryAddress());
m_case = curveSelection[0].summaryCase();
m_summaryAddress->setAddress(curveSelection[0].summaryAddress());
updateContainingEditor = true;
}

View File

@ -35,10 +35,12 @@
#include "RimSummaryTimeAxisProperties.h"
#include "RiuLineSegmentQwtPlotCurve.h"
#include "RiuSummaryCurveDefSelectionDialog.h"
#include "RiuSummaryQwtPlot.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeOrdering.h"
#include "qwt_date.h"
@ -97,6 +99,12 @@ RimSummaryCurve::RimSummaryCurve()
m_yValuesCurveVariable.uiCapability()->setUiHidden(true);
m_yValuesCurveVariable.uiCapability()->setUiTreeChildrenHidden(true);
CAF_PDM_InitFieldNoDefault(&m_yPushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "");
m_yPushButtonSelectSummaryAddress = false;
m_yPushButtonSelectSummaryAddress.xmlCapability()->disableIO();
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
m_yPushButtonSelectSummaryAddress.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
m_yValuesCurveVariable = new RimSummaryAddress;
@ -128,6 +136,12 @@ RimSummaryCurve::RimSummaryCurve()
m_xValuesCurveVariable.uiCapability()->setUiHidden(true);
m_xValuesCurveVariable.uiCapability()->setUiTreeChildrenHidden(true);
CAF_PDM_InitFieldNoDefault(&m_xPushButtonSelectSummaryAddress, "x_SelectAddress", "", "", "", "");
m_xPushButtonSelectSummaryAddress = false;
m_xPushButtonSelectSummaryAddress.xmlCapability()->disableIO();
m_xPushButtonSelectSummaryAddress.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
m_xPushButtonSelectSummaryAddress.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
m_xValuesCurveVariable = new RimSummaryAddress;
@ -438,6 +452,22 @@ void RimSummaryCurve::onLoadDataAndUpdate(bool updateParentPlot)
if (updateParentPlot) updateQwtPlotAxis();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurve::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
{
if (&m_yPushButtonSelectSummaryAddress == field ||
&m_xPushButtonSelectSummaryAddress == field)
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*> (attribute);
if (attrib)
{
attrib->m_buttonText = "Select Address";
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -458,6 +488,8 @@ void RimSummaryCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
curveVarSelectionGroup->setCollapsedByDefault(true);
m_yValuesSummaryFilter->uiOrdering(uiConfigName, *curveVarSelectionGroup);
curveVarSelectionGroup->add(&m_yValuesUiFilterResultSelection);
curveDataGroup->add(&m_yPushButtonSelectSummaryAddress);
}
if (isCrossPlotCurve())
@ -470,6 +502,8 @@ void RimSummaryCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
curveVarSelectionGroup->setCollapsedByDefault(true);
m_xValuesSummaryFilter->uiOrdering(uiConfigName, *curveVarSelectionGroup);
curveVarSelectionGroup->add(&m_xValuesUiFilterResultSelection);
curveDataGroup->add(&m_xPushButtonSelectSummaryAddress);
}
uiOrdering.add(&m_plotAxis);
@ -561,29 +595,29 @@ void RimSummaryCurve::applyCurveAutoNameSettings(const RimSummaryCurveAutoName&
//--------------------------------------------------------------------------------------------------
void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
this->RimPlotCurve::fieldChangedByUi(changedField,oldValue,newValue);
this->RimPlotCurve::fieldChangedByUi(changedField, oldValue, newValue);
RimSummaryPlot* plot = nullptr;
firstAncestorOrThisOfType(plot);
CVF_ASSERT(plot);
bool loadAndUpdate = false;
if(changedField == &m_yValuesUiFilterResultSelection)
{
m_yValuesCurveVariable->setAddress(m_yValuesUiFilterResultSelection());
this->calculateCurveInterpolationFromAddress();
this->loadDataAndUpdate(true);
plot->updateAxes();
loadAndUpdate = true;
}
else if (changedField == &m_xValuesUiFilterResultSelection)
{
m_xValuesCurveVariable->setAddress(m_xValuesUiFilterResultSelection());
this->calculateCurveInterpolationFromAddress();
this->loadDataAndUpdate(true);
plot->updateAxes();
loadAndUpdate = true;
}
else if (&m_showCurve == changedField)
{
@ -600,6 +634,47 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
plot->updateCaseNameHasChanged();
this->onLoadDataAndUpdate(true);
}
else if (changedField == &m_yPushButtonSelectSummaryAddress)
{
RiuSummaryCurveDefSelectionDialog dlg(nullptr);
dlg.setCaseAndAddress(m_yValuesSummaryCase(), m_yValuesCurveVariable->address());
if (dlg.exec() == QDialog::Accepted)
{
auto curveSelection = dlg.curveSelection();
if (curveSelection.size() > 0)
{
m_yValuesSummaryCase = curveSelection[0].summaryCase();
m_yValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
loadAndUpdate = true;
}
}
}
else if (changedField == &m_xPushButtonSelectSummaryAddress)
{
RiuSummaryCurveDefSelectionDialog dlg(nullptr);
dlg.setCaseAndAddress(m_xValuesSummaryCase(), m_xValuesCurveVariable->address());
if (dlg.exec() == QDialog::Accepted)
{
auto curveSelection = dlg.curveSelection();
if (curveSelection.size() > 0)
{
m_xValuesSummaryCase = curveSelection[0].summaryCase();
m_xValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
loadAndUpdate = true;
}
}
}
if (loadAndUpdate)
{
this->loadDataAndUpdate(true);
plot->updateAxes();
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -88,6 +88,7 @@ private:
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 void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
static void appendOptionItemsForSummaryAddresses(QList<caf::PdmOptionItemInfo>* options,
RimSummaryCase* summaryCase,
@ -102,6 +103,7 @@ private:
caf::PdmField<QString> m_yValuesSelectedVariableDisplayField;
caf::PdmChildField<RimSummaryFilter*> m_yValuesSummaryFilter;
caf::PdmField<RifEclipseSummaryAddress> m_yValuesUiFilterResultSelection;
caf::PdmField<bool> m_yPushButtonSelectSummaryAddress;
// X values
caf::PdmPtrField<RimSummaryCase*> m_xValuesSummaryCase;
@ -109,6 +111,7 @@ private:
caf::PdmField<QString> m_xValuesSelectedVariableDisplayField;
caf::PdmChildField<RimSummaryFilter*> m_xValuesSummaryFilter;
caf::PdmField<RifEclipseSummaryAddress> m_xValuesUiFilterResultSelection;
caf::PdmField<bool> m_xPushButtonSelectSummaryAddress;
caf::PdmChildField<RimSummaryCurveAutoName*> m_curveNameConfig;
caf::PdmField<caf::AppEnum< RiaDefines::PlotAxis>> m_plotAxis;

View File

@ -69,6 +69,27 @@ RiuSummaryCurveDefSelectionDialog::~RiuSummaryCurveDefSelectionDialog()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryCurveDefSelectionDialog::setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address)
{
std::vector<RiaSummaryCurveDefinition> sumCasePairs;
sumCasePairs.push_back(RiaSummaryCurveDefinition(summaryCase, address));
summaryAddressSelection()->setSelectedCurveDefinitions(sumCasePairs);
summaryAddressSelection()->updateConnectedEditors();
updateLabel();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RiaSummaryCurveDefinition> RiuSummaryCurveDefSelectionDialog::curveSelection() const
{
return summaryAddressSelection()->selectedCurveDefinitions();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -18,13 +18,16 @@
#pragma once
#include "RiaSummaryCurveDefinition.h"
#include <QDialog>
#include <memory>
class QLabel;
class RiuSummaryCurveDefSelectionEditor;
class RiuSummaryCurveDefSelection;
class RiuSummaryCurveDefSelectionEditor;
//==================================================================================================
///
@ -36,9 +39,12 @@ public:
RiuSummaryCurveDefSelectionDialog(QWidget* parent);
~RiuSummaryCurveDefSelectionDialog();
RiuSummaryCurveDefSelection* summaryAddressSelection() const;
void setCaseAndAddress(RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& address);
std::vector<RiaSummaryCurveDefinition> curveSelection() const;
void updateLabel();
private:
RiuSummaryCurveDefSelection* summaryAddressSelection() const;
void updateLabel();
private:
std::unique_ptr<RiuSummaryCurveDefSelectionEditor> m_addrSelWidget;