diff Framework/Widgets/LayerWidget.cpp @ 380:ba5ad93f935a

ILayerSource::LayerErrorMessage
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Nov 2018 14:59:20 +0100
parents 2308fe0b0b05
children 19bd222283ae
line wrap: on
line diff
--- a/Framework/Widgets/LayerWidget.cpp	Tue Nov 06 14:41:36 2018 +0100
+++ b/Framework/Widgets/LayerWidget.cpp	Tue Nov 06 14:59:20 2018 +0100
@@ -387,6 +387,7 @@
     layer.RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::SliceChangedMessage>(*this, &LayerWidget::OnSliceChanged));
     layer.RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::ContentChangedMessage>(*this, &LayerWidget::OnContentChanged));
     layer.RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::LayerReadyMessage>(*this, &LayerWidget::OnLayerReady));
+    layer.RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::LayerErrorMessage>(*this, &LayerWidget::OnLayerError));
   }
 
 
@@ -587,32 +588,38 @@
     size_t index;
     if (LookupLayer(index, message.GetOrigin()))
     {
-      if (message.IsError())
-      {
-        LOG(ERROR) << "Using error renderer on layer " << index;
-      }
-      else
-      {
-        LOG(INFO) << "Renderer ready for layer " << index;
-      }
+      LOG(INFO) << "Renderer ready for layer " << index;
 
       // TODO -- REMOVE THIS UGLY STUFF
       ILayerSource::LayerReadyMessage& ugly = const_cast<ILayerSource::LayerReadyMessage&>(message);
       
-      if (ugly.GetRendererRaw().get() != NULL)
-      {
-        UpdateLayer(index, ugly.GetRendererRaw().release(), message.GetSlice());
-      }
-      else if (message.IsError())
+      if (ugly.GetRendererRaw().get() == NULL)
       {
-        // TODO
-        //UpdateLayer(index, new SliceOutlineRenderer(slice), slice);
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
       }
+      
+      UpdateLayer(index, ugly.GetRendererRaw().release(), message.GetSlice());
     }
+    
     EmitMessage(LayerWidget::ContentChangedMessage(*this));
   }
 
 
+  void LayerWidget::OnLayerError(const ILayerSource::LayerErrorMessage& message)
+  {
+    size_t index;
+    if (LookupLayer(index, message.GetOrigin()))
+    {
+      LOG(ERROR) << "Using error renderer on layer " << index;
+
+      // TODO
+      //UpdateLayer(index, new SliceOutlineRenderer(slice), slice);
+
+      EmitMessage(LayerWidget::ContentChangedMessage(*this));
+    }
+  }
+
+
   void LayerWidget::ResetChangedLayers()
   {
     changedLayers_.resize(layers_.size());