Source code for director.vieweventfilter

import PythonQt
from PythonQt import QtCore, QtGui
import director.visualization as vis

[docs]class ViewEventFilter(object): LEFT_DOUBLE_CLICK_EVENT = 'LEFT_DOUBLE_CLICK_EVENT' def __init__(self, view): self.view = view self._leftMouseStart = None self._rightMouseStart = None self._handlers = {} self.installEventFilter()
[docs] def installEventFilter(self): self.eventFilter = PythonQt.dd.ddPythonEventFilter() self.eventFilter.connect('handleEvent(QObject*, QEvent*)', self.filterEvent) self.view.vtkWidget().installEventFilter(self.eventFilter) for eventType in self.getFilteredEvents(): self.eventFilter.addFilteredEventType(eventType)
[docs] def removeEventFilter(self): self.view.vtkWidget().removeEventFilter(self.eventFilter) self.eventFilter.disconnect('handleEvent(QObject*, QEvent*)', self.filterEvent)
[docs] def getFilteredEvents(self): return [QtCore.QEvent.MouseButtonDblClick, QtCore.QEvent.MouseButtonPress, QtCore.QEvent.MouseButtonRelease, QtCore.QEvent.MouseMove, QtCore.QEvent.Wheel, QtCore.QEvent.KeyPress, QtCore.QEvent.KeyRelease]
[docs] def addHandler(self, eventType, handler): self._handlers.setdefault(eventType, []).append(handler)
[docs] def callHandler(self, eventType, *args, **kwargs): for handler in self._handlers.get(eventType, []): if handler(*args, **kwargs): self.consumeEvent() break
[docs] def getMousePositionInView(self, event): return vis.mapMousePosition(self.view, event)
[docs] def getCursorDisplayPosition(self): cursorPos = self.view.mapFromGlobal(QtGui.QCursor.pos()) return cursorPos.x(), self.view.height - cursorPos.y()
[docs] def consumeEvent(self): self.eventFilter.setEventHandlerResult(True)
[docs] def filterEvent(self, obj, event): if event.type() == QtCore.QEvent.MouseButtonDblClick and event.button() == QtCore.Qt.LeftButton: self.onLeftDoubleClick(event) elif event.type() == QtCore.QEvent.MouseButtonPress and event.button() == QtCore.Qt.LeftButton: self._leftMouseStart = QtCore.QPoint(event.pos()) self.onLeftMousePress(event) elif event.type() == QtCore.QEvent.MouseButtonPress and event.button() == QtCore.Qt.RightButton: self._rightMouseStart = QtCore.QPoint(event.pos()) elif event.type() == QtCore.QEvent.MouseMove: if self._rightMouseStart is None and self._leftMouseStart is None: self.onMouseMove(event) else: if self._rightMouseStart is not None: delta = QtCore.QPoint(event.pos()) - self._rightMouseStart if delta.manhattanLength() > 3: self._rightMouseStart = None if self._leftMouseStart is not None: delta = QtCore.QPoint(event.pos()) - self._leftMouseStart if delta.manhattanLength() > 3: self._leftMouseStart = None elif event.type() == QtCore.QEvent.MouseButtonRelease and event.button() == QtCore.Qt.LeftButton and self._leftMouseStart is not None: self._leftMouseStart = None self.onLeftClick(event) elif event.type() == QtCore.QEvent.MouseButtonRelease and event.button() == QtCore.Qt.RightButton and self._rightMouseStart is not None: self._rightMouseStart = None self.onRightClick(event) elif event.type() == QtCore.QEvent.Wheel: self.onMouseWheel(event) elif event.type() == QtCore.QEvent.KeyPress: if not event.isAutoRepeat(): self.onKeyPress(event) self.onKeyPressRepeat(event) elif event.type() == QtCore.QEvent.KeyRelease and not event.isAutoRepeat(): self.onKeyRelease(event)
[docs] def onMouseWheel(self, event): pass
[docs] def onMouseMove(self, event): pass
[docs] def onLeftMousePress(self, event): pass
[docs] def onLeftDoubleClick(self, event): pass
[docs] def onLeftClick(self, event): pass
[docs] def onRightClick(self, event): pass
[docs] def onKeyPress(self, event): pass
[docs] def onKeyPressRepeat(self, event): pass
[docs] def onKeyRelease(self, event): pass