From a562f7ebc0065da229c39153b90ffa6fa739f31b Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Sat, 18 Jul 2020 14:51:09 +0200 Subject: Improve layout for ProgressDialog --- .../cuchaz/enigma/gui/dialog/ProgressDialog.java | 63 ++++++++++++---------- .../enigma/gui/util/GridBagConstraintsBuilder.java | 19 +++++++ 2 files changed, 54 insertions(+), 28 deletions(-) (limited to 'enigma-swing/src/main/java/cuchaz/enigma') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java index 4f47a24..f97c1c2 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ProgressDialog.java @@ -11,56 +11,63 @@ package cuchaz.enigma.gui.dialog; -import java.awt.BorderLayout; import java.awt.Container; -import java.awt.FlowLayout; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.util.concurrent.CompletableFuture; import javax.swing.*; import cuchaz.enigma.Enigma; import cuchaz.enigma.ProgressListener; +import cuchaz.enigma.gui.util.GridBagConstraintsBuilder; import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.gui.util.ScaleUtil; import cuchaz.enigma.utils.I18n; public class ProgressDialog implements ProgressListener, AutoCloseable { - private JDialog dialog; - private JLabel labelTitle; - private JLabel labelText; - private JProgressBar progress; + private final JDialog dialog; + private final JLabel labelTitle = new JLabel(); + private final JLabel labelText = GuiUtil.unboldLabel(new JLabel()); + private final JProgressBar progress = new JProgressBar(); public ProgressDialog(JFrame parent) { - // init frame this.dialog = new JDialog(parent, String.format(I18n.translate("progress.operation"), Enigma.NAME)); - final Container pane = this.dialog.getContentPane(); - FlowLayout layout = new FlowLayout(); - layout.setAlignment(FlowLayout.LEFT); - pane.setLayout(layout); - - this.labelTitle = new JLabel(); - pane.add(this.labelTitle); - - // set up the progress bar - JPanel panel = new JPanel(); - pane.add(panel); - panel.setLayout(new BorderLayout()); - this.labelText = GuiUtil.unboldLabel(new JLabel()); - this.progress = new JProgressBar(); - this.labelText.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); - panel.add(this.labelText, BorderLayout.NORTH); - panel.add(this.progress, BorderLayout.CENTER); - panel.setPreferredSize(ScaleUtil.getDimension(360, 50)); + Container pane = this.dialog.getContentPane(); + pane.setLayout(new GridBagLayout()); + + GridBagConstraintsBuilder cb = GridBagConstraintsBuilder.create() + .insets(2) + .anchor(GridBagConstraints.WEST) + .fill(GridBagConstraints.BOTH) + .weight(1.0, 0.0); + + // Set label text since otherwise the label height is 0, which makes the + // window size get set incorrectly + this.labelTitle.setText("Idle"); + this.labelText.setText("Idle"); + this.progress.setPreferredSize(ScaleUtil.getDimension(0, 30)); + + pane.add(this.labelTitle, cb.pos(0, 0).build()); + pane.add(this.labelText, cb.pos(0, 1).build()); + // set padding because otherwise the progress bar gets cut off when + // using the Darkula theme + pane.add(this.progress, cb.pos(0, 2).weight(1.0, 1.0).padding(10).build()); // show the frame - pane.doLayout(); - this.dialog.setSize(ScaleUtil.getDimension(400, 120)); + this.dialog.pack(); + Dimension size = this.dialog.getSize(); + this.dialog.setMinimumSize(size); + size.width = ScaleUtil.scale(400); + this.dialog.setSize(size); + this.dialog.setResizable(false); this.dialog.setLocationRelativeTo(parent); - this.dialog.setVisible(true); this.dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + this.dialog.setVisible(true); } public static CompletableFuture runOffThread(final JFrame parent, final ProgressRunnable runnable) { diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GridBagConstraintsBuilder.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GridBagConstraintsBuilder.java index 65b0f33..6a75686 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GridBagConstraintsBuilder.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GridBagConstraintsBuilder.java @@ -109,6 +109,25 @@ public final class GridBagConstraintsBuilder { return copy; } + public GridBagConstraintsBuilder padding(int pad) { + return this.paddingUnscaled(ScaleUtil.scale(pad)); + } + + public GridBagConstraintsBuilder padding(int padX, int padY) { + return this.paddingUnscaled(ScaleUtil.scale(padX), ScaleUtil.scale(padY)); + } + + public GridBagConstraintsBuilder paddingUnscaled(int pad) { + return this.paddingUnscaled(pad, pad); + } + + public GridBagConstraintsBuilder paddingUnscaled(int padX, int padY) { + GridBagConstraintsBuilder copy = this.copy(); + copy.inner.ipadx = padX; + copy.inner.ipady = padY; + return copy; + } + public GridBagConstraintsBuilder copy() { GridBagConstraints c = (GridBagConstraints) this.inner.clone(); return new GridBagConstraintsBuilder(c); -- cgit v1.2.3