diff --git a/typetapper/hierarchy_graph_view.py b/typetapper/hierarchy_graph_view.py index e9b9668..8ea9480 100644 --- a/typetapper/hierarchy_graph_view.py +++ b/typetapper/hierarchy_graph_view.py @@ -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':