Bring newly inserted items to front

This commit is contained in:
Rebecca Breu 2021-03-31 09:47:24 +02:00
parent b9487371f8
commit aff745d27f
4 changed files with 21 additions and 20 deletions

View file

@ -26,8 +26,8 @@ class InsertItems(QtGui.QUndoCommand):
def redo(self):
self.scene.clearSelection()
for item in self.items:
item.setSelected(True)
self.scene.addItem(item)
item.setSelected(True)
def undo(self):
self.scene.clearSelection()

View file

@ -52,7 +52,7 @@ class BeePixmapItem(QtWidgets.QGraphicsPixmapItem):
self.single_select_mode = False
self.scale_active = False
self.viewport_scale = None
self.viewport_scale = 1
def __str__(self):
return (f'Image "{self.filename}" '
@ -115,8 +115,14 @@ class BeePixmapItem(QtWidgets.QGraphicsPixmapItem):
screen so we need to adjust the values according to the scale
factor sof the view and the item."""
scale = self.scene().views()[0].get_scale()
return value / scale / self.scale()
if self.scene():
scale = self.scene().views()[0].get_scale()
return value / scale / self.scale()
else:
# This can happen when the item is already removed from
# the scene but its boundingRect is still needed. Use the
# last known scaling factor instead
return value * self.viewport_scale
@property
def select_resize_size(self):

View file

@ -11,34 +11,26 @@ from .base import BeeTestCase
class InsertItemsTestCase(BeeTestCase):
def test_redo_undo(self):
def get_images():
return list(filter(lambda i: isinstance(i, BeePixmapItem),
scene.items()))
scene = BeeGraphicsScene(None)
scene.update_selection = MagicMock()
scene.max_z = 5
item1 = BeePixmapItem(QtGui.QImage())
scene.addItem(item1)
item2 = BeePixmapItem(QtGui.QImage())
command = commands.InsertItems(scene, [item2])
command.redo()
assert len(get_images()) == 2
assert item1 in scene.items()
assert list(scene.items_for_save()) == [item1, item2]
assert item1.isSelected() is False
assert item2 in scene.items()
assert item2.isSelected() is True
item2.zValue() > 5
command.undo()
assert get_images() == [item1]
assert list(scene.items_for_save()) == [item1]
assert item1.isSelected() is False
class DeleteItemsTestCase(BeeTestCase):
def test_redo_undo(self):
def get_images():
return list(filter(lambda i: isinstance(i, BeePixmapItem),
scene.items()))
scene = BeeGraphicsScene(None)
scene.update_selection = MagicMock()
item1 = BeePixmapItem(QtGui.QImage())
@ -48,12 +40,10 @@ class DeleteItemsTestCase(BeeTestCase):
item2.setSelected(True)
command = commands.DeleteItems(scene, [item2])
command.redo()
assert get_images() == [item1]
assert list(scene.items_for_save()) == [item1]
command.undo()
assert len(get_images()) == 2
assert item1 in scene.items()
assert list(scene.items_for_save()) == [item1, item2]
assert item1.isSelected() is False
assert item2 in scene.items()
assert item2.isSelected() is True

View file

@ -102,6 +102,11 @@ class BeePixmapItemPaintstuffTestCase(BeeTestCase):
self.item.setScale(5)
assert self.item.fixed_length_for_viewport(100) == 20
def test_fixed_length_for_viewport_when_no_scene(self):
item = BeePixmapItem(QtGui.QImage())
item.viewport_scale = 0.5
assert item.fixed_length_for_viewport(100) == 50
def test_resize_size_when_scaled(self):
self.view.get_scale = MagicMock(return_value=2)
self.item.setScale(2)