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