Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

import PythonQt 

from PythonQt import QtCore, QtGui 

import director.visualization as vis 

 

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() 

 

    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) 

 

    def removeEventFilter(self): 

        self.view.vtkWidget().removeEventFilter(self.eventFilter) 

        self.eventFilter.disconnect('handleEvent(QObject*, QEvent*)', self.filterEvent) 

 

    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] 

 

    def addHandler(self, eventType, handler): 

        self._handlers.setdefault(eventType, []).append(handler) 

 

    def callHandler(self, eventType, *args, **kwargs): 

        for handler in self._handlers.get(eventType, []): 

            if handler(*args, **kwargs): 

                self.consumeEvent() 

                break 

 

    def getMousePositionInView(self, event): 

        return vis.mapMousePosition(self.view, event) 

 

    def getCursorDisplayPosition(self): 

        cursorPos = self.view.mapFromGlobal(QtGui.QCursor.pos()) 

        return cursorPos.x(), self.view.height - cursorPos.y() 

 

    def consumeEvent(self): 

        self.eventFilter.setEventHandlerResult(True) 

 

    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) 

 

    def onMouseWheel(self, event): 

        pass 

 

    def onMouseMove(self, event): 

        pass 

 

    def onLeftMousePress(self, event): 

        pass 

 

    def onLeftDoubleClick(self, event): 

        pass 

 

    def onLeftClick(self, event): 

        pass 

 

    def onRightClick(self, event): 

        pass 

 

    def onKeyPress(self, event): 

        pass 

 

    def onKeyPressRepeat(self, event): 

        pass 

 

    def onKeyRelease(self, event): 

        pass