# HG changeset patch # User Sebastien Jodogne # Date 1541511696 -3600 # Node ID 2308fe0b0b058c5e42bba7fd5dcf388552a340bd # Parent 814fa32e2fccf07fe938b9b1b4384288713bb1d6 refactoring diff -r 814fa32e2fcc -r 2308fe0b0b05 Framework/Layers/ILayerSource.h --- a/Framework/Layers/ILayerSource.h Tue Nov 06 14:21:02 2018 +0100 +++ b/Framework/Layers/ILayerSource.h Tue Nov 06 14:41:36 2018 +0100 @@ -33,37 +33,69 @@ class ILayerSource : public IObservable { public: - - typedef OriginMessage GeometryReadyMessage; - typedef OriginMessage GeometryErrorMessage; + typedef OriginMessage GeometryReadyMessage; + typedef OriginMessage GeometryErrorMessage; typedef OriginMessage ContentChangedMessage; - struct SliceChangedMessage : public OriginMessage + class SliceChangedMessage : public OriginMessage { + private: const Slice& slice_; - SliceChangedMessage(ILayerSource& origin, const Slice& slice) - : OriginMessage(origin), - slice_(slice) + + public: + SliceChangedMessage(ILayerSource& origin, + const Slice& slice) : + OriginMessage(origin), + slice_(slice) { } - }; - struct LayerReadyMessage : public OriginMessage + const Slice& GetSlice() const + { + return slice_; + } + }; + + + class LayerReadyMessage : public OriginMessage { - std::auto_ptr& renderer_; + private: + std::auto_ptr renderer_; const CoordinateSystem3D& slice_; bool isError_; + public: LayerReadyMessage(ILayerSource& origin, - std::auto_ptr& layer, + ILayerRenderer* renderer, // Takes ownership => TODO Remove this! const CoordinateSystem3D& slice, - bool isError // TODO Shouldn't this be separate as NotifyLayerError? - ) - : OriginMessage(origin), - renderer_(layer), - slice_(slice), - isError_(isError) + bool isError // TODO => create NotifyLayerError + ) : + OriginMessage(origin), + renderer_(renderer), + slice_(slice), + isError_(isError) + { + } + + // TODO - Remove this function + std::auto_ptr& GetRendererRaw() { + return renderer_; + } + + const ILayerRenderer& GetRenderer() const + { + return *renderer_; + } + + const CoordinateSystem3D& GetSlice() const + { + return slice_; + } + + bool IsError() const + { + return isError_; } }; diff -r 814fa32e2fcc -r 2308fe0b0b05 Framework/Layers/LayerSourceBase.cpp --- a/Framework/Layers/LayerSourceBase.cpp Tue Nov 06 14:21:02 2018 +0100 +++ b/Framework/Layers/LayerSourceBase.cpp Tue Nov 06 14:41:36 2018 +0100 @@ -49,8 +49,7 @@ const CoordinateSystem3D& slice, bool isError) { - std::auto_ptr renderer(layer); - EmitMessage(ILayerSource::LayerReadyMessage(*this, renderer, slice, isError)); + EmitMessage(ILayerSource::LayerReadyMessage(*this, layer, slice, isError)); } void LayerSourceBase::NotifyImageReady(const Orthanc::ImageAccessor& image, @@ -59,5 +58,4 @@ { EmitMessage(ILayerSource::ImageReadyMessage(*this, image, imageQuality, slice)); } - } diff -r 814fa32e2fcc -r 2308fe0b0b05 Framework/Widgets/LayerWidget.cpp --- a/Framework/Widgets/LayerWidget.cpp Tue Nov 06 14:21:02 2018 +0100 +++ b/Framework/Widgets/LayerWidget.cpp Tue Nov 06 14:41:36 2018 +0100 @@ -562,13 +562,14 @@ { InvalidateLayer(index); } + EmitMessage(LayerWidget::ContentChangedMessage(*this)); } void LayerWidget::OnSliceChanged(const ILayerSource::SliceChangedMessage& message) { - if (message.slice_.ContainsPlane(slice_)) + if (message.GetSlice().ContainsPlane(slice_)) { size_t index; if (LookupLayer(index, message.GetOrigin())) @@ -576,6 +577,7 @@ InvalidateLayer(index); } } + EmitMessage(LayerWidget::ContentChangedMessage(*this)); } @@ -585,7 +587,7 @@ size_t index; if (LookupLayer(index, message.GetOrigin())) { - if (message.isError_) + if (message.IsError()) { LOG(ERROR) << "Using error renderer on layer " << index; } @@ -594,11 +596,14 @@ LOG(INFO) << "Renderer ready for layer " << index; } - if (message.renderer_.get() != NULL) + // TODO -- REMOVE THIS UGLY STUFF + ILayerSource::LayerReadyMessage& ugly = const_cast(message); + + if (ugly.GetRendererRaw().get() != NULL) { - UpdateLayer(index, message.renderer_.release(), message.slice_); + UpdateLayer(index, ugly.GetRendererRaw().release(), message.GetSlice()); } - else if (message.isError_) + else if (message.IsError()) { // TODO //UpdateLayer(index, new SliceOutlineRenderer(slice), slice);