Replace PdmUiPushButtonEditor fields with dynamic buttons

Replace boolean push button fields used as UI triggers with dynamic buttons
added via addNewButton in defineUiOrdering, removing unnecessary field
boilerplate across multiple classes.
This commit is contained in:
Magne Sjaastad
2026-03-31 09:16:52 +02:00
parent 062fe388f7
commit a8ac98ce06
21 changed files with 343 additions and 454 deletions
@@ -52,7 +52,6 @@
#include "RiuTools.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include <QInputDialog>
#include <QMessageBox>
@@ -84,27 +83,13 @@ std::vector<T> toVector( const std::set<T>& set );
//--------------------------------------------------------------------------------------------------
RicSummaryPlotEditorUi::RicSummaryPlotEditorUi()
: m_plotContainer( nullptr )
, m_closeButtonPressed( false )
{
CAF_PDM_InitFieldNoDefault( &m_targetPlot, "TargetPlot", "Target Plot" );
m_previewPlot = std::make_unique<RimSummaryPlot>();
m_previewPlot->setLegendPosition( RiuPlotWidget::Legend::TOP );
CAF_PDM_InitFieldNoDefault( &m_applyButtonField, "ApplySelection", "" );
m_applyButtonField = false;
m_applyButtonField.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_applyButtonField.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN );
CAF_PDM_InitFieldNoDefault( &m_closeButtonField, "Close", "" );
m_closeButtonField = false;
m_closeButtonField.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_closeButtonField.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN );
CAF_PDM_InitFieldNoDefault( &m_okButtonField, "OK", "" );
m_okButtonField = false;
m_okButtonField.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_okButtonField.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN );
m_summaryCurveSelectionEditor = std::make_unique<RiuSummaryVectorSelectionWidgetCreator>();
m_summaryCurveSelectionEditor->summaryAddressSelection()->setFieldChangedHandler( [this]() { selectionEditorFieldChanged(); } );
@@ -187,7 +172,7 @@ QWidget* RicSummaryPlotEditorUi::addressSelectionWidget( QWidget* parent )
//--------------------------------------------------------------------------------------------------
bool RicSummaryPlotEditorUi::isCloseButtonPressed() const
{
return m_closeButtonField();
return m_closeButtonPressed;
}
//--------------------------------------------------------------------------------------------------
@@ -195,7 +180,7 @@ bool RicSummaryPlotEditorUi::isCloseButtonPressed() const
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotEditorUi::clearCloseButton()
{
m_closeButtonField = false;
m_closeButtonPressed = false;
}
//--------------------------------------------------------------------------------------------------
@@ -203,33 +188,6 @@ void RicSummaryPlotEditorUi::clearCloseButton()
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotEditorUi::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == &m_applyButtonField || changedField == &m_okButtonField )
{
if ( m_targetPlot == nullptr )
{
createNewPlot();
}
updateTargetPlot();
if ( changedField == &m_okButtonField )
{
m_closeButtonField = true;
RiuPlotMainWindowTools::showPlotMainWindow();
RiuPlotMainWindowTools::selectAsCurrentItem( m_targetPlot );
RiuPlotMainWindowTools::setExpanded( m_targetPlot );
}
m_applyButtonField = false;
m_okButtonField = false;
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>*>( m_targetPlot->uiCapability()->objectToggleField() );
field->setValueWithFieldChanged( true );
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateMultiPlotToolBar();
}
}
//--------------------------------------------------------------------------------------------------
@@ -260,9 +218,15 @@ QList<caf::PdmOptionItemInfo> RicSummaryPlotEditorUi::calculateValueOptions( con
void RicSummaryPlotEditorUi::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_targetPlot );
uiOrdering.add( &m_okButtonField );
uiOrdering.add( &m_applyButtonField );
uiOrdering.add( &m_closeButtonField );
uiOrdering.addNewButton( "OK", [this]() { onOkButtonClicked(); } );
uiOrdering.addNewButton( "Apply", [this]() { onApplyButtonClicked(); }, { .newRow = false } );
uiOrdering.addNewButton( "Cancel",
[this]()
{
m_closeButtonPressed = true;
uiCapability()->updateConnectedEditors();
},
{ .newRow = false } );
uiOrdering.skipRemainingFields( true );
@@ -499,31 +463,7 @@ void RicSummaryPlotEditorUi::updatePreviewCurvesFromCurveDefinitions( const std:
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotEditorUi::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( &m_applyButtonField == field )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Apply";
}
}
else if ( &m_closeButtonField == field )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Cancel";
}
}
else if ( &m_okButtonField == field )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "OK";
}
}
else if ( &m_targetPlot == field )
if ( &m_targetPlot == field )
{
caf::PdmUiComboBoxEditorAttribute* attrib = dynamic_cast<caf::PdmUiComboBoxEditorAttribute*>( attribute );
if ( attrib )
@@ -791,6 +731,44 @@ void RicSummaryPlotEditorUi::setInitialCurveVisibility( const RimSummaryPlot* ta
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotEditorUi::onOkButtonClicked()
{
if ( m_targetPlot == nullptr ) createNewPlot();
updateTargetPlot();
m_closeButtonPressed = true;
RiuPlotMainWindowTools::showPlotMainWindow();
RiuPlotMainWindowTools::selectAsCurrentItem( m_targetPlot );
RiuPlotMainWindowTools::setExpanded( m_targetPlot );
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>*>( m_targetPlot->uiCapability()->objectToggleField() );
if ( field ) field->setValueWithFieldChanged( true );
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateMultiPlotToolBar();
uiCapability()->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotEditorUi::onApplyButtonClicked()
{
if ( m_targetPlot == nullptr ) createNewPlot();
updateTargetPlot();
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>*>( m_targetPlot->uiCapability()->objectToggleField() );
if ( field ) field->setValueWithFieldChanged( true );
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateMultiPlotToolBar();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -98,14 +98,15 @@ private:
void selectionEditorFieldChanged();
void setInitialCurveVisibility( const RimSummaryPlot* targetPlot );
void onOkButtonClicked();
void onApplyButtonClicked();
private:
caf::PdmPtrField<RimSummaryPlot*> m_targetPlot;
std::unique_ptr<RimSummaryPlot> m_previewPlot;
caf::PdmField<bool> m_okButtonField;
caf::PdmField<bool> m_applyButtonField;
caf::PdmField<bool> m_closeButtonField;
bool m_closeButtonPressed;
std::unique_ptr<RiuSummaryVectorSelectionWidgetCreator> m_summaryCurveSelectionEditor;
@@ -41,9 +41,9 @@
#include "RiuSummaryVectorSelectionDialog.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiToolButtonEditor.h"
#include "qwt_plot.h"
@@ -67,10 +67,6 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
CAF_PDM_InitFieldNoDefault( &m_dataSources, "AnalysisPlotData", "" );
m_dataSources.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_pushButtonSelectSummaryAddress );
m_pushButtonSelectSummaryAddress = false;
CAF_PDM_InitFieldNoDefault( &m_timeStepFilter, "TimeStepFilter", "Available Time Steps" );
CAF_PDM_InitFieldNoDefault( &m_timeStep, "TimeStep", "Time Step" );
@@ -139,40 +135,7 @@ void RimAbstractCorrelationPlot::setTimeStep( std::time_t timeStep )
void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
RimPlot::fieldChangedByUi( changedField, oldValue, newValue );
if ( changedField == &m_pushButtonSelectSummaryAddress )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( m_selectMultipleVectors )
{
dlg.enableMultiSelect( true );
}
dlg.hideSummaryCases();
dlg.setCurveSelection( curveDefinitions() );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
m_dataSources.deleteChildren();
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
{
auto plotEntry = new RimAnalysisPlotDataEntry();
plotEntry->setFromCurveDefinition( vectorDef );
m_dataSources.push_back( plotEntry );
}
connectAllCaseSignals();
loadDataAndUpdate();
updateConnectedEditors();
}
}
m_pushButtonSelectSummaryAddress = false;
}
else if ( changedField == &m_timeStep )
if ( changedField == &m_timeStep )
{
loadDataAndUpdate();
updateConnectedEditors();
@@ -234,11 +197,6 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
//--------------------------------------------------------------------------------------------------
void RimAbstractCorrelationPlot::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "...";
}
}
//--------------------------------------------------------------------------------------------------
@@ -751,7 +709,9 @@ void RimAbstractCorrelationPlot::appendDataSourceFields( QString uiConfigName, c
m_selectedVarsUiField = selectedVectorNamesText();
curveDataGroup->add( &m_selectedVarsUiField );
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
curveDataGroup->addNewButton( "...",
[this]() { onSelectVariablesButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
curveDataGroup->add( &m_timeStepFilter );
curveDataGroup->add( &m_timeStep );
curveDataGroup->add( &m_useCaseFilter );
@@ -802,3 +762,38 @@ void RimAbstractCorrelationPlot::onFilterSourceChanged( const caf::SignalEmitter
{
if ( m_useCaseFilter() ) loadDataAndUpdate();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAbstractCorrelationPlot::onSelectVariablesButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( m_selectMultipleVectors )
{
dlg.enableMultiSelect( true );
}
dlg.hideSummaryCases();
dlg.setCurveSelection( curveDefinitions() );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
m_dataSources.deleteChildren();
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
{
auto plotEntry = new RimAnalysisPlotDataEntry();
plotEntry->setFromCurveDefinition( vectorDef );
m_dataSources.push_back( plotEntry );
}
connectAllCaseSignals();
loadDataAndUpdate();
updateConnectedEditors();
}
}
}
@@ -130,6 +130,7 @@ private:
void connectAllCaseSignals();
void connectCurveFilterSignals();
void onFilterSourceChanged( const caf::SignalEmitter* emitter );
void onSelectVariablesButtonClicked();
RiaSummaryCurveDefinitionAnalyser* getOrCreateSelectedCurveDefAnalyser() const;
@@ -140,7 +141,6 @@ protected:
bool m_selectMultipleVectors;
caf::PdmField<QString> m_selectedVarsUiField;
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
caf::PdmField<TimeStepFilterEnum> m_timeStepFilter;
caf::PdmField<QDateTime> m_timeStep;
@@ -258,8 +258,6 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
{
RimAbstractCorrelationPlot::fieldChangedByUi( changedField, oldValue, newValue );
bool sendSelectedSignal = false;
if ( changedField == &m_showAbsoluteValues || changedField == &m_sortByValues || changedField == &m_sortByAbsoluteValues ||
changedField == &m_showOnlyTopNCorrelations || changedField == &m_topNFilterCount ||
changedField == &m_excludeParametersWithoutVariation || changedField == &m_selectedParametersList )
@@ -271,16 +269,7 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
updateLegend();
loadDataAndUpdate();
updateConnectedEditors();
sendSelectedSignal = true;
}
if ( changedField == &m_pushButtonSelectSummaryAddress )
{
sendSelectedSignal = true;
}
if ( sendSelectedSignal )
{
auto curves = curveDefinitions();
auto parameters = m_selectedParametersList();
if ( !curves.empty() && !parameters.empty() )
@@ -46,8 +46,8 @@
#include "RiuMatrixPlotWidget.h"
#include "RiuTools.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiToolButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
@@ -157,8 +157,6 @@ RimWellConnectivityTable::RimWellConnectivityTable()
CAF_PDM_InitField( &m_timeStepCount, "TimeStepCount", m_initialNumberOfTimeSteps, "Number of Time Steps" );
CAF_PDM_InitFieldNoDefault( &m_excludeTimeSteps, "ExcludeTimeSteps", "" );
m_excludeTimeSteps.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_applyTimeStepSelections, "ApplyTimeStepSelections", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_applyTimeStepSelections );
// Producer/Injector tracer configuration
CAF_PDM_InitFieldNoDefault( &m_selectedProducerTracersUiField, "SelectedProducerTracers", "Producer Tracers" );
@@ -169,8 +167,6 @@ RimWellConnectivityTable::RimWellConnectivityTable()
m_syncSelectedInjectorsFromProducerSelection.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
CAF_PDM_InitField( &m_syncSelectedProducersFromInjectorSelection, "SyncSelectedInjProd", false, "<- Synch Communicators" );
m_syncSelectedProducersFromInjectorSelection.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &m_applySelectedInectorProducerTracers, "ApplySelectedInectorProducerTracers", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_applySelectedInectorProducerTracers );
// Table settings
CAF_PDM_InitField( &m_showValueLabels, "ShowValueLabels", false, "Show Value Labels" );
@@ -402,11 +398,6 @@ void RimWellConnectivityTable::fieldChangedByUi( const caf::PdmFieldHandle* chan
setWellSelectionFromViewFilter();
}
}
else if ( changedField == &m_applyTimeStepSelections || changedField == &m_applySelectedInectorProducerTracers )
{
// For time step range - depends on apply buttons to prevent unwanted loading of large amount of data
onLoadDataAndUpdate();
}
else if ( changedField == &m_timeStepCount && m_timeStepFilterMode == TimeStepRangeFilterMode::TIME_STEP_COUNT )
{
m_excludeTimeSteps.setValue( {} );
@@ -492,7 +483,8 @@ void RimWellConnectivityTable::defineUiOrdering( QString uiConfigName, caf::PdmU
caf::PdmUiGroup& excludeTimeStepGroup = *flowDiagConfigGroup.addNewGroup( "Exclude Time Steps" );
excludeTimeStepGroup.add( &m_excludeTimeSteps );
excludeTimeStepGroup.setCollapsedByDefault();
flowDiagConfigGroup.add( &m_applyTimeStepSelections );
// For time step range - depends on apply button to prevent unwanted loading of large amount of data
flowDiagConfigGroup.addNewButton( "Apply", [this]() { onLoadDataAndUpdate(); } );
}
caf::PdmUiGroup* selectionGroup = uiOrdering.addNewGroup( "Tracer Selection" );
@@ -503,7 +495,8 @@ void RimWellConnectivityTable::defineUiOrdering( QString uiConfigName, caf::PdmU
injectorGroup->add( &m_selectedInjectorTracersUiField );
injectorGroup->add( &m_syncSelectedProducersFromInjectorSelection );
selectionGroup->add( &m_applySelectedInectorProducerTracers );
// For tracer selection - depends on apply button to prevent unwanted loading of large amount of data
selectionGroup->addNewButton( "Apply", [this]() { onLoadDataAndUpdate(); } );
caf::PdmUiGroup* tableSettingsGroup = uiOrdering.addNewGroup( "Table Settings" );
tableSettingsGroup->add( &m_showValueLabels );
@@ -527,14 +520,6 @@ void RimWellConnectivityTable::defineUiOrdering( QString uiConfigName, caf::PdmU
//--------------------------------------------------------------------------------------------------
void RimWellConnectivityTable::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_applyTimeStepSelections || field == &m_applySelectedInectorProducerTracers )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Apply";
}
}
if ( field == &m_selectedTimeStep || field == &m_selectedFromTimeStep || field == &m_selectedToTimeStep )
{
RiuTools::enableUpDownArrowsForComboBox( attribute );
@@ -184,7 +184,6 @@ private:
caf::PdmField<caf::AppEnum<TimeStepRangeFilterMode>> m_timeStepFilterMode;
caf::PdmField<int> m_timeStepCount;
caf::PdmField<std::vector<QDateTime>> m_excludeTimeSteps;
caf::PdmField<bool> m_applyTimeStepSelections;
caf::PdmChildField<RimRegularLegendConfig*> m_legendConfig;
@@ -192,7 +191,6 @@ private:
caf::PdmField<std::vector<QString>> m_selectedProducerTracersUiField;
caf::PdmField<bool> m_syncSelectedProducersFromInjectorSelection;
caf::PdmField<bool> m_syncSelectedInjectorsFromProducerSelection;
caf::PdmField<bool> m_applySelectedInectorProducerTracers;
caf::PdmField<RimRegularLegendConfig::MappingEnum> m_mappingType;
caf::PdmField<caf::AppEnum<RangeType>> m_rangeType;
@@ -33,8 +33,8 @@
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmFieldScriptingCapabilityCvfVec3d.h"
#include "cafPdmObjectScriptingCapability.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiColorEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeAttributes.h"
CAF_PDM_SOURCE_INIT( RimPolygon, "Polygon", "RimPolygon" );
@@ -51,9 +51,6 @@ RimPolygon::RimPolygon()
CAF_PDM_InitField( &m_isReadOnly, "IsReadOnly", false, "Read Only" );
CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( &m_pointsInDomainCoords, "PointsInDomainCoords", "Coordinates", "Points" );
CAF_PDM_InitField( &m_editPolygonButton, "EditPolygonButton", false, "Edit" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_editPolygonButton );
CAF_PDM_InitScriptableFieldNoDefault( &m_appearance, "Appearance", "Appearance" );
m_appearance = new RimPolygonAppearance;
m_appearance.uiCapability()->setUiTreeChildrenHidden( true );
@@ -177,7 +174,12 @@ void RimPolygon::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiO
{
uiOrdering.add( nameField() );
uiOrdering.add( &m_isReadOnly );
uiOrdering.add( &m_editPolygonButton );
uiOrdering.addNewButton( m_isReadOnly() ? "Select in Active View" : "Edit in Active View",
[this]()
{
auto activeView = RiaApplication::instance()->activeReservoirView();
RimPolygonTools::activate3dEditOfPolygonInView( this, activeView );
} );
auto groupPoints = uiOrdering.addNewGroup( "Points" );
groupPoints->setCollapsedByDefault();
@@ -199,14 +201,6 @@ void RimPolygon::fieldChangedByUi( const caf::PdmFieldHandle* changedField, cons
coordinatesChanged.send();
}
if ( changedField == &m_editPolygonButton )
{
auto activeView = RiaApplication::instance()->activeReservoirView();
RimPolygonTools::activate3dEditOfPolygonInView( this, activeView );
m_editPolygonButton = false;
return;
}
objectChanged.send();
}
@@ -218,27 +212,6 @@ void RimPolygon::childFieldChangedByUi( const caf::PdmFieldHandle* changedChildF
objectChanged.send();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPolygon::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_editPolygonButton )
{
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
if ( m_isReadOnly() )
{
attrib->m_buttonText = "Select in Active View";
}
else
{
attrib->m_buttonText = "Edit in Active View";
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -73,11 +73,9 @@ private:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
private:
caf::PdmField<bool> m_isReadOnly;
caf::PdmField<bool> m_editPolygonButton;
caf::PdmField<std::vector<cvf::Vec3d>> m_pointsInDomainCoords;
caf::PdmChildField<RimPolygonAppearance*> m_appearance;
};
@@ -31,9 +31,9 @@
#include "RimReloadCaseTools.h"
#include "RimReservoirCellResultsStorage.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include <QDateTime>
@@ -87,9 +87,6 @@ RimTimeStepFilter::RimTimeStepFilter()
CAF_PDM_InitField( &m_readOnlyLastFrame, "OnlyLastFrame", false, "Load Only Last Frame Of Each Time Step" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_readOnlyLastFrame );
CAF_PDM_InitFieldNoDefault( &m_applyReloadOfCase, "ApplyReloadOfCase", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_applyReloadOfCase );
}
//--------------------------------------------------------------------------------------------------
@@ -283,22 +280,6 @@ void RimTimeStepFilter::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
{
RimEclipseResultCase* rimEclipseResultCase = parentEclipseResultCase();
RimGeoMechCase* rimGeoMechCase = parentGeoMechCase();
if ( changedField == &m_applyReloadOfCase )
{
updateFilteredTimeStepsFromUi();
if ( rimEclipseResultCase )
{
RimReloadCaseTools::reloadEclipseGrid( rimEclipseResultCase );
}
else if ( rimGeoMechCase )
{
rimGeoMechCase->reloadDataAndUpdate();
}
return;
}
if ( changedField == &m_filterType || changedField == &m_firstTimeStep || changedField == &m_lastTimeStep || changedField == &m_interval )
{
m_filteredTimeStepsUi = filteredTimeStepIndicesFromUi();
@@ -349,15 +330,7 @@ QList<caf::PdmOptionItemInfo> RimTimeStepFilter::calculateValueOptions( const ca
//--------------------------------------------------------------------------------------------------
void RimTimeStepFilter::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_applyReloadOfCase )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Reload Case";
}
}
else if ( field == &m_interval )
if ( field == &m_interval )
{
caf::PdmUiLineEditorAttribute* attrib = dynamic_cast<caf::PdmUiLineEditorAttribute*>( attribute );
if ( attrib )
@@ -457,7 +430,7 @@ void RimTimeStepFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi
if ( caseLoaded )
{
uiOrdering.add( &m_applyReloadOfCase );
uiOrdering.addNewButton( "Reload Case", [this]() { onReloadCaseButtonClicked(); } );
}
updateFieldVisibility();
@@ -539,3 +512,23 @@ void RimTimeStepFilter::timeStepOptions( QList<caf::PdmOptionItemInfo>&
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimTimeStepFilter::onReloadCaseButtonClicked()
{
updateFilteredTimeStepsFromUi();
auto rimEclipseResultCase = parentEclipseResultCase();
auto rimGeoMechCase = parentGeoMechCase();
if ( rimEclipseResultCase )
{
RimReloadCaseTools::reloadEclipseGrid( rimEclipseResultCase );
}
else if ( rimGeoMechCase )
{
rimGeoMechCase->reloadDataAndUpdate();
}
}
@@ -89,6 +89,8 @@ private:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
void onReloadCaseButtonClicked();
private:
caf::PdmField<caf::AppEnum<TimeStepFilterTypeEnum>> m_filterType;
@@ -97,7 +99,6 @@ private:
caf::PdmField<int> m_firstTimeStep;
caf::PdmField<int> m_lastTimeStep;
caf::PdmField<int> m_interval;
caf::PdmField<bool> m_applyReloadOfCase;
caf::PdmField<QString> m_dateFormat;
caf::PdmField<std::vector<QString>> m_timeStepNamesFromFile;
caf::PdmField<bool> m_readOnlyLastFrame;
@@ -30,8 +30,8 @@
#include "RimSummaryCaseMainCollection.h"
#include "RimSummaryEnsemble.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
#include <QDateTime>
@@ -69,9 +69,6 @@ RimDeltaSummaryEnsemble::RimDeltaSummaryEnsemble()
CAF_PDM_InitFieldNoDefault( &m_operator, "Operator", "Operator" );
CAF_PDM_InitField( &m_swapEnsemblesButton, "SwapEnsembles", false, "SwapEnsembles" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_swapEnsemblesButton );
CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases" );
m_caseCount.uiCapability()->setUiReadOnly( true );
@@ -350,7 +347,7 @@ void RimDeltaSummaryEnsemble::defineUiOrdering( QString uiConfigName, caf::PdmUi
caseGroup->add( &m_ensemble1 );
caseGroup->add( &m_operator );
caseGroup->add( &m_ensemble2 );
caseGroup->add( &m_swapEnsemblesButton );
caseGroup->addNewButton( "Swap Ensembles", [this]() { onSwapEnsemblesButtonClicked(); } );
caseGroup->add( &m_useFixedTimeStep );
if ( m_useFixedTimeStep() != RimDeltaSummaryEnsemble::FixedTimeStepMode::FIXED_TIME_STEP_NONE )
@@ -388,17 +385,6 @@ void RimDeltaSummaryEnsemble::fieldChangedByUi( const caf::PdmFieldHandle* chang
doUpdateCases = true;
doShowDialog = false;
}
else if ( changedField == &m_swapEnsemblesButton )
{
m_swapEnsemblesButton = false;
auto temp = m_ensemble1();
m_ensemble1 = m_ensemble2();
m_ensemble2 = temp;
doUpdate = true;
doUpdateCases = true;
doShowDialog = false;
}
if ( doUpdate )
{
@@ -430,14 +416,6 @@ void RimDeltaSummaryEnsemble::fieldChangedByUi( const caf::PdmFieldHandle* chang
//--------------------------------------------------------------------------------------------------
void RimDeltaSummaryEnsemble::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_swapEnsemblesButton )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Swap Ensembles";
}
}
if ( &m_fixedTimeStepIndex == field )
{
auto a = dynamic_cast<caf::PdmUiTreeSelectionEditorAttribute*>( attribute );
@@ -621,3 +599,23 @@ std::vector<RimSummaryEnsemble*> RimDeltaSummaryEnsemble::allEnsembles() const
}
return ensembles;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDeltaSummaryEnsemble::onSwapEnsemblesButtonClicked()
{
auto temp = m_ensemble1();
m_ensemble1 = m_ensemble2();
m_ensemble2 = temp;
RiaSummaryTools::updateSummaryEnsembleNames();
createDerivedEnsembleCases();
updateConnectedEditors();
updateReferringCurveSetsZoomAll();
for ( auto referring : findReferringEnsembles() )
{
referring->updateReferringCurveSetsZoomAll();
}
}
@@ -74,6 +74,8 @@ private:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
void onSwapEnsemblesButtonClicked();
void setAllCasesNotInUse();
void deleteCasesNoInUse();
RimDeltaSummaryCase* firstCaseNotInUse();
@@ -93,7 +95,6 @@ private:
caf::PdmPtrField<RimSummaryEnsemble*> m_ensemble1;
caf::PdmPtrField<RimSummaryEnsemble*> m_ensemble2;
caf::PdmField<caf::AppEnum<DerivedSummaryOperator>> m_operator;
caf::PdmField<bool> m_swapEnsemblesButton;
caf::PdmField<QString> m_caseCount;
caf::PdmField<bool> m_matchOnParameters;
caf::PdmField<bool> m_discardMissingOrIncompleteRealizations;
@@ -38,9 +38,9 @@
#include "RiuSummaryVectorSelectionDialog.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiDoubleSliderEditor.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h"
#include "cafPdmUiValueRangeEditor.h"
@@ -96,10 +96,6 @@ RimEnsembleCurveFilter::RimEnsembleCurveFilter()
CAF_PDM_InitFieldNoDefault( &m_objectiveValuesSummaryAddresses, "ObjectiveSummaryAddress", "Summary Address" );
m_objectiveValuesSummaryAddresses.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_objectiveValuesSelectSummaryAddressPushButton, "SelectObjectiveSummaryAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_objectiveValuesSelectSummaryAddressPushButton );
m_objectiveValuesSelectSummaryAddressPushButton = false;
CAF_PDM_InitFieldNoDefault( &m_objectiveFunction, "ObjectiveFunction", "Objective Function" );
m_objectiveFunction = new RimObjectiveFunction();
m_objectiveFunction.uiCapability()->setUiTreeChildrenHidden( true );
@@ -418,39 +414,6 @@ void RimEnsembleCurveFilter::fieldChangedByUi( const caf::PdmFieldHandle* change
curveSet->filterCollection()->updateConnectedEditors();
}
}
else if ( changedField == &m_objectiveValuesSelectSummaryAddressPushButton )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimObjectiveFunctionTools::configureDialogForObjectiveFunctions( &dlg );
RimSummaryEnsemble* candidateEnsemble = parentCurveSet()->summaryEnsemble();
std::vector<RifEclipseSummaryAddress> candidateAddresses;
for ( auto address : m_objectiveValuesSummaryAddresses().childrenByType() )
{
candidateAddresses.push_back( address->address() );
}
dlg.setEnsembleAndAddresses( candidateEnsemble, candidateAddresses );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_objectiveValuesSummaryAddresses.deleteChildren();
for ( auto address : curveSelection )
{
RimSummaryAddress* summaryAddress = new RimSummaryAddress();
summaryAddress->setAddress( address.summaryAddressY() );
m_objectiveValuesSummaryAddresses.push_back( summaryAddress );
}
loadDataAndUpdate();
}
}
m_objectiveValuesSelectSummaryAddressPushButton = false;
}
parentCurveSet()->updateFilterLegend();
}
@@ -526,7 +489,9 @@ void RimEnsembleCurveFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiO
else if ( m_filterMode() == FilterMode::OBJECTIVE_FUNCTION )
{
uiOrdering.add( &m_objectiveValuesSummaryAddressesUiField );
uiOrdering.add( &m_objectiveValuesSelectSummaryAddressPushButton, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
uiOrdering.addNewButton( "...",
[this]() { onObjectiveFunctionSelectionButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
{
auto equationGroup = uiOrdering.addNewGroup( "Equation" );
m_objectiveFunction->uiOrdering( "", *equationGroup );
@@ -573,14 +538,7 @@ void RimEnsembleCurveFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiO
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( field == &m_objectiveValuesSelectSummaryAddressPushButton )
{
if ( auto attr = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attr->m_buttonText = "...";
}
}
else if ( field == &m_valueRange )
if ( field == &m_valueRange )
{
if ( auto attr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>( attribute ) )
{
@@ -880,3 +838,37 @@ RigEnsembleParameter RimEnsembleCurveFilter::selectedEnsembleParameter() const
auto ensemble = curveSet ? curveSet->summaryEnsemble() : nullptr;
return ensemble ? ensemble->ensembleParameter( m_ensembleParameterName ) : RigEnsembleParameter();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::onObjectiveFunctionSelectionButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimObjectiveFunctionTools::configureDialogForObjectiveFunctions( &dlg );
RimSummaryEnsemble* candidateEnsemble = parentCurveSet()->summaryEnsemble();
std::vector<RifEclipseSummaryAddress> candidateAddresses;
for ( auto address : m_objectiveValuesSummaryAddresses().childrenByType() )
{
candidateAddresses.push_back( address->address() );
}
dlg.setEnsembleAndAddresses( candidateEnsemble, candidateAddresses );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_objectiveValuesSummaryAddresses.deleteChildren();
for ( auto address : curveSelection )
{
RimSummaryAddress* summaryAddress = new RimSummaryAddress();
summaryAddress->setAddress( address.summaryAddressY() );
m_objectiveValuesSummaryAddresses.push_back( summaryAddress );
}
loadDataAndUpdate();
}
}
}
@@ -88,6 +88,7 @@ private:
void initAfterRead() override;
void onObjectionFunctionChanged( const caf::SignalEmitter* emitter );
void onObjectiveFunctionSelectionButtonClicked();
RimEnsembleCurveFilterCollection* parentCurveFilterCollection() const;
void updateMaxMinAndDefaultValues( bool forceDefault );
@@ -104,7 +105,6 @@ private:
caf::PdmChildArrayField<RimSummaryAddress*> m_objectiveValuesSummaryAddresses;
caf::PdmField<QString> m_objectiveValuesSummaryAddressesUiField;
caf::PdmField<bool> m_objectiveValuesSelectSummaryAddressPushButton;
caf::PdmChildField<RimObjectiveFunction*> m_objectiveFunction;
caf::PdmPtrField<RimCustomObjectiveFunction*> m_customObjectiveFunction;
@@ -24,8 +24,8 @@
#include "RiuTextContentFrame.h"
#include <cafPdmUiPushButtonEditor.h>
#include <cafPdmUiTreeOrdering.h>
#include "cafPdmUiButton.h"
#include "cafPdmUiTreeOrdering.h"
CAF_PDM_SOURCE_INIT( RimEnsembleCurveFilterCollection, "RimEnsembleCurveFilterCollection" );
@@ -41,10 +41,6 @@ RimEnsembleCurveFilterCollection::RimEnsembleCurveFilterCollection()
CAF_PDM_InitFieldNoDefault( &m_filters, "CurveFilters", "" );
m_filters.uiCapability()->setUiTreeChildrenHidden( true );
m_filters.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN );
CAF_PDM_InitFieldNoDefault( &m_newFilterButton, "NewEnsembleFilter", "New Filter" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_newFilterButton );
m_newFilterButton = false;
}
//--------------------------------------------------------------------------------------------------
@@ -111,14 +107,6 @@ void RimEnsembleCurveFilterCollection::fieldChangedByUi( const caf::PdmFieldHand
{
curveSet->updateAllCurves();
}
else if ( changedField == &m_newFilterButton )
{
m_newFilterButton = false;
addFilter();
updateConnectedEditors();
curveSet->updateAllCurves();
}
}
//--------------------------------------------------------------------------------------------------
@@ -128,7 +116,7 @@ void RimEnsembleCurveFilterCollection::defineUiOrdering( QString uiConfigName, c
{
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Filters" );
group->add( &m_newFilterButton );
group->addNewButton( "Add Ensemble Curve Filter", [this]() { onAddFilterButtonClicked(); } );
for ( auto& filter : m_filters )
{
@@ -202,13 +190,6 @@ void RimEnsembleCurveFilterCollection::defineEditorAttribute( const caf::PdmFiel
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";
}
}
//--------------------------------------------------------------------------------------------------
@@ -273,3 +254,16 @@ void RimEnsembleCurveFilterCollection::onChildDeleted( caf::PdmChildArrayFieldHa
RimEnsembleCurveSet* curveSet = firstAncestorOrThisOfType<RimEnsembleCurveSet>();
if ( curveSet ) curveSet->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilterCollection::onAddFilterButtonClicked()
{
addFilter();
updateConnectedEditors();
if ( auto curveSet = firstAncestorOrThisOfType<RimEnsembleCurveSet>() )
{
curveSet->updateAllCurves();
}
}
@@ -51,6 +51,8 @@ private:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void onAddFilterButtonClicked();
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /* = "" */ ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
@@ -61,5 +63,4 @@ private:
private:
caf::PdmField<bool> m_active;
caf::PdmChildArrayField<RimEnsembleCurveFilter*> m_filters;
caf::PdmField<bool> m_newFilterButton;
};
@@ -68,12 +68,12 @@
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmObject.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiColorEditor.h"
#include "cafPdmUiDateEditor.h"
#include "cafPdmUiDoubleSliderEditor.h"
#include "cafPdmUiItem.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiSliderEditor.h"
#include "cafPdmUiTreeAttributes.h"
#include "cafPdmUiTreeOrdering.h"
@@ -135,10 +135,6 @@ RimEnsembleCurveSet::RimEnsembleCurveSet()
m_yValuesSummaryAddress.uiCapability()->setUiTreeChildrenHidden( true );
m_yValuesSummaryAddress = new RimSummaryAddress;
CAF_PDM_InitFieldNoDefault( &m_yPushButtonSelectSummaryAddress, "SelectAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_yPushButtonSelectSummaryAddress );
m_yPushButtonSelectSummaryAddress = false;
CAF_PDM_InitFieldNoDefault( &m_resampling, "Resampling", "Resampling" );
// X Axis
@@ -185,10 +181,6 @@ RimEnsembleCurveSet::RimEnsembleCurveSet()
CAF_PDM_InitFieldNoDefault( &m_objectiveValuesSummaryAddresses, "ObjectiveSummaryAddress", "Summary Address" );
m_objectiveValuesSummaryAddresses.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_objectiveValuesSelectSummaryAddressPushButton, "SelectObjectiveSummaryAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_objectiveValuesSelectSummaryAddressPushButton );
m_objectiveValuesSelectSummaryAddressPushButton = false;
CAF_PDM_InitFieldNoDefault( &m_customObjectiveFunction, "CustomObjectiveFunction", "Objective Function" );
m_customObjectiveFunction.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
@@ -1053,77 +1045,6 @@ void RimEnsembleCurveSet::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
{
updateTextInPlot = true;
}
else if ( changedField == &m_yPushButtonSelectSummaryAddress )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimSummaryEnsemble* candidateEnsemble = m_yValuesSummaryEnsemble();
RifEclipseSummaryAddress candicateAddress = m_yValuesSummaryAddress->address();
dlg.hideSummaryCases();
dlg.setEnsembleAndAddress( candidateEnsemble, candicateAddress );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_yValuesSummaryEnsemble = curveSelection[0].ensemble();
m_yValuesSummaryAddress->setAddress( curveSelection[0].summaryAddressY() );
loadDataAndUpdate( true );
plot->updateAxes();
if ( auto multiPlot = firstAncestorOrThisOfType<RimSummaryMultiPlot>() )
{
multiPlot->updatePlotTitles();
}
else
{
plot->updatePlotTitle();
}
plot->updateConnectedEditors();
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateMultiPlotToolBar();
}
}
m_yPushButtonSelectSummaryAddress = false;
}
else if ( changedField == &m_objectiveValuesSelectSummaryAddressPushButton )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimObjectiveFunctionTools::configureDialogForObjectiveFunctions( &dlg );
RimSummaryEnsemble* candidateEnsemble = m_yValuesSummaryEnsemble();
std::vector<RifEclipseSummaryAddress> candidateAddresses;
for ( auto address : m_objectiveValuesSummaryAddresses().childrenByType() )
{
candidateAddresses.push_back( address->address() );
}
dlg.setEnsembleAndAddresses( candidateEnsemble, candidateAddresses );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_objectiveValuesSummaryAddresses.deleteChildren();
for ( auto address : curveSelection )
{
RimSummaryAddress* summaryAddress = new RimSummaryAddress();
summaryAddress->setAddress( address.summaryAddressY() );
m_objectiveValuesSummaryAddresses.push_back( summaryAddress );
}
loadDataAndUpdate( true );
}
}
m_objectiveValuesSelectSummaryAddressPushButton = false;
}
else if ( changedField == &m_customObjectiveFunction )
{
if ( m_customObjectiveFunction() )
@@ -1226,7 +1147,9 @@ void RimEnsembleCurveSet::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
curveDataGroup->add( &m_yValuesSummaryEnsemble );
curveDataGroup->add( &m_yValuesSummaryAddressUiField );
curveDataGroup->add( &m_yPushButtonSelectSummaryAddress, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
curveDataGroup->addNewButton( "...",
[this]() { onYValuesSummaryAddressButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
if ( !isXAxisSummaryVector() )
{
@@ -1432,8 +1355,9 @@ void RimEnsembleCurveSet::appendColorGroup( caf::PdmUiOrdering& uiOrdering )
if ( m_colorMode == ColorMode::BY_OBJECTIVE_FUNCTION )
{
colorsGroup->add( &m_objectiveValuesSummaryAddressesUiField );
colorsGroup->add( &m_objectiveValuesSelectSummaryAddressPushButton,
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
colorsGroup->addNewButton( "...",
[this]() { onObjectiveValuesSummaryAddressesButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
{
auto equationGroup = colorsGroup->addNewGroup( "Equation" );
@@ -1521,11 +1445,6 @@ caf::PdmFieldHandle* RimEnsembleCurveSet::objectToggleField()
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveSet::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( auto* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
{
attrib->m_buttonText = "...";
}
if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition )
{
if ( auto* myAttr = dynamic_cast<caf::PdmUiSliderEditorAttribute*>( attribute ) )
@@ -2919,3 +2838,81 @@ void RimEnsembleCurveSet::recreatePlotCurveForLegend( RimSummaryPlot* plot )
updateEnsembleLegendItem();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveSet::onYValuesSummaryAddressButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimSummaryEnsemble* candidateEnsemble = m_yValuesSummaryEnsemble();
RifEclipseSummaryAddress candicateAddress = m_yValuesSummaryAddress->address();
dlg.hideSummaryCases();
dlg.setEnsembleAndAddress( candidateEnsemble, candicateAddress );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_yValuesSummaryEnsemble = curveSelection[0].ensemble();
m_yValuesSummaryAddress->setAddress( curveSelection[0].summaryAddressY() );
loadDataAndUpdate( true );
if ( auto plot = firstAncestorOrThisOfType<RimSummaryPlot>() )
{
plot->updateAxes();
if ( auto multiPlot = firstAncestorOrThisOfType<RimSummaryMultiPlot>() )
{
multiPlot->updatePlotTitles();
}
else
{
plot->updatePlotTitle();
}
plot->updateConnectedEditors();
}
RiuPlotMainWindow* mainPlotWindow = RiaGuiApplication::instance()->mainPlotWindow();
mainPlotWindow->updateMultiPlotToolBar();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveSet::onObjectiveValuesSummaryAddressesButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
RimObjectiveFunctionTools::configureDialogForObjectiveFunctions( &dlg );
RimSummaryEnsemble* candidateEnsemble = m_yValuesSummaryEnsemble();
std::vector<RifEclipseSummaryAddress> candidateAddresses;
for ( auto address : m_objectiveValuesSummaryAddresses().childrenByType() )
{
candidateAddresses.push_back( address->address() );
}
dlg.setEnsembleAndAddresses( candidateEnsemble, candidateAddresses );
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_objectiveValuesSummaryAddresses.deleteChildren();
for ( auto address : curveSelection )
{
RimSummaryAddress* summaryAddress = new RimSummaryAddress();
summaryAddress->setAddress( address.summaryAddressY() );
m_objectiveValuesSummaryAddresses.push_back( summaryAddress );
}
loadDataAndUpdate( true );
}
}
}
@@ -237,6 +237,9 @@ private:
void onObjectiveFunctionChanged( const caf::SignalEmitter* emitter );
void onCustomObjectiveFunctionChanged( const caf::SignalEmitter* emitter );
void onYValuesSummaryAddressButtonClicked();
void onObjectiveValuesSummaryAddressesButtonClicked();
void computeRealizationColor();
void onColorTagClicked( const SignalEmitter* emitter, size_t index );
@@ -260,7 +263,6 @@ private:
caf::PdmPtrField<RimSummaryEnsemble*> m_yValuesSummaryEnsemble;
caf::PdmChildField<RimSummaryAddress*> m_yValuesSummaryAddress;
caf::PdmField<RifEclipseSummaryAddress> m_yValuesSummaryAddressUiField;
caf::PdmField<bool> m_yPushButtonSelectSummaryAddress;
caf::PdmField<RiaDefines::DateTimePeriodEnum> m_resampling;
caf::PdmField<caf::AppEnum<RiaDefines::HorizontalAxisType>> m_xAxisType;
@@ -285,7 +287,6 @@ private:
caf::PdmChildArrayField<RimSummaryAddress*> m_objectiveValuesSummaryAddresses;
caf::PdmField<QString> m_objectiveValuesSummaryAddressesUiField;
caf::PdmField<bool> m_objectiveValuesSelectSummaryAddressPushButton;
caf::PdmPtrField<RimCustomObjectiveFunction*> m_customObjectiveFunction;
caf::PdmField<int> m_minTimeSliderPosition;
caf::PdmField<int> m_maxTimeSliderPosition;
@@ -34,8 +34,8 @@
#include "RiuSummaryVectorSelectionDialog.h"
#include "cafPdmUiButton.h"
#include "cafPdmUiLineEditor.h"
#include "cafPdmUiPushButtonEditor.h"
CAF_PDM_SOURCE_INIT( RimSummaryAddressSelector, "RimSummaryAddressSelector" );
@@ -66,10 +66,6 @@ RimSummaryAddressSelector::RimSummaryAddressSelector()
CAF_PDM_InitFieldNoDefault( &m_summaryAddress, "SummaryAddress", "Summary Address" );
m_summaryAddress.uiCapability()->setUiTreeChildrenHidden( true );
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "" );
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_pushButtonSelectSummaryAddress );
m_pushButtonSelectSummaryAddress = false;
CAF_PDM_InitFieldNoDefault( &m_plotAxisProperties, "PlotAxisProperties", "Axis" );
m_summaryAddress = new RimSummaryAddress;
@@ -194,37 +190,7 @@ RimPlotAxisPropertiesInterface* RimSummaryAddressSelector::plotAxisProperties()
//--------------------------------------------------------------------------------------------------
void RimSummaryAddressSelector::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == &m_pushButtonSelectSummaryAddress )
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( isEnsemble() )
{
dlg.hideSummaryCases();
dlg.setEnsembleAndAddress( m_summaryCaseCollection(), m_summaryAddress->address() );
}
else
{
dlg.hideEnsembles();
dlg.setCaseAndAddress( m_summaryCase(), m_summaryAddress->address() );
}
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_summaryCase = curveSelection[0].summaryCaseY();
m_summaryCaseCollection = curveSelection[0].ensemble();
auto addr = curveSelection[0].summaryAddressY();
m_summaryAddress->setAddress( addr );
m_summaryAddressUiField = addr;
}
}
m_pushButtonSelectSummaryAddress = false;
}
else if ( changedField == &m_summaryAddressUiField )
if ( changedField == &m_summaryAddressUiField )
{
m_summaryAddress->setAddress( m_summaryAddressUiField() );
}
@@ -361,7 +327,9 @@ void RimSummaryAddressSelector::defineUiOrdering( QString uiConfigName, caf::Pdm
m_summaryAddressUiField = m_summaryAddress->address();
uiOrdering.add( &m_summaryAddressUiField, { .newRow = true, .totalColumnSpan = 2, .leftLabelColumnSpan = 1 } );
uiOrdering.add( &m_pushButtonSelectSummaryAddress, { .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
uiOrdering.addNewButton( "...",
[this]() { onSummaryAddressButtonClicked(); },
{ .newRow = false, .totalColumnSpan = 1, .leftLabelColumnSpan = 0 } );
if ( m_showResampling )
{
@@ -381,14 +349,6 @@ void RimSummaryAddressSelector::defineUiOrdering( QString uiConfigName, caf::Pdm
//--------------------------------------------------------------------------------------------------
void RimSummaryAddressSelector::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute )
{
if ( &m_pushButtonSelectSummaryAddress == field )
{
auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "...";
}
}
}
//--------------------------------------------------------------------------------------------------
@@ -398,3 +358,37 @@ bool RimSummaryAddressSelector::isEnsemble() const
{
return m_summaryCaseCollection() != nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryAddressSelector::onSummaryAddressButtonClicked()
{
RiuSummaryVectorSelectionDialog dlg( RiaGuiApplication::widgetToUseAsParent() );
if ( isEnsemble() )
{
dlg.hideSummaryCases();
dlg.setEnsembleAndAddress( m_summaryCaseCollection(), m_summaryAddress->address() );
}
else
{
dlg.hideEnsembles();
dlg.setCaseAndAddress( m_summaryCase(), m_summaryAddress->address() );
}
if ( dlg.exec() == QDialog::Accepted )
{
auto curveSelection = dlg.curveSelection();
if ( !curveSelection.empty() )
{
m_summaryCase = curveSelection[0].summaryCaseY();
m_summaryCaseCollection = curveSelection[0].ensemble();
auto addr = curveSelection[0].summaryAddressY();
m_summaryAddress->setAddress( addr );
m_summaryAddressUiField = addr;
}
}
addressChanged.send();
}
@@ -70,13 +70,13 @@ private:
void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override;
bool isEnsemble() const;
void onSummaryAddressButtonClicked();
private:
caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
caf::PdmPtrField<RimSummaryEnsemble*> m_summaryCaseCollection;
caf::PdmChildField<RimSummaryAddress*> m_summaryAddress;
caf::PdmProxyValueField<RifEclipseSummaryAddress> m_summaryAddressUiField;
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
caf::PdmPtrField<RimPlotAxisPropertiesInterface*> m_plotAxisProperties;
caf::PdmField<RiaDefines::DateTimePeriodEnum> m_resamplingPeriod;