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 }