From 90611208c9961ba76bbd437e49fb756d46142aa9 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 15 Oct 2024 15:52:43 +0200 Subject: [PATCH] Prototype use of uiOrdering --- .../RicEclipsePropertyFilterFeatureImpl.cpp | 8 ++- .../CellFilters/RimEclipsePropertyFilter.cpp | 35 +++++++++++ .../CellFilters/RimEclipsePropertyFilter.h | 7 ++- .../RimFieldQuickAccessInterface.h | 10 +++ .../RimPinnedFieldCollection.cpp | 61 +++++++++++++------ .../RimPinnedFieldCollection.h | 2 + 6 files changed, 103 insertions(+), 20 deletions(-) diff --git a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp index c12684f88e..531854465a 100644 --- a/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp +++ b/ApplicationLibCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp @@ -26,11 +26,13 @@ #include "RimEclipsePropertyFilterCollection.h" #include "RimEclipseResultDefinition.h" #include "RimEclipseView.h" +#include "RimPinnedFieldCollection.h" #include "RimViewController.h" +#include "Riu3DMainWindowTools.h" + #include "cafSelectionManager.h" -#include "Riu3DMainWindowTools.h" #include "cvfAssert.h" //-------------------------------------------------------------------------------------------------- @@ -64,6 +66,8 @@ void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyF propertyFilterCollection->propertyFiltersField().push_back( propertyFilter ); setDefaults( propertyFilter ); + RimPinnedFieldCollection::instance()->addQuickAccessFields( propertyFilter ); + propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); @@ -82,6 +86,8 @@ void RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( RimEclipseProper propertyFilterCollection->propertyFiltersField().insertAt( static_cast( index ), propertyFilter ); setDefaults( propertyFilter ); + RimPinnedFieldCollection::instance()->addQuickAccessFields( propertyFilter ); + propertyFilterCollection->reservoirView()->scheduleGeometryRegen( PROPERTY_FILTERED ); propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp index 81d2479bfe..d71317d0d4 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.cpp @@ -247,6 +247,41 @@ void RimEclipsePropertyFilter::defineUiOrdering( QString uiConfigName, caf::PdmU updateRangeLabel(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimEclipsePropertyFilter::quickAccessFields() +{ + return {}; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilter::quickAccessUiOrdering( caf::PdmUiOrdering& uiOrdering ) +{ + auto name = "Property Filter : " + m_resultDefinition->resultVariableUiName(); + + int index = 1; + auto candidate = name; + while ( uiOrdering.findGroup( candidate ) != nullptr ) + { + candidate = name + " (" + QString::number( index++ ) + ")"; + } + + auto group = uiOrdering.addNewGroup( candidate ); + group->add( &m_lowerBound ); + group->add( &m_upperBound ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimEclipsePropertyFilter::hasUiOrdering() const +{ + return true; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h index 2027acfa72..b5f910cef1 100644 --- a/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h +++ b/ApplicationLibCode/ProjectDataModel/CellFilters/RimEclipsePropertyFilter.h @@ -20,6 +20,7 @@ #pragma once +#include "RimFieldQuickAccessInterface.h" #include "RimPropertyFilter.h" #include "cafPdmChildField.h" @@ -31,7 +32,7 @@ class RimEclipseResultDefinition; /// /// //================================================================================================== -class RimEclipsePropertyFilter : public RimPropertyFilter +class RimEclipsePropertyFilter : public RimPropertyFilter, public RimFieldQuickAccessInterface { CAF_PDM_HEADER_INIT; @@ -56,6 +57,10 @@ public: void updateUiFieldsFromActiveResult(); + std::vector quickAccessFields() override; + void quickAccessUiOrdering( caf::PdmUiOrdering& uiOrdering ) override; + bool hasUiOrdering() const override; + private: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName ) override; diff --git a/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h b/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h index e47ed429e0..e78afdaa7a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h +++ b/ApplicationLibCode/ProjectDataModel/RimFieldQuickAccessInterface.h @@ -18,8 +18,18 @@ #pragma once +#include + +namespace caf +{ +class PdmFieldHandle; +class PdmUiOrdering; +}; // namespace caf + class RimFieldQuickAccessInterface { public: virtual std::vector quickAccessFields() = 0; + virtual void quickAccessUiOrdering( caf::PdmUiOrdering& uiOrdering ){}; + virtual bool hasUiOrdering() const { return false; }; }; diff --git a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp index e210e4be8f..064f3432cf 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.cpp @@ -36,7 +36,9 @@ RimPinnedFieldCollection::RimPinnedFieldCollection() { CAF_PDM_InitObject( "Field Reference Collection" ); - CAF_PDM_InitFieldNoDefault( &m_fieldReferences, "Objects", "Objects" ); + CAF_PDM_InitFieldNoDefault( &m_fieldReferences, "FieldReferences", "Field References" ); + CAF_PDM_InitFieldNoDefault( &m_objectReferences, "ObjectReferences", "Objects With UiOrdering" ); + m_objectReferences.uiCapability()->setUiHidden( true ); } //-------------------------------------------------------------------------------------------------- @@ -56,13 +58,12 @@ RimPinnedFieldCollection* RimPinnedFieldCollection::instance() void RimPinnedFieldCollection::addQuickAccessFieldsRecursively( caf::PdmObjectHandle* object ) { if ( object == nullptr ) return; + addQuickAccessFields( object ); for ( auto field : object->fields() ) { if ( !field ) continue; - addQuickAccessFields( object ); - for ( auto childObject : field->children() ) { addQuickAccessFieldsRecursively( childObject ); @@ -84,6 +85,11 @@ void RimPinnedFieldCollection::addQuickAccessFields( caf::PdmObjectHandle* objec { addField( field ); } + + if ( quickInterface->hasUiOrdering() ) + { + m_objectReferences.push_back( object ); + } } } @@ -134,6 +140,7 @@ void RimPinnedFieldCollection::defineUiOrdering( QString uiConfigName, caf::PdmU if ( !activeView ) return; deleteMarkedObjects(); + m_objectReferences.removeChild( nullptr ); std::vector fieldsForView; @@ -156,24 +163,42 @@ void RimPinnedFieldCollection::defineUiOrdering( QString uiConfigName, caf::PdmU } } - if ( fieldsForView.empty() ) return; - - QString groupName; - auto uiCapability = activeView->uiCapability(); - if ( uiCapability->userDescriptionField() && uiCapability->userDescriptionField()->uiCapability() ) + if ( !fieldsForView.empty() ) { - groupName = uiCapability->userDescriptionField()->uiCapability()->uiValue().toString(); - } - else - { - groupName = "Group "; - } + QString groupName; + auto uiCapability = activeView->uiCapability(); + if ( uiCapability->userDescriptionField() && uiCapability->userDescriptionField()->uiCapability() ) + { + groupName = uiCapability->userDescriptionField()->uiCapability()->uiValue().toString(); + } + else + { + groupName = "Group "; + } - auto group = uiOrdering.addNewGroup( groupName ); + auto group = uiOrdering.addNewGroup( groupName ); - for ( auto fieldRef : fieldsForView ) - { - fieldRef->uiOrdering( uiConfigName, *group ); + for ( auto fieldRef : fieldsForView ) + { + fieldRef->uiOrdering( uiConfigName, *group ); + } + + auto objects = m_objectReferences.ptrReferencedObjectsByType(); + for ( auto obj : objects ) + { + if ( !obj ) continue; + + auto view = obj->firstAncestorOrThisOfType(); + if ( view != activeView ) continue; + + if ( auto qaInterface = dynamic_cast( obj ) ) + { + if ( qaInterface->hasUiOrdering() ) + { + qaInterface->quickAccessUiOrdering( *group ); + } + } + } } } diff --git a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h index ef89df610f..567e13b4dd 100644 --- a/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h +++ b/ApplicationLibCode/ProjectDataModel/RimPinnedFieldCollection.h @@ -21,6 +21,7 @@ #include "cafPdmChildArrayField.h" #include "cafPdmField.h" #include "cafPdmObject.h" +#include "cafPdmPtrArrayField.h" class RimFieldQuickAccess; @@ -50,6 +51,7 @@ private: private: caf::PdmChildArrayField m_fieldReferences; + caf::PdmPtrArrayField m_objectReferences; std::set m_toBeDeleted; };