diff --git a/ApplicationLibCode/Application/RiaApplication.cpp b/ApplicationLibCode/Application/RiaApplication.cpp index a6dc82d4c3..6305ab71e4 100644 --- a/ApplicationLibCode/Application/RiaApplication.cpp +++ b/ApplicationLibCode/Application/RiaApplication.cpp @@ -77,6 +77,7 @@ #include "RimOsduWellLogDataLoader.h" #include "RimOsduWellPath.h" #include "RimOsduWellPathDataLoader.h" +#include "RimPinnedFieldCollection.h" #include "RimPlotWindow.h" #include "RimProject.h" #include "RimScriptCollection.h" @@ -515,6 +516,9 @@ bool RiaApplication::loadProject( const QString& projectFileName, ProjectLoadAct m_project->resolveReferencesRecursively(); m_project->initAfterReadRecursively(); + // Traverse objects recursively and add quick access fields + RimPinnedFieldCollection::instance()->addQuickAccessFieldsRecursively( m_project.get() ); + // Migrate all RimGridCases to RimFileSummaryCase RimGridSummaryCase_obsolete::convertGridCasesToSummaryFileCases( m_project.get() ); diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilterCollection.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilterCollection.cpp index ba1333b91e..98108d573c 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilterCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellFilterCollection.cpp @@ -24,6 +24,7 @@ #include "RimCellIndexFilter.h" #include "RimCellRangeFilter.h" #include "RimOilField.h" +#include "RimPinnedFieldCollection.h" #include "RimPolygonFilter.h" #include "RimProject.h" #include "RimUserDefinedFilter.h" @@ -449,6 +450,9 @@ void RimCellFilterCollection::addFilter( RimCellFilter* pFilter ) { setAutoName( pFilter ); m_cellFilters.push_back( pFilter ); + + RimPinnedFieldCollection::instance()->addQuickAccessFields( pFilter ); + connectToFilterUpdates( pFilter ); updateConnectedEditors(); } diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.cpp index 1e4905cecf..fbd4c8d2c2 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.cpp @@ -23,9 +23,9 @@ #include "RiaApplication.h" #include "RigActiveCellInfo.h" #include "RigReservoirGridTools.h" + #include "Rim3dView.h" #include "RimCase.h" -#include "RimPinnedFieldCollection.h" #include "RimTools.h" #include "cafPdmUiLabelEditor.h" @@ -169,6 +169,18 @@ void RimCellRangeFilter::computeAndSetValidValues() updateIconState(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimCellRangeFilter::quickAccessFields() +{ + if ( cellCountI == 1 ) return { &startIndexI }; + if ( cellCountJ == 1 ) return { &startIndexJ }; + if ( cellCountK == 1 ) return { &startIndexK }; + + return {}; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -219,22 +231,16 @@ void RimCellRangeFilter::setDefaultValues( int sliceDirection, int defaultSlice cellCountI = 1; if ( defaultSlice > 0 ) startIndexI = defaultSlice; - RimPinnedFieldCollection::instance()->addField( &startIndexI ); - break; case 1: cellCountJ = 1; if ( defaultSlice > 0 ) startIndexJ = defaultSlice; - RimPinnedFieldCollection::instance()->addField( &startIndexJ ); - break; case 2: cellCountK = 1; if ( defaultSlice > 0 ) startIndexK = defaultSlice; - RimPinnedFieldCollection::instance()->addField( &startIndexK ); - break; default: break; diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.h index 5557169ff5..fa5f8bbcbd 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimCellRangeFilter.h @@ -21,6 +21,7 @@ #pragma once #include "RimCellFilter.h" +#include "RimFieldQuickAccessInterface.h" #include "cafPdmFieldCvfVec3d.h" @@ -39,7 +40,7 @@ class StructGridInterface; /// /// //================================================================================================== -class RimCellRangeFilter : public RimCellFilter +class RimCellRangeFilter : public RimCellFilter, public RimFieldQuickAccessInterface { CAF_PDM_HEADER_INIT; @@ -59,6 +60,8 @@ class RimCellRangeFilter : public RimCellFilter void updateCompundFilter( cvf::CellRangeFilter* cellRangeFilter, int gridIndex ) override; + std::vector quickAccessFields() override; + protected: 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; diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp index a248b9aa62..77ccc6d7a2 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseView.cpp @@ -74,7 +74,6 @@ #include "RimIntersectionResultsDefinitionCollection.h" #include "RimMultipleEclipseResults.h" #include "RimOilField.h" -#include "RimPinnedFieldCollection.h" #include "RimProject.h" #include "RimRegularLegendConfig.h" #include "RimReservoirCellResultsStorage.h" @@ -247,8 +246,6 @@ RimEclipseView::RimEclipseView() m_faultReactVizModel = new cvf::ModelBasicList; m_faultReactVizModel->setName( "FaultReactModel" ); - - RimPinnedFieldCollection::instance()->addField( &m_eclipseCase ); } //-------------------------------------------------------------------------------------------------- @@ -1759,6 +1756,14 @@ std::vector RimEclipseView::additionalResultsForResultI return m_additionalResultsForResultInfo()->additionalResultAddresses(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimEclipseView::quickAccessFields() +{ + return { &m_eclipseCase }; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseView.h b/ApplicationLibCode/ProjectDataModel/RimEclipseView.h index 71d30ffa7d..237a7bd426 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseView.h @@ -20,6 +20,9 @@ #pragma once +#include "RimFieldQuickAccessInterface.h" +#include "RimGridView.h" + #include "cafAppEnum.h" #include "cafPdmChildField.h" #include "cafPdmField.h" @@ -34,8 +37,6 @@ #include "cafPdmFieldCvfColor.h" #include "cafPdmFieldCvfMat4d.h" -#include "RimGridView.h" - class RigActiveCellInfo; class RigCaseCellResultsData; class RigGridBase; @@ -83,7 +84,7 @@ class OverlayItem; /// /// //================================================================================================== -class RimEclipseView : public RimGridView +class RimEclipseView : public RimGridView, public RimFieldQuickAccessInterface { CAF_PDM_HEADER_INIT; @@ -174,6 +175,8 @@ class RimEclipseView : public RimGridView std::vector additionalResultsForResultInfo() const; + std::vector quickAccessFields() override; + protected: void initAfterRead() override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseViewCollection.cpp index 967e0c5443..2468983913 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseViewCollection.cpp @@ -30,6 +30,7 @@ #include "RimEclipseView.h" #include "RimFaultInViewCollection.h" #include "RimGridView.h" +#include "RimPinnedFieldCollection.h" #include "RimProject.h" #include "RimStimPlanColors.h" @@ -109,6 +110,8 @@ RimEclipseView* RimEclipseViewCollection::addView( RimEclipseCase* eclipseCase ) m_views.push_back( view ); + RimPinnedFieldCollection::instance()->addQuickAccessFields( view ); + view->loadDataAndUpdate(); updateConnectedEditors(); diff --git a/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h b/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h new file mode 100644 index 0000000000..e47ed429e0 --- /dev/null +++ b/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h @@ -0,0 +1,25 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2024- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +class RimFieldQuickAccessInterface +{ +public: + virtual std::vector quickAccessFields() = 0; +}; diff --git a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp index 7fe4b18d87..e210e4be8f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp @@ -21,6 +21,7 @@ #include "RiaApplication.h" #include "RimFieldQuickAccess.h" +#include "RimFieldQuickAccessInterface.h" #include "RimGridView.h" #include "RimProject.h" @@ -49,6 +50,43 @@ RimPinnedFieldCollection* RimPinnedFieldCollection::instance() return proj->pinnedFieldCollection(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPinnedFieldCollection::addQuickAccessFieldsRecursively( caf::PdmObjectHandle* object ) +{ + if ( object == nullptr ) return; + + for ( auto field : object->fields() ) + { + if ( !field ) continue; + + addQuickAccessFields( object ); + + for ( auto childObject : field->children() ) + { + addQuickAccessFieldsRecursively( childObject ); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPinnedFieldCollection::addQuickAccessFields( caf::PdmObjectHandle* object ) +{ + if ( !object ) return; + + if ( auto quickInterface = dynamic_cast( object ) ) + { + auto fields = quickInterface->quickAccessFields(); + for ( auto field : fields ) + { + addField( field ); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h index 382b1e698a..ef89df610f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h @@ -37,6 +37,9 @@ class RimPinnedFieldCollection : public caf::PdmObject static RimPinnedFieldCollection* instance(); + void addQuickAccessFieldsRecursively( caf::PdmObjectHandle* object ); + void addQuickAccessFields( caf::PdmObjectHandle* object ); + void addField( caf::PdmFieldHandle* field ); void removeField( caf::PdmFieldHandle* field );