# HG changeset patch # User Sebastien Jodogne # Date 1621260677 -7200 # Node ID 9b650ab68d4c0aa2cb222b59430a1b5e0b1477d3 # Parent b325761e0bd34cf2d0ae11a50e1e6b4d69518b48 replaced unneeded use of boost::share_ptr for MeasureCommand mementos by std::unique_ptr diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2D/MacroSceneLayer.h --- a/OrthancStone/Sources/Scene2D/MacroSceneLayer.h Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2D/MacroSceneLayer.h Mon May 17 16:11:17 2021 +0200 @@ -32,7 +32,7 @@ { /** * A "macro layer" is a group of sublayers that are handled as a - * whole. + * whole, and that share the same depth in the scene. **/ class MacroSceneLayer : public ISceneLayer { diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp --- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.cpp Mon May 17 16:11:17 2021 +0200 @@ -105,24 +105,21 @@ } - boost::shared_ptr AngleMeasureTool::GetMemento() const + MeasureToolMemento* AngleMeasureTool::CreateMemento() const { - boost::shared_ptr memento(new AngleMeasureToolMemento()); + std::unique_ptr memento(new AngleMeasureToolMemento()); memento->center_ = center_; memento->side1End_ = side1End_; memento->side2End_ = side2End_; - return memento; + return memento.release(); } - void AngleMeasureTool::SetMemento(boost::shared_ptr mementoBase) + void AngleMeasureTool::SetMemento(const MeasureToolMemento& mementoBase) { - boost::shared_ptr memento = - boost::dynamic_pointer_cast(mementoBase); - - ORTHANC_ASSERT(memento.get() != NULL, "Internal error: wrong (or bad) memento"); - center_ = memento->center_; - side1End_ = memento->side1End_; - side2End_ = memento->side2End_; + const AngleMeasureToolMemento& memento = dynamic_cast(mementoBase); + center_ = memento.center_; + side1End_ = memento.side1End_; + side2End_ = memento.side2End_; RefreshScene(); } @@ -352,7 +349,7 @@ double pointY = center_.GetY() + oy; char buf[64]; - double angleDeg = RadiansToDegrees(delta); + double angleDeg = std::abs(RadiansToDegrees(delta)); // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex sprintf(buf, "%0.02f\xc2\xb0", angleDeg); diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h --- a/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/AngleMeasureTool.h Mon May 17 16:11:17 2021 +0200 @@ -53,8 +53,8 @@ virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void ResetHighlightState() ORTHANC_OVERRIDE; virtual boost::shared_ptr CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; - virtual boost::shared_ptr GetMemento() const ORTHANC_OVERRIDE; - virtual void SetMemento(boost::shared_ptr) ORTHANC_OVERRIDE; + virtual MeasureToolMemento* CreateMemento() const ORTHANC_OVERRIDE; + virtual void SetMemento(const MeasureToolMemento& memento) ORTHANC_OVERRIDE; virtual std::string GetDescription() ORTHANC_OVERRIDE; enum AngleHighlightArea diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.cpp --- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureCommand.cpp Mon May 17 16:11:17 2021 +0200 @@ -34,20 +34,20 @@ void EditAngleMeasureCommand::SetCenter(ScenePoint2D scenePos) { dynamic_cast(*measureTool_).SetCenter(scenePos); - mementoModified_ = measureTool_->GetMemento(); + SetMementoModified(measureTool_->CreateMemento()); } void EditAngleMeasureCommand::SetSide1End(ScenePoint2D scenePos) { dynamic_cast(*measureTool_).SetSide1End(scenePos); - mementoModified_ = measureTool_->GetMemento(); + SetMementoModified(measureTool_->CreateMemento()); } void EditAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) { dynamic_cast(*measureTool_).SetSide2End(scenePos); - mementoModified_ = measureTool_->GetMemento(); + SetMementoModified(measureTool_->CreateMemento()); } } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.cpp --- a/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditAngleMeasureTracker.cpp Mon May 17 16:11:17 2021 +0200 @@ -61,42 +61,44 @@ ScenePoint2D delta = scenePos - GetOriginalClickPosition(); - boost::shared_ptr memento = - boost::dynamic_pointer_cast(command_->mementoOriginal_); - - ORTHANC_ASSERT(memento.get() != NULL); + const AngleMeasureToolMemento& memento = + dynamic_cast(command_->GetMementoOriginal()); switch (modifiedZone_) { case AngleMeasureTool::AngleHighlightArea_Center: { - ScenePoint2D newCenter = memento->center_ + delta; + ScenePoint2D newCenter = memento.center_ + delta; GetCommand()->SetCenter(newCenter); + break; } - break; + case AngleMeasureTool::AngleHighlightArea_Side1: case AngleMeasureTool::AngleHighlightArea_Side2: { - ScenePoint2D newCenter = memento->center_ + delta; - ScenePoint2D newSide1End = memento->side1End_ + delta; - ScenePoint2D newSide2End = memento->side2End_ + delta; + ScenePoint2D newCenter = memento.center_ + delta; + ScenePoint2D newSide1End = memento.side1End_ + delta; + ScenePoint2D newSide2End = memento.side2End_ + delta; GetCommand()->SetCenter(newCenter); GetCommand()->SetSide1End(newSide1End); GetCommand()->SetSide2End(newSide2End); + break; } - break; + case AngleMeasureTool::AngleHighlightArea_Side1End: { - ScenePoint2D newSide1End = memento->side1End_ + delta; + ScenePoint2D newSide1End = memento.side1End_ + delta; GetCommand()->SetSide1End(newSide1End); + break; } - break; + case AngleMeasureTool::AngleHighlightArea_Side2End: { - ScenePoint2D newSide2End = memento->side2End_ + delta; + ScenePoint2D newSide2End = memento.side2End_ + delta; GetCommand()->SetSide2End(newSide2End); + break; } - break; + default: LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; break; diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.cpp --- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureCommand.cpp Mon May 17 16:11:17 2021 +0200 @@ -35,13 +35,13 @@ void EditLineMeasureCommand::SetStart(ScenePoint2D scenePos) { dynamic_cast(*measureTool_).SetStart(scenePos); - mementoModified_ = measureTool_->GetMemento(); + SetMementoModified(measureTool_->CreateMemento()); } void EditLineMeasureCommand::SetEnd(ScenePoint2D scenePos) { dynamic_cast(*measureTool_).SetEnd(scenePos); - mementoModified_ = measureTool_->GetMemento(); + SetMementoModified(measureTool_->CreateMemento()); } } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp --- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Mon May 17 16:11:17 2021 +0200 @@ -56,36 +56,37 @@ ScenePoint2D delta = scenePos - GetOriginalClickPosition(); - boost::shared_ptr memento = - boost::dynamic_pointer_cast(command_->mementoOriginal_); - - ORTHANC_ASSERT(memento.get() != NULL); + const LineMeasureToolMemento& memento = + dynamic_cast(command_->GetMementoOriginal()); switch (modifiedZone_) { - case LineMeasureTool::LineHighlightArea_Start: - { - ScenePoint2D newStart = memento->start_ + delta; - GetCommand()->SetStart(newStart); - } - break; - case LineMeasureTool::LineHighlightArea_End: - { - ScenePoint2D newEnd = memento->end_ + delta; - GetCommand()->SetEnd(newEnd); - } - break; - case LineMeasureTool::LineHighlightArea_Segment: - { - ScenePoint2D newStart = memento->start_ + delta; - ScenePoint2D newEnd = memento->end_ + delta; - GetCommand()->SetStart(newStart); - GetCommand()->SetEnd(newEnd); - } - break; - default: - LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; - break; + case LineMeasureTool::LineHighlightArea_Start: + { + ScenePoint2D newStart = memento.start_ + delta; + GetCommand()->SetStart(newStart); + break; + } + + case LineMeasureTool::LineHighlightArea_End: + { + ScenePoint2D newEnd = memento.end_ + delta; + GetCommand()->SetEnd(newEnd); + break; + } + + case LineMeasureTool::LineHighlightArea_Segment: + { + ScenePoint2D newStart = memento.start_ + delta; + ScenePoint2D newEnd = memento.end_ + delta; + GetCommand()->SetStart(newStart); + GetCommand()->SetEnd(newEnd); + break; + } + + default: + LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; + break; } } @@ -106,5 +107,4 @@ ORTHANC_ASSERT(ret.get() != NULL, "Internal error in EditLineMeasureTracker::GetCommand()"); return ret; } - } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp --- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.cpp Mon May 17 16:11:17 2021 +0200 @@ -178,24 +178,19 @@ } } - boost::shared_ptr LineMeasureTool::GetMemento() const + MeasureToolMemento* LineMeasureTool::CreateMemento() const { - boost::shared_ptr memento(new LineMeasureToolMemento()); + std::unique_ptr memento(new LineMeasureToolMemento()); memento->start_ = start_; memento->end_ = end_; - return memento; + return memento.release(); } - void LineMeasureTool::SetMemento( - boost::shared_ptr mementoBase) + void LineMeasureTool::SetMemento(const MeasureToolMemento& mementoBase) { - boost::shared_ptr memento = - boost::dynamic_pointer_cast(mementoBase); - - ORTHANC_ASSERT(memento.get() != NULL, "Internal error: wrong (or bad) memento"); - - start_ = memento->start_; - end_ = memento->end_; + const LineMeasureToolMemento& memento = dynamic_cast(mementoBase); + start_ = memento.start_; + end_ = memento.end_; RefreshScene(); } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h --- a/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/LineMeasureTool.h Mon May 17 16:11:17 2021 +0200 @@ -52,8 +52,8 @@ virtual void Highlight(ScenePoint2D p) ORTHANC_OVERRIDE; virtual void ResetHighlightState() ORTHANC_OVERRIDE; virtual boost::shared_ptr CreateEditionTracker(const PointerEvent& e) ORTHANC_OVERRIDE; - virtual boost::shared_ptr GetMemento() const ORTHANC_OVERRIDE; - virtual void SetMemento(boost::shared_ptr) ORTHANC_OVERRIDE; + virtual MeasureToolMemento* CreateMemento() const ORTHANC_OVERRIDE; + virtual void SetMemento(const MeasureToolMemento& memento) ORTHANC_OVERRIDE; virtual std::string GetDescription() ORTHANC_OVERRIDE; enum LineHighlightArea diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp --- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp Mon May 17 16:11:17 2021 +0200 @@ -90,8 +90,8 @@ boost::weak_ptr viewport) : MeasureCommand(viewport), measureTool_(measureTool), - mementoModified_(measureTool->GetMemento()), - mementoOriginal_(measureTool->GetMemento()) + mementoModified_(measureTool->CreateMemento()), + mementoOriginal_(measureTool->CreateMemento()) { std::unique_ptr lock(GetViewportLock()); GetMeasureTool()->Disable(); @@ -101,8 +101,8 @@ EditMeasureCommand::EditMeasureCommand(boost::shared_ptr measureTool, boost::weak_ptr viewport) : MeasureCommand(viewport), - mementoModified_(measureTool->GetMemento()), - mementoOriginal_(measureTool->GetMemento()) + mementoModified_(measureTool->CreateMemento()), + mementoOriginal_(measureTool->CreateMemento()) { } @@ -113,11 +113,49 @@ void EditMeasureCommand::Undo() { // simply disable the measure tool upon undo - GetMeasureTool()->SetMemento(mementoOriginal_); + assert(mementoOriginal_.get() != NULL); + GetMeasureTool()->SetMemento(*mementoOriginal_); } void EditMeasureCommand::Redo() { - GetMeasureTool()->SetMemento(mementoModified_); + assert(mementoModified_.get() != NULL); + GetMeasureTool()->SetMemento(*mementoModified_); + } + + const MeasureToolMemento& EditMeasureCommand::GetMementoOriginal() const + { + assert(mementoOriginal_.get() != NULL); + return *mementoOriginal_; + } + + void EditMeasureCommand::SetMementoModified(MeasureToolMemento* memento) + { + if (memento == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + else + { + mementoModified_.reset(memento); + } + } + + const MeasureToolMemento& DeleteMeasureCommand::GetMementoOriginal() const + { + assert(mementoOriginal_.get() != NULL); + return *mementoOriginal_; + } + + void DeleteMeasureCommand::SetMementoModified(MeasureToolMemento* memento) + { + if (memento == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); + } + else + { + mementoModified_.reset(memento); + } } } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/MeasureCommands.h --- a/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureCommands.h Mon May 17 16:11:17 2021 +0200 @@ -84,9 +84,14 @@ /** Must be implemented by the subclasses that edit the actual tool */ virtual boost::shared_ptr GetMeasureTool() = 0; + /** This memento is updated by the subclasses upon modifications */ + std::unique_ptr mementoModified_; + + /** This memento is the original object state */ + std::unique_ptr mementoOriginal_; + protected: - /** This memento is updated by the subclasses upon modifications */ - boost::shared_ptr mementoModified_; + void SetMementoModified(MeasureToolMemento* memento); // takes ownership public: EditMeasureCommand(boost::shared_ptr measureTool, @@ -97,9 +102,8 @@ virtual void Undo() ORTHANC_OVERRIDE; virtual void Redo() ORTHANC_OVERRIDE; - - /** This memento is the original object state */ - boost::shared_ptr mementoOriginal_; + + const MeasureToolMemento& GetMementoOriginal() const; }; @@ -114,9 +118,14 @@ boost::shared_ptr measureTool_; + /** This memento is updated by the subclasses upon modifications */ + std::unique_ptr mementoModified_; + + /** This memento is the original object state */ + std::unique_ptr mementoOriginal_; + protected: - /** This memento is updated by the subclasses upon modifications */ - boost::shared_ptr mementoModified_; + void SetMementoModified(MeasureToolMemento* memento); // takes ownership public: DeleteMeasureCommand(boost::shared_ptr measureTool, @@ -128,8 +137,7 @@ virtual void Redo() ORTHANC_OVERRIDE; - /** This memento is the original object state */ - boost::shared_ptr mementoOriginal_; + const MeasureToolMemento& GetMementoOriginal() const; }; } diff -r b325761e0bd3 -r 9b650ab68d4c OrthancStone/Sources/Scene2DViewport/MeasureTool.h --- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Mon May 17 13:57:25 2021 +0200 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.h Mon May 17 16:11:17 2021 +0200 @@ -124,13 +124,13 @@ This method must return a memento the captures the tool state (not including the highlighting state */ - virtual boost::shared_ptr GetMemento() const = 0; + virtual MeasureToolMemento* CreateMemento() const = 0; /** This method must apply the supplied memento (this requires RTTI to check the type) */ - virtual void SetMemento(boost::shared_ptr) = 0; + virtual void SetMemento(const MeasureToolMemento& memento) = 0; /** This must create an edition tracker suitable for the supplied click position,