diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 83aa8014..4646a011 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -925,9 +925,11 @@ class GraphWidget(QGraphicsView): self.scale(scaleFactor, scaleFactor) def mousePressEvent(self, event): - if self._only_display or self.graph._status.is_read_only(): + if self._only_display: return + locked = self.graph._status.is_read_only() + pos = self.mapToScene(event.pos()) self.clicked = True @@ -936,9 +938,6 @@ class GraphWidget(QGraphicsView): super(GraphWidget, self).mousePressEvent(event) return - if self.graph._status.is_read_only(): - return - # Move item and select edge item if self._state == "move": self._selected_new_edge_src_node = None @@ -948,39 +947,41 @@ class GraphWidget(QGraphicsView): edge = items[0] if edge: self.set_current_edge(edge) - elif items and type(items[0]) is NodeItem: - self._mouse_origin_x = pos.x() - self._mouse_origin_y = pos.y() - self._current_moved_node = items[0] + if not locked: + if items and type(items[0]) is NodeItem: + self._mouse_origin_x = pos.x() + self._mouse_origin_y = pos.y() + self._current_moved_node = items[0] - # Add nodes and edges - elif self._state == "add": - items = self.items(event.pos()) - nodes = list(filter(lambda i: type(i) is NodeItem, items)) - if not nodes: - self.add_node(pos) - self.set_selected_new_edge_src_node(None) - else: - if self.selected_new_edge_src_node() is None: - self.set_selected_new_edge_src_node(nodes[0]) + if not locked: + # Add nodes and edges + if self._state == "add": + items = self.items(event.pos()) + nodes = list(filter(lambda i: type(i) is NodeItem, items)) + if not nodes: + self.add_node(pos) + self.set_selected_new_edge_src_node(None) else: - self.add_edge(self.selected_new_edge_src_node(), nodes[0]) + if self.selected_new_edge_src_node() is None: + self.set_selected_new_edge_src_node(nodes[0]) + else: + self.add_edge(self.selected_new_edge_src_node(), nodes[0]) - # Delete nodes and edges - elif self._state == "del": - self._selected_new_edge_src_node = None - items = list( - filter( - lambda i: type(i) is NodeItem or type(i) is EdgeItem, - self.items(event.pos()) + # Delete nodes and edges + elif self._state == "del": + self._selected_new_edge_src_node = None + items = list( + filter( + lambda i: type(i) is NodeItem or type(i) is EdgeItem, + self.items(event.pos()) + ) ) - ) - if len(items) > 0: - item = items[0] - if type(item) is NodeItem: - self.del_node(item) - elif type(item) is EdgeItem: - self.del_edge(item) + if len(items) > 0: + item = items[0] + if type(item) is NodeItem: + self.del_node(item) + elif type(item) is EdgeItem: + self.del_edge(item) self.update() super(GraphWidget, self).mousePressEvent(event) @@ -988,10 +989,12 @@ class GraphWidget(QGraphicsView): def mouseReleaseEvent(self, event): self.clicked = False - if self._only_display or self.graph._status.is_read_only(): + if self._only_display: return - if self._state == "move": + locked = self.graph._status.is_read_only() + + if not locked and self._state == "move": if self._current_moved_node is not None: pos = self.mapToScene(event.pos()) self._undo.push( @@ -1007,10 +1010,8 @@ class GraphWidget(QGraphicsView): super(GraphWidget, self).mouseReleaseEvent(event) def mouseMoveEvent(self, event): - if self.graph._status.is_read_only(): - return - pos = self.mapToScene(event.pos()) + locked = self.graph._status.is_read_only() # Selecte item on the fly items = self.items(event.pos())