comparison Framework/Scene2DViewport/MeasureCommands.cpp @ 722:28b9e3a54200

Undo mechanism implemented (not connected to UI yet). Undo stack and measuring tools are now handled by the ViewportController. Multi-touch does not crash trackers anymore.
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 21 May 2019 10:27:54 +0200
parents 059e1fd05fd6
children 712ff6ff3c19
comparison
equal deleted inserted replaced
721:af0aa0c149fa 722:28b9e3a54200
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 <boost/make_shared.hpp>
24 #include <boost/ref.hpp>
25
23 namespace OrthancStone 26 namespace OrthancStone
24 { 27 {
25 void CreateMeasureCommand::Undo() 28 void CreateMeasureCommand::Undo()
26 { 29 {
27 // simply disable the measure tool upon undo 30 // simply disable the measure tool upon undo
28 GetMeasureTool()->Disable(); 31 GetController()->RemoveMeasureTool(GetMeasureTool());
29 } 32 }
30 33
31 void CreateMeasureCommand::Redo() 34 void CreateMeasureCommand::Redo()
32 { 35 {
33 GetMeasureTool()->Enable(); 36 GetController()->AddMeasureTool(GetMeasureTool());
34 } 37 }
35 38
36 CreateMeasureCommand::CreateMeasureCommand( 39 CreateMeasureCommand::CreateMeasureCommand(ViewportControllerWPtr controllerW)
37 ViewportControllerWPtr controllerW, MeasureToolList& measureTools)
38 : TrackerCommand(controllerW) 40 : TrackerCommand(controllerW)
39 , measureTools_(measureTools)
40 { 41 {
41 42
42 } 43 }
43 44
44 CreateMeasureCommand::~CreateMeasureCommand() 45 CreateMeasureCommand::~CreateMeasureCommand()
48 } 49 }
49 50
50 CreateLineMeasureCommand::CreateLineMeasureCommand( 51 CreateLineMeasureCommand::CreateLineMeasureCommand(
51 MessageBroker& broker, 52 MessageBroker& broker,
52 ViewportControllerWPtr controllerW, 53 ViewportControllerWPtr controllerW,
53 MeasureToolList& measureTools,
54 ScenePoint2D point) 54 ScenePoint2D point)
55 : CreateMeasureCommand(controllerW, measureTools) 55 : CreateMeasureCommand(controllerW)
56 , measureTool_(new LineMeasureTool(broker, controllerW)) 56 , measureTool_(
57 boost::make_shared<LineMeasureTool>(boost::ref(broker), controllerW))
57 { 58 {
58 measureTools_.push_back(measureTool_); 59 GetController()->AddMeasureTool(measureTool_);
59 measureTool_->Set(point, point); 60 measureTool_->Set(point, point);
60 } 61 }
61 62
62 void CreateLineMeasureCommand::SetEnd(ScenePoint2D scenePos) 63 void CreateLineMeasureCommand::SetEnd(ScenePoint2D scenePos)
63 { 64 {
65 } 66 }
66 67
67 CreateAngleMeasureCommand::CreateAngleMeasureCommand( 68 CreateAngleMeasureCommand::CreateAngleMeasureCommand(
68 MessageBroker& broker, 69 MessageBroker& broker,
69 ViewportControllerWPtr controllerW, 70 ViewportControllerWPtr controllerW,
70 MeasureToolList& measureTools,
71 ScenePoint2D point) 71 ScenePoint2D point)
72 : CreateMeasureCommand(controllerW, measureTools) 72 : CreateMeasureCommand(controllerW)
73 , measureTool_(new AngleMeasureTool(broker, controllerW)) 73 , measureTool_(
74 boost::make_shared<AngleMeasureTool>(boost::ref(broker), controllerW))
74 { 75 {
75 measureTools_.push_back(measureTool_); 76 GetController()->AddMeasureTool(measureTool_);
76 measureTool_->SetSide1End(point); 77 measureTool_->SetSide1End(point);
77 measureTool_->SetCenter(point); 78 measureTool_->SetCenter(point);
78 measureTool_->SetSide2End(point); 79 measureTool_->SetSide2End(point);
79 } 80 }
80 81
88 void CreateAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) 89 void CreateAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos)
89 { 90 {
90 measureTool_->SetSide2End(scenePos); 91 measureTool_->SetSide2End(scenePos);
91 } 92 }
92 93
94 ViewportControllerPtr TrackerCommand::GetController()
95 {
96 ViewportControllerPtr controller = controllerW_.lock();
97 assert(controller); // accessing dead object?
98 return controller;
99 }
93 } 100 }