Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
502:3ae7563b4fe1 | 503:77e0eb83ff63 |
---|---|
35 public IObserver, | 35 public IObserver, |
36 public IObservable | 36 public IObservable |
37 { | 37 { |
38 public: | 38 public: |
39 class GeometryChangedMessage : | 39 class GeometryChangedMessage : |
40 public OriginMessage<MessageType_Scene_GeometryChanged, RadiographyScene> | 40 public OriginMessage<MessageType_RadiographyScene_GeometryChanged, RadiographyScene> |
41 { | 41 { |
42 private: | 42 private: |
43 RadiographyLayer& layer_; | 43 RadiographyLayer& layer_; |
44 | 44 |
45 public: | 45 public: |
55 return layer_; | 55 return layer_; |
56 } | 56 } |
57 }; | 57 }; |
58 | 58 |
59 class ContentChangedMessage : | 59 class ContentChangedMessage : |
60 public OriginMessage<MessageType_Scene_ContentChanged, RadiographyScene> | 60 public OriginMessage<MessageType_RadiographyScene_ContentChanged, RadiographyScene> |
61 { | 61 { |
62 private: | 62 private: |
63 RadiographyLayer& layer_; | 63 RadiographyLayer& layer_; |
64 | 64 |
65 public: | 65 public: |
74 { | 74 { |
75 return layer_; | 75 return layer_; |
76 } | 76 } |
77 }; | 77 }; |
78 | 78 |
79 class LayerEditedMessage : | |
80 public OriginMessage<MessageType_RadiographyScene_LayerEdited, RadiographyScene> | |
81 { | |
82 private: | |
83 const RadiographyLayer& layer_; | |
84 | |
85 public: | |
86 LayerEditedMessage(const RadiographyScene& origin, | |
87 const RadiographyLayer& layer) : | |
88 OriginMessage(origin), | |
89 layer_(layer) | |
90 { | |
91 } | |
92 | |
93 const RadiographyLayer& GetLayer() const | |
94 { | |
95 return layer_; | |
96 } | |
97 | |
98 }; | |
99 | |
100 class WindowingChangedMessage : | |
101 public OriginMessage<MessageType_RadiographyScene_WindowingChanged, RadiographyScene> | |
102 { | |
103 | |
104 public: | |
105 WindowingChangedMessage(const RadiographyScene& origin) : | |
106 OriginMessage(origin) | |
107 { | |
108 } | |
109 }; | |
79 | 110 |
80 class LayerAccessor : public boost::noncopyable | 111 class LayerAccessor : public boost::noncopyable |
81 { | 112 { |
82 private: | 113 private: |
83 RadiographyScene& scene_; | 114 RadiographyScene& scene_; |
128 | 159 |
129 void OnDicomExported(const OrthancApiClient::JsonResponseReadyMessage& message); | 160 void OnDicomExported(const OrthancApiClient::JsonResponseReadyMessage& message); |
130 | 161 |
131 void OnDicomWebReceived(const IWebService::HttpRequestSuccessMessage& message); | 162 void OnDicomWebReceived(const IWebService::HttpRequestSuccessMessage& message); |
132 | 163 |
164 void OnLayerEdited(const RadiographyLayer::LayerEditedMessage& message); | |
133 public: | 165 public: |
134 RadiographyScene(MessageBroker& broker); | 166 RadiographyScene(MessageBroker& broker); |
135 | 167 |
136 virtual ~RadiographyScene(); | 168 virtual ~RadiographyScene(); |
137 | 169 |
183 size_t count = 0; | 215 size_t count = 0; |
184 | 216 |
185 for (size_t i = 0; i < layerIndexes.size(); ++i) | 217 for (size_t i = 0; i < layerIndexes.size(); ++i) |
186 { | 218 { |
187 TypeLayer* typedLayer = dynamic_cast<TypeLayer*>(layers_[layerIndexes[i]]); | 219 TypeLayer* typedLayer = dynamic_cast<TypeLayer*>(layers_[layerIndexes[i]]); |
220 if (typedLayer != NULL) | |
221 { | |
222 if (count == index) | |
223 { | |
224 return typedLayer; | |
225 } | |
226 count++; | |
227 } | |
228 } | |
229 | |
230 return NULL; | |
231 } | |
232 | |
233 template <typename TypeLayer> | |
234 const TypeLayer* GetLayer(size_t index = 0) const | |
235 { | |
236 std::vector<size_t> layerIndexes; | |
237 GetLayersIndexes(layerIndexes); | |
238 | |
239 size_t count = 0; | |
240 | |
241 for (size_t i = 0; i < layerIndexes.size(); ++i) | |
242 { | |
243 const TypeLayer* typedLayer = dynamic_cast<const TypeLayer*>(layers_.at(layerIndexes[i])); | |
188 if (typedLayer != NULL) | 244 if (typedLayer != NULL) |
189 { | 245 { |
190 if (count == index) | 246 if (count == index) |
191 { | 247 { |
192 return typedLayer; | 248 return typedLayer; |