diff Framework/Radiography/RadiographyWidget.cpp @ 1131:4663f158c748

RadiographyWidget is now notified when a layer is removed from the scene
author Alain Mazy <alain@mazy.be>
date Wed, 06 Nov 2019 10:46:46 +0100
parents d33ae2b0db9d
children 1a73f852810a a5f2a6b04a31
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyWidget.cpp	Mon Nov 04 22:16:33 2019 +0100
+++ b/Framework/Radiography/RadiographyWidget.cpp	Wed Nov 06 10:46:46 2019 +0100
@@ -201,6 +201,11 @@
     selectedLayer_ = layer;
   }
 
+  void RadiographyWidget::ClearSelectedLayer()
+  {
+    hasSelection_ = false;
+  }
+
   bool RadiographyWidget::SelectMaskLayer(size_t index)
   {
     std::vector<size_t> layerIndexes;
@@ -251,6 +256,14 @@
     NotifyContentChanged();
   }
 
+  void RadiographyWidget::OnLayerRemoved(const RadiographyScene::LayerRemovedMessage& message)
+  {
+    size_t removedLayerIndex = message.GetLayerIndex();
+    if (hasSelection_ && selectedLayer_ == removedLayerIndex)
+    {
+      ClearSelectedLayer();
+    }
+  }
   
   void RadiographyWidget::SetInvert(bool invert)
   {
@@ -262,7 +275,7 @@
   }
 
   
-  void RadiographyWidget::SwitchInvert()
+    void RadiographyWidget::SwitchInvert()
   {
     invert_ = !invert_;
     NotifyContentChanged();
@@ -295,6 +308,10 @@
           new Callable<RadiographyWidget, RadiographyScene::ContentChangedMessage>
           (*this, &RadiographyWidget::OnContentChanged));
 
+    scene_->RegisterObserverCallback(
+          new Callable<RadiographyWidget, RadiographyScene::LayerRemovedMessage>
+          (*this, &RadiographyWidget::OnLayerRemoved));
+
     NotifyContentChanged();
 
     // force redraw