v2.0.0
Loading...
Searching...
No Matches
layoutscene.cpp
Go to the documentation of this file.
1//=============================================================================================================
14
15//=============================================================================================================
16// INCLUDES
17//=============================================================================================================
18
19#include "layoutscene.h"
20
21//=============================================================================================================
22// QT INCLUDES
23//=============================================================================================================
24
25#include <QGraphicsView>
26#include <QGraphicsSceneMouseEvent>
27#include <QGestureEvent>
28#include <QScrollBar>
29#include <QDebug>
30
31//=============================================================================================================
32// USED NAMESPACES
33//=============================================================================================================
34
35using namespace DISPLIB;
36
37//=============================================================================================================
38// DEFINE MEMBER METHODS
39//=============================================================================================================
40
41LayoutScene::LayoutScene(QGraphicsView* view,
42 QObject* parent)
43: QGraphicsScene(parent)
44, m_qvView(view)
45, m_bDragMode(false)
46//, m_bExtendedSelectionMode(false)
47{
48 m_qvView->grabGesture(Qt::PanGesture);
49 m_qvView->grabGesture(Qt::PinchGesture);
50
51 //Install event filter to overcome QGrabGesture and QScrollBar problem
52 m_qvView->installEventFilter(this);
53}
54
55//=============================================================================================================
56
57void LayoutScene::wheelEvent(QGraphicsSceneWheelEvent* event)
58{
59 m_qvView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
60
61 // Scale the view / do the zoom
62 double scaleFactor = 1.15;
63 if (event->delta() > 0) {
64 // Zoom in
65 m_qvView->scale(scaleFactor, scaleFactor);
66 } else {
67 // Zooming out
68 m_qvView->scale(1.0 / scaleFactor, 1.0 / scaleFactor);
69 }
70}
71
72//=============================================================================================================
73
74void LayoutScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent)
75{
76 if (mouseEvent->button() == Qt::LeftButton)
77 m_qvView->fitInView(this->itemsBoundingRect(), Qt::KeepAspectRatio);
78
79 QGraphicsScene::mouseDoubleClickEvent(mouseEvent);
80}
81
82//=============================================================================================================
83
84void LayoutScene::mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent)
85{
86 switch (mouseEvent->button()) {
87 case Qt::LeftButton:
88 m_qvView->setDragMode(QGraphicsView::RubberBandDrag);
89
90 // //If a normal left lick occurs without holding down CTRL -> Delete all selected items
91 // if(!m_bExtendedSelectionMode)
92 // m_selectedItems.clear();
93
94 break;
95
96 case Qt::RightButton:
97 m_bDragMode = true;
98 m_qvView->setDragMode(QGraphicsView::NoDrag);
99 m_mousePressPosition = mouseEvent->screenPos();
100
101 //return so that no selection event is called
102 return;
103 default:
104 break;
105 }
106
107 QGraphicsScene::mousePressEvent(mouseEvent);
108}
109
110//=============================================================================================================
111
112void LayoutScene::mouseMoveEvent(QGraphicsSceneMouseEvent* mouseEvent)
113{
114 if (m_bDragMode) {
115 int diffX = mouseEvent->screenPos().x() - m_mousePressPosition.x();
116 int diffY = mouseEvent->screenPos().y() - m_mousePressPosition.y();
117
118 m_mousePressPosition = mouseEvent->screenPos();
119
120 m_qvView->verticalScrollBar()->setValue(m_qvView->verticalScrollBar()->value() - diffY);
121 m_qvView->horizontalScrollBar()->setValue(m_qvView->horizontalScrollBar()->value() - diffX);
122 }
123
124 QGraphicsScene::mouseMoveEvent(mouseEvent);
125}
126
127//=============================================================================================================
128
129void LayoutScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* mouseEvent)
130{
131 // if(m_bExtendedSelectionMode) {
132 // qDebug()<<"Extended Selection";
133 // //List of selected items during last rubberband action
134 // QList<QGraphicsItem *> currentSelectedItemsList = this->selectedItems();
135
136 // //Generate list of all selected items (dont add duplicates)
137 // for(int i = 0; i<currentSelectedItemsList.size(); i++) {
138 // if(!m_selectedItems.contains(currentSelectedItemsList.at(i))) {
139 // //Duplicate not found - new item was selected since the last extended selection
140 // qDebug()<<"add item to m_selectedItems";
141 // m_selectedItems << currentSelectedItemsList.at(i);
142 // }
143 // else {
144 // qDebug()<<"delete item from m_selectedItems";
145 // //Duplicate found - already selected item was selected again since the last extended selection
146 // m_selectedItems.removeAll(currentSelectedItemsList.at(i));
147 // currentSelectedItemsList.at(i)->setSelected(false);
148 // }
149 // }
150
151 // for(int i = 0; i<m_selectedItems.size(); i++)
152 // m_selectedItems.at(i)->setSelected(true);
153
154 // qDebug()<<m_selectedItems.size();
155 // }
156
157 if (m_bDragMode) {
158 m_bDragMode = false;
159 this->update();
160 }
161
162 QGraphicsScene::mouseReleaseEvent(mouseEvent);
163}
164
165//=============================================================================================================
166
167void LayoutScene::keyPressEvent(QKeyEvent* keyEvent)
168{
169 // if(keyEvent->key() == Qt::Key_Control)
170 // m_bExtendedSelectionMode = true;
171
172 QGraphicsScene::keyPressEvent(keyEvent);
173}
174
175//=============================================================================================================
176
177void LayoutScene::keyReleaseEvent(QKeyEvent* keyEvent)
178{
179 // if(keyEvent->key() == Qt::Key_Control)
180 // m_bExtendedSelectionMode = false;
181
182 QGraphicsScene::keyReleaseEvent(keyEvent);
183}
184
185//=============================================================================================================
186
188{
189 if (event->type() == QEvent::Gesture) {
190 QGestureEvent* gestureEventCast = static_cast<QGestureEvent*>(event);
191
192 // QList<QGesture *> gestureList = gestureEventCast->gestures();
193 // for(int i = 0; i<gestureList.size(); i++)
194 // qDebug()<<gestureList.at(i)->gestureType();
195 // qDebug()<<"-----------------------";
196
197 return gestureEvent(static_cast<QGestureEvent*>(gestureEventCast));
198 }
199
200 return QGraphicsScene::event(event);
201}
202
203//=============================================================================================================
204
206{
207 //Pan event
208 if (QGesture* pan = event->gesture(Qt::PanGesture))
209 panTriggered(static_cast<QPanGesture*>(pan));
210
211 //Pinch event
212 if (QGesture* pinch = event->gesture(Qt::PinchGesture))
213 pinchTriggered(static_cast<QPinchGesture*>(pinch));
214
215 return true;
216}
217
218//=============================================================================================================
219
220void LayoutScene::panTriggered(QPanGesture* gesture)
221{
222 QPointF delta = gesture->delta();
223
224 m_qvView->verticalScrollBar()->setValue(m_qvView->verticalScrollBar()->value() + delta.y());
225 m_qvView->horizontalScrollBar()->setValue(m_qvView->horizontalScrollBar()->value() + delta.x());
226}
227
228//=============================================================================================================
229
230void LayoutScene::pinchTriggered(QPinchGesture* gesture)
231{
232 m_qvView->setTransformationAnchor(QGraphicsView::NoAnchor);
233 m_qvView->scale(gesture->scaleFactor(), gesture->scaleFactor());
234}
235
236//=============================================================================================================
237
238bool LayoutScene::eventFilter(QObject* object, QEvent* event)
239{
240 if (object == m_qvView && event->type() == QEvent::Gesture) {
241 QGestureEvent* gestureEventCast = static_cast<QGestureEvent*>(event);
242
243 return gestureEvent(static_cast<QGestureEvent*>(gestureEventCast));
244 }
245
246 return false;
247}
Base QGraphicsScene providing pan, pinch-zoom and swipe gesture handling for the sensor-layout scenes...
2-D display widgets and visualisation helpers (charts, topography, colour maps).
QGraphicsView * m_qvView
void keyPressEvent(QKeyEvent *keyEvent)
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
LayoutScene(QGraphicsView *view, QObject *parent=0)
bool eventFilter(QObject *object, QEvent *event)
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
void panTriggered(QPanGesture *)
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
void wheelEvent(QGraphicsSceneWheelEvent *event)
bool gestureEvent(QGestureEvent *event)
bool event(QEvent *event)
void keyReleaseEvent(QKeyEvent *keyEvent)
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
void pinchTriggered(QPinchGesture *)