From c57200331e52b0fdcf328b831bb9fb6c43c4bb70 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 15 Oct 2026 08:58:12 +0200 Subject: [PATCH] ResInsight: Migrate summary data model to attribute map --- .../Summary/RimDeltaSummaryCase.cpp | 18 +--- .../Summary/RimDeltaSummaryCase.h | 1 - .../Summary/RimDeltaSummaryEnsemble.cpp | 18 +--- .../Summary/RimDeltaSummaryEnsemble.h | 1 - .../Summary/RimEnsembleCurveFilter.cpp | 20 +--- .../Summary/RimEnsembleCurveFilter.h | 11 +-- .../RimEnsembleCurveFilterCollection.cpp | 9 -- .../RimEnsembleCurveFilterCollection.h | 1 - .../Summary/RimEnsembleCurveSet.cpp | 85 +++++++--------- .../Summary/RimEnsembleCurveSet.h | 6 +- .../Summary/RimEnsembleStatistics.cpp | 15 +-- .../Summary/RimEnsembleStatistics.h | 1 - .../Summary/RimFileSummaryCase.cpp | 16 +-- .../Summary/RimFileSummaryCase.h | 2 - .../ProjectDataModel/Summary/RimRftCase.cpp | 11 +-- .../ProjectDataModel/Summary/RimRftCase.h | 2 +- .../Summary/RimSummaryAddressSelector.cpp | 7 -- .../Summary/RimSummaryAddressSelector.h | 1 - .../Summary/RimSummaryCase.cpp | 39 ++++---- .../ProjectDataModel/Summary/RimSummaryCase.h | 5 +- .../Summary/RimSummaryCurve.cpp | 7 -- .../Summary/RimSummaryCurve.h | 1 - .../Summary/RimSummaryCurveCollection.cpp | 15 +-- .../Summary/RimSummaryCurveCollection.h | 1 - .../Summary/RimSummaryDeclineCurve.cpp | 67 ++++--------- .../Summary/RimSummaryDeclineCurve.h | 1 - .../Summary/RimSummaryEnsemble.cpp | 37 +++---- .../Summary/RimSummaryEnsemble.h | 4 +- .../Summary/RimSummaryMultiPlot.cpp | 35 +++---- .../Summary/RimSummaryMultiPlot.h | 1 - .../Summary/RimSummaryPlotAxisFormatter.cpp | 10 +- .../Summary/RimSummaryPlotManager.cpp | 22 +---- .../Summary/RimSummaryPlotManager.h | 2 - .../Summary/RimSummaryPlotSourceStepping.cpp | 59 ++++++----- .../Summary/RimSummaryPlotSourceStepping.h | 2 - .../RimSummaryRegressionAnalysisCurve.cpp | 97 +++++++------------ .../RimSummaryRegressionAnalysisCurve.h | 1 - .../Summary/RimSummaryTable.cpp | 42 +++----- .../Summary/RimSummaryTable.h | 1 - .../Summary/RimSummaryTimeAxisProperties.cpp | 64 +++++------- .../Summary/RimSummaryTimeAxisProperties.h | 6 +- 41 files changed, 242 insertions(+), 502 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp index 8b69da768c..efd27355e9 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.cpp @@ -185,6 +185,8 @@ RimDeltaSummaryCase::RimDeltaSummaryCase() CAF_PDM_InitField( &m_fixedTimeStepIndex, "FixedTimeStepIndex", 0, "Time Step" ); m_fixedTimeStepIndex.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); m_fixedTimeStepIndex.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + m_fixedTimeStepIndex.uiCapability()->setAttribute( caf::PdmUiTreeSelectionEditor::Keys::SINGLE_SELECTION_MODE, true ); + m_fixedTimeStepIndex.uiCapability()->setAttribute( caf::PdmUiTreeSelectionEditor::Keys::SHOW_TEXT_FILTER, true ); } //-------------------------------------------------------------------------------------------------- @@ -694,19 +696,3 @@ void RimDeltaSummaryCase::fieldChangedByUi( const caf::PdmFieldHandle* changedFi } } } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimDeltaSummaryCase::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( &m_fixedTimeStepIndex == field ) - { - auto a = dynamic_cast( attribute ); - if ( a ) - { - a->singleSelectionMode = true; - a->showTextFilter = true; - } - } -} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h index f1cbf84c86..cc82ebad73 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryCase.h @@ -96,7 +96,6 @@ private: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void calculate( const RifEclipseSummaryAddress& address ) const; void clearData( const RifEclipseSummaryAddress& address ) const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp index 38f311ad8a..4313c5a921 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.cpp @@ -87,6 +87,8 @@ RimDeltaSummaryEnsemble::RimDeltaSummaryEnsemble() CAF_PDM_InitField( &m_fixedTimeStepIndex, "FixedTimeStepIndex", 0, "Time Step" ); m_fixedTimeStepIndex.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); m_fixedTimeStepIndex.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + m_fixedTimeStepIndex.uiCapability()->setAttribute( caf::PdmUiTreeSelectionEditor::Keys::SINGLE_SELECTION_MODE, true ); + m_fixedTimeStepIndex.uiCapability()->setAttribute( caf::PdmUiTreeSelectionEditor::Keys::SHOW_TEXT_FILTER, true ); setNameTemplate( "Delta Ensemble" ); @@ -462,22 +464,6 @@ void RimDeltaSummaryEnsemble::fieldChangedByUi( const caf::PdmFieldHandle* chang } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimDeltaSummaryEnsemble::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( &m_fixedTimeStepIndex == field ) - { - auto a = dynamic_cast( attribute ); - if ( a ) - { - a->singleSelectionMode = true; - a->showTextFilter = true; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h index f7fdf70f4d..87f202beff 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimDeltaSummaryEnsemble.h @@ -78,7 +78,6 @@ private: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; 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(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.cpp index 293bdb980c..082efdcc5e 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.cpp @@ -519,6 +519,9 @@ void RimEnsembleCurveFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiO else if ( eParam.isNumeric() || m_filterMode() == FilterMode::SUMMARY_VALUE ) { uiOrdering.add( &m_valueRange ); + m_valueRange.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::SLIDER_TICK_COUNT, 100 ); + m_valueRange.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MINIMUM, m_lowerLimit ); + m_valueRange.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MAXIMUM, m_upperLimit ); } else if ( eParam.isText() ) { @@ -533,23 +536,6 @@ void RimEnsembleCurveFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiO uiOrdering.skipRemainingFields( true ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEnsembleCurveFilter::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_valueRange ) - { - if ( auto attr = dynamic_cast( attribute ) ) - { - attr->m_sliderTickCount = 100; - - attr->m_minimum = m_lowerLimit; - attr->m_maximum = m_upperLimit; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.h index 58f6128a1b..c5cca47bb0 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilter.h @@ -80,12 +80,11 @@ public: private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - caf::PdmFieldHandle* userDescriptionField() override; - caf::PdmFieldHandle* objectToggleField() override; - void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; - void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override; - void initAfterRead() override; + caf::PdmFieldHandle* userDescriptionField() override; + caf::PdmFieldHandle* objectToggleField() override; + void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; + void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override; + void initAfterRead() override; void onObjectionFunctionChanged( const caf::SignalEmitter* emitter ); void onObjectiveFunctionSelectionButtonClicked(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.cpp index 95515cdb32..d14e381be7 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.cpp @@ -183,15 +183,6 @@ void RimEnsembleCurveFilterCollection::defineUiTreeOrdering( caf::PdmUiTreeOrder uiTreeOrdering.skipRemainingChildren( true ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEnsembleCurveFilterCollection::defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) -{ -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.h index f83c70b0da..ade899ca6f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveFilterCollection.h @@ -54,7 +54,6 @@ private: void onAddFilterButtonClicked(); void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /* = "" */ ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; caf::PdmFieldHandle* objectToggleField() override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index 9c1a7be39f..883d21b032 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -81,6 +81,7 @@ #include "cafPdmUiTreeAttributes.h" #include "cafPdmUiTreeOrdering.h" #include "cafPdmUiTreeSelectionEditor.h" +#include "cafPdmUiTreeViewEditor.h" #include "cafSelectionManager.h" #include @@ -108,6 +109,9 @@ RimEnsembleCurveSet::RimEnsembleCurveSet() , m_realizationHash( 0 ) { + uiCapability()->setAttribute( caf::PdmUiTreeViewEditor::Keys::TREE_ITEM_TAGS, + [this]() { return treeItemTags(); } ); + CAF_PDM_InitScriptableObjectWithNameAndComment( "Ensemble Curve Set", ":/EnsembleCurveSet16x16.png", "", @@ -165,6 +169,9 @@ RimEnsembleCurveSet::RimEnsembleCurveSet() CAF_PDM_InitField( &m_mainEnsembleColor, "MainEnsembleColor", RiaColorTools::textColor3f(), "Color" ); CAF_PDM_InitField( &m_colorOpacity, "ColorTransparency", 0.8, "Opacity [0..1]" ); m_colorOpacity.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); + m_colorOpacity.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MINIMUM, 0.001 ); + m_colorOpacity.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MAXIMUM, 1.0 ); + m_colorOpacity.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::DECIMALS, 2 ); CAF_PDM_InitField( &m_ensembleParameter, "EnsembleParameter", QString( "" ), "Parameter" ); m_ensembleParameter.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); @@ -194,19 +201,35 @@ RimEnsembleCurveSet::RimEnsembleCurveSet() CAF_PDM_InitField( &m_showObjectiveFunctionFormula, "ShowObjectiveFunctionFormula", true, "Show Text Box in Plot" ); - const QString formatString = RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); + const auto dateFormatCallback = []() { return RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); }; - CAF_PDM_InitFieldNoDefault( &m_minDateRange, "MinDateRange", "From", "", formatString ); + CAF_PDM_InitFieldNoDefault( &m_minDateRange, + "MinDateRange", + "From", + "", + RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ) ); m_minDateRange.uiCapability()->setUiEditorTypeName( caf::PdmUiDateEditor::uiEditorTypeName() ); + m_minDateRange.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); CAF_PDM_InitField( &m_minTimeSliderPosition, "MinTimeSliderPosition", 0, "" ); m_minTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); - CAF_PDM_InitFieldNoDefault( &m_maxDateRange, "MaxDateRange", "To", "", formatString ); + CAF_PDM_InitFieldNoDefault( &m_maxDateRange, + "MaxDateRange", + "To", + "", + RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ) ); m_maxDateRange.uiCapability()->setUiEditorTypeName( caf::PdmUiDateEditor::uiEditorTypeName() ); + m_maxDateRange.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); CAF_PDM_InitField( &m_maxTimeSliderPosition, "MaxTimeSliderPosition", 100, "" ); m_maxTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); // Time Step Selection CAF_PDM_InitFieldNoDefault( &m_timeStepFilter, "TimeStepFilter", "Available Time Steps" ); @@ -1136,20 +1159,20 @@ void RimEnsembleCurveSet::fieldChangedByUi( const caf::PdmFieldHandle* changedFi //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimEnsembleCurveSet::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) +std::vector RimEnsembleCurveSet::treeItemTags() { - if ( auto* treeItemAttribute = dynamic_cast( attribute ) ) - { - treeItemAttribute->tags.clear(); - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->bgColor = RiaColorTools::toQColor( m_colorForRealizations ); - tag->fgColor = RiaColorTools::toQColor( m_statistics->color() ); - tag->text = "---"; + std::vector tags; - tag->clicked.connect( this, &RimEnsembleCurveSet::onColorTagClicked ); + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.bgColor = RiaColorTools::toQColor( m_colorForRealizations ); + tag.fgColor = RiaColorTools::toQColor( m_statistics->color() ); + tag.text = "---"; - treeItemAttribute->tags.push_back( std::move( tag ) ); - } + tag.clicked = [this]( size_t index ) { this->onColorTagClicked( nullptr, index ); }; + + tags.push_back( tag ); + + return tags; } //-------------------------------------------------------------------------------------------------- @@ -1493,40 +1516,6 @@ caf::PdmFieldHandle* RimEnsembleCurveSet::objectToggleField() return &m_showCurves; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEnsembleCurveSet::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->m_minimum = 0; - myAttr->m_maximum = 100; - myAttr->m_showSpinBox = false; - } - } - if ( field == &m_colorOpacity ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->m_minimum = 0.001; - myAttr->m_maximum = 1.0; - myAttr->m_decimals = 2; - } - } - - if ( field == &m_minDateRange || field == &m_maxDateRange ) - { - if ( auto attrib = dynamic_cast( attribute ) ) - { - QString formatString = RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); - attrib->dateFormat = formatString; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h index 1d19a2d4db..2be791294b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleCurveSet.h @@ -19,6 +19,7 @@ #pragma once #include "RifEclipseSummaryAddress.h" +#include "cafPdmUiTreeAttributes.h" #include "RiaDateTimeDefines.h" #include "RiaPlotDefines.h" @@ -209,7 +210,6 @@ private: caf::PdmFieldHandle* userDescriptionField() override; caf::PdmFieldHandle* objectToggleField() override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; std::set allAvailableTimeSteps() const; @@ -223,8 +223,8 @@ private: void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; - void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; + std::vector treeItemTags(); + void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; void updatePlotAxis(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp index 97228f203d..8b207c4385 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp @@ -57,6 +57,7 @@ RimEnsembleStatistics::RimEnsembleStatistics( RimEnsembleCurveSetInterface* pare CAF_PDM_InitField( &m_showMeanCurve, "ShowMeanCurve", true, "Mean" ); CAF_PDM_InitField( &m_customPercentiles, "CustomPercentiles", QString(), "Custom Percentiles" ); m_customPercentiles.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() ); + m_customPercentiles.uiCapability()->setAttribute( caf::PdmUiLineEditor::Keys::PLACEHOLDER_TEXT, "E.g. 5 25 75 95" ); m_customPercentiles.setCustomValidationCallback( [this]() -> QString { return validateCustomPercentiles(); } ); CAF_PDM_InitField( &m_showCurveLabels, "ShowCurveLabels", true, "Show Curve Labels" ); CAF_PDM_InitField( &m_includeIncompleteCurves, "IncludeIncompleteCurves", false, "Include Incomplete Curves" ); @@ -368,20 +369,6 @@ void RimEnsembleStatistics::defineUiOrdering( QString uiConfigName, caf::PdmUiOr defaultUiOrdering( showCrossPlot, uiOrdering ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEnsembleStatistics::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_customPercentiles ) - { - if ( auto lineEdAttr = dynamic_cast( attribute ) ) - { - lineEdAttr->placeholderText = "E.g. 5 25 75 95"; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.h b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.h index a1dd7940e6..53586b4c58 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimEnsembleStatistics.h @@ -74,7 +74,6 @@ public: private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; bool onShowEnsembleCurves() const; void onSetShowEnsembleCurves( const bool& enable ); QString validateCustomPercentiles() const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp index 3bbfdcae3c..20361a8859 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.cpp @@ -64,6 +64,7 @@ RimFileSummaryCase::RimFileSummaryCase() CAF_PDM_InitFieldNoDefault( &m_additionalSummaryFilePath, "AdditionalSummaryFilePath", "Additional File Path (set invisible when ready)" ); m_additionalSummaryFilePath.uiCapability()->setUiHidden( true ); + m_additionalSummaryFilePath.uiCapability()->setAttribute( caf::PdmUiFilePathEditor::Keys::SELECT_SAVE_FILE_NAME, true ); CAF_PDM_InitFieldNoDefault( &m_rftCase, "RftCase", "RFT Data" ); m_rftCase = new RimRftCase; @@ -259,21 +260,6 @@ std::unique_ptr RimFileSummaryCase::createOpmRftReader( const Q return nullptr; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimFileSummaryCase::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_additionalSummaryFilePath ) - { - auto* myAttr = dynamic_cast( attribute ); - if ( myAttr ) - { - myAttr->m_selectSaveFileName = true; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h index 14c24d9781..11001b2ccc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimFileSummaryCase.h @@ -72,8 +72,6 @@ public: RiaThreadSafeLogger* threadSafeLogger ); protected: - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; private: diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp index 6690cbff59..e5a0caa6b3 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.cpp @@ -96,14 +96,7 @@ void RimRftCase::fieldChangedByUi( const caf::PdmFieldHandle* changedField, cons //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimRftCase::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) +void RimRftCase::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - if ( field == &m_dataDeckFilePath ) - { - auto* myAttr = dynamic_cast( attribute ); - if ( myAttr ) - { - myAttr->m_defaultPath = rftFilePath(); - } - } + m_dataDeckFilePath.uiCapability()->setAttribute( caf::PdmUiFilePathEditor::Keys::DEFAULT_PATH, rftFilePath() ); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h index 4904d62c38..32db92b1d3 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimRftCase.h @@ -42,7 +42,7 @@ public: 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 defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; private: caf::PdmField m_rftFilePath; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.cpp index af2b48ae53..93d286701c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.cpp @@ -344,13 +344,6 @@ void RimSummaryAddressSelector::defineUiOrdering( QString uiConfigName, caf::Pdm uiOrdering.skipRemainingFields( true ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryAddressSelector::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.h index 1a2d89aed8..7c4707547c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressSelector.h @@ -67,7 +67,6 @@ private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; bool isEnsemble() const; void onSummaryAddressButtonClicked(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp index b336a48408..62a3a07679 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.cpp @@ -32,6 +32,7 @@ #include "cafPdmUiCheckBoxEditor.h" #include "cafPdmUiTreeAttributes.h" #include "cafPdmUiTreeOrdering.h" +#include "cafPdmUiTreeViewEditor.h" CAF_PDM_ABSTRACT_SOURCE_INIT( RimSummaryCase, "SummaryCase" ); @@ -41,6 +42,9 @@ CAF_PDM_ABSTRACT_SOURCE_INIT( RimSummaryCase, "SummaryCase" ); RimSummaryCase::RimSummaryCase() : nameChanged( this ) { + uiCapability()->setAttribute( caf::PdmUiTreeViewEditor::Keys::TREE_ITEM_TAGS, + [this]() { return treeItemTags(); } ); + CAF_PDM_InitScriptableObject( "Summary Case", ":/SummaryCase.svg", "", "The Base Class for all Summary Cases" ); CAF_PDM_InitScriptableFieldNoDefault( &m_displayName, "ShortName", "Display Name" ); @@ -275,26 +279,27 @@ caf::PdmFieldHandle* RimSummaryCase::userDescriptionField() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryCase::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) +std::vector RimSummaryCase::treeItemTags() { - if ( auto* treeItemAttribute = dynamic_cast( attribute ) ) - { - // The tooltip text is set in RimEnsembleStatisticsCase::calculate for ensemble statistics. Use the presens of tooltip to determine - // if the tag should be added. - if ( !uiToolTip().isEmpty() ) - { - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->icon = caf::IconProvider( ":/info16x16.png" ); + std::vector tags; - treeItemAttribute->tags.push_back( std::move( tag ) ); - } - if ( m_includeInAutoReload() ) - { - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->icon = caf::IconProvider( ":/TimedRefresh.png" ); - treeItemAttribute->tags.push_back( std::move( tag ) ); - } + // The tooltip text is set in RimEnsembleStatisticsCase::calculate for ensemble statistics. Use the presens of tooltip to determine + // if the tag should be added. + if ( !uiToolTip().isEmpty() ) + { + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.icon = caf::IconProvider( ":/info16x16.png" ); + + tags.push_back( tag ); } + if ( m_includeInAutoReload() ) + { + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.icon = caf::IconProvider( ":/TimedRefresh.png" ); + tags.push_back( tag ); + } + + return tags; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h index b2c635168d..f8374df17b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCase.h @@ -18,6 +18,7 @@ #pragma once #include "RiaDefines.h" +#include "cafPdmUiTreeAttributes.h" #include "RiaHashTools.h" @@ -97,8 +98,8 @@ protected: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; - caf::PdmFieldHandle* userDescriptionField() override; - void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; + caf::PdmFieldHandle* userDescriptionField() override; + std::vector treeItemTags(); void updateTreeItemName(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index e1746f5448..cdd09962d8 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -836,13 +836,6 @@ double RimSummaryCurve::computeCurveZValue() return zOrder; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryCurve::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h index 15d17dcda0..2e8bca30f0 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -133,7 +133,6 @@ protected: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void hideXAxisGroup(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index f7c1f8b3f6..8fd4e4563f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -49,6 +49,9 @@ RimSummaryCurveCollection::RimSummaryCurveCollection() : curvesChanged( this ) { CAF_PDM_InitObject( "Summary Curves", ":/SummaryCurveFilter16x16.png" ); + uiCapability()->setAttribute>( caf::PdmUiTreeViewEditor::Keys::CURRENT_OBJECT, + [this]() -> caf::PdmObjectHandle* + { return m_currentSummaryCurve.p(); } ); CAF_PDM_InitFieldNoDefault( &m_curves, "CollectionCurves", "Curves" ); caf::PdmFieldReorderCapability::addToFieldWithCallback( &m_curves, this, &RimSummaryCurveCollection::onCurvesReordered ); @@ -404,18 +407,6 @@ caf::PdmFieldHandle* RimSummaryCurveCollection::objectToggleField() return &m_showCurves; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryCurveCollection::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - caf::PdmUiTreeViewEditorAttribute* myAttr = dynamic_cast( attribute ); - if ( myAttr && m_currentSummaryCurve.notNull() ) - { - myAttr->currentObject = m_currentSummaryCurve.p(); - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index b6e05e6a0d..5651a04082 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -88,7 +88,6 @@ private: private: caf::PdmFieldHandle* objectToggleField() override; - void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.cpp index b8f0ebf328..43ae75686d 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.cpp @@ -83,27 +83,44 @@ RimSummaryDeclineCurve::RimSummaryDeclineCurve() CAF_PDM_InitField( &m_predictionYears, "PredictionYears", 5, "Years" ); m_predictionYears.setRange( 1, 50 ); m_predictionYears.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_predictionYears.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 1 ); + m_predictionYears.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 50 ); CAF_PDM_InitField( &m_hyperbolicDeclineConstant, "HyperbolicDeclineConstant", 0.5, "Decline Constant" ); m_hyperbolicDeclineConstant.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() ); + // Hyperbolic decline constant must be larger than 0 to avoid calculation issues. + m_hyperbolicDeclineConstant.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MINIMUM, 0.001 ); + m_hyperbolicDeclineConstant.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::MAXIMUM, 1.0 ); + m_hyperbolicDeclineConstant.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::DECIMALS, 2 ); CAF_PDM_InitField( &m_minTimeSliderPosition, "MinTimeSliderPosition", 75, "From" ); m_minTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); CAF_PDM_InitField( &m_maxTimeSliderPosition, "MaxTimeSliderPosition", 100, "To" ); m_maxTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); const QString dateFormat = RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); + const auto dateFormatCallback = []() { return RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); }; + CAF_PDM_InitFieldNoDefault( &m_minDate, "MinDate", "From", "", dateFormat ); m_minDate.uiCapability()->setUiEditorTypeName( caf::PdmUiDateEditor::uiEditorTypeName() ); + m_minDate.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); CAF_PDM_InitFieldNoDefault( &m_maxDate, "MaxDate", "To", "", dateFormat ); m_maxDate.uiCapability()->setUiEditorTypeName( caf::PdmUiDateEditor::uiEditorTypeName() ); + m_maxDate.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); CAF_PDM_InitField( &m_showTimeSelectionInPlot, "ShowTimeSelectionInPlot", true, "Show In Plot" ); CAF_PDM_InitFieldNoDefault( &m_equationText, "EquationText", "Equation" ); + m_equationText.uiCapability()->setAttribute( caf::PdmUiTextEditor::Keys::HEIGHT_HINT, -1 ); m_equationText.registerGetMethod( this, &RimSummaryDeclineCurve::equationTextProxy ); m_equationText.uiCapability()->setUiReadOnly( true ); m_equationText.uiCapability()->setUiEditorTypeName( caf::PdmUiTextEditor::uiEditorTypeName() ); @@ -417,56 +434,6 @@ void RimSummaryDeclineCurve::fieldChangedByUi( const caf::PdmFieldHandle* change } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryDeclineCurve::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - RimSummaryCurve::defineEditorAttribute( field, uiConfigName, attribute ); - - if ( field == &m_hyperbolicDeclineConstant ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - // Hyperbolic decline constant must be larger than 0 to avoid calculation issues. - myAttr->m_minimum = 0.001; - myAttr->m_maximum = 1.0; - myAttr->m_decimals = 2; - } - } - else if ( field == &m_predictionYears ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->m_minimum = 1; - myAttr->m_maximum = 50; - } - } - else if ( field == &m_equationText ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->heightHint = -1; - } - } - else if ( field == &m_minDate || field == &m_maxDate ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->dateFormat = RiaQDateTimeTools::dateFormatString( RiaPreferences::current()->dateFormat() ); - } - } - else if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->m_minimum = 0; - myAttr->m_maximum = 100; - myAttr->m_showSpinBox = false; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.h index fa5864fe4b..2bd59a6074 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryDeclineCurve.h @@ -80,7 +80,6 @@ private: // Overridden PDM methods void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; RigDeclineCurveCalculator::DeclineModel declineModel( RifEclipseSummaryAddressDefines::CurveType curveType ) const; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp index b95faa636e..745ace7b94 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp @@ -49,6 +49,7 @@ #include "cafPdmUiTextEditor.h" #include "cafPdmUiTreeAttributes.h" #include "cafPdmUiTreeOrdering.h" +#include "cafPdmUiTreeViewEditor.h" #include @@ -64,6 +65,9 @@ RimSummaryEnsemble::RimSummaryEnsemble() : caseNameChanged( this ) , caseRemoved( this ) { + uiCapability()->setAttribute( caf::PdmUiTreeViewEditor::Keys::TREE_ITEM_TAGS, + [this]() { return treeItemTags(); } ); + CAF_PDM_InitScriptableObjectWithNameAndComment( "Summary Case Group", ":/SummaryGroup16x16.png", "", @@ -81,6 +85,9 @@ RimSummaryEnsemble::RimSummaryEnsemble() QString defaultText = RiaDefines::key1VariableName() + "-" + RiaDefines::key2VariableName(); QString tooltipText = QString( "Variables in template is supported, and will be replaced to create name. Example '%1'" ).arg( defaultText ); CAF_PDM_InitField( &m_nameTemplateString, "NameTemplateString", defaultText, "Name Template", "", tooltipText ); + m_nameTemplateString.uiCapability()->setAttribute( caf::PdmUiLineEditor::Keys::PLACEHOLDER_TEXT, + RiaDefines::key1VariableName() + "-" + RiaDefines::key2VariableName() ); + m_nameTemplateString.uiCapability()->setAttribute( caf::PdmUiLineEditor::Keys::NOTIFY_WHEN_TEXT_IS_EDITED, true ); CAF_PDM_InitFieldNoDefault( &m_groupingMode, "GroupingMode", "Grouping Mode" ); @@ -1082,32 +1089,18 @@ void RimSummaryEnsemble::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrd //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryEnsemble::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) +std::vector RimSummaryEnsemble::treeItemTags() { - if ( field == &m_nameTemplateString ) - { - if ( auto attr = dynamic_cast( attribute ) ) - { - attr->placeholderText = RiaDefines::key1VariableName() + "-" + RiaDefines::key2VariableName(); - attr->notifyWhenTextIsEdited = true; - } - } -} + std::vector tags; -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryEnsemble::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( auto* treeItemAttribute = dynamic_cast( attribute ) ) + if ( m_includeInAutoReload() ) { - if ( m_includeInAutoReload() ) - { - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->icon = caf::IconProvider( ":/TimedRefresh.png" ); - treeItemAttribute->tags.push_back( std::move( tag ) ); - } + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.icon = caf::IconProvider( ":/TimedRefresh.png" ); + tags.push_back( tag ); } + + return tags; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.h index b33ba786f2..4830d063a6 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.h @@ -20,6 +20,7 @@ #include "RiaDefines.h" #include "Summary/RiaSummaryDefines.h" +#include "cafPdmUiTreeAttributes.h" #include "RifEclipseSummaryAddress.h" @@ -156,8 +157,7 @@ protected: private: caf::PdmFieldHandle* userDescriptionField() override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; + std::vector treeItemTags(); QString nameAndItemCount() const; void updateIcon(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 715a25344a..835e5b85d9 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -153,6 +153,19 @@ RimSummaryMultiPlot::RimSummaryMultiPlot() CAF_PDM_InitFieldNoDefault( &m_goToCommonSettings, "GoToCommonSettings", "" ); m_goToCommonSettings.uiCapability()->setUiEditorTypeName( caf::PdmUiLabelEditor::uiEditorTypeName() ); + m_goToCommonSettings.uiCapability()->setAttribute( caf::PdmUiLabelEditor::Keys::USE_WORD_WRAP, true ); + m_goToCommonSettings.uiCapability()->setAttribute( caf::PdmUiLabelEditor::Keys::LINK_TEXT, + "Select Summary Plots to edit Common Readout Settings." ); + m_goToCommonSettings.uiCapability() + ->setAttribute>( caf::PdmUiLabelEditor::Keys::LINK_ACTIVATED_CALLBACK, + []( const QString& link ) + { + if ( auto plotCollection = + RimMainPlotCollection::current()->summaryMultiPlotCollection() ) + { + RiuPlotMainWindowTools::selectAsCurrentItem( plotCollection ); + } + } ); m_goToCommonSettings.xmlCapability()->disableIO(); CAF_PDM_InitFieldNoDefault( &m_axisRangeAggregation, "AxisRangeAggregation", "Y Axis Range" ); @@ -543,28 +556,6 @@ void RimSummaryMultiPlot::childFieldChangedByUi( const caf::PdmFieldHandle* chan } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryMultiPlot::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_goToCommonSettings ) - { - if ( auto labelEditorAttribute = dynamic_cast( attribute ) ) - { - labelEditorAttribute->m_useWordWrap = true; - labelEditorAttribute->m_linkText = "Select Summary Plots to edit Common Readout Settings."; - labelEditorAttribute->m_linkActivatedCallback = []( const QString& link ) - { - if ( auto plotCollection = RimMainPlotCollection::current()->summaryMultiPlotCollection() ) - { - RiuPlotMainWindowTools::selectAsCurrentItem( plotCollection ); - } - }; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index 7fdb44f2ca..81b15f91cc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -127,7 +127,6 @@ protected: private: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotAxisFormatter.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotAxisFormatter.cpp index 7061808925..a9c0eb0cdc 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotAxisFormatter.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotAxisFormatter.cpp @@ -126,7 +126,6 @@ QString RimSummaryPlotAxisFormatter::autoAxisTitle() const } else { - bool usedShortName = false; if ( m_axisProperties->showDescription() ) { auto candidateName = quantityName; @@ -134,16 +133,9 @@ QString RimSummaryPlotAxisFormatter::autoAxisTitle() const if ( sumAddress.isHistoryVector() ) candidateName = quantityName.substr( 0, quantityName.size() - 1 ); titleText = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromVectorName( candidateName ); - - // Use the short name if no description is available - if ( titleText.empty() ) - { - titleText = quantityName; - usedShortName = true; - } } - if ( m_axisProperties->showAcronym() && !usedShortName ) + if ( m_axisProperties->showAcronym() ) { if ( !titleText.empty() ) { diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp index 45a45f22a6..e6ff48356a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.cpp @@ -75,6 +75,10 @@ RimSummaryPlotManager::RimSummaryPlotManager() CAF_PDM_InitFieldNoDefault( &m_summaryPlot, "SummaryPlot", "Summary Plot" ); CAF_PDM_InitFieldNoDefault( &m_filterText, "FilterText", "Filter Text" ); m_filterText.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() ); + m_filterText.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ENABLE_EDITABLE_CONTENT, true ); + m_filterText.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ENABLE_AUTO_COMPLETE, false ); + m_filterText.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ADJUST_WIDTH_TO_CONTENTS, true ); + m_filterText.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::NOTIFY_WHEN_TEXT_IS_EDITED, true ); CAF_PDM_InitFieldNoDefault( &m_addressCandidates, "AddressCandidates", "Vectors" ); m_addressCandidates.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::TOP ); @@ -262,24 +266,6 @@ std::vector RimSummaryPlotManager::dataSourceDisplayNames() const return displayNames; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryPlotManager::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_filterText ) - { - auto attr = dynamic_cast( attribute ); - if ( attr ) - { - attr->enableEditableContent = true; - attr->enableAutoComplete = false; - attr->adjustWidthToContents = true; - attr->notifyWhenTextIsEdited = true; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h index e267d6ce13..0415320ba9 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotManager.h @@ -55,8 +55,6 @@ private: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void onSelectionManagerSelectionChanged( const std::set& changedSelectionLevels ) override; // Override eventFilter to be able to track key events from QWidget diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 628851618f..680aeec838 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -97,6 +97,34 @@ RimSummaryPlotSourceStepping::RimSummaryPlotSourceStepping() m_indexLabel.xmlCapability()->disableIO(); CAF_PDM_InitField( &m_autoUpdateAppearance, "AutoUpdateAppearance", false, "Update Appearance" ); + + m_stepDimension.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::MINIMUM_WIDTH, + 120, + caf::PdmUiToolBarEditor::uiEditorConfigName() ); + + const std::vector steppingFields = { &m_summaryCase, + &m_ensemble, + &m_wellName, + &m_groupName, + &m_networkName, + &m_region, + &m_vectorName, + &m_cellBlock, + &m_wellSegment, + &m_connection, + &m_aquifer, + &m_wellCompletionNumber }; + for ( auto* field : steppingFields ) + { + RiuTools::enableUpDownArrowsForComboBox( field ); + + auto* uiCapability = field->uiCapability(); + uiCapability->setAttribute( caf::PdmUiComboBoxEditor::Keys::NEXT_BUTTON_TEXT, + "Next (" + RimSummaryPlotControls::nextStepKeyText() + ")" ); + uiCapability->setAttribute( caf::PdmUiComboBoxEditor::Keys::PREV_BUTTON_TEXT, + "Previous (" + RimSummaryPlotControls::prevStepKeyText() + ")" ); + uiCapability->setAttribute( caf::PdmUiComboBoxEditor::Keys::MINIMUM_WIDTH, 120, caf::PdmUiToolBarEditor::uiEditorConfigName() ); + } } //-------------------------------------------------------------------------------------------------- @@ -961,37 +989,6 @@ RimSummaryDataSourceStepping* RimSummaryPlotSourceStepping::dataSourceSteppingOb return dynamic_cast( m_objectForSourceStepping.p() ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryPlotSourceStepping::defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) -{ - auto* myAttr = dynamic_cast( attribute ); - if ( myAttr ) - { - if ( field == &m_stepDimension ) - { - myAttr->showPreviousAndNextButtons = false; - } - else - { - RiuTools::enableUpDownArrowsForComboBox( attribute ); - - QString nextText = RimSummaryPlotControls::nextStepKeyText(); - QString prevText = RimSummaryPlotControls::prevStepKeyText(); - myAttr->nextButtonText = "Next (" + nextText + ")"; - myAttr->prevButtonText = "Previous (" + prevText + ")"; - } - } - - if ( myAttr && ( uiConfigName == caf::PdmUiToolBarEditor::uiEditorConfigName() ) ) - { - myAttr->minimumWidth = 120; - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h index 033f72aa61..bdf4d7b0d1 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h @@ -79,8 +79,6 @@ 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; - private: caf::PdmValueField* fieldToModify(); diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.cpp index c6466b2ea9..3f8d846dad 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.cpp @@ -32,6 +32,7 @@ #include "RimTimeAxisAnnotation.h" #include "cafPdmUiDateEditor.h" +#include "cafPdmUiDoubleSliderEditor.h" #include "cafPdmUiLineEditor.h" #include "cafPdmUiSliderEditor.h" #include "cafPdmUiSliderTools.h" @@ -118,9 +119,15 @@ RimSummaryRegressionAnalysisCurve::RimSummaryRegressionAnalysisCurve() CAF_PDM_InitFieldNoDefault( &m_timeRangeSelection, "TimeRangeSelection", "Time Range" ); CAF_PDM_InitFieldNoDefault( &m_minTimeSliderPosition, "MinTimeSliderPosition", "From" ); m_minTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_minTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); CAF_PDM_InitFieldNoDefault( &m_maxTimeSliderPosition, "MaxTimeSliderPosition", "To" ); m_maxTimeSliderPosition.uiCapability()->setUiEditorTypeName( caf::PdmUiSliderEditor::uiEditorTypeName() ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MINIMUM, 0 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::MAXIMUM, 100 ); + m_maxTimeSliderPosition.uiCapability()->setAttribute( caf::PdmUiSliderEditor::Keys::SHOW_SPIN_BOX, false ); CAF_PDM_InitField( &m_showTimeSelectionInPlot, "ShowTimeSelectionInPlot", false, "Show In Plot" ); @@ -129,14 +136,20 @@ RimSummaryRegressionAnalysisCurve::RimSummaryRegressionAnalysisCurve() m_expressionText.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); m_expressionText.uiCapability()->setUiReadOnly( true ); m_expressionText.xmlCapability()->disableIO(); + m_expressionText.uiCapability()->setAttribute( caf::PdmUiTextEditor::Keys::WRAP_MODE, static_cast( caf::PdmUiTextEditor::NoWrap ) ); + m_expressionText.uiCapability()->setAttribute( caf::PdmUiTextEditor::Keys::TEXT_MODE, static_cast( caf::PdmUiTextEditor::HTML ) ); CAF_PDM_InitFieldNoDefault( &m_xRangeSelection, "XRangeSelection", "X Value Range" ); CAF_PDM_InitField( &m_valueRangeX, "ValueRangeX", std::make_pair( 0.0, 0.0 ), "Value Range X" ); m_valueRangeX.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + m_valueRangeX.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::DECIMALS, 2 ); + m_valueRangeX.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::SLIDER_TICK_COUNT, 100 ); CAF_PDM_InitFieldNoDefault( &m_yRangeSelection, "YRangeSelection", "Y Value Range" ); CAF_PDM_InitField( &m_valueRangeY, "ValueRangeY", std::make_pair( 0.0, 0.0 ), "Value Range Y" ); m_valueRangeY.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + m_valueRangeY.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::DECIMALS, 2 ); + m_valueRangeY.uiCapability()->setAttribute( caf::PdmUiDoubleSliderEditor::Keys::SLIDER_TICK_COUNT, 100 ); } //-------------------------------------------------------------------------------------------------- @@ -468,6 +481,12 @@ void RimSummaryRegressionAnalysisCurve::defineUiOrdering( QString uiConfigName, regressionCurveGroup->add( &m_expressionText ); + { + QFont font; + font.setPointSize( font.pointSize() + 2 ); + m_expressionText.uiCapability()->setAttribute( caf::PdmUiTextEditor::Keys::FONT, font ); + } + caf::PdmUiGroup* valueRangeYGroup = uiOrdering.addNewGroup( "Value Range Y" ); valueRangeYGroup->add( &m_yRangeSelection ); if ( m_yRangeSelection() == RangeType::USER_DEFINED_RANGE ) @@ -475,6 +494,20 @@ void RimSummaryRegressionAnalysisCurve::defineUiOrdering( QString uiConfigName, valueRangeYGroup->add( &m_valueRangeY ); } + auto setValueRangeLimits = []( auto& field, const std::vector& values ) + { + if ( values.empty() ) + { + caf::PdmUiDoubleSliderEditor::clearRange( field.uiCapability() ); + return; + } + + auto [minIt, maxIt] = std::minmax_element( values.begin(), values.end() ); + caf::PdmUiDoubleSliderEditor::setRange( field.uiCapability(), *minIt, *maxIt ); + }; + setValueRangeLimits( m_valueRangeX, m_sourceValuesX ); + setValueRangeLimits( m_valueRangeY, m_sourceValuesY ); + if ( axisTypeX() == RiaDefines::HorizontalAxisType::SUMMARY_VECTOR ) { caf::PdmUiGroup* valueRangeXGroup = uiOrdering.addNewGroup( "Value Range X" ); @@ -544,70 +577,6 @@ void RimSummaryRegressionAnalysisCurve::fieldChangedByUi( const caf::PdmFieldHan if ( plot ) plot->zoomAll(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryRegressionAnalysisCurve::defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) -{ - RimSummaryCurve::defineEditorAttribute( field, uiConfigName, attribute ); - - if ( field == &m_minTimeSliderPosition || field == &m_maxTimeSliderPosition ) - { - if ( auto* myAttr = dynamic_cast( attribute ) ) - { - myAttr->m_minimum = 0; - myAttr->m_maximum = 100; - myAttr->m_showSpinBox = false; - } - } - else if ( field == &m_expressionText ) - { - auto myAttr = dynamic_cast( attribute ); - if ( myAttr ) - { - myAttr->wrapMode = caf::PdmUiTextEditorAttribute::NoWrap; - myAttr->textMode = caf::PdmUiTextEditorAttribute::HTML; - - QFont font; - auto pointSize = font.pointSize(); - font.setPointSize( pointSize + 2 ); - myAttr->font = font; - } - } - else if ( field == &m_valueRangeX ) - { - if ( auto attr = dynamic_cast( attribute ) ) - { - attr->m_decimals = 2; - attr->m_sliderTickCount = 100; - - auto values = m_sourceValuesX; - if ( !values.empty() ) - { - attr->m_minimum = *std::min_element( values.begin(), values.end() ); - attr->m_maximum = *std::max_element( values.begin(), values.end() ); - } - } - } - else if ( field == &m_valueRangeY ) - { - if ( auto attr = dynamic_cast( attribute ) ) - { - attr->m_decimals = 2; - attr->m_sliderTickCount = 100; - - auto values = m_sourceValuesY; - if ( !values.empty() ) - { - attr->m_minimum = *std::min_element( values.begin(), values.end() ); - attr->m_maximum = *std::max_element( values.begin(), values.end() ); - } - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.h index 3e12eaeb9c..2bf5dc7d9b 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryRegressionAnalysisCurve.h @@ -109,7 +109,6 @@ private: // Overridden PDM methods void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; std::tuple, std::vector, QString> computeRegressionCurve( const std::vector& timeSteps, diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.cpp index 4db15617f2..5076e8493a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.cpp @@ -118,6 +118,22 @@ RimSummaryTable::RimSummaryTable() CAF_PDM_InitField( &m_startDate, "StartDate", QDateTime::currentDateTime(), "Start Date" ); CAF_PDM_InitField( &m_endDate, "EndDate", QDateTime::currentDateTime(), "End Date" ); + const auto dateFormatCallback = [this]() -> QString + { + if ( m_resamplingSelection() == RiaDefines::DateTimePeriod::DECADE || m_resamplingSelection() == RiaDefines::DateTimePeriod::YEAR ) + { + return "yyyy"; + } + if ( m_resamplingSelection() == RiaDefines::DateTimePeriod::MONTH || m_resamplingSelection() == RiaDefines::DateTimePeriod::QUARTER || + m_resamplingSelection() == RiaDefines::DateTimePeriod::HALFYEAR ) + { + return "yyyy-MM"; + } + return "yyyy-MM-dd"; + }; + m_startDate.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); + m_endDate.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); + setLegendsVisible( true ); dockAsPlotWindow(); setShowWindow( true ); @@ -361,32 +377,6 @@ void RimSummaryTable::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering uiOrdering.skipRemainingFields( true ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryTable::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_startDate || field == &m_endDate ) - { - if ( auto myAttr = dynamic_cast( attribute ) ) - { - QString dateFormat = "yyyy-MM-dd"; - if ( m_resamplingSelection() == RiaDefines::DateTimePeriod::DECADE || m_resamplingSelection() == RiaDefines::DateTimePeriod::YEAR ) - { - dateFormat = "yyyy"; - } - else if ( m_resamplingSelection() == RiaDefines::DateTimePeriod::MONTH || - m_resamplingSelection() == RiaDefines::DateTimePeriod::QUARTER || - m_resamplingSelection() == RiaDefines::DateTimePeriod::HALFYEAR ) - { - dateFormat = "yyyy-MM"; - } - - myAttr->dateFormat = dateFormat; - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.h index 3ed195b410..38fb43f907 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTable.h @@ -72,7 +72,6 @@ private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp index deee256289..c2a14ad16f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.cpp @@ -32,6 +32,7 @@ #include "cafPdmUiLineEditor.h" #include "cafPdmUiTimeEditor.h" #include "cafPdmUiTreeAttributes.h" +#include "cafPdmUiTreeViewEditor.h" #include "cafAssert.h" #include "cafCmdFeatureMenuBuilder.h" @@ -91,6 +92,9 @@ CAF_PDM_SOURCE_INIT( RimSummaryTimeAxisProperties, "SummaryTimeAxisProperties" ) RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties() : requestLoadDataAndUpdate( this ) { + uiCapability()->setAttribute( caf::PdmUiTreeViewEditor::Keys::TREE_ITEM_TAGS, + [this]() { return treeItemTags(); } ); + CAF_PDM_InitObject( "Time Axis", ":/BottomAxis16x16.png" ); CAF_PDM_InitField( &m_isActive, "Active", true, "Active" ); @@ -109,13 +113,23 @@ RimSummaryTimeAxisProperties::RimSummaryTimeAxisProperties() CAF_PDM_InitFieldNoDefault( &m_visibleDateRangeMin, "VisibleDateRangeMin", "Min Date" ); m_visibleDateRangeMin.uiCapability()->setUiEditorTypeName( caf::PdmUiDateEditor::uiEditorTypeName() ); + const auto dateFormatCallback = [this]() + { return RiaQDateTimeTools::dateFormatString( m_dateFormat(), RiaDefines::DateFormatComponents::DATE_FORMAT_YEAR_MONTH_DAY ); }; + m_visibleDateRangeMax.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); + m_visibleDateRangeMin.uiCapability()->setAttribute>( caf::PdmUiDateEditor::Keys::DATE_FORMAT, dateFormatCallback ); + CAF_PDM_InitFieldNoDefault( &m_visibleTimeRangeMax, "VisibleTimeRangeMax", "MaxTime" ); m_visibleTimeRangeMax.uiCapability()->setUiEditorTypeName( caf::PdmUiTimeEditor::uiEditorTypeName() ); m_visibleTimeRangeMax.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + const auto timeFormatCallback = [this]() + { return RiaQDateTimeTools::timeFormatString( m_timeFormat(), RiaDefines::TimeFormatComponents::TIME_FORMAT_HOUR_MINUTE_SECOND ); }; + m_visibleTimeRangeMax.uiCapability()->setAttribute>( caf::PdmUiTimeEditor::Keys::TIME_FORMAT, timeFormatCallback ); + CAF_PDM_InitFieldNoDefault( &m_visibleTimeRangeMin, "VisibleTimeRangeMin", "Min Time" ); m_visibleTimeRangeMin.uiCapability()->setUiEditorTypeName( caf::PdmUiTimeEditor::uiEditorTypeName() ); m_visibleTimeRangeMin.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosition::HIDDEN ); + m_visibleTimeRangeMin.uiCapability()->setAttribute>( caf::PdmUiTimeEditor::Keys::TIME_FORMAT, timeFormatCallback ); CAF_PDM_InitFieldNoDefault( &m_visibleTimeSinceStartRangeMax, "VisibleTimeModeRangeMax", "Max" ); m_visibleTimeSinceStartRangeMax.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() ); @@ -231,33 +245,32 @@ void RimSummaryTimeAxisProperties::appendMenuItems( caf::CmdFeatureMenuBuilder& //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryTimeAxisProperties::defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) +std::vector RimSummaryTimeAxisProperties::treeItemTags() { - auto* treeItemAttribute = dynamic_cast( attribute ); - if ( !treeItemAttribute ) return; - - treeItemAttribute->tags.clear(); + std::vector tags; auto summaryMultiPlot = firstAncestorOfType(); if ( summaryMultiPlot && summaryMultiPlot->isTimeAxisLinked() ) { - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->icon = caf::IconProvider( ":/SharedAxis.svg" ); + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.icon = caf::IconProvider( ":/SharedAxis.svg" ); - treeItemAttribute->tags.push_back( std::move( tag ) ); + tags.push_back( tag ); } if ( isRangeUserDefined() ) { // Indicate that the axis range is fixed by the user, and will not be updated by auto-zoom. // Clicking the tag releases the user-defined range, so the axis follows the data again. - auto tag = caf::PdmUiTreeViewItemAttribute::createTag(); - tag->icon = caf::IconProvider( ":/PinnedAxisRange.svg" ); + auto tag = caf::PdmUiTreeViewItemTag::create(); + tag.icon = caf::IconProvider( ":/PinnedAxisRange.svg" ); - tag->clicked.connect( this, &RimSummaryTimeAxisProperties::onPinnedTagClicked ); + tag.clicked = [this]( size_t index ) { this->onPinnedTagClicked( nullptr, index ); }; - treeItemAttribute->tags.push_back( std::move( tag ) ); + tags.push_back( tag ); } + + return tags; } //-------------------------------------------------------------------------------------------------- @@ -1039,30 +1052,3 @@ void RimSummaryTimeAxisProperties::fieldChangedByUi( const caf::PdmFieldHandle* settingsChanged.send(); } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimSummaryTimeAxisProperties::defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_visibleDateRangeMin || field == &m_visibleDateRangeMax ) - { - auto dateAttrib = dynamic_cast( attribute ); - if ( dateAttrib ) - { - dateAttrib->dateFormat = - RiaQDateTimeTools::dateFormatString( m_dateFormat(), RiaDefines::DateFormatComponents::DATE_FORMAT_YEAR_MONTH_DAY ); - } - } - else if ( field == &m_visibleTimeRangeMin || field == &m_visibleTimeRangeMax ) - { - auto timeAttrib = dynamic_cast( attribute ); - if ( timeAttrib ) - { - timeAttrib->timeFormat = - RiaQDateTimeTools::timeFormatString( m_timeFormat(), RiaDefines::TimeFormatComponents::TIME_FORMAT_HOUR_MINUTE_SECOND ); - } - } -} diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h index 728339cc6e..ffcce09516 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryTimeAxisProperties.h @@ -19,6 +19,7 @@ #pragma once #include "RiaDateTimeDefines.h" +#include "cafPdmUiTreeAttributes.h" #include "Appearance/RimFontSizeField.h" #include "RimPlotAxisPropertiesInterface.h" @@ -163,7 +164,6 @@ protected: QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; caf::PdmFieldHandle* objectToggleField() override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; double fromDateToDisplayTime( const QDateTime& displayTime ); QDateTime fromDisplayTimeToDate( double displayTime ); @@ -172,8 +172,8 @@ protected: caf::FontTools::FontSize plotFontSize() const; private: - void defineObjectEditorAttribute( QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void onPinnedTagClicked( const caf::SignalEmitter* emitter, size_t index ); + std::vector treeItemTags(); + void onPinnedTagClicked( const caf::SignalEmitter* emitter, size_t index ); private: caf::PdmField m_title;