Mercurial > hg > orthanc-stone
comparison Framework/Layers/OrthancFrameLayerSource.cpp @ 299:3897f9f28cfa am-callable-and-promise
backup work in progress: updated messaging framework with ICallable
author | am@osimis.io |
---|---|
date | Fri, 14 Sep 2018 16:44:01 +0200 |
parents | 5bd4161bf11b |
children | b4abaeb783b1 |
comparison
equal
deleted
inserted
replaced
298:f58bfb7bbcc9 | 299:3897f9f28cfa |
---|---|
29 | 29 |
30 #include <boost/lexical_cast.hpp> | 30 #include <boost/lexical_cast.hpp> |
31 | 31 |
32 namespace OrthancStone | 32 namespace OrthancStone |
33 { | 33 { |
34 void OrthancFrameLayerSource::HandleMessage(IObservable& from, const IMessage& message) | 34 |
35 void OrthancFrameLayerSource::OnSliceGeometryReady(const OrthancSlicesLoader::SliceGeometryReadyMessage& message) | |
35 { | 36 { |
36 switch (message.GetType()) | 37 if (message.origin_.GetSliceCount() > 0) |
37 { | 38 { |
38 case MessageType_SliceLoader_GeometryReady: | 39 LayerSourceBase::NotifyGeometryReady(); |
40 } | |
41 else | |
39 { | 42 { |
40 const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from); | |
41 if (loader.GetSliceCount() > 0) | |
42 { | |
43 LayerSourceBase::NotifyGeometryReady(); | |
44 } | |
45 else | |
46 { | |
47 LayerSourceBase::NotifyGeometryError(); | |
48 } | |
49 | |
50 }; break; | |
51 case MessageType_SliceLoader_GeometryError: | |
52 { | |
53 const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from); | |
54 LayerSourceBase::NotifyGeometryError(); | 43 LayerSourceBase::NotifyGeometryError(); |
55 }; break; | |
56 case MessageType_SliceLoader_ImageReady: | |
57 { | |
58 const OrthancSlicesLoader::SliceImageReadyMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageReadyMessage&>(message); | |
59 bool isFull = (msg.effectiveQuality_ == SliceImageQuality_FullPng || msg.effectiveQuality_ == SliceImageQuality_FullPam); | |
60 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(msg.image_.release(), msg.slice_, isFull), | |
61 msg.slice_.GetGeometry(), false); | |
62 | |
63 }; break; | |
64 case MessageType_SliceLoader_ImageError: | |
65 { | |
66 const OrthancSlicesLoader::SliceImageErrorMessage& msg = dynamic_cast<const OrthancSlicesLoader::SliceImageErrorMessage&>(message); | |
67 LayerSourceBase::NotifyLayerReady(NULL, msg.slice_.GetGeometry(), true); | |
68 }; break; | |
69 default: | |
70 VLOG("unhandled message type" << message.GetType()); | |
71 } | 44 } |
72 } | 45 } |
73 | 46 |
47 void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader::SliceGeometryErrorMessage& message) | |
48 { | |
49 LayerSourceBase::NotifyGeometryError(); | |
50 } | |
51 | |
52 void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message) | |
53 { | |
54 bool isFull = (message.effectiveQuality_ == SliceImageQuality_FullPng || message.effectiveQuality_ == SliceImageQuality_FullPam); | |
55 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.image_.release(), message.slice_, isFull), | |
56 message.slice_.GetGeometry(), false); | |
57 } | |
58 | |
59 void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message) | |
60 { | |
61 LayerSourceBase::NotifyLayerReady(NULL, message.slice_.GetGeometry(), true); | |
62 } | |
74 | 63 |
75 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) : | 64 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) : |
76 LayerSourceBase(broker), | 65 LayerSourceBase(broker), |
77 IObserver(broker), | 66 IObserver(broker), |
78 //OrthancSlicesLoader::ISliceLoaderObserver(broker), | 67 //OrthancSlicesLoader::ISliceLoaderObserver(broker), |
79 loader_(broker, orthanc), | 68 loader_(broker, orthanc), |
80 quality_(SliceImageQuality_FullPng) | 69 quality_(SliceImageQuality_FullPng) |
81 { | 70 { |
82 DeclareHandledMessage(MessageType_SliceLoader_GeometryReady); | 71 // DeclareHandledMessage(MessageType_SliceLoader_GeometryReady); |
83 DeclareHandledMessage(MessageType_SliceLoader_GeometryError); | 72 // DeclareHandledMessage(MessageType_SliceLoader_GeometryError); |
84 DeclareHandledMessage(MessageType_SliceLoader_ImageReady); | 73 // DeclareHandledMessage(MessageType_SliceLoader_ImageReady); |
85 DeclareHandledMessage(MessageType_SliceLoader_ImageError); | 74 // DeclareHandledMessage(MessageType_SliceLoader_ImageError); |
86 loader_.RegisterObserver(*this); | 75 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryReady)); |
76 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceGeometryErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceGeometryError)); | |
77 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageReadyMessage>(*this, &OrthancFrameLayerSource::OnSliceImageReady)); | |
78 loader_.RegisterObserverCallback(new Callable<OrthancFrameLayerSource, OrthancSlicesLoader::SliceImageErrorMessage>(*this, &OrthancFrameLayerSource::OnSliceImageError)); | |
87 } | 79 } |
88 | 80 |
89 | 81 |
90 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId) | 82 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId) |
91 { | 83 { |