Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/CreateAngleMeasureTracker.cpp @ 700:059e1fd05fd6 refactor-viewport-controller
Introduced the ViewportController that sits between the application and the
Scene2D to handle the trackers and measuring tools. This is a work in progress.
The Scene2D is no longer an observable. Message sending is managed by the
ViewportController.
Move some refs to shared and weak to prevent lifetime issues.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Sun, 19 May 2019 16:26:17 +0200 |
parents | 8b6adfb62a2f |
children | 28b9e3a54200 |
comparison
equal
deleted
inserted
replaced
699:5c551f078c18 | 700:059e1fd05fd6 |
---|---|
25 | 25 |
26 namespace OrthancStone | 26 namespace OrthancStone |
27 { | 27 { |
28 CreateAngleMeasureTracker::CreateAngleMeasureTracker( | 28 CreateAngleMeasureTracker::CreateAngleMeasureTracker( |
29 MessageBroker& broker, | 29 MessageBroker& broker, |
30 Scene2DWPtr sceneW, | 30 ViewportControllerWPtr controllerW, |
31 std::vector<TrackerCommandPtr>& undoStack, | 31 std::vector<TrackerCommandPtr>& undoStack, |
32 MeasureToolList& measureTools, | 32 MeasureToolList& measureTools, |
33 const PointerEvent& e) | 33 const PointerEvent& e) |
34 : CreateMeasureTracker(sceneW, undoStack, measureTools) | 34 : CreateMeasureTracker(controllerW, undoStack, measureTools) |
35 , state_(CreatingSide1) | 35 , state_(CreatingSide1) |
36 { | 36 { |
37 Scene2DPtr scene = sceneW.lock(); | |
38 command_.reset( | 37 command_.reset( |
39 new CreateAngleMeasureCommand( | 38 new CreateAngleMeasureCommand( |
40 broker, | 39 broker, |
41 sceneW, | 40 controllerW, |
42 measureTools, | 41 measureTools, |
43 e.GetMainPosition().Apply(scene->GetCanvasToSceneTransform()))); | 42 e.GetMainPosition().Apply(GetScene()->GetCanvasToSceneTransform()))); |
44 } | 43 } |
45 | 44 |
46 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() | 45 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() |
47 { | 46 { |
48 } | 47 } |
49 | 48 |
50 void CreateAngleMeasureTracker::PointerMove(const PointerEvent& event) | 49 void CreateAngleMeasureTracker::PointerMove(const PointerEvent& event) |
51 { | 50 { |
52 Scene2DPtr scene = scene_.lock(); | 51 assert(GetScene()); |
53 if (!active_) | 52 |
53 if (!alive_) | |
54 { | 54 { |
55 throw OrthancException(ErrorCode_InternalError, | 55 throw OrthancException(ErrorCode_InternalError, |
56 "Internal error: wrong state in CreateAngleMeasureTracker::" | 56 "Internal error: wrong state in CreateAngleMeasureTracker::" |
57 "PointerMove: active_ == false"); | 57 "PointerMove: active_ == false"); |
58 } | 58 } |
59 | 59 |
60 ScenePoint2D scenePos = event.GetMainPosition().Apply( | 60 ScenePoint2D scenePos = event.GetMainPosition().Apply( |
61 scene->GetCanvasToSceneTransform()); | 61 GetScene()->GetCanvasToSceneTransform()); |
62 | 62 |
63 switch (state_) | 63 switch (state_) |
64 { | 64 { |
65 case CreatingSide1: | 65 case CreatingSide1: |
66 GetCommand()->SetCenter(scenePos); | 66 GetCommand()->SetCenter(scenePos); |
111 "Wrong state in CreateAngleMeasureTracker::" | 111 "Wrong state in CreateAngleMeasureTracker::" |
112 "PointerDown: state_ == CreatingSide1 ; this should not happen"); | 112 "PointerDown: state_ == CreatingSide1 ; this should not happen"); |
113 break; | 113 break; |
114 case CreatingSide2: | 114 case CreatingSide2: |
115 // we are done | 115 // we are done |
116 active_ = false; | 116 alive_ = false; |
117 break; | 117 break; |
118 default: | 118 default: |
119 throw OrthancException(ErrorCode_InternalError, | 119 throw OrthancException(ErrorCode_InternalError, |
120 "Wrong state in CreateAngleMeasureTracker::" | 120 "Wrong state in CreateAngleMeasureTracker::" |
121 "PointerMove: state_ invalid"); | 121 "PointerMove: state_ invalid"); |