Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
1304:b7fa67bf87fa | 1305:a5326ce4f24b |
---|---|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 **/ | 19 **/ |
20 | 20 |
21 #include "MeasureCommands.h" | 21 #include "MeasureCommands.h" |
22 | 22 |
23 #include <memory> | |
24 | |
23 #include <boost/make_shared.hpp> | 25 #include <boost/make_shared.hpp> |
24 #include <boost/ref.hpp> | 26 #include <boost/ref.hpp> |
25 | 27 |
26 namespace OrthancStone | 28 namespace OrthancStone |
27 { | 29 { |
28 void CreateMeasureCommand::Undo() | 30 void CreateMeasureCommand::Undo() |
29 { | 31 { |
32 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); | |
30 // simply disable the measure tool upon undo | 33 // simply disable the measure tool upon undo |
31 GetMeasureTool()->Disable(); | 34 GetMeasureTool()->Disable(); |
32 GetController()->RemoveMeasureTool(GetMeasureTool()); | 35 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
33 } | 36 } |
34 | 37 |
35 void CreateMeasureCommand::Redo() | 38 void CreateMeasureCommand::Redo() |
36 { | 39 { |
40 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); | |
37 GetMeasureTool()->Enable(); | 41 GetMeasureTool()->Enable(); |
38 GetController()->AddMeasureTool(GetMeasureTool()); | 42 lock->GetController().AddMeasureTool(GetMeasureTool()); |
39 } | 43 } |
40 | 44 |
41 CreateMeasureCommand::CreateMeasureCommand(boost::weak_ptr<ViewportController> controllerW) | 45 CreateMeasureCommand::CreateMeasureCommand(IViewport& viewport) |
42 : MeasureCommand(controllerW) | 46 : MeasureCommand(viewport) |
43 { | 47 { |
44 | 48 |
45 } | 49 } |
46 | 50 |
47 CreateMeasureCommand::~CreateMeasureCommand() | 51 CreateMeasureCommand::~CreateMeasureCommand() |
50 // we thus leave it as is | 54 // we thus leave it as is |
51 } | 55 } |
52 | 56 |
53 void DeleteMeasureCommand::Redo() | 57 void DeleteMeasureCommand::Redo() |
54 { | 58 { |
59 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); | |
55 // simply disable the measure tool upon undo | 60 // simply disable the measure tool upon undo |
56 GetMeasureTool()->Disable(); | 61 GetMeasureTool()->Disable(); |
57 GetController()->RemoveMeasureTool(GetMeasureTool()); | 62 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
58 } | 63 } |
59 | 64 |
60 void DeleteMeasureCommand::Undo() | 65 void DeleteMeasureCommand::Undo() |
61 { | 66 { |
67 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); | |
62 GetMeasureTool()->Enable(); | 68 GetMeasureTool()->Enable(); |
63 GetController()->AddMeasureTool(GetMeasureTool()); | 69 lock->GetController().AddMeasureTool(GetMeasureTool()); |
64 } | 70 } |
65 | 71 |
66 DeleteMeasureCommand::~DeleteMeasureCommand() | 72 DeleteMeasureCommand::~DeleteMeasureCommand() |
67 { | 73 { |
68 // deleting the command should not change the model state | 74 // deleting the command should not change the model state |
69 // we thus leave it as is | 75 // we thus leave it as is |
70 } | 76 } |
71 | 77 |
72 DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) | 78 DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, IViewport& viewport) |
73 : MeasureCommand(controllerW) | 79 : MeasureCommand(viewport) |
74 , mementoOriginal_(measureTool->GetMemento()) | 80 , mementoOriginal_(measureTool->GetMemento()) |
75 , measureTool_(measureTool) | 81 , measureTool_(measureTool) |
76 , mementoModified_(measureTool->GetMemento()) | 82 , mementoModified_(measureTool->GetMemento()) |
77 { | 83 { |
84 std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_.Lock()); | |
78 GetMeasureTool()->Disable(); | 85 GetMeasureTool()->Disable(); |
79 GetController()->RemoveMeasureTool(GetMeasureTool()); | 86 lock->GetController().RemoveMeasureTool(GetMeasureTool()); |
80 } | 87 } |
81 | 88 |
82 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) | 89 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, IViewport& viewport) |
83 : MeasureCommand(controllerW) | 90 : MeasureCommand(viewport) |
84 , mementoOriginal_(measureTool->GetMemento()) | 91 , mementoOriginal_(measureTool->GetMemento()) |
85 , mementoModified_(measureTool->GetMemento()) | 92 , mementoModified_(measureTool->GetMemento()) |
86 { | 93 { |
87 | 94 |
88 } | 95 } |
100 | 107 |
101 void EditMeasureCommand::Redo() | 108 void EditMeasureCommand::Redo() |
102 { | 109 { |
103 GetMeasureTool()->SetMemento(mementoModified_); | 110 GetMeasureTool()->SetMemento(mementoModified_); |
104 } | 111 } |
105 | |
106 boost::shared_ptr<ViewportController> MeasureCommand::GetController() | |
107 { | |
108 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); | |
109 assert(controller); // accessing dead object? | |
110 return controller; | |
111 } | |
112 } | 112 } |