From 20ee39fa7a1ee0e6bfc39e3a41eee98eae69bcfd Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Thu, 29 Dec 2022 21:37:53 +0000 Subject: [PATCH] GP-2977 tweak PairLayout to respect row visibility --- .../java/ghidra/util/layout/PairLayout.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/PairLayout.java b/Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/PairLayout.java index 45a199bb21..de0a409892 100644 --- a/Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/PairLayout.java +++ b/Ghidra/Framework/Gui/src/main/java/ghidra/util/layout/PairLayout.java @@ -75,24 +75,24 @@ public class PairLayout implements LayoutManager { */ @Override public Dimension preferredLayoutSize(Container parent) { - computeSizes(parent); - int rowCount = (parent.getComponentCount() + 1) / 2; + int visibleRowCount = computeSizes(parent); Insets insets = parent.getInsets(); Dimension d = new Dimension(0, 0); d.width = leftColumnWidth + hgap + preferredRightColumnWidth + insets.left + insets.right; - d.height = rowHeight * rowCount + vgap * (rowCount - 1) + insets.top + insets.bottom; + d.height = + rowHeight * visibleRowCount + vgap * (visibleRowCount - 1) + insets.top + insets.bottom; return d; } @Override public Dimension minimumLayoutSize(Container parent) { // resulting min width equals the label column's (leftColumnWidth) width - computeSizes(parent); - int rowCount = (parent.getComponentCount() + 1) / 2; + int visibleRowCount = computeSizes(parent); Insets insets = parent.getInsets(); Dimension d = new Dimension(0, 0); d.width = leftColumnWidth + hgap + insets.left + insets.right; - d.height = rowHeight * rowCount + vgap * (rowCount - 1) + insets.top + insets.bottom; + d.height = + rowHeight * visibleRowCount + vgap * (visibleRowCount - 1) + insets.top + insets.bottom; return d; } @@ -113,6 +113,9 @@ public class PairLayout implements LayoutManager { leftColumnComponent.setBounds(x, y, leftColumnWidth, rowHeight); if (componentCount > i * 2 + 1) { Component rightColumnComponent = parent.getComponent(i * 2 + 1); + if (!leftColumnComponent.isVisible() && !rightColumnComponent.isVisible()) { + continue; + } rightColumnComponent.setBounds(x + leftColumnWidth + hgap, y, rightColumnWidth, rowHeight); y += rowHeight + vgap; @@ -120,9 +123,10 @@ public class PairLayout implements LayoutManager { } } - private void computeSizes(Container parent) { + private int computeSizes(Container parent) { int componentCount = parent.getComponentCount(); int rowCount = (componentCount + 1) / 2; + int visibleRowCount = 0; leftColumnWidth = 0; rowHeight = 0; @@ -138,9 +142,13 @@ public class PairLayout implements LayoutManager { d = rightColumnComponent.getPreferredSize(); rowHeight = Math.max(rowHeight, d.height); preferredRightColumnWidth = Math.max(preferredRightColumnWidth, d.width); + if (!leftColumnComponent.isVisible() && !rightColumnComponent.isVisible()) { + continue; // don't count this row + } } + visibleRowCount++; } - + return visibleRowCount; } }