This file is indexed.

/usr/share/pyshared/pivy/quarter/devices/MouseHandler.py is in python-pivy 0.5.0~v609hg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
###
# Copyright (c) 2002-2008 Kongsberg SIM
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

from PyQt4 import QtCore, QtGui

from pivy import coin

from DeviceHandler import DeviceHandler

class MouseHandler(DeviceHandler):
    def __init__(self):
        """The MouseHandler class provides translation of mouse events
        on the QuarterWidget. It is registered with the DeviceManager by
        default."""

        self.location2 = coin.SoLocation2Event()
        self.mousebutton = coin.SoMouseButtonEvent()
        self.windowsize = coin.SbVec2s(-1, -1)

    def translateEvent(self, qevent):
        """Translates from QMouseEvents to SoLocation2Events and SoMouseButtonEvents"""

        if qevent.type() == QtCore.QEvent.MouseMove:
            return self.mouseMoveEvent(qevent)

        if qevent.type() in (QtCore.QEvent.MouseButtonPress, QtCore.QEvent.MouseButtonRelease):
            return self.mouseButtonEvent(qevent)

        if qevent.type() == QtCore.QEvent.Wheel:
            return self.mouseWheelEvent(qevent)

        if qevent.type() == QtCore.QEvent.Resize:
            self.resizeEvent(qevent)

        return None


    def resizeEvent(self, qevent):
        self.windowsize = coin.SbVec2s(qevent.size().width(),
                                       qevent.size().height())

    def mouseMoveEvent(self, qevent):
        self.setModifiers(self.location2, qevent)

        assert(self.windowsize[1] != -1)
        pos = coin.SbVec2s(qevent.pos().x(), self.windowsize[1] - qevent.pos().y() - 1)
        self.location2.setPosition(pos)
        return self.location2

    def mouseWheelEvent(self, qevent):

        # FIXME 20080509 jkg: zooming with mouse wheel seems to not work.
        # At least it does not work in the original Quarter examples either.

        self.setModifiers(self.mousebutton, qevent)
        self.mousebutton.setPosition(self.location2.getPosition())

        # QWheelEvent::delta() returns the distance that the wheel is
        # rotated, in eights of a degree. A positive value indicates that
        # the wheel was rotated forwards away from the user; a negative
        # value indicates that the wheel was rotated backwards toward the
        # user.

        if qevent.delta() > 0:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.BUTTON4)
        else:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.BUTTON5)

        self.mousebutton.setState(coin.SoButtonEvent.DOWN)
        return self.mousebutton


    def mouseButtonEvent(self, qevent):
        self.setModifiers(self.mousebutton, qevent)
        self.mouseMoveEvent(qevent) # NOTE jkg: mouseMoveEvent not triggered when showing popup menu in PyQt
        self.mousebutton.setPosition(self.location2.getPosition())

        if qevent.type() == QtCore.QEvent.MouseButtonPress:
            self.mousebutton.setState(coin.SoButtonEvent.DOWN)
        else:
            self.mousebutton.setState(coin.SoButtonEvent.UP)

        if qevent.button() == QtCore.Qt.LeftButton:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.BUTTON1)
        elif qevent.button() == QtCore.Qt.RightButton:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.BUTTON2)
        elif qevent.button() == QtCore.Qt.MidButton:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.BUTTON3)
        else:
            self.mousebutton.setButton(coin.SoMouseButtonEvent.ANY)
            SoDebugError.postInfo("MouseHandler.mouseButtonEvent",
                                  "Unhandled ButtonState = %x", event.button())
        return self.mousebutton