Pass ModelItems instead of indices to Inserters

This commit is contained in:
Mika Fischer
2011-06-14 17:57:55 +02:00
parent 1bd0b47991
commit 5f19bf6cc7
2 changed files with 25 additions and 21 deletions
+12 -8
View File
@@ -74,16 +74,20 @@ class AnnotationScene(QGraphicsScene):
displayed by the scene. This can be either the index to a frame in a
video, or to an image.
"""
self.image_item_ = None
self.image_ = None
self.pixmap_ = None
self.root_ = root
self.clear()
if not root.isValid():
return
assert self.root_.model() == self.model_
item = self.model_.itemFromIndex(root)
self.image_ = self.labeltool_.getImage(item)
self.pixmap_ = QPixmap(okapy.guiqt.toQImage(self.image_))
item = QGraphicsPixmapItem(self.pixmap_)
self.image_item_ = self.model_.itemFromIndex(root)
self.image_ = self.labeltool_.getImage(self.image_item_)
self.pixmap_ = QPixmap(okapy.guiqt.toQImage(self.image_))
item = QGraphicsPixmapItem(self.pixmap_)
item.setZValue(-1)
self.setSceneRect(0, 0, self.pixmap_.width(), self.pixmap_.height())
self.addItem(item)
@@ -148,7 +152,7 @@ class AnnotationScene(QGraphicsScene):
# ignore events outside the scene rect
return
# insert mode
self.inserter_.mousePressEvent(event, self.root_)
self.inserter_.mousePressEvent(event, self.image_item_)
else:
# selection mode
QGraphicsScene.mousePressEvent(self, event)
@@ -158,7 +162,7 @@ class AnnotationScene(QGraphicsScene):
print "mouseReleaseEvent", self.sceneRect().contains(event.scenePos()), event.scenePos()
if self.inserter_ is not None:
# insert mode
self.inserter_.mouseReleaseEvent(event, self.root_)
self.inserter_.mouseReleaseEvent(event, self.image_item_)
else:
# selection mode
QGraphicsScene.mouseReleaseEvent(self, event)
@@ -168,7 +172,7 @@ class AnnotationScene(QGraphicsScene):
# print "mouseMoveEvent", self.sceneRect().contains(event.scenePos()), event.scenePos()
if self.inserter_ is not None:
# insert mode
self.inserter_.mouseMoveEvent(event, self.root_)
self.inserter_.mouseMoveEvent(event, self.image_item_)
else:
# selection mode
QGraphicsScene.mouseMoveEvent(self, event)
@@ -217,7 +221,7 @@ class AnnotationScene(QGraphicsScene):
if self.inserter_ is not None:
# insert mode
self.inserter_.keyPressEvent(event, self.root_)
self.inserter_.keyPressEvent(event, self.image_item_)
else:
# selection mode
if event.key() == Qt.Key_Delete:
+13 -13
View File
@@ -17,27 +17,27 @@ class ItemInserter:
def mode(self):
return self.mode_
def mousePressEvent(self, event, index):
def mousePressEvent(self, event, image_item):
event.accept()
def mouseReleaseEvent(self, event, index):
def mouseReleaseEvent(self, event, image_item):
event.accept()
def mouseMoveEvent(self, event, index):
def mouseMoveEvent(self, event, image_item):
event.accept()
def keyPressEvent(self, event, index):
def keyPressEvent(self, event, image_item):
event.ignore()
def allowOutOfSceneEvents(self):
return False
class PointItemInserter(ItemInserter):
def mousePressEvent(self, event, index):
def mousePressEvent(self, event, image_item):
pos = event.scenePos()
ann = {'type': 'point',
'x': pos.x(), 'y': pos.y()}
index.model().addAnnotation(index, ann)
image_item.addAnnotation(ann)
event.accept()
class RectItemInserter(ItemInserter):
@@ -46,7 +46,7 @@ class RectItemInserter(ItemInserter):
self.current_item_ = None
self.init_pos_ = None
def mousePressEvent(self, event, index):
def mousePressEvent(self, event, image_item):
pos = event.scenePos()
item = QGraphicsRectItem(QRectF(pos.x(), pos.y(), 0, 0))
item.setPen(Qt.red)
@@ -55,7 +55,7 @@ class RectItemInserter(ItemInserter):
self.scene().addItem(item)
event.accept()
def mouseMoveEvent(self, event, index):
def mouseMoveEvent(self, event, image_item):
if self.current_item_ is not None:
assert self.init_pos_ is not None
rect = QRectF(self.init_pos_, event.scenePos()).normalized()
@@ -63,7 +63,7 @@ class RectItemInserter(ItemInserter):
event.accept()
def mouseReleaseEvent(self, event, index):
def mouseReleaseEvent(self, event, image_item):
if self.current_item_ is not None:
if self.current_item_.rect().width() > 1 and \
self.current_item_.rect().height() > 1:
@@ -72,7 +72,7 @@ class RectItemInserter(ItemInserter):
'x': rect.x(), 'y': rect.y(),
'width': rect.width(), 'height': rect.height()}
ann.update(self.mode())
index.model().addAnnotation(index, ann)
image_item.addAnnotation(ann)
self.scene().removeItem(self.current_item_)
self.current_item_ = None
self.init_pos_ = None
@@ -94,7 +94,7 @@ class FixedRatioRectItemInserter(RectItemInserter):
self.ratio_ = float(mode.get('_ratio', 1))
RectItemInserter.setMode(self, mode)
def mouseMoveEvent(self, event, index):
def mouseMoveEvent(self, event, image_item):
if self.current_item_ is not None:
new_geometry = QRectF(self.current_item_.rect().topLeft(), event.scenePos())
dx = new_geometry.width()
@@ -115,7 +115,7 @@ class PolygonItemInserter(ItemInserter):
ItemInserter.__init__(self, scene, mode)
self.current_item_ = None
def mousePressEvent(self, event, index):
def mousePressEvent(self, event, image_item):
pos = event.scenePos()
if self.current_item_ is None:
item = QGraphicsPolygonItem(QPolygonF([pos]))
@@ -128,7 +128,7 @@ class PolygonItemInserter(ItemInserter):
event.accept()
def mouseMoveEvent(self, event, index):
def mouseMoveEvent(self, event, image_item):
if self.current_item_ is not None:
pos = event.scenePos()
polygon = self.current_item_.polygon()