diff Framework/Radiography/RadiographyWidget.cpp @ 1138:1a73f852810a broker

integration mainline->broker
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 07 Nov 2019 07:28:39 +0100
parents 383aa2a7d426 4663f158c748
children 8d2f1b25593c
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyWidget.cpp	Wed Nov 06 20:27:20 2019 +0100
+++ b/Framework/Radiography/RadiographyWidget.cpp	Thu Nov 07 07:28:39 2019 +0100
@@ -199,6 +199,11 @@
     selectedLayer_ = layer;
   }
 
+  void RadiographyWidget::ClearSelectedLayer()
+  {
+    hasSelection_ = false;
+  }
+
   bool RadiographyWidget::SelectMaskLayer(size_t index)
   {
     std::vector<size_t> layerIndexes;
@@ -249,6 +254,14 @@
     NotifyContentChanged();
   }
 
+  void RadiographyWidget::OnLayerRemoved(const RadiographyScene::LayerRemovedMessage& message)
+  {
+    size_t removedLayerIndex = message.GetLayerIndex();
+    if (hasSelection_ && selectedLayer_ == removedLayerIndex)
+    {
+      ClearSelectedLayer();
+    }
+  }
   
   void RadiographyWidget::SetInvert(bool invert)
   {
@@ -260,7 +273,7 @@
   }
 
   
-  void RadiographyWidget::SwitchInvert()
+    void RadiographyWidget::SwitchInvert()
   {
     invert_ = !invert_;
     NotifyContentChanged();
@@ -283,6 +296,10 @@
     Register<RadiographyScene::GeometryChangedMessage>(*scene_, &RadiographyWidget::OnGeometryChanged);
     Register<RadiographyScene::ContentChangedMessage>(*scene_, &RadiographyWidget::OnContentChanged);
 
+    scene_->RegisterObserverCallback(
+          new Callable<RadiographyWidget, RadiographyScene::LayerRemovedMessage>
+          (*this, &RadiographyWidget::OnLayerRemoved));
+
     NotifyContentChanged();
 
     // force redraw