Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/MeasureCommands.cpp @ 1305:a5326ce4f24b broker
Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 04 Mar 2020 09:45:38 +0100 |
parents | 2d8ab34c8c91 |
children | ab81ee8fce1f |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/MeasureCommands.cpp Wed Mar 04 09:44:34 2020 +0100 +++ b/Framework/Scene2DViewport/MeasureCommands.cpp Wed Mar 04 09:45:38 2020 +0100 @@ -20,6 +20,8 @@ #include "MeasureCommands.h" +#include <memory> + #include <boost/make_shared.hpp> #include <boost/ref.hpp> @@ -27,19 +29,21 @@ { void CreateMeasureCommand::Undo() { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); // simply disable the measure tool upon undo GetMeasureTool()->Disable(); - GetController()->RemoveMeasureTool(GetMeasureTool()); + lock->GetController().RemoveMeasureTool(GetMeasureTool()); } void CreateMeasureCommand::Redo() { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); GetMeasureTool()->Enable(); - GetController()->AddMeasureTool(GetMeasureTool()); + lock->GetController().AddMeasureTool(GetMeasureTool()); } - CreateMeasureCommand::CreateMeasureCommand(boost::weak_ptr<ViewportController> controllerW) - : MeasureCommand(controllerW) + CreateMeasureCommand::CreateMeasureCommand(IViewport& viewport) + : MeasureCommand(viewport) { } @@ -52,15 +56,17 @@ void DeleteMeasureCommand::Redo() { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); // simply disable the measure tool upon undo GetMeasureTool()->Disable(); - GetController()->RemoveMeasureTool(GetMeasureTool()); + lock->GetController().RemoveMeasureTool(GetMeasureTool()); } void DeleteMeasureCommand::Undo() { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); GetMeasureTool()->Enable(); - GetController()->AddMeasureTool(GetMeasureTool()); + lock->GetController().AddMeasureTool(GetMeasureTool()); } DeleteMeasureCommand::~DeleteMeasureCommand() @@ -69,18 +75,19 @@ // we thus leave it as is } - DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) - : MeasureCommand(controllerW) + DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, IViewport& viewport) + : MeasureCommand(viewport) , mementoOriginal_(measureTool->GetMemento()) , measureTool_(measureTool) , mementoModified_(measureTool->GetMemento()) { + std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); GetMeasureTool()->Disable(); - GetController()->RemoveMeasureTool(GetMeasureTool()); + lock->GetController().RemoveMeasureTool(GetMeasureTool()); } - EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) - : MeasureCommand(controllerW) + EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, IViewport& viewport) + : MeasureCommand(viewport) , mementoOriginal_(measureTool->GetMemento()) , mementoModified_(measureTool->GetMemento()) { @@ -102,11 +109,4 @@ { GetMeasureTool()->SetMemento(mementoModified_); } - - boost::shared_ptr<ViewportController> MeasureCommand::GetController() - { - boost::shared_ptr<ViewportController> controller = controllerW_.lock(); - assert(controller); // accessing dead object? - return controller; - } }