comparison Framework/Layers/OrthancFrameLayerSource.cpp @ 266:c9cf95b49a86 am-2

removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
author am@osimis.io
date Tue, 21 Aug 2018 18:14:22 +0200
parents 9afafb192180
children 89d02de83c03
comparison
equal deleted inserted replaced
265:30dc6e383b0b 266:c9cf95b49a86
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::OnSliceGeometryReady(const OrthancSlicesLoader& loader) 34 void OrthancFrameLayerSource::HandleMessage(const IObservable& from, const IMessage& message)
35 { 35 {
36 if (loader.GetSliceCount() > 0) 36 switch (message.GetType())
37 { 37 {
38 LayerSourceBase::NotifyGeometryReady(); 38 case MessageType_SliceGeometryReady:
39 {
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_SliceGeometryError:
52 {
53 const OrthancSlicesLoader& loader = dynamic_cast<const OrthancSlicesLoader&>(from);
54 LayerSourceBase::NotifyGeometryError();
55 }; break;
56 case MessageType_SliceImageReady:
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_SliceImageError:
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());
39 } 71 }
40 else
41 {
42 LayerSourceBase::NotifyGeometryError();
43 }
44 }
45
46 void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader& loader)
47 {
48 LayerSourceBase::NotifyGeometryError();
49 }
50
51 void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader& loader,
52 unsigned int sliceIndex,
53 const Slice& slice,
54 std::auto_ptr<Orthanc::ImageAccessor>& image,
55 SliceImageQuality quality)
56 {
57 bool isFull = (quality == SliceImageQuality_FullPng || quality == SliceImageQuality_FullPam);
58 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(image.release(), slice, isFull),
59 slice.GetGeometry(), false);
60 }
61
62 void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader& loader,
63 unsigned int sliceIndex,
64 const Slice& slice,
65 SliceImageQuality quality)
66 {
67 LayerSourceBase::NotifyLayerReady(NULL, slice.GetGeometry(), true);
68 } 72 }
69 73
70 74
71 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) : 75 OrthancFrameLayerSource::OrthancFrameLayerSource(MessageBroker& broker, IWebService& orthanc) :
72 LayerSourceBase(broker), 76 LayerSourceBase(broker),
73 OrthancSlicesLoader::ISliceLoaderObserver(broker), 77 IObserver(broker),
74 loader_(broker, *this, orthanc), 78 //OrthancSlicesLoader::ISliceLoaderObserver(broker),
79 loader_(broker, orthanc),
75 quality_(SliceImageQuality_FullPng) 80 quality_(SliceImageQuality_FullPng)
76 { 81 {
82 loader_.RegisterObserver(*this);
77 } 83 }
78 84
79 85
80 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId) 86 void OrthancFrameLayerSource::LoadSeries(const std::string& seriesId)
81 { 87 {