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