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 m_qvView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
59
60 // Scale the view / do the zoom
61 double scaleFactor = 1.15;
62 if(event->delta() > 0) {
63 // Zoom in
64 m_qvView->scale(scaleFactor, scaleFactor);
65 } else {
66 // Zooming out
67 m_qvView->scale(1.0 / scaleFactor, 1.0 / scaleFactor);
68 }
69}
70
71//=============================================================================================================
72
73void LayoutScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* mouseEvent)
74{
75 if(mouseEvent->button() == Qt::LeftButton)
76 m_qvView->fitInView(this->itemsBoundingRect(), Qt::KeepAspectRatio);
77
78 QGraphicsScene::mouseDoubleClickEvent(mouseEvent);
79}
80
81//=============================================================================================================
82
83void LayoutScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
84{
85 switch(mouseEvent->button()) {
86 case Qt::LeftButton:
87 m_qvView->setDragMode(QGraphicsView::RubberBandDrag);
88
89// //If a normal left lick occurs without holding down CTRL -> Delete all selected items
90// if(!m_bExtendedSelectionMode)
91// m_selectedItems.clear();
92
93 break;
94
95 case Qt::RightButton:
96 m_bDragMode = true;
97 m_qvView->setDragMode(QGraphicsView::NoDrag);
98 m_mousePressPosition = mouseEvent->screenPos();
99
100 //return so that no selection event is called
101 return;
102 default:
103 break;
104 }
105
106 QGraphicsScene::mousePressEvent(mouseEvent);
107}
108
109//=============================================================================================================
110
111void LayoutScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
112{
113 if(m_bDragMode) {
114 int diffX = mouseEvent->screenPos().x() - m_mousePressPosition.x();
115 int diffY = mouseEvent->screenPos().y() - m_mousePressPosition.y();
116
117 m_mousePressPosition = mouseEvent->screenPos();
118
119 m_qvView->verticalScrollBar()->setValue(m_qvView->verticalScrollBar()->value() - diffY);
120 m_qvView->horizontalScrollBar()->setValue(m_qvView->horizontalScrollBar()->value() - diffX);
121 }
122
123 QGraphicsScene::mouseMoveEvent(mouseEvent);
124}
125
126//=============================================================================================================
127
128void LayoutScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
129{
130// if(m_bExtendedSelectionMode) {
131// qDebug()<<"Extended Selection";
132// //List of selected items during last rubberband action
133// QList<QGraphicsItem *> currentSelectedItemsList = this->selectedItems();
134
135// //Generate list of all selected items (dont add duplicates)
136// for(int i = 0; i<currentSelectedItemsList.size(); i++) {
137// if(!m_selectedItems.contains(currentSelectedItemsList.at(i))) {
138// //Duplicate not found - new item was selected since the last extended selection
139// qDebug()<<"add item to m_selectedItems";
140// m_selectedItems << currentSelectedItemsList.at(i);
141// }
142// else {
143// qDebug()<<"delete item from m_selectedItems";
144// //Duplicate found - already selected item was selected again since the last extended selection
145// m_selectedItems.removeAll(currentSelectedItemsList.at(i));
146// currentSelectedItemsList.at(i)->setSelected(false);
147// }
148// }
149
150// for(int i = 0; i<m_selectedItems.size(); i++)
151// m_selectedItems.at(i)->setSelected(true);
152
153// qDebug()<<m_selectedItems.size();
154// }
155
156 if(m_bDragMode) {
157 m_bDragMode = false;
158 this->update();
159 }
160
161 QGraphicsScene::mouseReleaseEvent(mouseEvent);
162}
163
164//=============================================================================================================
165
166void LayoutScene::keyPressEvent(QKeyEvent *keyEvent)
167{
168// if(keyEvent->key() == Qt::Key_Control)
169// m_bExtendedSelectionMode = true;
170
171 QGraphicsScene::keyPressEvent(keyEvent);
172}
173
174//=============================================================================================================
175
176void LayoutScene::keyReleaseEvent(QKeyEvent *keyEvent)
177{
178// if(keyEvent->key() == Qt::Key_Control)
179// m_bExtendedSelectionMode = false;
180
181 QGraphicsScene::keyReleaseEvent(keyEvent);
182}
183
184//=============================================================================================================
185
187{
188 if (event->type() == QEvent::Gesture) {
189 QGestureEvent* gestureEventCast = static_cast<QGestureEvent*>(event);
190
191// QList<QGesture *> gestureList = gestureEventCast->gestures();
192// for(int i = 0; i<gestureList.size(); i++)
193// qDebug()<<gestureList.at(i)->gestureType();
194// qDebug()<<"-----------------------";
195
196 return gestureEvent(static_cast<QGestureEvent*>(gestureEventCast));
197 }
198
199 return QGraphicsScene::event(event);
200}
201
202//=============================================================================================================
203
205{
206 //Pan event
207 if (QGesture *pan = event->gesture(Qt::PanGesture))
208 panTriggered(static_cast<QPanGesture *>(pan));
209
210 //Pinch event
211 if (QGesture *pinch = event->gesture(Qt::PinchGesture))
212 pinchTriggered(static_cast<QPinchGesture *>(pinch));
213
214 return true;
215}
216
217//=============================================================================================================
218
219void LayoutScene::panTriggered(QPanGesture *gesture)
220{
221 QPointF delta = gesture->delta();
222
223 m_qvView->verticalScrollBar()->setValue(m_qvView->verticalScrollBar()->value() + delta.y());
224 m_qvView->horizontalScrollBar()->setValue(m_qvView->horizontalScrollBar()->value() + delta.x());
225}
226
227//=============================================================================================================
228
229void LayoutScene::pinchTriggered(QPinchGesture *gesture)
230{
231 m_qvView->setTransformationAnchor(QGraphicsView::NoAnchor);
232 m_qvView->scale(gesture->scaleFactor(), gesture->scaleFactor());
233}
234
235//=============================================================================================================
236
237bool LayoutScene::eventFilter(QObject *object, QEvent *event)
238{
239 if (object == m_qvView && event->type() == QEvent::Gesture) {
240 QGestureEvent* gestureEventCast = static_cast<QGestureEvent*>(event);
241
242 return gestureEvent(static_cast<QGestureEvent*>(gestureEventCast));
243 }
244
245 return false;
246}
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 *)