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