mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Overwrite secetedItems: new option to get user items only
This commit is contained in:
parent
ff073445af
commit
94117b82c1
3 changed files with 57 additions and 16 deletions
|
|
@ -48,7 +48,7 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
:param mode: "width" or "height".
|
||||
"""
|
||||
|
||||
values = [getattr(i, mode) for i in self.selectedItems()]
|
||||
values = [getattr(i, mode) for i in self.selectedItems(user_only=True)]
|
||||
if not values:
|
||||
return
|
||||
avg = sum(values) / len(values)
|
||||
|
|
@ -56,10 +56,11 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
logger.debug(f'Calculated average {mode} {avg}')
|
||||
|
||||
scale_factors = []
|
||||
for item in self.selectedItems():
|
||||
for item in self.selectedItems(user_only=True):
|
||||
scale_factors.append(avg / getattr(item, mode))
|
||||
self.undo_stack.push(
|
||||
commands.NormalizeItems(self.selectedItems(), scale_factors))
|
||||
commands.NormalizeItems(
|
||||
self.selectedItems(user_only=True), scale_factors))
|
||||
|
||||
def normalize_height(self):
|
||||
"""Scale selected images to the same height."""
|
||||
|
|
@ -74,7 +75,8 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
|
||||
Size meaning the area = widh * height.
|
||||
"""
|
||||
sizes = [i.width * i.height for i in self.selectedItems()]
|
||||
sizes = [i.width * i.height
|
||||
for i in self.selectedItems(user_only=True)]
|
||||
|
||||
if not sizes:
|
||||
return
|
||||
|
|
@ -83,15 +85,16 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
logger.debug(f'Calculated average size {avg}')
|
||||
|
||||
scale_factors = []
|
||||
for item in self.selectedItems():
|
||||
for item in self.selectedItems(user_only=True):
|
||||
scale_factors.append(math.sqrt(avg / item.width / item.height))
|
||||
self.undo_stack.push(
|
||||
commands.NormalizeItems(self.selectedItems(), scale_factors))
|
||||
commands.NormalizeItems(
|
||||
self.selectedItems(user_only=True), scale_factors))
|
||||
|
||||
def flip_items(self, vertical=False):
|
||||
"""Flip selected items."""
|
||||
self.undo_stack.push(
|
||||
commands.FlipItems(self.selectedItems(),
|
||||
commands.FlipItems(self.selectedItems(user_only=True),
|
||||
self.get_selection_center(),
|
||||
vertical=vertical))
|
||||
|
||||
|
|
@ -103,17 +106,17 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
def has_selection(self):
|
||||
"""Checks whether there are currently items selected."""
|
||||
|
||||
return bool(self.selectedItems())
|
||||
return bool(self.selectedItems(user_only=True))
|
||||
|
||||
def has_single_selection(self):
|
||||
"""Checks whether there's currently exactly one item selected."""
|
||||
|
||||
return len(self.selectedItems()) == 1
|
||||
return len(self.selectedItems(user_only=True)) == 1
|
||||
|
||||
def has_multi_selection(self):
|
||||
"""Checks whether there are currently more than one items selected."""
|
||||
|
||||
return len(self.selectedItems()) > 1
|
||||
return len(self.selectedItems(user_only=True)) > 1
|
||||
|
||||
def mousePressEvent(self, event):
|
||||
if event.button() == Qt.MouseButtons.RightButton:
|
||||
|
|
@ -169,7 +172,20 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
self.move_active = False
|
||||
super().mouseReleaseEvent(event)
|
||||
|
||||
def selectedItems(self, user_only=False):
|
||||
"""If ``user_only`` is set to ``True``, only return items added
|
||||
by the user (i.e. no multi select outlines and other UI items).
|
||||
|
||||
User items are items that have a ``save_id`` attribute.
|
||||
"""
|
||||
|
||||
items = super().selectedItems()
|
||||
if user_only:
|
||||
return list(filter(lambda i: hasattr(i, 'save_id'), items))
|
||||
return items
|
||||
|
||||
def items_for_save(self):
|
||||
|
||||
"""Returns the items that are to be saved.
|
||||
|
||||
Items to be saved are items that have a save_id attribute.
|
||||
|
|
|
|||
|
|
@ -184,7 +184,8 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin):
|
|||
def on_action_delete_items(self):
|
||||
logger.debug('Deleting items...')
|
||||
self.undo_stack.push(
|
||||
commands.DeleteItems(self.scene, self.scene.selectedItems()))
|
||||
commands.DeleteItems(
|
||||
self.scene, self.scene.selectedItems(user_only=True)))
|
||||
|
||||
def on_action_normalize_height(self):
|
||||
self.scene.normalize_height()
|
||||
|
|
@ -203,19 +204,19 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin):
|
|||
|
||||
def on_action_reset_scale(self):
|
||||
self.undo_stack.push(commands.ResetScale(
|
||||
self.scene.selectedItems()))
|
||||
self.scene.selectedItems(user_only=True)))
|
||||
|
||||
def on_action_reset_rotation(self):
|
||||
self.undo_stack.push(commands.ResetRotation(
|
||||
self.scene.selectedItems()))
|
||||
self.scene.selectedItems(user_only=True)))
|
||||
|
||||
def on_action_reset_flip(self):
|
||||
self.undo_stack.push(commands.ResetFlip(
|
||||
self.scene.selectedItems()))
|
||||
self.scene.selectedItems(user_only=True)))
|
||||
|
||||
def on_action_reset_transforms(self):
|
||||
self.undo_stack.push(commands.ResetTransforms(
|
||||
self.scene.selectedItems()))
|
||||
self.scene.selectedItems(user_only=True)))
|
||||
|
||||
def on_items_loaded(self, value):
|
||||
self.scene.add_delayed_items()
|
||||
|
|
@ -345,7 +346,7 @@ class BeeGraphicsView(QtWidgets.QGraphicsView, ActionsMixin):
|
|||
|
||||
def on_selection_changed(self):
|
||||
logger.debug('Currently selected items: %s',
|
||||
len(self.scene.selectedItems()))
|
||||
len(self.scene.selectedItems(user_only=True)))
|
||||
self.actiongroup_set_enabled('active_when_selection',
|
||||
self.scene.has_selection())
|
||||
self.viewport().repaint()
|
||||
|
|
|
|||
|
|
@ -402,6 +402,30 @@ class BeeGraphicsSceneTestCase(BeeTestCase):
|
|||
mouse_mock.assert_called_once_with(event)
|
||||
assert self.scene.move_active is False
|
||||
|
||||
def test_selected_items(self):
|
||||
item1 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item1)
|
||||
item1.setSelected(True)
|
||||
item2 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item2)
|
||||
item2.setSelected(True)
|
||||
selected = self.scene.selectedItems()
|
||||
assert len(selected) == 3 # Multi select item!
|
||||
assert item1 in selected
|
||||
assert item2 in selected
|
||||
|
||||
def test_selected_items_user_only(self):
|
||||
item1 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item1)
|
||||
item1.setSelected(True)
|
||||
item2 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item2)
|
||||
item2.setSelected(True)
|
||||
selected = self.scene.selectedItems(user_only=True)
|
||||
assert len(selected) == 2 # No multi select item!
|
||||
assert item1 in selected
|
||||
assert item2 in selected
|
||||
|
||||
def test_items_for_save(self):
|
||||
item1 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item1)
|
||||
|
|
|
|||
Loading…
Reference in a new issue