コード例 #1
0
ファイル: Widget.py プロジェクト: hypothetical-inc/gaffer
	def __mouseButtonPress( self, qObject, qEvent ) :

		if (
			self.__dragDropEvent is not None and self.__dragDropEvent.__startedByKeyPress
			and ( Widget._buttons( qEvent.button() ) & GafferUI.ButtonEvent.Buttons.Left )
		) :
			# We are doing a virtual drag based on a keypress, but once the actual mouse button gets pressed,
			# we replace it with an actual drag.
			self.__dragDropEvent.__startedByKeyPress = False
			return True

		widget = Widget._owner( qObject )
		if widget._buttonPressSignal is not None :
			event = GafferUI.ButtonEvent(
				Widget._buttons( qEvent.button() ),
				self.__virtualButtons( qEvent.buttons() ),
				self.__widgetSpaceLine( qEvent, widget ),
				0.0,
				Widget._modifiers( qEvent.modifiers() ),
			)

			if event.buttons  :
				result = widget._buttonPressSignal( widget, event )
				if result :
					self.__lastButtonPressWidget = weakref.ref( widget )
					self.__lastButtonPressEvent = event
				return result

		return False
コード例 #2
0
    def testNoShortCutting(self):

        s = GafferUI.Gadget.ButtonSignal()
        c1 = s.connect(self.falseSlot)
        c2 = s.connect(self.trueSlot)

        self.assertEqual(self.trueSlotCalled, False)
        self.assertEqual(self.falseSlotCalled, False)

        self.assertEqual(s(None, GafferUI.ButtonEvent()), True)

        self.assertEqual(self.trueSlotCalled, True)
        self.assertEqual(self.falseSlotCalled, True)
コード例 #3
0
    def __leave(self, widget):

        self._qtWidget().clearFocus()

        p = self.mousePosition(relativeTo=self)
        event = GafferUI.ButtonEvent(
            GafferUI.ButtonEvent.Buttons.None_,
            GafferUI.ButtonEvent.Buttons.None_,
            IECore.LineSegment3f(imath.V3f(p.x, p.y, 1),
                                 imath.V3f(p.x, p.y, 0)))

        if not self._makeCurrent():
            return False

        self.__viewportGadget.leaveSignal()(self.__viewportGadget, event)
コード例 #4
0
ファイル: Widget.py プロジェクト: ericmehl/gaffer
	def __wheel( self, qObject, qEvent ) :

		widget = Widget._owner( qObject )
		if widget._wheelSignal is not None :

			event = GafferUI.ButtonEvent(
				GafferUI.ButtonEvent.Buttons.None_,
				Widget._buttons( qEvent.buttons() ),
				self.__widgetSpaceLine( qEvent, widget ),
				qEvent.delta() / 8.0,
				Widget._modifiers( qEvent.modifiers() ),
			)

			return widget._wheelSignal( widget, event )

		return False
コード例 #5
0
    def __mouseButtonDblClick(self, qObject, qEvent):

        self.__lastButtonPressWidget = None

        widget = Widget._owner(qObject)
        if widget._buttonDoubleClickSignal is not None:

            event = GafferUI.ButtonEvent(
                Widget._buttons(qEvent.button()),
                Widget._buttons(qEvent.buttons()),
                self.__positionToLine(qEvent.pos()),
                0.0,
                Widget._modifiers(qEvent.modifiers()),
            )

            return widget._buttonDoubleClickSignal(widget, event)

        return False
コード例 #6
0
    def __mouseMove(self, qObject, qEvent):

        if self.__doDrag(qObject, qEvent):
            return True

        widget = Widget._owner(qObject)
        if widget._mouseMoveSignal is not None:

            event = GafferUI.ButtonEvent(
                Widget._buttons(qEvent.button()),
                Widget._buttons(qEvent.buttons()),
                self.__positionToLine(qEvent.pos()),
                0.0,
                Widget._modifiers(qEvent.modifiers()),
            )

            return widget._mouseMoveSignal(widget, event)

        return False
