# HG changeset patch # User Benjamin Golinvaux # Date 1573220184 -3600 # Node ID 76705b430c78d4ca0a718c6164ac4b73ce007fde # Parent 7681f39437487cef1c48cc3b82f3b759fdb5d102# Parent 58799b7317fa370103bddeceda302d63ad82b794 Merge diff -r 7681f3943748 -r 76705b430c78 Framework/Deprecated/Viewport/WidgetViewport.cpp --- a/Framework/Deprecated/Viewport/WidgetViewport.cpp Fri Nov 08 14:25:35 2019 +0100 +++ b/Framework/Deprecated/Viewport/WidgetViewport.cpp Fri Nov 08 14:36:24 2019 +0100 @@ -116,7 +116,7 @@ { return false; } - + if (background.GetWidth() != surface.GetWidth() || background.GetHeight() != surface.GetHeight()) { diff -r 7681f3943748 -r 76705b430c78 Framework/Radiography/RadiographyScene.cpp --- a/Framework/Radiography/RadiographyScene.cpp Fri Nov 08 14:25:35 2019 +0100 +++ b/Framework/Radiography/RadiographyScene.cpp Fri Nov 08 14:36:24 2019 +0100 @@ -224,6 +224,8 @@ countLayers_--; LOG(INFO) << "Removing layer, there are now : " << countLayers_ << " layers"; + + BroadcastMessage(RadiographyScene::LayerRemovedMessage(*this, layerIndex)); } } diff -r 7681f3943748 -r 76705b430c78 Framework/Radiography/RadiographyScene.h --- a/Framework/Radiography/RadiographyScene.h Fri Nov 08 14:25:35 2019 +0100 +++ b/Framework/Radiography/RadiographyScene.h Fri Nov 08 14:36:24 2019 +0100 @@ -100,6 +100,27 @@ } }; + class LayerRemovedMessage : public OriginMessage + { + ORTHANC_STONE_MESSAGE(__FILE__, __LINE__); + + private: + size_t& layerIndex_; + + public: + LayerRemovedMessage(const RadiographyScene& origin, + size_t& layerIndex) : + OriginMessage(origin), + layerIndex_(layerIndex) + { + } + + size_t& GetLayerIndex() const + { + return layerIndex_; + } + }; + ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, WindowingChangedMessage, RadiographyScene); diff -r 7681f3943748 -r 76705b430c78 Framework/Radiography/RadiographyWidget.cpp --- a/Framework/Radiography/RadiographyWidget.cpp Fri Nov 08 14:25:35 2019 +0100 +++ b/Framework/Radiography/RadiographyWidget.cpp Fri Nov 08 14:36:24 2019 +0100 @@ -201,6 +201,11 @@ selectedLayer_ = layer; } + void RadiographyWidget::ClearSelectedLayer() + { + hasSelection_ = false; + } + bool RadiographyWidget::SelectMaskLayer(size_t index) { std::vector layerIndexes; @@ -251,6 +256,14 @@ NotifyContentChanged(); } + void RadiographyWidget::OnLayerRemoved(const RadiographyScene::LayerRemovedMessage& message) + { + size_t removedLayerIndex = message.GetLayerIndex(); + if (hasSelection_ && selectedLayer_ == removedLayerIndex) + { + ClearSelectedLayer(); + } + } void RadiographyWidget::SetInvert(bool invert) { @@ -262,7 +275,7 @@ } - void RadiographyWidget::SwitchInvert() + void RadiographyWidget::SwitchInvert() { invert_ = !invert_; NotifyContentChanged(); @@ -295,6 +308,10 @@ new Callable (*this, &RadiographyWidget::OnContentChanged)); + scene_->RegisterObserverCallback( + new Callable + (*this, &RadiographyWidget::OnLayerRemoved)); + NotifyContentChanged(); // force redraw diff -r 7681f3943748 -r 76705b430c78 Framework/Radiography/RadiographyWidget.h --- a/Framework/Radiography/RadiographyWidget.h Fri Nov 08 14:25:35 2019 +0100 +++ b/Framework/Radiography/RadiographyWidget.h Fri Nov 08 14:36:24 2019 +0100 @@ -78,6 +78,8 @@ void Select(size_t layer); + void ClearSelectedLayer(); + bool SelectMaskLayer(size_t index = 0); bool LookupSelectedLayer(size_t& layer); @@ -86,6 +88,8 @@ void OnContentChanged(const RadiographyScene::ContentChangedMessage& message); + void OnLayerRemoved(const RadiographyScene::LayerRemovedMessage& message); + void SetInvert(bool invert); void SwitchInvert();