diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.cpp index 47af463ba8..f8473d321c 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.cpp @@ -63,25 +63,6 @@ RimPolygonCollection* RimPolygonCollection::createTopmost() return coll; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimPolygonCollection::loadData() -{ - for ( auto* sub : subCollections() ) - { - if ( !sub ) continue; - if ( auto* file = dynamic_cast( sub ) ) - { - file->loadData(); - } - else if ( auto* coll = dynamic_cast( sub ) ) - { - coll->loadData(); - } - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.h index d56a036c5d..cc07044680 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonCollection.h @@ -39,7 +39,6 @@ public: // constructor. static RimPolygonCollection* createTopmost(); - void loadData(); RimPolygon* createUserDefinedPolygon(); RimPolygon* appendUserDefinedPolygon(); void addUserDefinedPolygon( RimPolygon* polygon ); diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.cpp index 40c9417b2a..e314bb9347 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.cpp @@ -43,3 +43,14 @@ RimPolygonContainer* RimPolygonContainer::addNewSubCollection() addSubCollection( sub ); return sub; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolygonContainer::loadData() +{ + for ( auto* sub : subCollections() ) + { + if ( sub ) sub->loadData(); + } +} diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.h index 83886b1985..d5b03dfa1f 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonContainer.h @@ -44,4 +44,8 @@ public: // the return type stays at RimPolygonContainer* to avoid pulling RimPolygonCollection.h into // this header (which would create an include cycle). RimPolygonContainer* addNewSubCollection() override; + + // Default behavior recurses into sub-collections. Leaf containers (e.g., file-backed) + // override to load their own data; folder containers inherit the recursion. + virtual void loadData(); }; diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.cpp index 5f2cf32e78..808e5fba7c 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.cpp @@ -140,6 +140,14 @@ QString RimPolygonFile::name() const return fileInfo.fileName(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolygonFile::canAddSubCollection() const +{ + return false; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.h index d452b453ab..abb3568c05 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonFile.h @@ -34,14 +34,14 @@ public: void setFileName( const QString& fileName ); - void loadData(); + void loadData() override; std::vector polygons() const; QString name() const; // A file is a leaf folder. Refuse to grow sub-folders inside it. - bool canAddSubCollection() const override { return false; } + bool canAddSubCollection() const override; RimPolygonContainer* addNewSubCollection() override; protected: diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp index c7e7774e66..687be4d8f6 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp @@ -82,6 +82,14 @@ RimPolygon* RimPolygonInView::polygon() const return m_polygon(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimPolygon* RimPolygonInView::sourceItem() const +{ + return polygon(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h index 002c2c3f5f..ffcfbb14fd 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h @@ -52,7 +52,7 @@ public: RimPolygonInView(); RimPolygon* polygon() const; - RimPolygon* sourceItem() const { return polygon(); } + RimPolygon* sourceItem() const; void setPolygon( RimPolygon* polygon ); void updateTargetsFromPolygon(); diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcNestedCollectionBase.cpp b/ApplicationLibCode/ProjectDataModelCommands/RimcNestedCollectionBase.cpp index 34cfd6a5a2..71fea0adb5 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcNestedCollectionBase.cpp +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcNestedCollectionBase.cpp @@ -42,13 +42,13 @@ std::expected RimcNestedCollectionBase::execute( auto* coll = self(); if ( !coll || !coll->canAddSubCollection() ) { - return std::unexpected( QString( "Cannot add subfolder" ) ); + return std::unexpected( "Cannot add subfolder" ); } caf::PdmObject* added = coll->addNewSubCollection(); if ( !added ) { - return std::unexpected( QString( "Failed to add subfolder" ) ); + return std::unexpected( "Failed to add subfolder" ); } if ( auto* asNested = dynamic_cast( added ) )