Mercurial > hg > orthanc-stone
diff Framework/Radiography/RadiographyScene.h @ 503:77e0eb83ff63 am-touch-events
layers are now Observable and emitting LayerEdited messages
author | amazy |
---|---|
date | Tue, 26 Feb 2019 12:58:03 +0100 |
parents | 64d90190a08c |
children | 92305ee35b1c |
line wrap: on
line diff
--- a/Framework/Radiography/RadiographyScene.h Mon Feb 25 17:57:37 2019 +0100 +++ b/Framework/Radiography/RadiographyScene.h Tue Feb 26 12:58:03 2019 +0100 @@ -37,7 +37,7 @@ { public: class GeometryChangedMessage : - public OriginMessage<MessageType_Scene_GeometryChanged, RadiographyScene> + public OriginMessage<MessageType_RadiographyScene_GeometryChanged, RadiographyScene> { private: RadiographyLayer& layer_; @@ -57,7 +57,7 @@ }; class ContentChangedMessage : - public OriginMessage<MessageType_Scene_ContentChanged, RadiographyScene> + public OriginMessage<MessageType_RadiographyScene_ContentChanged, RadiographyScene> { private: RadiographyLayer& layer_; @@ -76,6 +76,37 @@ } }; + class LayerEditedMessage : + public OriginMessage<MessageType_RadiographyScene_LayerEdited, RadiographyScene> + { + private: + const RadiographyLayer& layer_; + + public: + LayerEditedMessage(const RadiographyScene& origin, + const RadiographyLayer& layer) : + OriginMessage(origin), + layer_(layer) + { + } + + const RadiographyLayer& GetLayer() const + { + return layer_; + } + + }; + + class WindowingChangedMessage : + public OriginMessage<MessageType_RadiographyScene_WindowingChanged, RadiographyScene> + { + + public: + WindowingChangedMessage(const RadiographyScene& origin) : + OriginMessage(origin) + { + } + }; class LayerAccessor : public boost::noncopyable { @@ -130,6 +161,7 @@ void OnDicomWebReceived(const IWebService::HttpRequestSuccessMessage& message); + void OnLayerEdited(const RadiographyLayer::LayerEditedMessage& message); public: RadiographyScene(MessageBroker& broker); @@ -198,6 +230,30 @@ return NULL; } + template <typename TypeLayer> + const TypeLayer* GetLayer(size_t index = 0) const + { + std::vector<size_t> layerIndexes; + GetLayersIndexes(layerIndexes); + + size_t count = 0; + + for (size_t i = 0; i < layerIndexes.size(); ++i) + { + const TypeLayer* typedLayer = dynamic_cast<const TypeLayer*>(layers_.at(layerIndexes[i])); + if (typedLayer != NULL) + { + if (count == index) + { + return typedLayer; + } + count++; + } + } + + return NULL; + } + void GetLayersIndexes(std::vector<size_t>& output) const; Extent2D GetSceneExtent() const;