Mercurial > hg > orthanc-stone
diff Framework/Widgets/LayerWidget.cpp @ 300:b4abaeb783b1 am-callable-and-promise
messaging refactoring almost complete: works fine in native
author | am@osimis.io |
---|---|
date | Tue, 18 Sep 2018 15:23:21 +0200 |
parents | 3897f9f28cfa |
children | 14ef1227120f |
line wrap: on
line diff
--- a/Framework/Widgets/LayerWidget.cpp Fri Sep 14 16:44:01 2018 +0200 +++ b/Framework/Widgets/LayerWidget.cpp Tue Sep 18 15:23:21 2018 +0200 @@ -386,6 +386,15 @@ } } + void LayerWidget::ObserveLayer(ILayerSource& layer) + { + layer.RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::GeometryReadyMessage>(*this, &LayerWidget::OnGeometryReady)); + // currently ignore errors layer->RegisterObserverCallback(new Callable<LayerWidget, ILayerSource::GeometryErrorMessage>(*this, &LayerWidget::...)); + 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)); + } + size_t LayerWidget::AddLayer(ILayerSource* layer) // Takes ownership { @@ -400,7 +409,8 @@ layersIndex_[layer] = index; ResetPendingScene(); -// layer->RegisterObserver(*this); + + ObserveLayer(*layer); ResetChangedLayers(); @@ -424,7 +434,8 @@ layersIndex_[layer] = index; ResetPendingScene(); -// layer->RegisterObserver(*this); + + ObserveLayer(*layer); InvalidateLayer(index); } @@ -491,38 +502,10 @@ } } - void LayerWidget::HandleMessage(IObservable& from, const IMessage& message) - { - switch (message.GetType()) { - case MessageType_LayerSource_GeometryReady: - OnGeometryReady(dynamic_cast<const ILayerSource&>(from)); - break; - case MessageType_LayerSource_GeometryError: - LOG(ERROR) << "Cannot get geometry"; - break; - case MessageType_LayerSource_ContentChanged: - OnContentChanged(dynamic_cast<const ILayerSource&>(from)); - break; - case MessageType_LayerSource_SliceChanged: - OnSliceChanged(dynamic_cast<const ILayerSource&>(from), dynamic_cast<const ILayerSource::SliceChangedMessage&>(message).slice_); - break; - case MessageType_LayerSource_LayerReady: - { - const ILayerSource::LayerReadyMessage& layerReadyMessage = dynamic_cast<const ILayerSource::LayerReadyMessage&>(message); - OnLayerReady(layerReadyMessage.layer_, - dynamic_cast<const ILayerSource&>(from), - layerReadyMessage.slice_, - layerReadyMessage.isError_); - }; break; - default: - throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); - } - } - - void LayerWidget::OnGeometryReady(const ILayerSource& source) + void LayerWidget::OnGeometryReady(const ILayerSource::GeometryReadyMessage& message) { size_t i; - if (LookupLayer(i, source)) + if (LookupLayer(i, message.origin_)) { LOG(INFO) << ": Geometry ready for layer " << i << " in " << GetName(); @@ -558,23 +541,22 @@ } - void LayerWidget::OnContentChanged(const ILayerSource& source) + void LayerWidget::OnContentChanged(const ILayerSource::ContentChangedMessage& message) { size_t index; - if (LookupLayer(index, source)) + if (LookupLayer(index, message.origin_)) { InvalidateLayer(index); } } - void LayerWidget::OnSliceChanged(const ILayerSource& source, - const Slice& slice) + void LayerWidget::OnSliceChanged(const ILayerSource::SliceChangedMessage& message) { - if (slice.ContainsPlane(slice_)) + if (message.slice_.ContainsPlane(slice_)) { size_t index; - if (LookupLayer(index, source)) + if (LookupLayer(index, message.origin_)) { InvalidateLayer(index); } @@ -582,15 +564,12 @@ } - void LayerWidget::OnLayerReady(std::auto_ptr<ILayerRenderer>& renderer, - const ILayerSource& source, - const CoordinateSystem3D& slice, - bool isError) + void LayerWidget::OnLayerReady(const ILayerSource::LayerReadyMessage& message) { size_t index; - if (LookupLayer(index, source)) + if (LookupLayer(index, message.origin_)) { - if (isError) + if (message.isError_) { LOG(ERROR) << "Using error renderer on layer " << index; } @@ -599,11 +578,11 @@ LOG(INFO) << "Renderer ready for layer " << index; } - if (renderer.get() != NULL) + if (message.renderer_.get() != NULL) { - UpdateLayer(index, renderer.release(), slice); + UpdateLayer(index, message.renderer_.release(), message.slice_); } - else if (isError) + else if (message.isError_) { // TODO //UpdateLayer(index, new SliceOutlineRenderer(slice), slice);