X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=data%2Ftemplates%2FPythonComponent%2Fsrc%2FView%2FGraphicsView.py;fp=data%2Ftemplates%2FPythonComponent%2Fsrc%2FView%2FGraphicsView.py;h=6635e134747482dc111a372bfce1ae7b0dfee768;hb=458ca3d65199bf618d286a5d252916eb186ff031;hp=0000000000000000000000000000000000000000;hpb=712a68982349a38df871457db4508ab8b2866b8e;p=tools%2Fsat.git diff --git a/data/templates/PythonComponent/src/View/GraphicsView.py b/data/templates/PythonComponent/src/View/GraphicsView.py new file mode 100755 index 0000000..6635e13 --- /dev/null +++ b/data/templates/PythonComponent/src/View/GraphicsView.py @@ -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