Fix centering and bounds recompute on expand

This commit is contained in:
Audrey 2022-11-16 13:39:22 -07:00
parent 1b1122226b
commit 8e23aae786
1 changed files with 19 additions and 10 deletions

View File

@ -208,6 +208,8 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
qedge.layout()
qedge.enter()
self._update_scene_rect()
@property
def is_expanding(self):
return bool(self.expansion_qnodes)
@ -491,21 +493,28 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
for edge in self.qedges:
edge.layout()
rect = None
for qnode in self.qnodes:
br = qnode.boundingRect()
br.translate(qnode.x(), qnode.y())
rect = rect.united(br) if rect is not None else br
if rect is None:
rect = QRectF()
rect = rect.marginsAdded(QMarginsF(SCENE_MARGIN, SCENE_MARGIN, SCENE_MARGIN, SCENE_MARGIN))
self.setSceneRect(rect)
self._update_scene_rect()
finally:
self._layout_event_occurring = False
self._layout_lock.release()
else:
l.warning("Layout lock conflict. Is the application lagging?")
def _update_scene_rect(self):
rect = None
for item in self.items():
br = item.boundingRect()
br.translate(item.x(), item.y())
rect = rect.united(br) if rect is not None else br
if rect is None:
rect = self.mapToScene(self.viewport().rect()).boundingRect()
else:
rect = rect.marginsAdded(QMarginsF(SCENE_MARGIN, SCENE_MARGIN, SCENE_MARGIN, SCENE_MARGIN))
rect = rect.united(self.mapToScene(self.viewport().rect()).boundingRect())
center = self.mapToScene(self.viewport().rect().center())
self.setSceneRect(rect)
self.centerOn(center)
# qt overrides
def keyPressEvent(self, event):
@ -700,7 +709,7 @@ class PropChart(QGraphicsItem):
self.scene().removeItem(item)
data = [(offset, kind, size, count) for offset, v1 in self.prop.struct_data.items() for size, v2 in v1.items() for kind, count in v2.items()]
data.sort()
data.sort(key=lambda x: (x[0], x[1], -x[2], x[3]))
cols_allocated = defaultdict(int)
row_allocated = 0
offset_allocated = None