EnhancedGraphicsView.cpp
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ArmarXGui::EnhancedGraphicsView
17 * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
18 * @date 2017
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
23
24#include <QGraphicsItem>
25
26namespace armarx
27{
28
29 Qt::KeyboardModifier
34
35 qreal
40
41 Qt::KeyboardModifier
46
47 qreal
49 {
50 return zoomFacor;
51 }
52
53 Qt::KeyboardModifier
58
59 Qt::MouseButton
64
65 void
67 {
68 rotationEnabled = enabled;
69 }
70
71 void
73 {
74 rotationEnabled = !disabled;
75 }
76
77 void
79 {
80 rotationModifier = mod;
81 }
82
83 void
85 {
86 rotationFactor = factor;
87 }
88
89 void
91 {
92 zoomEnabled = enabled;
93 }
94
95 void
97 {
98 zoomEnabled = !disabled;
99 }
100
101 void
103 {
104 zoomModifier = mod;
105 }
106
107 void
109 {
110 zoomFacor = factor;
111 }
112
113 void
115 {
116 draggingEnabled = enabled;
117 }
118
119 void
121 {
122 draggingEnabled = !disabled;
123 }
124
125 void
127 {
128 draggingModifier = mod;
129 }
130
131 void
133 {
134 draggingButton = button;
135 }
136
137 void
139 {
140 for (QGraphicsItem* i : items())
141 {
142 i->setVisible(visible);
143 }
144 }
145
146 void
148 {
149 draggingStartPosition = mapToScene(e->pos());
150 QGraphicsView::mousePressEvent(e);
151 }
152
153 void
155 {
156 if ((e->modifiers() & draggingModifier).testFlag(draggingModifier) &&
157 (e->buttons() & draggingButton).testFlag(draggingButton))
158 {
159 const auto oldAnchor = transformationAnchor();
160 setTransformationAnchor(QGraphicsView::NoAnchor);
161
162 const QPointF vector = mapToScene(e->pos()) - draggingStartPosition;
163 translate(vector.x(), vector.y());
164 draggingStartPosition = mapToScene(e->pos());
165 e->accept();
166
167 setTransformationAnchor(oldAnchor);
168 return;
169 }
170 QGraphicsView::mouseMoveEvent(e);
171 }
172
173 void
175 {
176 bool used = false;
177 if ((e->modifiers() & zoomModifier).testFlag(zoomModifier))
178 {
179 const auto oldAnchor = transformationAnchor();
180 setTransformationAnchor(QGraphicsView::NoAnchor);
181
182 float factor = std::pow(zoomFacor, e->delta() < 0 ? -1 : +1);
183 scale(factor, factor);
184 used = true;
185
186 setTransformationAnchor(oldAnchor);
187 }
188 if ((e->modifiers() & rotationModifier).testFlag(rotationModifier))
189 {
190 const auto oldAnchor = transformationAnchor();
191 setTransformationAnchor(QGraphicsView::NoAnchor);
192
193 rotate(e->delta() * rotationFactor);
194 used = true;
195
196 setTransformationAnchor(oldAnchor);
197 }
198 if (used)
199 {
200 e->accept();
201 }
202 else
203 {
204 QGraphicsView::wheelEvent(e);
205 }
206 }
207
208} // namespace armarx
void mousePressEvent(QMouseEvent *e) override
void setRotationDisabled(bool disabled=true)
void mouseMoveEvent(QMouseEvent *e) override
void setZoomDisabled(bool disabled=true)
Qt::KeyboardModifier rotationModifier
void wheelEvent(QWheelEvent *e) override
Qt::KeyboardModifier getDraggingKeyboardModifier() const
void setDraggingMouseButton(Qt::MouseButton button)
Qt::KeyboardModifier getZoomKeyboardModifier() const
void setDraggingEnabled(bool enabled=true)
void setDraggingKeyboardModifier(Qt::KeyboardModifier mod)
void setDraggingDisabled(bool disabled=true)
Qt::KeyboardModifier draggingModifier
Qt::KeyboardModifier getRotationKeyboardModifier() const
Qt::MouseButton getDraggingMouseButton() const
void setRotationEnabled(bool enabled=true)
void setRotationKeyboardModifier(Qt::KeyboardModifier mod)
void setZoomEnabled(bool enabled=true)
void setZoomKeyboardModifier(Qt::KeyboardModifier mod)
This file offers overloads of toIce() and fromIce() functions for STL container types.