diff --git a/ApplicationLibCode/Commands/RicWellMeasurementImportTools.cpp b/ApplicationLibCode/Commands/RicWellMeasurementImportTools.cpp index 5e11fc935d..afa41058fe 100644 --- a/ApplicationLibCode/Commands/RicWellMeasurementImportTools.cpp +++ b/ApplicationLibCode/Commands/RicWellMeasurementImportTools.cpp @@ -94,9 +94,11 @@ void RicWellMeasurementImportTools::importWellMeasurementsFromFiles( const QStri wellMeasurement->setValue( 0.0 ); } - wellPathCollection->measurementCollection()->appendMeasurement( wellMeasurement ); + wellPathCollection->measurementCollection()->addItem( wellMeasurement ); + wellPathCollection->measurementCollection()->addFilePath( wellMeasurement->filePath() ); lastWellMeasurement = wellMeasurement; } + wellPathCollection->measurementCollection()->updateAllCurves(); wellPathCollection->uiCapability()->updateConnectedEditors(); auto proj = RimProject::current(); diff --git a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp index 47f4f8a4f6..fb07d69c35 100644 --- a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.cpp @@ -39,9 +39,9 @@ RimWellMeasurementCollection::RimWellMeasurementCollection() { CAF_PDM_InitObject( "Well Measurements", ":/WellMeasurement16x16.png" ); - CAF_PDM_InitFieldNoDefault( &m_measurements, "Measurements", "Well Measurements" ); - m_measurements.uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() ); - m_measurements.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::TOP ); + CAF_PDM_InitFieldNoDefault( &m_items, "Measurements", "Measurements" ); + this->itemsField().uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() ); + this->itemsField().uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::TOP ); CAF_PDM_InitFieldNoDefault( &m_importedFiles, "ImportedFiles", "Imported Files" ); } @@ -53,6 +53,14 @@ RimWellMeasurementCollection::~RimWellMeasurementCollection() { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimWellMeasurementCollection::measurements() const +{ + return this->items(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -93,101 +101,6 @@ void RimWellMeasurementCollection::deleteAllEmptyCurves() } } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector RimWellMeasurementCollection::measurements() const -{ - std::vector attrs; - - for ( auto attr : m_measurements ) - { - attrs.push_back( attr.p() ); - } - return attrs; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimWellMeasurementCollection::isEmpty() const -{ - return m_measurements.empty(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::insertMeasurement( RimWellMeasurement* insertBefore, RimWellMeasurement* measurement ) -{ - size_t index = m_measurements.indexOf( insertBefore ); - if ( index < m_measurements.size() ) - m_measurements.insert( index, measurement ); - else - m_measurements.push_back( measurement ); - - addFilePath( measurement->filePath() ); - updateAllCurves(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::appendMeasurement( RimWellMeasurement* measurement ) -{ - m_measurements.push_back( measurement ); - addFilePath( measurement->filePath() ); - updateAllCurves(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::deleteMeasurement( RimWellMeasurement* measurementToDelete ) -{ - m_measurements.removeChild( measurementToDelete ); - delete measurementToDelete; - - updateAllCurves(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::deleteAllMeasurements() -{ - m_measurements.deleteChildren(); - updateAllCurves(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::defineEditorAttribute( const caf::PdmFieldHandle* field, - QString uiConfigName, - caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_measurements ) - { - auto tvAttribute = dynamic_cast( attribute ); - if ( tvAttribute ) - { - tvAttribute->resizePolicy = caf::PdmUiTableViewEditorAttribute::RESIZE_TO_FILL_CONTAINER; - tvAttribute->alwaysEnforceResizePolicy = true; - tvAttribute->minimumHeight = 300; - } - } -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) -{ - uiOrdering.add( &m_measurements ); - uiOrdering.skipRemainingFields( true ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -244,19 +157,18 @@ void RimWellMeasurementCollection::removeMeasurementsForFilePath( RimWellMeasure { // Find all measurements for this file path std::vector measurementsToRemove; - for ( auto attr : m_measurements ) + for ( auto* measurement : this->items() ) { - if ( attr->filePath() == measurementFilePath->filePath() ) + if ( measurement->filePath() == measurementFilePath->filePath() ) { - measurementsToRemove.push_back( attr ); + measurementsToRemove.push_back( measurement ); } } - // Remove then remove them without invalidating the iterator - for ( unsigned int i = 0; i < measurementsToRemove.size(); i++ ) + // Remove them without invalidating the iterator + for ( auto* measurement : measurementsToRemove ) { - m_measurements.removeChild( measurementsToRemove[i] ); - delete measurementsToRemove[i]; + this->deleteItem( measurement ); } RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews(); diff --git a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.h b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.h index 2d24314290..64b467100f 100644 --- a/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.h +++ b/ApplicationLibCode/ProjectDataModel/WellMeasurement/RimWellMeasurementCollection.h @@ -17,18 +17,19 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once -#include "cafPdmChildArrayField.h" -#include "cafPdmField.h" -#include "cafPdmObject.h" -#include "cafPdmProxyValueField.h" +#include "RimWellMeasurement.h" + +#include "cafPdmChildArrayField.h" +#include "cafPdmObjectCollection.h" + +#include -class RimWellMeasurement; class RimWellMeasurementFilePath; //================================================================================================== /// //================================================================================================== -class RimWellMeasurementCollection : public caf::PdmObject +class RimWellMeasurementCollection : public caf::PdmObjectCollection { CAF_PDM_HEADER_INIT; @@ -36,15 +37,12 @@ public: RimWellMeasurementCollection(); ~RimWellMeasurementCollection() override; + // Convenience accessor (delegates to base class items()) std::vector measurements() const; + // Domain-specific methods void updateAllCurves(); void deleteAllEmptyCurves(); - void insertMeasurement( RimWellMeasurement* insertBefore, RimWellMeasurement* measurement ); - void appendMeasurement( RimWellMeasurement* measurement ); - void deleteMeasurement( RimWellMeasurement* measurementToDelete ); - void deleteAllMeasurements(); - bool isEmpty() const; std::set importedFiles() const; @@ -53,11 +51,8 @@ public: void removeMeasurementsForFilePath( RimWellMeasurementFilePath* measurementFilePath ); protected: - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; - void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; private: - caf::PdmChildArrayField m_measurements; caf::PdmChildArrayField m_importedFiles; };