Bladeren bron

Merge branch 'feature/cursor'

Michael Pitidis 13 jaren geleden
bovenliggende
commit
b5c26a405a
1 gewijzigde bestanden met toevoegingen van 24 en 2 verwijderingen
  1. 24 2
      canvas.py

+ 24 - 2
canvas.py

@@ -12,6 +12,11 @@ from shape import Shape
 # - [maybe] Highlight source vertex when "attracting" line.
 # - [maybe] Find optimal epsilon value.
 
+CURSOR_DEFAULT = Qt.ArrowCursor
+CURSOR_DRAW    = Qt.CrossCursor
+CURSOR_MOVE    = Qt.ClosedHandCursor
+CURSOR_GRAB    = Qt.OpenHandCursor
+
 class Canvas(QWidget):
     zoomRequest = pyqtSignal(int)
     scrollRequest = pyqtSignal(int, int)
@@ -61,9 +66,12 @@ class Canvas(QWidget):
         """Update line with last point and current coordinates."""
         pos = self.transformPos(ev.posF())
 
+        self.restoreCursor()
+
         # Polygon copy moving.
         if Qt.RightButton & ev.buttons():
             if self.selectedShapeCopy and self.prevPoint:
+                self.overrideCursor(CURSOR_MOVE)
                 self.boundedMoveShape(self.selectedShapeCopy, pos)
                 self.repaint()
             elif self.selectedShape:
@@ -74,6 +82,9 @@ class Canvas(QWidget):
             return
 
         # Polygon drawing.
+        if self.editing():
+            self.overrideCursor(CURSOR_DRAW)
+
         if self.current and self.editing():
             color = self.lineColor
             if self.outOfPixmap(pos):
@@ -91,6 +102,7 @@ class Canvas(QWidget):
 
         # Polygon moving.
         if Qt.LeftButton & ev.buttons() and self.selectedShape and self.prevPoint:
+            self.overrideCursor(CURSOR_MOVE)
             self.boundedMoveShape(self.selectedShape, pos)
             self.shapeMoved.emit()
             self.repaint()
@@ -104,6 +116,7 @@ class Canvas(QWidget):
             if shape.containsPoint(pos) and self.isVisible(shape):
                 self.setToolTip("Object '%s'" % shape.label)
                 self.highlightedShape = shape
+                self.overrideCursor(CURSOR_GRAB)
                 break
         else:
             self.highlightedShape = None
@@ -139,11 +152,14 @@ class Canvas(QWidget):
         pos = self.transformPos(ev.posF())
         if ev.button() == Qt.RightButton:
             menu = self.menus[bool(self.selectedShapeCopy)]
+            self.restoreCursor()
             if not menu.exec_(self.mapToGlobal(ev.pos()))\
                and self.selectedShapeCopy:
                 # Cancel the move by deleting the shadow copy.
                 self.selectedShapeCopy = None
                 self.repaint()
+        elif ev.button() == Qt.LeftButton and self.selectedShape:
+            self.overrideCursor(CURSOR_GRAB)
 
     def endMove(self, copy=False):
         assert self.selectedShape and self.selectedShapeCopy
@@ -404,7 +420,7 @@ class Canvas(QWidget):
         self.shapes = list(shapes)
         self.current = None
         self.repaint()
-        
+
     def copySelectedShape(self):
         if self.selectedShape:
             newShape=self.selectedShape.copy()
@@ -414,11 +430,17 @@ class Canvas(QWidget):
             self.selectedShape=self.shapes[-1]
             self.repaint()
             return self.selectedShape
-    
+
     def setShapeVisible(self, shape, value):
         self.visible[shape] = value
         self.repaint()
 
+    def overrideCursor(self, cursor):
+        QApplication.setOverrideCursor(cursor)
+
+    def restoreCursor(self):
+        QApplication.restoreOverrideCursor()
+
 
 def pp(p):
     return '%.2f, %.2f' % (p.x(), p.y())