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;