# HG changeset patch # User am@osimis.io # Date 1531226893 -7200 # Node ID e5a9b3d0347842ebbd20a08693acc09e133e721c # Parent 9afafb192180200b1911801c2d222084e6104a54 first very basic version of SmartLoader diff -r 9afafb192180 -r e5a9b3d03478 Applications/Samples/SimpleViewerApplication.h --- a/Applications/Samples/SimpleViewerApplication.h Tue Jul 10 12:39:01 2018 +0200 +++ b/Applications/Samples/SimpleViewerApplication.h Tue Jul 10 14:48:13 2018 +0200 @@ -27,6 +27,7 @@ #include "../../Framework/Widgets/LayerWidget.h" #include "../../Framework/Widgets/LayoutWidget.h" #include "../../Framework/Messages/IObserver.h" +#include "../../Framework/SmartLoader.h" #include @@ -195,18 +196,17 @@ OrthancStone::WidgetViewport* wasmViewport2_; IStatusBar* statusBar_; - OrthancFrameLayerSource* source_; unsigned int slice_; + std::unique_ptr smartLoader_; public: SimpleViewerApplication(MessageBroker& broker) : + IObserver(broker), mainLayout_(NULL), currentInstanceIndex_(0), - source_(NULL), - slice_(0), wasmViewport1_(NULL), wasmViewport2_(NULL), - IObserver(broker) + slice_(0) { } @@ -275,24 +275,13 @@ thumbnailsLayout_->AddWidget(thumbnails_[1]); // sources - source_ = new OrthancFrameLayerSource(broker_, context_->GetWebService()); - source_->RegisterObserver(*this); - source_->SetImageQuality(SliceImageQuality_FullPam); - source_->LoadFrame(instances_[currentInstanceIndex_], 0); - - mainViewport_->AddLayer(source_); + smartLoader_.reset(new SmartLoader(broker_, context_->GetWebService())); + smartLoader_->SetImageQuality(SliceImageQuality_FullPam); + smartLoader_->RegisterObserver(*this); - OrthancFrameLayerSource* thumb0 = new OrthancFrameLayerSource(broker_, context_->GetWebService()); - thumb0->RegisterObserver(*this); - thumb0->SetImageQuality(SliceImageQuality_FullPam); - thumb0->LoadFrame(instances_[0], 0); - OrthancFrameLayerSource* thumb1 = new OrthancFrameLayerSource(broker_, context_->GetWebService()); - thumb1->RegisterObserver(*this); - thumb1->SetImageQuality(SliceImageQuality_FullPam); - thumb1->LoadFrame(instances_[1], 0); - - thumbnails_[0]->AddLayer(thumb0); - thumbnails_[1]->AddLayer(thumb1); + mainViewport_->AddLayer(smartLoader_->GetFrame(instances_[currentInstanceIndex_], 0)); + thumbnails_[0]->AddLayer(smartLoader_->GetFrame(instances_[0], 0)); + thumbnails_[1]->AddLayer(smartLoader_->GetFrame(instances_[1], 0)); mainLayout_->SetTransmitMouseOver(true); interactor_.reset(new Interactor(*this)); @@ -313,13 +302,8 @@ currentInstanceIndex_ = (currentInstanceIndex_ + 1) % instances_.size(); - std::auto_ptr layer - (new OrthancFrameLayerSource(broker_, context_->GetWebService())); - layer->SetImageQuality(SliceImageQuality_FullPam); - layer->RegisterObserver(*this); - layer->LoadFrame(instances_[currentInstanceIndex_], 0); + mainViewport_->ReplaceLayer(0, smartLoader_->GetFrame(instances_[currentInstanceIndex_], 0)); - mainViewport_->ReplaceLayer(0, layer.release()); } }; diff -r 9afafb192180 -r e5a9b3d03478 Framework/Layers/LayerSourceBase.cpp --- a/Framework/Layers/LayerSourceBase.cpp Tue Jul 10 12:39:01 2018 +0200 +++ b/Framework/Layers/LayerSourceBase.cpp Tue Jul 10 14:48:13 2018 +0200 @@ -54,22 +54,22 @@ void LayerSourceBase::NotifyGeometryReady() { - Emit(IMessage(MessageType_GeometryReady)); + EmitMessage(IMessage(MessageType_GeometryReady)); } void LayerSourceBase::NotifyGeometryError() { - Emit(IMessage(MessageType_GeometryError)); + EmitMessage(IMessage(MessageType_GeometryError)); } void LayerSourceBase::NotifyContentChange() { - Emit(IMessage(MessageType_ContentChanged)); + EmitMessage(IMessage(MessageType_ContentChanged)); } void LayerSourceBase::NotifySliceChange(const Slice& slice) { - Emit(ILayerSource::SliceChangedMessage(slice)); + EmitMessage(ILayerSource::SliceChangedMessage(slice)); } void LayerSourceBase::NotifyLayerReady(ILayerRenderer* layer, @@ -77,7 +77,7 @@ bool isError) { std::auto_ptr renderer(layer); - Emit(ILayerSource::LayerReadyMessage(renderer, slice, isError)); + EmitMessage(ILayerSource::LayerReadyMessage(renderer, slice, isError)); } } diff -r 9afafb192180 -r e5a9b3d03478 Framework/Messages/IObservable.h --- a/Framework/Messages/IObservable.h Tue Jul 10 12:39:01 2018 +0200 +++ b/Framework/Messages/IObservable.h Tue Jul 10 14:48:13 2018 +0200 @@ -28,6 +28,7 @@ class IObservable : public boost::noncopyable { + protected: MessageBroker& broker_; std::set observers_; @@ -42,9 +43,9 @@ { } - void Emit(const IMessage& message) + void EmitMessage(const IMessage& message) { - broker_.Emit(*this, observers_, message); + broker_.EmitMessage(*this, observers_, message); } void RegisterObserver(IObserver& observer) diff -r 9afafb192180 -r e5a9b3d03478 Framework/Messages/MessageBroker.cpp --- a/Framework/Messages/MessageBroker.cpp Tue Jul 10 12:39:01 2018 +0200 +++ b/Framework/Messages/MessageBroker.cpp Tue Jul 10 14:48:13 2018 +0200 @@ -30,7 +30,7 @@ namespace OrthancStone { - void MessageBroker::Emit(IObservable& from, std::set observers, const IMessage& message) + void MessageBroker::EmitMessage(IObservable& from, std::set observers, const IMessage& message) { std::vector activeObservers; std::set_intersection(observers.begin(), diff -r 9afafb192180 -r e5a9b3d03478 Framework/Messages/MessageBroker.h --- a/Framework/Messages/MessageBroker.h Tue Jul 10 12:39:01 2018 +0200 +++ b/Framework/Messages/MessageBroker.h Tue Jul 10 14:48:13 2018 +0200 @@ -56,7 +56,7 @@ activeObservers_.erase(&observer); } - void Emit(IObservable& from, std::set observers, const IMessage& message); + void EmitMessage(IObservable& from, std::set observers, const IMessage& message); }; } diff -r 9afafb192180 -r e5a9b3d03478 Platforms/Generic/WebServiceCommandBase.cpp --- a/Platforms/Generic/WebServiceCommandBase.cpp Tue Jul 10 12:39:01 2018 +0200 +++ b/Platforms/Generic/WebServiceCommandBase.cpp Tue Jul 10 14:48:13 2018 +0200 @@ -47,12 +47,12 @@ if (success_) { IWebService::ICallback::HttpRequestSuccessMessage message(uri_, answer_.c_str(), answer_.size(), payload_.release()); - Emit(message); + EmitMessage(message); } else { IWebService::ICallback::HttpRequestErrorMessage message(uri_, payload_.release()); - Emit(message); + EmitMessage(message); } } } diff -r 9afafb192180 -r e5a9b3d03478 Resources/CMake/OrthancStoneConfiguration.cmake --- a/Resources/CMake/OrthancStoneConfiguration.cmake Tue Jul 10 12:39:01 2018 +0200 +++ b/Resources/CMake/OrthancStoneConfiguration.cmake Tue Jul 10 14:48:13 2018 +0200 @@ -174,6 +174,7 @@ #${ORTHANC_STONE_ROOT}/Framework/Layers/SiblingSliceLocationFactory.cpp #${ORTHANC_STONE_ROOT}/Framework/Layers/SingleFrameRendererFactory.cpp ${ORTHANC_STONE_ROOT}/Framework/StoneEnumerations.cpp + ${ORTHANC_STONE_ROOT}/Framework/SmartLoader.cpp ${ORTHANC_STONE_ROOT}/Framework/Layers/CircleMeasureTracker.cpp ${ORTHANC_STONE_ROOT}/Framework/Layers/ColorFrameRenderer.cpp ${ORTHANC_STONE_ROOT}/Framework/Layers/DicomStructureSetRendererFactory.cpp diff -r 9afafb192180 -r e5a9b3d03478 UnitTestsSources/TestMessageBroker.cpp --- a/UnitTestsSources/TestMessageBroker.cpp Tue Jul 10 12:39:01 2018 +0200 +++ b/UnitTestsSources/TestMessageBroker.cpp Tue Jul 10 14:48:13 2018 +0200 @@ -58,7 +58,7 @@ OrthancStone::IMessage genericMessage(OrthancStone::MessageType_Generic); // no observers have been registered -> nothing shall happen - observable.Emit(genericMessage); + observable.EmitMessage(genericMessage); ASSERT_EQ(0, globalCounter); @@ -66,20 +66,20 @@ MyObserver observer(broker); observable.RegisterObserver(observer); - observable.Emit(genericMessage); + observable.EmitMessage(genericMessage); ASSERT_EQ(1, globalCounter); // check the observer is not called when another message is issued OrthancStone::IMessage wrongMessage(OrthancStone::MessageType_GeometryReady); // no observers have been registered - observable.Emit(wrongMessage); + observable.EmitMessage(wrongMessage); ASSERT_EQ(1, globalCounter); // unregister the observer, make sure nothing happens afterwards observable.UnregisterObserver(observer); - observable.Emit(genericMessage); + observable.EmitMessage(genericMessage); ASSERT_EQ(1, globalCounter); } @@ -97,13 +97,13 @@ MyObserver observer(broker); observable.RegisterObserver(observer); - observable.Emit(genericMessage); + observable.EmitMessage(genericMessage); ASSERT_EQ(1, globalCounter); } // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !) - observable.Emit(genericMessage); + observable.EmitMessage(genericMessage); ASSERT_EQ(1, globalCounter); }