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