コード例 #7
0
    def __enter(self, widget):

        if not isinstance(QtWidgets.QApplication.focusWidget(),
                          (QtWidgets.QLineEdit, QtWidgets.QPlainTextEdit)):
            self._qtWidget().setFocus()

        ## \todo Widget.enterSignal() should be providing this
        # event itself.
        p = self.mousePosition(relativeTo=self)
        event = GafferUI.ButtonEvent(
            GafferUI.ButtonEvent.Buttons.None_,
            GafferUI.ButtonEvent.Buttons.None_,
            IECore.LineSegment3f(imath.V3f(p.x, p.y, 1),
                                 imath.V3f(p.x, p.y, 0)))

        if not self._makeCurrent():
            return False

        self.__viewportGadget.enterSignal()(self.__viewportGadget, event)
コード例 #8
0
    def __mouseButtonPress(self, qObject, qEvent):

        widget = Widget._owner(qObject)
        if widget._buttonPressSignal is not None:
            event = GafferUI.ButtonEvent(
                Widget._buttons(qEvent.button()),
                Widget._buttons(qEvent.buttons()),
                self.__positionToLine(qEvent.pos()),
                0.0,
                Widget._modifiers(qEvent.modifiers()),
            )

            if event.buttons:
                result = widget._buttonPressSignal(widget, event)
                if result:
                    self.__lastButtonPressWidget = weakref.ref(widget)
                    self.__lastButtonPressEvent = event
                return result

        return False
コード例 #9
0
    def __mouseButtonRelease(self, qObject, qEvent):

        if self.__dragDropEvent is not None:
            return self.__endDrag(qObject, qEvent)
        else:

            self.__lastButtonPressWidget = None
            self.__lastButtonPressEvent = None

            widget = Widget._owner(qObject)
            if widget._buttonReleaseSignal is not None:

                event = GafferUI.ButtonEvent(
                    Widget._buttons(qEvent.button()),
                    Widget._buttons(qEvent.buttons()),
                    self.__positionToLine(qEvent.pos()),
                    0.0,
                    Widget._modifiers(qEvent.modifiers()),
                )

                return widget._buttonReleaseSignal(widget, event)

        return False
コード例 #10
0
    def testExceptionHandling(self):

        # We don't want exceptions in one slot to prevent the
        # invocation of other slots. But we do want the errors from
        # those slots being printed to stderr.

        s = GafferUI.Gadget.ButtonSignal()
        c1 = s.connect(self.exceptionSlot)
        c2 = s.connect(self.trueSlot)

        self.assertEqual(self.exceptionSlotCalled, False)
        self.assertEqual(self.trueSlotCalled, False)

        tmpStdErr = six.moves.cStringIO()
        sys.stderr = tmpStdErr
        try:
            self.assertEqual(s(None, GafferUI.ButtonEvent()), True)
        finally:
            sys.stderr = sys.__stderr__

        self.assertIn("oops", tmpStdErr.getvalue())
        self.assertEqual(self.exceptionSlotCalled, True)
        self.assertEqual(self.trueSlotCalled, True)
コード例 #11
0
ファイル: Widget.py プロジェクト: hypothetical-inc/gaffer
	def __mouseButtonRelease( self, qObject, qEvent ) :

		buttons = self.__virtualButtons( qEvent.buttons() )
		if self.__dragDropEvent is not None and ( buttons & self.__dragDropEvent.buttons ) == 0 :
			return self.__endDrag( qObject, qEvent )
		else :

			self.__lastButtonPressWidget = None
			self.__lastButtonPressEvent = None

			widget = Widget._owner( qObject )
			if widget._buttonReleaseSignal is not None :

				event = GafferUI.ButtonEvent(
					Widget._buttons( qEvent.button() ),
					buttons,
					self.__widgetSpaceLine( qEvent, widget ),
					0.0,
					Widget._modifiers( qEvent.modifiers() ),
				)

				return widget._buttonReleaseSignal( widget, event )

		return False