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 }