From dccfe9afb363a65f0c4f27c523d49c97dcad5563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A5l=20Hagen?= Date: Wed, 1 Jul 2015 12:07:01 +0200 Subject: [PATCH] Bugfix: Correct handling of deletion of geo mech property filters --- .../ProjectDataModel/RimEclipseView.h | 2 +- .../ProjectDataModel/RimGeoMechView.h | 3 +- .../ProjectDataModel/RimUiTreeModelPdm.cpp | 42 +++++++++++++++++++ .../ProjectDataModel/RimUiTreeModelPdm.h | 7 ++-- .../ProjectDataModel/RimUiTreeView.cpp | 2 +- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.h b/ApplicationCode/ProjectDataModel/RimEclipseView.h index a5bbfee508..ec6c17bf1d 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.h @@ -103,7 +103,7 @@ public: RimReservoirCellResultsStorage* currentGridCellResults(); RigActiveCellInfo* currentActiveCellInfo(); - RimEclipseCellColors* currentFaultResultColors(); + RimEclipseCellColors* currentFaultResultColors(); void setEclipseCase(RimEclipseCase* reservoir); RimEclipseCase* eclipseCase(); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 9bd5bd6c4a..a40e5647df 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -67,8 +67,9 @@ public: bool isTimeStepDependentDataVisible(); virtual cvf::Transform* scaleTransform(); -private: virtual void scheduleGeometryRegen(RivCellSetEnum geometryType); + +private: virtual void createDisplayModel(); virtual void updateDisplayModelVisibility(); virtual void updateScaleTransform(); diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp index 7297ecc241..ccb645ba4a 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.cpp @@ -109,6 +109,48 @@ bool RimUiTreeModelPdm::deletePropertyFilter(const QModelIndex& itemIndex) return true; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimUiTreeModelPdm::deleteGeoMechPropertyFilter(const QModelIndex& itemIndex) +{ + CVF_ASSERT(itemIndex.isValid()); + + caf::PdmUiTreeItem* uiItem = getTreeItemFromIndex(itemIndex); + CVF_ASSERT(uiItem); + + RimGeoMechPropertyFilter* propertyFilter = dynamic_cast(uiItem->dataObject().p()); + CVF_ASSERT(propertyFilter); + + RimGeoMechPropertyFilterCollection* propertyFilterCollection = propertyFilter->parentContainer(); + CVF_ASSERT(propertyFilterCollection); + + bool wasFilterActive = propertyFilter->isActive(); + bool wasSomeFilterActive = propertyFilterCollection->hasActiveFilters(); + + // Remove Ui items pointing at the pdm object to delete + removeRows_special(itemIndex.row(), 1, itemIndex.parent()); // To be deleted + + propertyFilterCollection->remove(propertyFilter); + delete propertyFilter; + + // updateUiSubTree(propertyFilterCollection); // To be enabled + + if (wasFilterActive) + { + propertyFilterCollection->reservoirView()->scheduleGeometryRegen(PROPERTY_FILTERED); + } + + if (wasSomeFilterActive) + { + propertyFilterCollection->reservoirView()->createDisplayModelAndRedraw(); + } + + clearClipboard(); + + return true; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h index 43f43dc3a8..40ebdfec28 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h +++ b/ApplicationCode/ProjectDataModel/RimUiTreeModelPdm.h @@ -53,12 +53,13 @@ public: // Special edit methods bool deleteRangeFilter(const QModelIndex& itemIndex); bool deletePropertyFilter(const QModelIndex& itemIndex); + bool deleteGeoMechPropertyFilter(const QModelIndex& itemIndex); void deleteInputProperty(const QModelIndex& itemIndex); void deleteReservoir(RimEclipseCase* reservoir); void deleteAllWellPaths(const QModelIndex& itemIndex); - RimEclipsePropertyFilter* addPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); + RimEclipsePropertyFilter* addPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimGeoMechPropertyFilter* addGeoMechPropertyFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimCellRangeFilter* addRangeFilter(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); @@ -74,7 +75,7 @@ public: void addObjects(const QModelIndex& itemIndex, const caf::PdmObjectGroup& pdmObjects); void moveObjects(const QModelIndex& itemIndex, caf::PdmObjectGroup& pdmObjects); - RimEclipseStatisticsCase* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); + RimEclipseStatisticsCase* addStatisticalCalculation(const QModelIndex& itemIndex, QModelIndex& insertedModelIndex); RimIdenticalGridCaseGroup* addCaseGroup(QModelIndex& insertedModelIndex); bool deleteObjectFromPdmPointersField(const QModelIndex& itemIndex); @@ -95,7 +96,7 @@ private slots: private: void clearClipboard(); - RimEclipseCase* caseFromItemIndex(const QModelIndex& itemIndex); + RimEclipseCase* caseFromItemIndex(const QModelIndex& itemIndex); private: QFileSystemWatcher* m_scriptChangeDetector; }; diff --git a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp index 250a9d3e5a..68a0e411e7 100644 --- a/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp +++ b/ApplicationCode/ProjectDataModel/RimUiTreeView.cpp @@ -401,7 +401,7 @@ void RimUiTreeView::slotDeleteGeoMechPropertyFilter() RimUiTreeModelPdm* myModel = dynamic_cast(model()); if (myModel) { - myModel->deletePropertyFilter(currentIndex()); + myModel->deleteGeoMechPropertyFilter(currentIndex()); } }