Mercurial > hg > orthanc-stone
changeset 2371:3644864d95ad refactoring
removed dependency of MeasureCommands on IViewport
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Thu, 08 Oct 2026 19:52:31 +0200 |
| parents | 5c4491e700ad |
| children | 6de9b26f7811 |
| files | Applications/Samples/Common/SimpleViewerCore.cpp OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp OrthancStone/Sources/Scene2DViewport/MeasureCommands.h OrthancStone/Sources/Scene2DViewport/ViewportController.cpp |
| diffstat | 6 files changed, 77 insertions(+), 113 deletions(-) [+] |
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp Thu Oct 08 19:29:56 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.cpp Thu Oct 08 19:52:31 2026 +0200 @@ -26,6 +26,8 @@ #define TEST_MEASURE_TOOLS 1 +#include "../../../OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h" +#include "../../../OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h" #include "../../../OrthancStone/Sources/Scene2DViewport/UndoStack.h" #include "../../../OrthancStone/Sources/Viewport/DefaultViewportInteractor.h" @@ -261,7 +263,7 @@ if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove) { std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock()); - viewportLock->GetController().PushCommand(boost::make_shared<DeleteMeasureCommand>(tools[0], core_->viewport_)); + viewportLock->GetController().PushCommand(boost::make_shared<DeleteMeasureCommand>(viewportLock->GetController(), tools[0])); return NULL; } else
--- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Thu Oct 08 19:29:56 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Thu Oct 08 19:52:31 2026 +0200 @@ -66,18 +66,18 @@ modifiedZone_ = tool_->AngleHitTest(originalClickPosition_); originalMemento_.reset(dynamic_cast<AngleMeasureTool::Memento*>(tool->CreateMemento())); - if (isCreation) + boost::shared_ptr<IViewport> sharedViewport = viewport.lock(); + if (sharedViewport) { - boost::shared_ptr<IViewport> sharedViewport = viewport.lock(); - if (sharedViewport) + std::unique_ptr<IViewport::ILock> lock(sharedViewport->Lock()); + if (isCreation) { - std::unique_ptr<IViewport::ILock> lock(sharedViewport->Lock()); - lock->GetController().PushCommand(boost::make_shared<CreateMeasureCommand>(boost::dynamic_pointer_cast<MeasureTool>(tool_), viewport)); + lock->GetController().PushCommand(boost::make_shared<CreateMeasureCommand>(lock->GetController(), boost::dynamic_pointer_cast<MeasureTool>(tool_))); } - } - else - { - editCommand_ = boost::make_shared<EditMeasureCommand>(boost::dynamic_pointer_cast<MeasureTool>(tool_), viewport_); + else + { + editCommand_ = boost::make_shared<EditMeasureCommand>(lock->GetController(), boost::dynamic_pointer_cast<MeasureTool>(tool_)); + } } }
--- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Thu Oct 08 19:29:56 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Thu Oct 08 19:52:31 2026 +0200 @@ -64,18 +64,18 @@ modifiedZone_ = tool_->LineHitTest(originalClickPosition_); originalMemento_.reset(dynamic_cast<LineMeasureTool::Memento*>(tool->CreateMemento())); - if (isCreation) + boost::shared_ptr<IViewport> sharedViewport = viewport.lock(); + if (sharedViewport) { - boost::shared_ptr<IViewport> sharedViewport = viewport.lock(); - if (sharedViewport) + std::unique_ptr<IViewport::ILock> lock(sharedViewport->Lock()); + if (isCreation) { - std::unique_ptr<IViewport::ILock> lock(sharedViewport->Lock()); - lock->GetController().PushCommand(boost::make_shared<CreateMeasureCommand>(boost::dynamic_pointer_cast<MeasureTool>(tool_), viewport)); + lock->GetController().PushCommand(boost::make_shared<CreateMeasureCommand>(lock->GetController(), boost::dynamic_pointer_cast<MeasureTool>(tool_))); } - } - else - { - editCommand_ = boost::make_shared<EditMeasureCommand>(boost::dynamic_pointer_cast<MeasureTool>(tool_), viewport_); + else + { + editCommand_ = boost::make_shared<EditMeasureCommand>(lock->GetController(), boost::dynamic_pointer_cast<MeasureTool>(tool_)); + } } }
--- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Thu Oct 08 19:29:56 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Thu Oct 08 19:52:31 2026 +0200 @@ -20,81 +20,61 @@ * <http://www.gnu.org/licenses/>. **/ + #include "MeasureCommands.h" -#include <memory> - -#include <boost/make_shared.hpp> -#include <boost/ref.hpp> namespace OrthancStone { - IViewport::ILock* MeasureCommand::GetViewportLock() + MeasureCommand::MeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& tool) : + controller_(controller), + measureTool_(tool) { - boost::shared_ptr<IViewport> viewport = viewport_.lock(); - if (viewport) + if (!tool) { - return viewport->Lock(); - } - else - { - return NULL; + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); } } - CreateMeasureCommand::CreateMeasureCommand(const boost::shared_ptr<MeasureTool>& tool, - boost::weak_ptr<IViewport> viewport) : - MeasureCommand(viewport), - measureTool_(tool) - { - } - - void CreateMeasureCommand::Undo() { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); // simply disable the measure tool upon undo - measureTool_->Disable(); - lock->GetController().RemoveMeasureTool(measureTool_); + GetMeasureTool()->Disable(); + GetController().RemoveMeasureTool(GetMeasureTool()); } void CreateMeasureCommand::Redo() { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - measureTool_->Enable(); - lock->GetController().AddMeasureTool(measureTool_); + GetMeasureTool()->Enable(); + GetController().AddMeasureTool(GetMeasureTool()); } - EditMeasureCommand::EditMeasureCommand(const boost::shared_ptr<MeasureTool>& measureTool, - boost::weak_ptr<IViewport> viewport) : - MeasureCommand(viewport), - measureTool_(measureTool), - mementoModified_(measureTool->CreateMemento()), - mementoOriginal_(measureTool->CreateMemento()) + EditMeasureCommand::EditMeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& tool) : + MeasureCommand(controller, tool), + mementoModified_(tool->CreateMemento()), + mementoOriginal_(tool->CreateMemento()) { - if (!measureTool) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); - } } void EditMeasureCommand::Undo() { // simply disable the measure tool upon undo assert(mementoOriginal_.get() != NULL); - GetMeasureTool().SetMemento(*mementoOriginal_); + GetMeasureTool()->SetMemento(*mementoOriginal_); } void EditMeasureCommand::Redo() { assert(mementoModified_.get() != NULL); - GetMeasureTool().SetMemento(*mementoModified_); + GetMeasureTool()->SetMemento(*mementoModified_); } const MeasureTool::IMemento& EditMeasureCommand::GetMementoOriginal() const @@ -117,37 +97,26 @@ - DeleteMeasureCommand::DeleteMeasureCommand(const boost::shared_ptr<MeasureTool>& measureTool, - boost::weak_ptr<IViewport> viewport) : - MeasureCommand(viewport), - measureTool_(measureTool) + DeleteMeasureCommand::DeleteMeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& tool) : + MeasureCommand(controller, tool) { - if (!measureTool) - { - throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); - } - - { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - measureTool_->Disable(); - lock->GetController().RemoveMeasureTool(measureTool_); // TODO Refactoring - Should probably be moved into ViewportController - } + GetMeasureTool()->Disable(); + GetController().RemoveMeasureTool(GetMeasureTool()); // TODO Refactoring - Should probably be moved into ViewportController } void DeleteMeasureCommand::Undo() { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - measureTool_->Enable(); - lock->GetController().AddMeasureTool(measureTool_); + GetMeasureTool()->Enable(); + GetController().AddMeasureTool(GetMeasureTool()); } void DeleteMeasureCommand::Redo() { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); // simply disable the measure tool upon undo - measureTool_->Disable(); - lock->GetController().RemoveMeasureTool(measureTool_); + GetMeasureTool()->Disable(); + GetController().RemoveMeasureTool(GetMeasureTool()); } }
--- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Thu Oct 08 19:29:56 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Thu Oct 08 19:52:31 2026 +0200 @@ -19,36 +19,38 @@ * License along with this program. If not, see * <http://www.gnu.org/licenses/>. **/ + + #pragma once -#include "../Viewport/IViewport.h" #include "MeasureTool.h" -#include "LineMeasureTool.h" -#include "AngleMeasureTool.h" #include "UndoStack.h" #include <boost/shared_ptr.hpp> -#include <boost/weak_ptr.hpp> -#include <boost/noncopyable.hpp> + namespace OrthancStone { class MeasureCommand : public UndoStack::ICommand { - protected: - boost::weak_ptr<IViewport> viewport_; + private: + ViewportController& controller_; // TODO Refactoring - Should be a boost::shared_ptr + boost::shared_ptr<MeasureTool> measureTool_; - /** - This will return a scoped lock to the viewport. - If the viewport does not exist anymore, then nullptr is returned. - */ - IViewport::ILock* GetViewportLock(); + protected: + ViewportController& GetController() const + { + return controller_; + } + + const boost::shared_ptr<MeasureTool>& GetMeasureTool() const + { + return measureTool_; + } public: - explicit MeasureCommand(boost::weak_ptr<IViewport> viewport) : - viewport_(viewport) - { - } + explicit MeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& measureTool); virtual ~MeasureCommand() { @@ -62,12 +64,12 @@ class CreateMeasureCommand : public MeasureCommand { - private: - boost::shared_ptr<MeasureTool> measureTool_; - public: - CreateMeasureCommand(const boost::shared_ptr<MeasureTool>& measureTool, - boost::weak_ptr<IViewport> viewport); + CreateMeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& measureTool) : + MeasureCommand(controller, measureTool) + { + } virtual void Undo() ORTHANC_OVERRIDE; @@ -78,23 +80,15 @@ class EditMeasureCommand : public MeasureCommand { private: - boost::shared_ptr<MeasureTool> measureTool_; - /** This memento is updated by the subclasses upon modifications */ std::unique_ptr<MeasureTool::IMemento> mementoModified_; /** This memento is the original object state */ std::unique_ptr<MeasureTool::IMemento> mementoOriginal_; - protected: - MeasureTool& GetMeasureTool() const - { - return *measureTool_; - } - public: - EditMeasureCommand(const boost::shared_ptr<MeasureTool>& measureTool, - boost::weak_ptr<IViewport> viewport); + EditMeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& measureTool); virtual void Undo() ORTHANC_OVERRIDE; @@ -108,12 +102,9 @@ class DeleteMeasureCommand : public MeasureCommand { - private: - boost::shared_ptr<MeasureTool> measureTool_; - public: - DeleteMeasureCommand(const boost::shared_ptr<MeasureTool>& measureTool, - boost::weak_ptr<IViewport> viewport); + DeleteMeasureCommand(ViewportController& controller, + const boost::shared_ptr<MeasureTool>& measureTool); virtual void Undo() ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Thu Oct 08 19:29:56 2026 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp Thu Oct 08 19:52:31 2026 +0200 @@ -25,6 +25,8 @@ #include "../StoneException.h" // For ORTHANC_ASSERT #include "MeasureCommands.h" #include "UndoStack.h" +#include "LineMeasureTool.h" +#include "AngleMeasureTool.h" #include <boost/make_shared.hpp>
