diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index aff3a6a8..7b407ce1 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -270,10 +270,11 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): study=self._study, trad=self._trad, parent=self ) - tab_widget.addTab( - self._tab_widget_graph, + tab_widget.insertTab( + 0, self._tab_widget_graph, self._trad["tab_graph_name"] ) + tab_widget.setCurrentWidget(self._tab_widget_graph) def enable_actions(self, action: str, enable: bool): """Enable of disable an action componant diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 67b95985..038e4a4e 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -477,6 +477,7 @@ class GraphWidget(QGraphicsView): self.m_origin_x = 0.0 self.m_origin_y = 0.0 self.clicked = False + self._panning = False self.setup_scene(min_size, max_size, size) @@ -492,8 +493,8 @@ class GraphWidget(QGraphicsView): self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorViewCenter) - self.scale(1, 1) - self.previousScale = 1 + self.scale(0.7, 0.7) + self.previousScale = 0.7 self.centerOn(1000.0, 1000.0) if min_size: @@ -948,6 +949,8 @@ class GraphWidget(QGraphicsView): def mousePressEvent(self, event): if self._only_display: + if event.button() == Qt.LeftButton: + self._start_pan(event) return if event.button() == Qt.RightButton \ @@ -970,6 +973,12 @@ class GraphWidget(QGraphicsView): self._selected_new_edge_src_node = None items = self.items(event.pos()) + if event.button() == Qt.LeftButton and not any( + isinstance(item, (NodeItem, EdgeItem, NodeText)) + for item in items + ): + self._start_pan(event) + return if items and type(items[0]) is EdgeItem: edge = items[0] if edge: @@ -1018,7 +1027,10 @@ class GraphWidget(QGraphicsView): def mouseReleaseEvent(self, event): self.clicked = False - if self._only_display: + if self._panning or self._only_display: + self._panning = False + self.viewport().unsetCursor() + event.accept() return locked = self.graph._status.is_read_only() @@ -1040,7 +1052,28 @@ class GraphWidget(QGraphicsView): self.update() super(GraphWidget, self).mouseReleaseEvent(event) + def _start_pan(self, event): + self.clicked = True + self._panning = True + self.m_origin_x = event.x() + self.m_origin_y = event.y() + self.viewport().setCursor(Qt.ClosedHandCursor) + event.accept() + def mouseMoveEvent(self, event): + if self._panning or self._only_display: + if self._panning and event.buttons() & Qt.LeftButton: + dx = event.x() - self.m_origin_x + dy = event.y() - self.m_origin_y + horizontal = self.horizontalScrollBar() + vertical = self.verticalScrollBar() + horizontal.setValue(horizontal.value() - dx) + vertical.setValue(vertical.value() - dy) + self.m_origin_x = event.x() + self.m_origin_y = event.y() + event.accept() + return + pos = self.mapToScene(event.pos()) locked = self.graph._status.is_read_only() @@ -1072,20 +1105,6 @@ class GraphWidget(QGraphicsView): # If state is "move" if self._state == "move": - # Move on scene - if not self.selected_item(): - if event.buttons() & Qt.LeftButton: - old_p = self.mapToScene( - int(self.m_origin_x), int(self.m_origin_y) - ) - new_p = self.mapToScene(event.pos()) - translation = new_p - old_p - - self.translate(translation.x(), translation.y()) - - self.m_origin_x = event.x() - self.m_origin_y = event.y() - # Propagate event self.update() super(GraphWidget, self).mouseMoveEvent(event)