Network: cleanest version of drag clic to move on the graph + network graph view only on the main tab (no more interaction on mouse hover) + graph on main tab

dev_dylan
Dylan Jeannin 2026-09-08 17:31:01 +02:00
parent 9f46bcd853
commit 74d23386a7
2 changed files with 39 additions and 19 deletions

View File

@ -270,10 +270,11 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
study=self._study, trad=self._trad, parent=self study=self._study, trad=self._trad, parent=self
) )
tab_widget.addTab( tab_widget.insertTab(
self._tab_widget_graph, 0, self._tab_widget_graph,
self._trad["tab_graph_name"] self._trad["tab_graph_name"]
) )
tab_widget.setCurrentWidget(self._tab_widget_graph)
def enable_actions(self, action: str, enable: bool): def enable_actions(self, action: str, enable: bool):
"""Enable of disable an action componant """Enable of disable an action componant

View File

@ -477,6 +477,7 @@ class GraphWidget(QGraphicsView):
self.m_origin_x = 0.0 self.m_origin_x = 0.0
self.m_origin_y = 0.0 self.m_origin_y = 0.0
self.clicked = False self.clicked = False
self._panning = False
self.setup_scene(min_size, max_size, size) self.setup_scene(min_size, max_size, size)
@ -492,8 +493,8 @@ class GraphWidget(QGraphicsView):
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorViewCenter) self.setResizeAnchor(QGraphicsView.AnchorViewCenter)
self.scale(1, 1) self.scale(0.7, 0.7)
self.previousScale = 1 self.previousScale = 0.7
self.centerOn(1000.0, 1000.0) self.centerOn(1000.0, 1000.0)
if min_size: if min_size:
@ -948,6 +949,8 @@ class GraphWidget(QGraphicsView):
def mousePressEvent(self, event): def mousePressEvent(self, event):
if self._only_display: if self._only_display:
if event.button() == Qt.LeftButton:
self._start_pan(event)
return return
if event.button() == Qt.RightButton \ if event.button() == Qt.RightButton \
@ -970,6 +973,12 @@ class GraphWidget(QGraphicsView):
self._selected_new_edge_src_node = None self._selected_new_edge_src_node = None
items = self.items(event.pos()) 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: if items and type(items[0]) is EdgeItem:
edge = items[0] edge = items[0]
if edge: if edge:
@ -1018,7 +1027,10 @@ class GraphWidget(QGraphicsView):
def mouseReleaseEvent(self, event): def mouseReleaseEvent(self, event):
self.clicked = False self.clicked = False
if self._only_display: if self._panning or self._only_display:
self._panning = False
self.viewport().unsetCursor()
event.accept()
return return
locked = self.graph._status.is_read_only() locked = self.graph._status.is_read_only()
@ -1040,7 +1052,28 @@ class GraphWidget(QGraphicsView):
self.update() self.update()
super(GraphWidget, self).mouseReleaseEvent(event) 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): 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()) pos = self.mapToScene(event.pos())
locked = self.graph._status.is_read_only() locked = self.graph._status.is_read_only()
@ -1072,20 +1105,6 @@ class GraphWidget(QGraphicsView):
# If state is "move" # If state is "move"
if self._state == "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 # Propagate event
self.update() self.update()
super(GraphWidget, self).mouseMoveEvent(event) super(GraphWidget, self).mouseMoveEvent(event)