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