double-click on out-node will take you to the right place (if it exists)

This commit is contained in:
Audrey 2022-11-16 15:30:53 -07:00
parent 9ca70f758a
commit 046b4538be
1 changed files with 25 additions and 4 deletions

View File

@ -135,6 +135,25 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
self.current_group.am_event()
elif isinstance(node, RelativeAtom):
self.instance.workspace.jump_to(node.atom.loc.ins_addr)
elif isinstance(node, ExternNode):
atlas = self.ng.succ[node.adj_to]
rev = False
if self.current_group.am_obj not in atlas:
atlas = self.ng.pred[node.adj_to]
rev = True
if self.current_group.am_obj not in atlas:
l.error("?????")
return
attrs = next(iter(atlas[self.current_group.am_obj].values()))
further_edge = attrs['prev' if rev else 'next']
further_node = further_edge[0 if rev else 1]
if self.current_group.am_obj.parent == further_node:
target = ExternNode(self.current_group.am_obj)
else:
target = further_node
self.current_group.am_obj = self.current_group.parent
self.current_group.am_event(focus=target)
def label(self, node: RelativeAtomOrGroup) -> str:
if node not in self._labels:
@ -563,15 +582,17 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
# objectcontainer event handlers
def _on_change_group(self, **kwargs):
def _on_change_group(self, focus=None, **kwargs):
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)
if focus is None:
focus = old_group
if focus in self.ug_reverse:
self.qnodes[self.ug_reverse[focus]].setSelected(True)
self.centerOn(self.qnodes[self.ug_reverse[focus]].center)
def _on_selection_changed(self, src=None, **kwargs):
if src == 'qt':