Salome HOME
style: black format
[tools/sat.git] / data / templates / PythonComponent / src / View / GraphicsView.py
1 from Polyline import Polyline
2 from Circle import Circle
3 from qtsalome import *
4
5
6 class GraphicsView(QGraphicsView):
7
8     moved = pyqtSignal(QPointF)
9     released = pyqtSignal(QPointF)
10
11     def __init__(self, scene):
12         QGraphicsView.__init__(self, scene)
13         self.setMouseTracking(True)
14         self._selectedItem = None
15         self.moved[QPointF].connect(self.execMouseMoveEvent)
16         self.released[QPointF].connect(self.execMouseReleaseEvent)
17         pass
18
19     def mousePressEvent(self, mouseEvent):
20         QGraphicsView.mousePressEvent(self, mouseEvent)
21         if self.scene() is None:
22             return
23         self._selectedItem = self.scene().mouseGrabberItem()
24         pass
25
26     def mouseMoveEvent(self, mouseEvent):
27         QGraphicsView.mouseMoveEvent(self, mouseEvent)
28         pt = mouseEvent.pos()
29         currentPos = self.mapToScene(pt)
30         self.moved.emit(currentPos)
31         pass
32
33     def mouseReleaseEvent(self, mouseEvent):
34         QGraphicsView.mouseReleaseEvent(self, mouseEvent)
35         if mouseEvent.button() == Qt.LeftButton:
36             pt = mouseEvent.pos()
37             newPos = self.mapToScene(pt)
38             self.released.emit(newPos)
39             self._selectedItem = None
40             pass
41         pass
42
43     def execMouseMoveEvent(self, currentPos):
44         if self._selectedItem is None:
45             return
46         selectedIndex = self._selectedItem.getIndex()
47         newX = currentPos.x()
48         newY = currentPos.y()
49         newPoint = newX, newY
50         model = self.scene().getModel()
51         pen = QPen(QColor("red"))
52         if isinstance(model, Polyline):
53             # Previsualisation
54             if selectedIndex == 0:
55                 nextPoint = model.getPoints()[selectedIndex + 1]
56                 xNext = nextPoint[0]
57                 yNext = nextPoint[1]
58                 self.scene().addLine(newX, newY, xNext, yNext, pen)
59                 pass
60             elif selectedIndex == len(model.getPoints()) - 1:
61                 previousPoint = model.getPoints()[selectedIndex - 1]
62                 xPrevious = previousPoint[0]
63                 yPrevious = previousPoint[1]
64                 self.scene().addLine(xPrevious, yPrevious, newX, newY, pen)
65                 pass
66             else:
67                 previousPoint = model.getPoints()[selectedIndex - 1]
68                 xPrevious = previousPoint[0]
69                 yPrevious = previousPoint[1]
70                 self.scene().addLine(xPrevious, yPrevious, newX, newY, pen)
71                 nextPoint = model.getPoints()[selectedIndex + 1]
72                 xNext = nextPoint[0]
73                 yNext = nextPoint[1]
74                 self.scene().addLine(newX, newY, xNext, yNext, pen)
75                 pass
76             pass
77         elif isinstance(model, Circle):
78             # Previsualisation
79             radius = float(model.getRadius())
80             rect = QRectF(newX - radius, newY - radius, 2 * radius, 2 * radius)
81             circleItem = QGraphicsEllipseItem()
82             circleItem.setPen(pen)
83             circleItem.setRect(rect)
84             self.scene().addItem(circleItem)
85             pass
86         pass
87
88     def execMouseReleaseEvent(self, newPos):
89         if self._selectedItem is None:
90             return
91         selectedIndex = self._selectedItem.getIndex()
92         newX = newPos.x()
93         newY = newPos.y()
94         newPoint = newX, newY
95         model = self.scene().getModel()
96         if isinstance(model, Polyline):
97             self.scene().getController().editPoint(model, newPoint, selectedIndex)
98             pass
99         elif isinstance(model, Circle):
100             self.scene().getController().editCenter(model, newPoint)
101             pass
102         pass
103
104
105 pass