From e9773e57b7f1bc1e684cd1c003e84a33f598de95 Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Tue, 27 Mar 2018 18:12:30 -0600 Subject: [PATCH] make dual list dialog sizing dynamic, like single Signed-off-by: Jamin W. Collins --- .../src/main/java/forge/gui/DualListBox.java | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java b/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java index 74053ff7258..7943e5fb22c 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java +++ b/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java @@ -2,6 +2,7 @@ package forge.gui; import java.awt.BorderLayout; import java.awt.GridLayout; +import java.awt.FontMetrics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; @@ -21,6 +22,7 @@ import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import forge.Singletons; import forge.game.card.Card; import forge.game.card.CardView; import forge.game.card.CardView.CardStateView; @@ -176,10 +178,6 @@ public class DualListBox extends FDialog { rightPanel.add(new FScrollPane(destList, true), BorderLayout.CENTER); rightPanel.add(autoButton, BorderLayout.SOUTH); - add(leftPanel, "w 250, h 300"); - add(centerPanel, "w 100, h 300"); - add(rightPanel, "w 250, h 300"); - _addListListeners(sourceList); _addListListeners(destList); @@ -205,6 +203,12 @@ public class DualListBox extends FDialog { }); } + int columnWidth = getColumnWidth(); + String listConstraints = "w " + columnWidth + ", h 300"; + add(leftPanel, listConstraints); + add(centerPanel, "w 100, h 300"); + add(rightPanel, listConstraints); + _setButtonState(); if (remainingSourcesMin <= sourceElements.size() && remainingSourcesMax >= sourceElements.size()) { @@ -218,6 +222,39 @@ public class DualListBox extends FDialog { } } + private int getMaxElementWidth(UnsortedListModel model) { + final FontMetrics metrics = this.getFontMetrics(this.getFont()); + int width = 0; + for (int i = 0; i < model.getSize(); i++) { + final int itemWidth = metrics.stringWidth(model.getElementAt(i).toString()); + if (itemWidth > width) { + width = itemWidth; + } + } + return width; + } + + private int getColumnWidth() { + int width = 0; + int srcWidth = getMaxElementWidth(this.sourceListModel); + if (srcWidth > width) { + width = srcWidth; + } + int dstWidth = getMaxElementWidth(this.destListModel); + if (dstWidth > width) { + width = dstWidth; + } + final int minWidth = 250; + if (width < minWidth) { + width = minWidth; + } + final int maxWidth = (Singletons.getView().getFrame().getWidth()/2) - 100; + if (width > maxWidth) { + width = maxWidth; + } + return width; + } + public void setSecondColumnLabelText(String label) { orderedLabel.setText(label); }