annotate Framework/Scene2DViewport/ViewportController.h @ 1214:741201eab130 broker

removing pointer to viewport from ViewportController
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 04 Dec 2019 19:12:08 +0100
parents 86a8266b8888
children 9efa66d8d3f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
1 /**
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
2 * Stone of Orthanc
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
6 *
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
10 * the License, or (at your option) any later version.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
11 *
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
15 * Affero General Public License for more details.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
16 *
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
19 **/
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
20
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
21 #pragma once
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
22
818
e42b491f1fb2 Removed typedefs to shared_ptr by making them explicit. Removed using namespace
Benjamin Golinvaux <bgo@osimis.io>
parents: 774
diff changeset
23 #include "PredeclaredTypes.h"
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
24
891
0aff28f15ea2 new abstraction: IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 865
diff changeset
25 #include "../Viewport/IViewport.h"
736
c0fcb2757b0a enforce relative includes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 722
diff changeset
26 #include "../Scene2DViewport/IFlexiblePointerTracker.h"
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
27
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
28 #include <boost/enable_shared_from_this.hpp>
722
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
29 #include <stack>
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
30
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
31 namespace OrthancStone
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
32 {
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
33 // TODO - Move this to another file
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
34 class IViewportInteractor : public boost::noncopyable
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
35 {
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
36 public:
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
37 virtual ~IViewportInteractor()
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
38 {
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
39 }
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
40
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
41 virtual IFlexiblePointerTracker* CreateTracker(boost::shared_ptr<ViewportController> controller,
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
42 IViewport& viewport,
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
43 const PointerEvent& event) = 0;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
44 };
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
45
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
46
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
47 // TODO - Move this to another file
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
48 class DefaultViewportInteractor : public IViewportInteractor
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
49 {
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
50 public:
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
51 virtual IFlexiblePointerTracker* CreateTracker(boost::shared_ptr<ViewportController> controller,
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
52 IViewport& viewport,
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
53 const PointerEvent& event) ORTHANC_OVERRIDE;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
54 };
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
55
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
56
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
57 class UndoStack;
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
58
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
59 const double ARC_RADIUS_CANVAS_COORD = 30.0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
60 const double TEXT_CENTER_DISTANCE_CANVAS_COORD = 90;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
61
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
62 const double HANDLE_SIDE_LENGTH_CANVAS_COORD = 10.0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
63 const double HIT_TEST_MAX_DISTANCE_CANVAS_COORD = 15.0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
64
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
65 const uint8_t TEXT_COLOR_RED = 0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
66 const uint8_t TEXT_COLOR_GREEN = 223;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
67 const uint8_t TEXT_COLOR_BLUE = 81;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
68
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
69 const uint8_t TOOL_ANGLE_LINES_COLOR_RED = 0;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
70 const uint8_t TOOL_ANGLE_LINES_COLOR_GREEN = 183;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
71 const uint8_t TOOL_ANGLE_LINES_COLOR_BLUE = 17;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
72
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
73 const uint8_t TOOL_ANGLE_LINES_HL_COLOR_RED = 0;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
74 const uint8_t TOOL_ANGLE_LINES_HL_COLOR_GREEN = 17;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
75 const uint8_t TOOL_ANGLE_LINES_HL_COLOR_BLUE = 183;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
76
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
77 const uint8_t TOOL_LINES_COLOR_RED = 0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
78 const uint8_t TOOL_LINES_COLOR_GREEN = 223;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
79 const uint8_t TOOL_LINES_COLOR_BLUE = 21;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
80
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
81 const uint8_t TOOL_LINES_HL_COLOR_RED = 0;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
82 const uint8_t TOOL_LINES_HL_COLOR_GREEN = 21;
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
83 const uint8_t TOOL_LINES_HL_COLOR_BLUE = 223;
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
84
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
85 const uint8_t TEXT_OUTLINE_COLOR_RED = 0;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
86 const uint8_t TEXT_OUTLINE_COLOR_GREEN = 56;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
87 const uint8_t TEXT_OUTLINE_COLOR_BLUE = 21;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
88
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
89 /**
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
90 This object is responsible for hosting a scene, responding to messages from
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
91 the model and updating the scene accordingly.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
92
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
93 It contains the list of active measuring tools as well as the stack
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
94 where measuring tool commands are stored.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
95
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
96 The active tracker is also stored in the viewport controller.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
97
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
98 Each canvas or other GUI area where we want to display a 2D image, either
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
99 directly or through slicing must be assigned a ViewportController.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
100 */
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
101 class ViewportController :
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
102 public IObservable,
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
103 public boost::enable_shared_from_this<ViewportController>
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
104 {
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
105 public:
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
106 ORTHANC_STONE_DEFINE_ORIGIN_MESSAGE(__FILE__, __LINE__, \
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
107 SceneTransformChanged, ViewportController);
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
108
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
109 ViewportController(boost::weak_ptr<UndoStack> undoStackW);
1020
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
110
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
111 ~ViewportController();
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
112
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
113 /**
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
114 This method returns the list of measure tools containing the supplied point
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
115 (in scene coords). A tracker can then be requested from the chosen
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
116 measure tool, if needed
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
117 */
842
2b245953b44b removed some c++11 for older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 818
diff changeset
118 std::vector<boost::shared_ptr<MeasureTool> > HitTestMeasureTools(ScenePoint2D p);
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
119
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
120 /**
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
121 This function will traverse the measuring tools and will clear their
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
122 highlighted state
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
123 */
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
124 void ResetMeasuringToolsHighlight();
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
125
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
126 /**
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
127 With this method, the object takes ownership of the supplied tracker and
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
128 updates it according to user interaction
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
129 */
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
130 void AcquireActiveTracker(IFlexiblePointerTracker* tracker);
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
131
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
132 /** Forwarded to the underlying scene */
1203
f3bb9a6dd949 locking abstraction in IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
133 AffineTransform2D GetCanvasToSceneTransform() const;
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
134
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
135 /** Forwarded to the underlying scene */
1203
f3bb9a6dd949 locking abstraction in IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
136 AffineTransform2D GetSceneToCanvasTransform() const;
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
137
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
138 /** Forwarded to the underlying scene, and broadcasted to the observers */
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
139 void SetSceneToCanvasTransform(const AffineTransform2D& transform);
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
140
721
af0aa0c149fa FitContent is now wrapped by the controller (for observability)
Benjamin Golinvaux <bgo@osimis.io>
parents: 700
diff changeset
141 /** Forwarded to the underlying scene, and broadcasted to the observers */
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
142 void FitContent(IViewport& viewport);
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
143
722
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
144 /** Adds a new measure tool */
818
e42b491f1fb2 Removed typedefs to shared_ptr by making them explicit. Removed using namespace
Benjamin Golinvaux <bgo@osimis.io>
parents: 774
diff changeset
145 void AddMeasureTool(boost::shared_ptr<MeasureTool> measureTool);
722
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
146
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
147 /** Removes a measure tool or throws if it cannot be found */
818
e42b491f1fb2 Removed typedefs to shared_ptr by making them explicit. Removed using namespace
Benjamin Golinvaux <bgo@osimis.io>
parents: 774
diff changeset
148 void RemoveMeasureTool(boost::shared_ptr<MeasureTool> measureTool);
722
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
149
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
150 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
151 The square handle side length in *scene* coordinates
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
152 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
153 double GetHandleSideLengthS() const;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
154
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
155 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
156 The angle measure too arc radius in *scene* coordinates
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
157
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
158 Note: you might wonder why this is not part of the AngleMeasureTool itself,
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
159 but we prefer to put all such constants in the same location, to ease
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
160 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
161 double GetAngleToolArcRadiusS() const;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
162
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
163 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
164 The hit test maximum distance in *scene* coordinates.
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
165 If a pointer event is less than GetHandleSideLengthS() to a GUI element,
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
166 the hit test for this GUI element is seen as true
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
167 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
168 double GetHitTestMaximumDistanceS() const;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
169
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
170 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
171 Distance between the top of the angle measuring tool and the center of
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
172 the label showing the actual measure, in *scene* coordinates
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
173 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
174 double GetAngleTopTextLabelDistanceS() const;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
175
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
176
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
177 /** forwarded to the UndoStack */
1020
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
178 void PushCommand(boost::shared_ptr<MeasureCommand> command);
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
179
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
180 /** forwarded to the UndoStack */
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
181 void Undo();
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
182
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
183 /** forwarded to the UndoStack */
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
184 void Redo();
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
185
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
186 /** forwarded to the UndoStack */
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
187 bool CanUndo() const;
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
188
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
189 /** forwarded to the UndoStack */
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
190 bool CanRedo() const;
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
191
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
192
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
193 // Must be expressed in canvas coordinates
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
194 void HandleMousePress(IViewport& viewport,
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
195 IViewportInteractor& interactor,
1210
644baa70373d removing interactor from the ViewportController members
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1208
diff changeset
196 const PointerEvent& event);
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
197
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
198 // Must be expressed in canvas coordinates
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
199 void HandleMouseMove(const PointerEvent& event);
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
200
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
201 // Must be expressed in canvas coordinates
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
202 void HandleMouseRelease(const PointerEvent& event);
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
203
1213
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
204 const Scene2D& GetScene() const
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
205 {
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
206 return scene_;
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
207 }
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
208
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
209 Scene2D& GetScene()
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
210 {
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
211 return scene_;
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
212 }
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
213
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
214 private:
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
215 double GetCanvasToSceneFactor() const;
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
216
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
217 boost::weak_ptr<UndoStack> undoStackW_; // Global stack, possibly shared by all viewports
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
218 std::vector<boost::shared_ptr<MeasureTool> > measureTools_;
1214
741201eab130 removing pointer to viewport from ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1213
diff changeset
219 boost::shared_ptr<IFlexiblePointerTracker> activeTracker_; // TODO - Couldn't this be a "std::auto_ptr"?
1213
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
220
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
221 Scene2D scene_;
86a8266b8888 moving the scene from IViewport to ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1210
diff changeset
222
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
223 // this is cached
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
224 double canvasToSceneFactor_;
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
225 };
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
226 }