diff Framework/Widgets/LayerWidget.cpp @ 315:aad37d0b6407 am-2

Added LayerWidget::RemoveLayer + DELETE commands in WebService
author am@osimis.io
date Fri, 05 Oct 2018 10:38:16 +0200
parents 14ef1227120f
children 3a4ca166fafa
line wrap: on
line diff
--- a/Framework/Widgets/LayerWidget.cpp	Wed Oct 03 17:14:17 2018 +0200
+++ b/Framework/Widgets/LayerWidget.cpp	Fri Oct 05 10:38:16 2018 +0200
@@ -37,7 +37,7 @@
     double                        thickness_;
     size_t                        countMissing_;
     std::vector<ILayerRenderer*>  renderers_;
-
+public:
     void DeleteLayer(size_t index)
     {
       if (index >= renderers_.size())
@@ -56,7 +56,6 @@
       }
     }
 
-  public:
     Scene(const CoordinateSystem3D& slice,
           double thickness,
           size_t countLayers) :
@@ -365,15 +364,6 @@
     IObservable(broker),
     started_(false)
   {
-//    DeclareHandledMessage(MessageType_LayerSource_GeometryReady);
-//    DeclareHandledMessage(MessageType_LayerSource_ContentChanged);
-//    DeclareHandledMessage(MessageType_LayerSource_LayerReady);
-//    DeclareHandledMessage(MessageType_LayerSource_SliceChanged);
-//    DeclareHandledMessage(MessageType_LayerSource_GeometryError);
-
-//    DeclareEmittableMessage(MessageType_Widget_GeometryChanged);
-//    DeclareEmittableMessage(MessageType_Widget_ContentChanged);
-
     SetBackgroundCleared(true);
   }
   
@@ -440,6 +430,26 @@
     InvalidateLayer(index);
   }
 
+  void LayerWidget::RemoveLayer(size_t index)
+  {
+    if (index >= layers_.size())
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+    }
+
+    ILayerSource* previousLayer = layers_[index];
+    layersIndex_.erase(layersIndex_.find(previousLayer));
+    layers_.erase(layers_.begin() + index);
+    changedLayers_.erase(changedLayers_.begin() + index);
+    styles_.erase(styles_.begin() + index);
+
+    delete layers_[index];
+
+    currentScene_->DeleteLayer(index);
+    ResetPendingScene();
+
+    NotifyContentChanged();
+  }
 
   const RenderStyle& LayerWidget::GetLayerStyle(size_t layer) const
   {