Salome HOME
Mise à jour du template PythonComponent
[tools/sat.git] / data / templates / PythonComponent / src / View / GraphicsView.py
diff --git a/data/templates/PythonComponent/src/View/GraphicsView.py b/data/templates/PythonComponent/src/View/GraphicsView.py
new file mode 100755 (executable)
index 0000000..6635e13
--- /dev/null
@@ -0,0 +1,100 @@
+from Polyline import Polyline
+from Circle import Circle
+from qtsalome import *
+
+class GraphicsView( QGraphicsView ) :
+
+   moved    = pyqtSignal(QPointF)
+   released = pyqtSignal(QPointF)
+
+   def __init__( self, scene ) :
+       QGraphicsView.__init__( self, scene )
+       self.setMouseTracking( True )
+       self._selectedItem = None
+       self.moved[QPointF].connect(self.execMouseMoveEvent)
+       self.released[QPointF].connect(self.execMouseReleaseEvent)
+       pass
+
+   def mousePressEvent( self, mouseEvent ) :
+       QGraphicsView.mousePressEvent( self, mouseEvent )
+       if self.scene() is None : return
+       self._selectedItem = self.scene().mouseGrabberItem()
+       pass
+
+   def mouseMoveEvent( self, mouseEvent ) :
+       QGraphicsView.mouseMoveEvent( self, mouseEvent )
+       pt = mouseEvent.pos()
+       currentPos = self.mapToScene( pt )
+       self.moved.emit(currentPos)
+       pass
+
+   def mouseReleaseEvent( self, mouseEvent ) :
+       QGraphicsView.mouseReleaseEvent( self, mouseEvent )
+       if mouseEvent.button() == Qt.LeftButton :
+          pt = mouseEvent.pos()
+          newPos = self.mapToScene( pt )
+          self.released.emit(newPos)
+          self._selectedItem = None
+          pass
+       pass
+
+   def execMouseMoveEvent( self, currentPos ) :
+       if self._selectedItem is None : return
+       selectedIndex = self._selectedItem.getIndex()
+       newX = currentPos.x()
+       newY = currentPos.y()
+       newPoint = newX, newY
+       model = self.scene().getModel()
+       pen = QPen( QColor("red") )
+       if isinstance( model, Polyline ) :
+          #Previsualisation
+          if selectedIndex == 0 :
+             nextPoint = model.getPoints()[ selectedIndex+1 ]
+             xNext = nextPoint[0]
+             yNext = nextPoint[1]
+             self.scene().addLine( newX, newY, xNext, yNext, pen )
+             pass
+          elif selectedIndex == len( model.getPoints()) - 1 :
+             previousPoint = model.getPoints()[ selectedIndex-1 ]
+             xPrevious = previousPoint[0]
+             yPrevious = previousPoint[1]
+             self.scene().addLine( xPrevious, yPrevious, newX, newY, pen )
+             pass
+          else :
+             previousPoint = model.getPoints()[ selectedIndex-1 ]
+             xPrevious = previousPoint[0]
+             yPrevious = previousPoint[1]
+             self.scene().addLine( xPrevious, yPrevious, newX, newY, pen )
+             nextPoint = model.getPoints()[ selectedIndex+1 ]
+             xNext = nextPoint[0]
+             yNext = nextPoint[1]
+             self.scene().addLine( newX, newY, xNext, yNext, pen )
+             pass
+          pass
+       elif isinstance( model, Circle ) :
+          #Previsualisation
+          radius = float( model.getRadius() )
+          rect = QRectF( newX-radius, newY-radius, 2*radius, 2*radius )
+          circleItem = QGraphicsEllipseItem()
+          circleItem.setPen( pen )
+          circleItem.setRect( rect )
+          self.scene().addItem( circleItem )
+          pass
+       pass
+
+   def execMouseReleaseEvent( self, newPos ) :
+       if self._selectedItem is None : return
+       selectedIndex = self._selectedItem.getIndex()
+       newX = newPos.x()
+       newY = newPos.y()
+       newPoint = newX, newY
+       model = self.scene().getModel()
+       if isinstance( model, Polyline ) :
+          self.scene().getController().editPoint( model, newPoint, selectedIndex )
+          pass
+       elif isinstance( model, Circle ) :
+          self.scene().getController().editCenter( model, newPoint )
+          pass
+       pass
+
+pass