Center on last node when doubleclick background

This commit is contained in:
Audrey 2022-11-16 14:34:39 -07:00
parent 46baaeeabb
commit 9ca70f758a
1 changed files with 22 additions and 13 deletions

View File

@ -422,24 +422,29 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
model_v = self.ug_lookup[v]
qu = self.qnodes[u]
qv = self.qnodes[v]
if isinstance(model_u, ExternNode):
towards_start = current_group in self.ng.succ[model_v]
towards_end = model_v in self.ng.succ[current_group]
elif isinstance(model_v, ExternNode):
towards_start = model_u in self.ng.succ[current_group]
towards_end = current_group in self.ng.succ[model_u]
else:
towards_end = model_v in self.ng.succ[model_u]
towards_start = model_u in self.ng.succ[model_v]
if model_u in qv.edges:
assert model_v in qu.edges
edge = qv.edges[model_u]
edge.prepareGeometryChange()
edge.toward_start = edge.start.model in self.ng.succ[edge.end.model]
edge.toward_end = edge.end.model in self.ng.succ[edge.start.model]
if edge.start is not qu:
assert edge.end is qu
towards_start, towards_end = towards_end, towards_start
edge.toward_start = towards_start
edge.toward_end = towards_end
else:
assert model_v not in qu.edges
if isinstance(model_u, ExternNode):
towards_start = current_group in self.ng.succ[model_v]
towards_end = model_v in self.ng.succ[current_group]
elif isinstance(model_v, ExternNode):
towards_start = model_u in self.ng.succ[current_group]
towards_end = current_group in self.ng.succ[model_u]
else:
towards_end = model_v in self.ng.succ[model_u]
towards_start = model_u in self.ng.succ[model_v]
arrow = HGArrow(None, self.qnodes[u], self.qnodes[v], towards_start, towards_end)
arrow = HGArrow(None, qu, qv, towards_start, towards_end)
qu.edges[model_v] = arrow
qv.edges[model_u] = arrow
self.scene().addItem(arrow)
@ -559,10 +564,14 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
# objectcontainer event handlers
def _on_change_group(self, **kwargs):
self._layouts[self._old_group] = {qnode.model: qnode.center for qnode in self.qnodes}
old_group = self._old_group
self._old_group = self.current_group.am_obj
self._layouts[old_group] = {qnode.model: qnode.center for qnode in self.qnodes}
self._layout(600)
self._update_scene_rect(True)
if old_group in self.ug_reverse:
self.qnodes[self.ug_reverse[old_group]].setSelected(True)
self.centerOn(self.qnodes[self.ug_reverse[old_group]].center)
def _on_selection_changed(self, src=None, **kwargs):
if src == 'qt':