Example #1
0
 def mousePressEvent(self, ev):
     if QT5:
         pos = self.transformPos(ev.localPos())
     else:
         pos = self.transformPos(ev.posF())
     if ev.button() == QtCore.Qt.LeftButton:
         if self.drawing():
             if self.current:
                 # Add point to existing shape.
                 if self.createMode == "polygon":
                     self.current.addPoint(self.line[1])
                     self.line[0] = self.current[-1]
                     if self.current.isClosed():
                         self.finalise()
                 elif self.createMode == "trace":
                     self.mouseDoubleClickEvent(QtCore.QEvent(QtCore.QEvent.MouseButtonDblClick))
                     self.tracingActive = False
                 elif self.createMode in ["rectangle", "circle", "line"]:
                     assert len(self.current.points) == 1
                     self.current.points = self.line.points
                     self.finalise()
                 elif self.createMode == "linestrip":
                     self.current.addPoint(self.line[1])
                     self.line[0] = self.current[-1]
                     if int(ev.modifiers()) == QtCore.Qt.ControlModifier:
                         self.finalise()
             elif not self.outOfPixmap(pos):
                 # Create new shape.
                 self.current = Shape(shape_type=self.createMode)
                 self.current.addPoint(pos)
                 if self.createMode == "trace":
                     self.tracingActive = True
                 if self.createMode == "point":
                     self.finalise()
                 else:
                     if self.createMode == "circle":
                         self.current.shape_type = "circle"
                     self.line.points = [pos, pos]
                     self.setHiding()
                     self.drawingPolygon.emit(True)
                     self.update()
         else:
             group_mode = int(ev.modifiers()) == QtCore.Qt.ControlModifier
             self.selectShapePoint(pos, multiple_selection_mode=group_mode)
             self.prevPoint = pos
             self.repaint()
     elif ev.button() == QtCore.Qt.RightButton and self.editing():
         group_mode = int(ev.modifiers()) == QtCore.Qt.ControlModifier
         self.selectShapePoint(pos, multiple_selection_mode=group_mode)
         self.prevPoint = pos
         self.repaint()
Example #2
0
def persist_clipboard():
    """Persist the clipboard

    X11 stores only a reference to the clipboard data.
    Send a clipboard event to force a copy of the clipboard to occur.
    This ensures that the clipboard is present after git-cola exits.
    Otherwise, the reference is destroyed on exit.

    C.f. https://stackoverflow.com/questions/2007103/how-can-i-disable-clear-of-clipboard-on-exit-of-pyqt4-application

    """
    clipboard = QtWidgets.QApplication.clipboard()
    event = QtCore.QEvent(QtCore.QEvent.Clipboard)
    QtWidgets.QApplication.sendEvent(clipboard, event)
Example #3
0
    def mouseReleaseEvent(self, ev: QtGui.QMouseEvent) -> None:
        if ev.button() == QtCore.Qt.LeftButton and self.current and self.tracingActive:
            if len(self.current.points) > 1:
                self.mouseDoubleClickEvent(QtCore.QEvent(QtCore.QEvent.MouseButtonDblClick))
                self.tracingActive = False

        if ev.button() == QtCore.Qt.RightButton:
            menu = self.menus[len(self.selectedShapesCopy) > 0]
            self.restoreCursor()
            if (
                not menu.exec_(self.mapToGlobal(ev.pos()))
                and self.selectedShapesCopy
            ):
                # Cancel the move by deleting the shadow copy.
                self.selectedShapesCopy = []
                self.repaint()
        elif ev.button() == QtCore.Qt.LeftButton and self.selectedShapes:
            self.overrideCursor(CURSOR_GRAB)
            if (
                self.editing()
                and int(ev.modifiers()) == QtCore.Qt.ShiftModifier
            ):
                # Add point to line if: left-click + SHIFT on a line segment
                self.addPointToEdge()
        elif ev.button() == QtCore.Qt.LeftButton and self.selectedVertex():
            if (
                self.editing()
                and int(ev.modifiers()) == QtCore.Qt.ShiftModifier
            ):
                # Delete point if: left-click + SHIFT on a point
                self.removeSelectedPoint()

        if self.movingShape and self.hShape:
            index = self.shapes.index(self.hShape)
            if (
                self.shapesBackups[-1][index].points
                != self.shapes[index].points
            ):
                self.storeShapes()
                self.shapeMoved.emit()

            self.movingShape = False