annotate Framework/Scene2DViewport/ViewportController.h @ 1208:00e6bff9ea39 broker

handling of mouse interactions in ViewportController
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 03 Dec 2019 18:51:03 +0100
parents f3bb9a6dd949
children 644baa70373d
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,
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
42 const PointerEvent& event) = 0;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
43 };
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 // TODO - Move this to another file
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
47 class DefaultViewportInteractor : public IViewportInteractor
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
48 {
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
49 public:
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
50 virtual IFlexiblePointerTracker* CreateTracker(boost::shared_ptr<ViewportController> controller,
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
51 const PointerEvent& event) ORTHANC_OVERRIDE;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
52 };
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
53
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
54
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
55 class UndoStack;
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
56
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
57 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
58 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
59
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 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
61 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
62
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 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
64 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
65 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
66
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
67 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
68 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
69 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
70
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_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
72 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
73 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
74
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
75 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
76 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
77 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
78
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
79 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
80 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
81 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
82
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
83 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
84 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
85 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
86
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
87 /**
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
88 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
89 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
90
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
91 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
92 where measuring tool commands are stored.
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
93
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
94 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
95
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
96 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
97 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
98 */
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
99 class ViewportController :
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
100 public IObservable,
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
101 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
102 {
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
103 public:
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
104 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
105 SceneTransformChanged, ViewportController);
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
106
891
0aff28f15ea2 new abstraction: IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 865
diff changeset
107 ViewportController(boost::weak_ptr<UndoStack> undoStackW,
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
108 boost::shared_ptr<IViewport> viewport);
1020
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
109
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
110 ~ViewportController();
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
111
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
112 void SetInteractor(boost::shared_ptr<IViewportInteractor> interactor);
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 /**
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
115 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
116 (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
117 measure tool, if needed
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
118 */
842
2b245953b44b removed some c++11 for older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 818
diff changeset
119 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
120
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
121 /**
865
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
122 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
123 highlighted state
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
124 */
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
125 void ResetMeasuringToolsHighlight();
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
126
a29c13497557 Added operators to ScenePoint2D + highlight support on MouseOver for measuring tools
Benjamin Golinvaux <bgo@osimis.io>
parents: 858
diff changeset
127 /**
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
128 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
129 updates it according to user interaction
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
130 */
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
131 void AcquireActiveTracker(IFlexiblePointerTracker* tracker);
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
132
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
133 /** Forwarded to the underlying scene */
1203
f3bb9a6dd949 locking abstraction in IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
134 AffineTransform2D GetCanvasToSceneTransform() const;
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
135
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
136 /** Forwarded to the underlying scene */
1203
f3bb9a6dd949 locking abstraction in IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
137 AffineTransform2D GetSceneToCanvasTransform() const;
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
138
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
139 /** 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
140 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
141
721
af0aa0c149fa FitContent is now wrapped by the controller (for observability)
Benjamin Golinvaux <bgo@osimis.io>
parents: 700
diff changeset
142 /** Forwarded to the underlying scene, and broadcasted to the observers */
916
a911f5bb48da MultiPlatform Basic Scene sample (so far: SDL + Qt)
Alain Mazy <alain@mazy.be>
parents: 893
diff changeset
143 void FitContent();
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 698
diff changeset
144
722
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
145 /** 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
146 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
147
28b9e3a54200 Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
Benjamin Golinvaux <bgo@osimis.io>
parents: 721
diff changeset
148 /** 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
149 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
150
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
151 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
152 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
153 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
154 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
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 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
157 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
158
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
159 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
160 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
161 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
162 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
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 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
165 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
166 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
167 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
168 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
169 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
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 /**
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
172 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
173 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
174 */
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
175 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
176
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
177
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
178 /** forwarded to the UndoStack */
1020
ac88989817e3 TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
Benjamin Golinvaux <bgo@osimis.io>
parents: 942
diff changeset
179 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
180
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
181 /** 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
182 void Undo();
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
183
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
184 /** 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
185 void Redo();
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
186
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
187 /** 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
188 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
189
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
190 /** 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
191 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
192
1203
f3bb9a6dd949 locking abstraction in IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1059
diff changeset
193 IViewport& GetViewport() const
891
0aff28f15ea2 new abstraction: IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 865
diff changeset
194 {
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
195 return *viewport_;
891
0aff28f15ea2 new abstraction: IViewport
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 865
diff changeset
196 }
858
e3c56d4f863f GuiAdapter : mouse event routing in SDL + split the undo stack from the
Benjamin Golinvaux <bgo@osimis.io>
parents: 842
diff changeset
197
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
198
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
199 // Must be expressed in canvas coordinates
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
200 void HandleMousePress(const PointerEvent& event);
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
201
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
202 // Must be expressed in canvas coordinates
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
203 void HandleMouseMove(const PointerEvent& event);
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
204
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
205 // Must be expressed in canvas coordinates
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
206 void HandleMouseRelease(const PointerEvent& event);
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
207
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
208 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
209 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
210
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
211 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
212 boost::shared_ptr<IViewport> viewport_;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
213 boost::shared_ptr<IViewportInteractor> interactor_; // Application-specific factory of trackers
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
214 std::vector<boost::shared_ptr<MeasureTool> > measureTools_;
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
215 boost::shared_ptr<IFlexiblePointerTracker> activeTracker_; // TODO - Can't this be a "std::auto_ptr"?
774
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
216
66ac7a2d1e3a A few renames and cleanups + moved GUI constants to controller + start work on
Benjamin Golinvaux <bgo@osimis.io>
parents: 736
diff changeset
217 // this is cached
1208
00e6bff9ea39 handling of mouse interactions in ViewportController
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1203
diff changeset
218 double canvasToSceneFactor_;
698
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
219 };
8b6adfb62a2f Code is broken -- stashing ongoing work in a branch
Benjamin Golinvaux <bgo@osimis.io>
parents:
diff changeset
220 }