From d138770a2af5a2dd90f4db15b4d1870d2541f195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Tue, 27 Nov 2018 15:43:44 +0100 Subject: [PATCH] 3767 Annotations. Feature for deleting annotations --- .../RicCreateReachCircleAnnotationFeature.cpp | 2 +- .../RicCreateReachCircleAnnotationFeature.h | 2 +- .../RicCreateTextAnnotationFeature.cpp | 2 +- .../RicCreateTextAnnotationFeature.h | 2 +- ...eUserDefinedPolylinesAnnotationFeature.cpp | 2 +- ...ateUserDefinedPolylinesAnnotationFeature.h | 2 +- .../RicDeleteAnnotationFeature.cpp | 94 +++++++++++++++++++ .../Commands/RicDeleteItemExec.cpp | 20 ++++ .../Commands/RicDeleteItemFeature.cpp | 6 +- .../Annotations/RimAnnotationCollection.cpp | 16 ++++ .../Annotations/RimAnnotationCollection.h | 4 +- .../RimAnnotationInViewCollection.cpp | 17 ++++ .../RimAnnotationInViewCollection.h | 1 + 13 files changed, 161 insertions(+), 9 deletions(-) create mode 100644 ApplicationCode/Commands/AnnotationCommands/RicDeleteAnnotationFeature.cpp diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp index 188609880d..d082b8175a 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.h b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.h index c17064cdb6..5c874c593f 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.h +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.cpp index 716aa82cf3..2b0fd9c748 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.h b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.h index afac3f00fe..d98329db37 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.h +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationFeature.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp index 5fd6c0e6b3..5bee9c21f1 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.h b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.h index 577e3a0df9..8ab0abd747 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.h +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2018- equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/ApplicationCode/Commands/AnnotationCommands/RicDeleteAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicDeleteAnnotationFeature.cpp new file mode 100644 index 0000000000..15a1793305 --- /dev/null +++ b/ApplicationCode/Commands/AnnotationCommands/RicDeleteAnnotationFeature.cpp @@ -0,0 +1,94 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RicDeleteAnnotationFeature.h" + +#include "RiaApplication.h" + +#include "RimTextAnnotation.h" +#include "RimReachCircleAnnotation.h" +#include "RimPolylinesAnnotation.h" +#include "RimAnnotationCollection.h" +#include "RimAnnotationInViewCollection.h" +#include "RimProject.h" +#include "RimOilField.h" + +#include "RiuMainWindow.h" + +#include + +#include + + +CAF_CMD_SOURCE_INIT(RicDeleteAnnotationFeature, "RicDeleteAnnotationFeature"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicDeleteAnnotationFeature::isCommandEnabled() +{ + auto textAnnots = caf::selectedObjectsByTypeStrict(); + auto lineBasedAnnots = caf::selectedObjectsByTypeStrict(); + + return !textAnnots.empty() || !lineBasedAnnots.empty(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicDeleteAnnotationFeature::onActionTriggered(bool isChecked) +{ + { + auto annotations = caf::selectedObjectsByTypeStrict(); + while(!annotations.empty()) + { + auto annotation = annotations.front(); + + RimAnnotationCollection* coll; + annotation->firstAncestorOrThisOfType(coll); + if (coll) + { + coll->addAnnotation() + } + + coll->addAnnotation(newAnnotation); + coll->updateConnectedEditors(); + RiuMainWindow::instance()->selectAsCurrentItem(newAnnotation); + } + } + + { + auto coll = annotationInViewCollection(); + if (coll) + { + auto newAnnotation = new RimTextAnnotation(); + coll->addAnnotation(newAnnotation); + coll->updateConnectedEditors(); + RiuMainWindow::instance()->selectAsCurrentItem(newAnnotation); + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicDeleteAnnotationFeature::setupActionLook(QAction* actionToSetup) +{ + actionToSetup->setIcon(QIcon(":/minus-sign-red.png")); + actionToSetup->setText("Delete Annotation"); +} diff --git a/ApplicationCode/Commands/RicDeleteItemExec.cpp b/ApplicationCode/Commands/RicDeleteItemExec.cpp index 9c16e4f55f..6992b69020 100644 --- a/ApplicationCode/Commands/RicDeleteItemExec.cpp +++ b/ApplicationCode/Commands/RicDeleteItemExec.cpp @@ -24,6 +24,8 @@ #include "RiaApplication.h" #include "Rim3dView.h" +#include "RimAnnotationCollection.h" +#include "RimAnnotationInViewCollection.h" #include "RimCase.h" #include "RimCellRangeFilterCollection.h" #include "RimEclipsePropertyFilterCollection.h" @@ -300,6 +302,24 @@ void RicDeleteItemExec::redo() ensembleCurveFilterColl->firstAncestorOrThisOfType(plot); if (plot) plot->loadDataAndUpdate(); } + + { + RimAnnotationCollection* annotationColl = nullptr; + parentObj->firstAncestorOrThisOfType(annotationColl); + if (annotationColl) + { + annotationColl->onAnnotationDeleted(); + } + } + + { + RimAnnotationInViewCollection* annotationColl = nullptr; + parentObj->firstAncestorOrThisOfType(annotationColl); + if (annotationColl) + { + annotationColl->onAnnotationDeleted(); + } + } } } diff --git a/ApplicationCode/Commands/RicDeleteItemFeature.cpp b/ApplicationCode/Commands/RicDeleteItemFeature.cpp index 911ca76857..a05ba913fe 100644 --- a/ApplicationCode/Commands/RicDeleteItemFeature.cpp +++ b/ApplicationCode/Commands/RicDeleteItemFeature.cpp @@ -53,7 +53,8 @@ #include "RimWellLogRftCurve.h" #include "RimWellRftPlot.h" #include "RimWellPathValve.h" - +#include "RimTextAnnotation.h" +#include "RimLineBasedAnnotation.h" #include "RimEllipseFractureTemplate.h" #include "RimSimWellFracture.h" #include "RimSimWellFractureCollection.h" @@ -125,7 +126,8 @@ bool isDeletable(caf::PdmUiItem* uiItem) if (dynamic_cast(uiItem)) return true; if (dynamic_cast(uiItem)) return true; if (dynamic_cast(uiItem)) return true; - + if (dynamic_cast(uiItem)) return true; + if (dynamic_cast(uiItem)) return true; return false; } diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp index d60173ea0b..46f24c11cb 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp @@ -18,6 +18,8 @@ #include "RimAnnotationCollection.h" +#include "RiaApplication.h" + #include "RimTextAnnotation.h" #include "RimReachCircleAnnotation.h" #include "RimPolylinesAnnotation.h" @@ -115,6 +117,20 @@ std::vector RimAnnotationCollection::polylinesF return m_polylineFromFileAnnotations.childObjects(); } +//-------------------------------------------------------------------------------------------------- +/// At least one annotation have been deleted. Typically by the generic delete command +//-------------------------------------------------------------------------------------------------- +void RimAnnotationCollection::onAnnotationDeleted() +{ + auto project = RiaApplication::instance()->project(); + std::vector views; + project->allVisibleGridViews(views); + for (auto& view : views) + { + if(view->annotationCollection()->isActive()) view->scheduleCreateDisplayModelAndRedraw(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.h index e7dfb33fc2..3749156a4c 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.h @@ -46,12 +46,14 @@ public: void addAnnotation(RimTextAnnotation* annotation); void addAnnotation(RimReachCircleAnnotation* annotation); void addAnnotation(RimPolylinesAnnotation* annotation); - + std::vector textAnnotations() const; std::vector reachCircleAnnotations() const; std::vector polylineAnnotations() const; std::vector polylinesFromFileAnnotations() const; + void onAnnotationDeleted(); + RimPolylinesFromFileAnnotation* importOrUpdatePolylinesFromFile(const QStringList& fileNames ); void scheduleRedrawOfRelevantViews(); std::vector gridViewsContainingAnnotations() const; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp index d3549e9e07..bdfb23c395 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp @@ -18,6 +18,9 @@ #include "RimAnnotationInViewCollection.h" +#include "RiaApplication.h" + +#include "RimProject.h" #include "RimGridView.h" #include "RimTextAnnotation.h" @@ -53,6 +56,20 @@ void RimAnnotationInViewCollection::addAnnotation(RimTextAnnotation* annotation) m_textAnnotations.push_back(annotation); } +//-------------------------------------------------------------------------------------------------- +/// At least one annotation have been deleted. Typically by the generic delete command +//-------------------------------------------------------------------------------------------------- +void RimAnnotationInViewCollection::onAnnotationDeleted() +{ + auto project = RiaApplication::instance()->project(); + std::vector views; + project->allVisibleGridViews(views); + for (auto& view : views) + { + if (view->annotationCollection()->isActive()) view->scheduleCreateDisplayModelAndRedraw(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h index 4abcf2e14c..a2eb9b9072 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h @@ -40,6 +40,7 @@ public: ~RimAnnotationInViewCollection() override; void addAnnotation(RimTextAnnotation* annotation); + void onAnnotationDeleted(); std::vector textAnnotations() const; bool isActive() const;