Mercurial > hg > orthanc-stone
comparison OrthancStone/Sources/Scene2DViewport/MeasureCommands.cpp @ 1606:874e178f34e9
- ViewportController now has weak ptr to Viewport
- Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage
- LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too
- Fixed float/double warning in GrayscaleWindowingSceneTracker
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 28 Oct 2020 20:14:34 +0100 |
parents | 8563ea5d8ae4 |
children | 646e581e115b |
comparison
equal
deleted
inserted
replaced
1605:b3c439d96d3e | 1606:874e178f34e9 |
---|---|
26 #include <boost/make_shared.hpp> | 26 #include <boost/make_shared.hpp> |
27 #include <boost/ref.hpp> | 27 #include <boost/ref.hpp> |
28 | 28 |
29 namespace OrthancStone | 29 namespace OrthancStone |
30 { | 30 { |
31 IViewport::ILock* MeasureCommand::GetViewportLock() | |
32 { | |
33 boost::shared_ptr<IViewport> viewport = viewport_.lock(); | |
34 if (viewport) | |
35 return viewport->Lock(); | |
36 else | |
37 return nullptr; | |
38 } | |
39 | |
40 | |
31 void CreateMeasureCommand::Undo() | 41 void CreateMeasureCommand::Undo() |
32 { | 42 { |
33 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); | 43 std::unique_ptr<OrthancStone::IViewport::ILock> lock(GetViewportLock()); |
34 // simply disable the measure tool upon undo | 44 // simply disable the measure tool upon undo |
35 GetMeasureTool()->Disable(); | 45 GetMeasureTool()->Disable(); |
36 lock->GetController().RemoveMeasureTool(GetMeasureTool()); | 46 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
37 } | 47 } |
38 | 48 |
39 void CreateMeasureCommand::Redo() | 49 void CreateMeasureCommand::Redo() |
40 { | 50 { |
41 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); | 51 std::unique_ptr<OrthancStone::IViewport::ILock> lock(GetViewportLock()); |
42 GetMeasureTool()->Enable(); | 52 GetMeasureTool()->Enable(); |
43 lock->GetController().AddMeasureTool(GetMeasureTool()); | 53 lock->GetController().AddMeasureTool(GetMeasureTool()); |
44 } | 54 } |
45 | 55 |
46 CreateMeasureCommand::CreateMeasureCommand(boost::shared_ptr<IViewport> viewport) | 56 CreateMeasureCommand::CreateMeasureCommand(boost::weak_ptr<IViewport> viewport) |
47 : MeasureCommand(viewport) | 57 : MeasureCommand(viewport) |
48 { | 58 { |
49 | 59 |
50 } | 60 } |
51 | 61 |
55 // we thus leave it as is | 65 // we thus leave it as is |
56 } | 66 } |
57 | 67 |
58 void DeleteMeasureCommand::Redo() | 68 void DeleteMeasureCommand::Redo() |
59 { | 69 { |
60 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); | 70 std::unique_ptr<OrthancStone::IViewport::ILock> lock(GetViewportLock()); |
61 // simply disable the measure tool upon undo | 71 // simply disable the measure tool upon undo |
62 GetMeasureTool()->Disable(); | 72 GetMeasureTool()->Disable(); |
63 lock->GetController().RemoveMeasureTool(GetMeasureTool()); | 73 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
64 } | 74 } |
65 | 75 |
66 void DeleteMeasureCommand::Undo() | 76 void DeleteMeasureCommand::Undo() |
67 { | 77 { |
68 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); | 78 std::unique_ptr<OrthancStone::IViewport::ILock> lock(GetViewportLock()); |
69 GetMeasureTool()->Enable(); | 79 GetMeasureTool()->Enable(); |
70 lock->GetController().AddMeasureTool(GetMeasureTool()); | 80 lock->GetController().AddMeasureTool(GetMeasureTool()); |
71 } | 81 } |
72 | 82 |
73 DeleteMeasureCommand::~DeleteMeasureCommand() | 83 DeleteMeasureCommand::~DeleteMeasureCommand() |
75 // deleting the command should not change the model state | 85 // deleting the command should not change the model state |
76 // we thus leave it as is | 86 // we thus leave it as is |
77 } | 87 } |
78 | 88 |
79 DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, | 89 DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, |
80 boost::shared_ptr<IViewport> viewport) : | 90 boost::weak_ptr<IViewport> viewport) : |
81 MeasureCommand(viewport), | 91 MeasureCommand(viewport), |
82 measureTool_(measureTool), | 92 measureTool_(measureTool), |
83 mementoModified_(measureTool->GetMemento()), | 93 mementoModified_(measureTool->GetMemento()), |
84 mementoOriginal_(measureTool->GetMemento()) | 94 mementoOriginal_(measureTool->GetMemento()) |
85 { | 95 { |
86 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); | 96 std::unique_ptr<OrthancStone::IViewport::ILock> lock(GetViewportLock()); |
87 GetMeasureTool()->Disable(); | 97 GetMeasureTool()->Disable(); |
88 lock->GetController().RemoveMeasureTool(GetMeasureTool()); | 98 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
89 } | 99 } |
90 | 100 |
91 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, | 101 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, |
92 boost::shared_ptr<IViewport> viewport) : | 102 boost::weak_ptr<IViewport> viewport) : |
93 MeasureCommand(viewport), | 103 MeasureCommand(viewport), |
94 mementoModified_(measureTool->GetMemento()), | 104 mementoModified_(measureTool->GetMemento()), |
95 mementoOriginal_(measureTool->GetMemento()) | 105 mementoOriginal_(measureTool->GetMemento()) |
96 { | 106 { |
97 } | 107 } |