1 from Polyline import Polyline
2 from Circle import Circle
3 from PyQt4.QtGui import *
4 from PyQt4.QtCore import *
6 class GraphicsView( QGraphicsView ) :
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 )
16 def mousePressEvent( self, mouseEvent ) :
17 QGraphicsView.mousePressEvent( self, mouseEvent )
18 if self.scene() is None : return
19 self._selectedItem = self.scene().mouseGrabberItem()
22 def mouseMoveEvent( self, mouseEvent ) :
23 QGraphicsView.mouseMoveEvent( self, mouseEvent )
25 currentPos = self.mapToScene( pt )
26 self.emit( SIGNAL("moved(QPointF)"), currentPos )
29 def mouseReleaseEvent( self, mouseEvent ) :
30 QGraphicsView.mouseReleaseEvent( self, mouseEvent )
31 if mouseEvent.button() == Qt.LeftButton :
33 newPos = self.mapToScene( pt )
34 self.emit( SIGNAL("released(QPointF)"), newPos )
35 self._selectedItem = None
39 def execMouseMoveEvent( self, currentPos ) :
40 if self._selectedItem is None : return
41 selectedIndex = self._selectedItem.getIndex()
45 model = self.scene().getModel()
46 pen = QPen( QColor("red") )
47 if isinstance( model, Polyline ) :
49 if selectedIndex == 0 :
50 nextPoint = model.getPoints()[ selectedIndex+1 ]
53 self.scene().addLine( newX, newY, xNext, yNext, pen )
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 )
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 ]
69 self.scene().addLine( newX, newY, xNext, yNext, pen )
72 elif isinstance( model, Circle ) :
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 )
83 def execMouseReleaseEvent( self, newPos ) :
84 if self._selectedItem is None : return
85 selectedIndex = self._selectedItem.getIndex()
89 model = self.scene().getModel()
90 if isinstance( model, Polyline ) :
91 self.scene().getController().editPoint( model, newPoint, selectedIndex )
93 elif isinstance( model, Circle ) :
94 self.scene().getController().editCenter( model, newPoint )