From 9016152e2c170c3eda2a74701cd3da41f74c3d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Del=C3=A8gue?= Date: Thu, 28 Oct 2021 00:03:39 +0200 Subject: [PATCH] :rocket: The `bring_forward` method now works in constant time (or log if you count the depth of the Qt graphics tree) --- opencodeblocks/graphics/view.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/opencodeblocks/graphics/view.py b/opencodeblocks/graphics/view.py index 3d13e40a..db9eb37d 100644 --- a/opencodeblocks/graphics/view.py +++ b/opencodeblocks/graphics/view.py @@ -36,6 +36,7 @@ def __init__(self, scene:OCBScene, parent=None, self.edge_drag = None self.lastMousePos = QPointF(0, 0) + self.currentSelectedBlock = None self.init_ui() self.setScene(scene) @@ -139,19 +140,24 @@ def deleteSelected(self): selected_item.remove() scene.history.checkpoint("Delete selected elements") - def bring_forward(self, event: QMouseEvent, action="press"): - """ When a codeblock is selected, it will be drawn in front of other blocks""" + def bring_forward(self, event: QMouseEvent): + """ When a codeblock is selected, it will be drawn in front of other blocks """ scene = self.scene() item_at_click = self.itemAt(event.pos()) + if item_at_click is None: + return event - while item_at_click.parentItem() != None: + while item_at_click.parentItem() is not None: + if isinstance(item_at_click,OCBBlock): + break item_at_click = item_at_click.parentItem() if isinstance(item_at_click, OCBBlock): - for item in scene.items(): - if isinstance(item,OCBBlock): - item.setZValue(0) - item_at_click.setZValue(1) + if self.currentSelectedBlock is not None: + self.currentSelectedBlock.setZValue(0) + item_at_click.setZValue(1) + self.currentSelectedBlock = item_at_click + return event # This is never considered as a handling of the event.