diff --git a/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteFeatureImpl.cpp b/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteFeatureImpl.cpp index 084289e93a..8158773080 100644 --- a/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteFeatureImpl.cpp +++ b/ApplicationCode/Commands/OperationsUsingObjReferences/RicPasteFeatureImpl.cpp @@ -99,7 +99,7 @@ RimIdenticalGridCaseGroup* RicPasteFeatureImpl::findGridCaseGroup(PdmObjectHandl dynamic_cast(objectHandle)) { RimIdenticalGridCaseGroup* gridCaseGroup = NULL; - objectHandle->firstAncestorOfType(gridCaseGroup); + objectHandle->firstAnchestorOrThisOfType(gridCaseGroup); return gridCaseGroup; } diff --git a/ApplicationCode/Commands/RicRangeFilterHelper.cpp b/ApplicationCode/Commands/RicRangeFilterHelper.cpp index f4dbb8baf2..44e4f10ebb 100644 --- a/ApplicationCode/Commands/RicRangeFilterHelper.cpp +++ b/ApplicationCode/Commands/RicRangeFilterHelper.cpp @@ -66,7 +66,7 @@ RimCellRangeFilterCollection* RicRangeFilterHelper::findRangeFilterCollection() } else if (selectedRangeFilter.size() > 0) { - selectedRangeFilter[0]->firstAncestorOfType(rangeFilterCollection); + selectedRangeFilter[0]->firstAnchestorOrThisOfType(rangeFilterCollection); } assert(rangeFilterCollection); diff --git a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp index f535f3b4de..c3d7c2b900 100644 --- a/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimCellRangeFilterCollection.cpp @@ -50,7 +50,7 @@ public: caf::PdmObjectHandle* objHandle = uiFieldHandle->fieldHandle()->ownerObject(); RimView* view = NULL; - objHandle->firstAncestorOfType(view); + objHandle->firstAnchestorOrThisOfType(view); CVF_ASSERT(view); view->scheduleGeometryRegen(RANGE_FILTERED); diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp index 7d0134d400..ad0296f719 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp @@ -44,7 +44,7 @@ public: caf::PdmObjectHandle* objHandle = uiFieldHandle->fieldHandle()->ownerObject(); RimEclipseView* view = NULL; - objHandle->firstAncestorOfType(view); + objHandle->firstAnchestorOrThisOfType(view); CVF_ASSERT(view); view->scheduleGeometryRegen(PROPERTY_FILTERED); @@ -115,7 +115,7 @@ void RimEclipsePropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHan this->updateUiIconFromToggleField(); RimEclipseView* view = NULL; - this->firstAncestorOfType(view); + this->firstAnchestorOrThisOfType(view); CVF_ASSERT(view); view->scheduleGeometryRegen(PROPERTY_FILTERED); diff --git a/ApplicationCode/ProjectDataModel/RimFault.cpp b/ApplicationCode/ProjectDataModel/RimFault.cpp index 9b6d40fd1a..7fcdfd47dc 100644 --- a/ApplicationCode/ProjectDataModel/RimFault.cpp +++ b/ApplicationCode/ProjectDataModel/RimFault.cpp @@ -70,7 +70,7 @@ void RimFault::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const Q { RimEclipseView* reservoirView = NULL; - this->firstAncestorOfType(reservoirView); + this->firstAnchestorOrThisOfType(reservoirView); if (reservoirView) { diff --git a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp index 2f6d0313d8..371f70ca37 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp @@ -1528,7 +1528,7 @@ double RimReservoirCellResultsStorage::darchysValue() double darchy = 0.008527; // (ECLIPSE 100) (METRIC) RimEclipseCase* rimCase = NULL; - this->firstAncestorOfType(rimCase); + this->firstAnchestorOrThisOfType(rimCase); if (rimCase && rimCase->reservoirData()) { diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index d39fec5d62..e76550da6a 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -1636,7 +1636,7 @@ void RiuMainWindow::selectedObjectsChanged() RimView* selectedReservoirView = dynamic_cast(firstSelectedObject); if (!selectedReservoirView && firstSelectedObject) { - firstSelectedObject->firstAncestorOfType(selectedReservoirView); + firstSelectedObject->firstAnchestorOrThisOfType(selectedReservoirView); } // If current selection is an item within a different reservoir view than active, diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmObjectHandle.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmObjectHandle.h index f8bc217ca5..2a13a19ce1 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmObjectHandle.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmCore/cafPdmObjectHandle.h @@ -32,7 +32,7 @@ public: PdmFieldHandle* parentField() const; /// Convenience function. Traverses from parent to parents parent to find first object of the requested type. template - void firstAncestorOfType(T*& ancestor) const; + void firstAnchestorOrThisOfType(T*& ancestor) const; // PtrReferences /// The PdmPtrField's containing pointers to this PdmObjecthandle @@ -101,8 +101,19 @@ namespace caf /// //-------------------------------------------------------------------------------------------------- template -void PdmObjectHandle::firstAncestorOfType(T*& ancestor) const +void PdmObjectHandle::firstAnchestorOrThisOfType(T*& ancestor) const { + // Check if this matches the type + + const T* objectOfType = dynamic_cast(this); + if (objectOfType) + { + ancestor = const_cast(objectOfType); + return; + } + + // Search anchestors + PdmObjectHandle* parent = NULL; PdmFieldHandle* parentField = this->parentField(); if (parentField) parent = parentField->ownerObject();