From c9c0bcf6ebf1e120ea47a6bf7ebf8917b8716db5 Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Thu, 23 Jul 2020 19:39:50 +0200 Subject: Revamp About dialog --- .../java/cuchaz/enigma/gui/dialog/AboutDialog.java | 66 +++++++++------------- .../main/java/cuchaz/enigma/gui/util/GuiUtil.java | 34 +++++++++-- 2 files changed, 54 insertions(+), 46 deletions(-) (limited to 'enigma-swing/src/main/java/cuchaz/enigma') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java index fff755d..1851060 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AboutDialog.java @@ -11,60 +11,46 @@ package cuchaz.enigma.gui.dialog; +import java.awt.Container; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; + +import javax.swing.*; + import cuchaz.enigma.Enigma; +import cuchaz.enigma.gui.util.GridBagConstraintsBuilder; import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.utils.Utils; - -import javax.swing.*; -import java.awt.*; -import java.io.IOException; public class AboutDialog { public static void show(JFrame parent) { - // init frame - final JFrame frame = new JFrame(String.format(I18n.translate("menu.help.about.title"), Enigma.NAME)); - final Container pane = frame.getContentPane(); - pane.setLayout(new FlowLayout()); + JDialog frame = new JDialog(parent, String.format(I18n.translate("menu.help.about.title"), Enigma.NAME), true); + Container pane = frame.getContentPane(); + pane.setLayout(new GridBagLayout()); - // load the content - try { - String html = Utils.readResourceToString("/about.html"); - html = String.format(html, Enigma.NAME, Enigma.VERSION); - JLabel label = new JLabel(html); - label.setHorizontalAlignment(JLabel.CENTER); - pane.add(label); - } catch (IOException ex) { - throw new Error(ex); - } + GridBagConstraintsBuilder cb = GridBagConstraintsBuilder.create() + .insets(2) + .weight(1.0, 0.0) + .anchor(GridBagConstraints.WEST); - // show the link - String html = "%s"; - html = String.format(html, Enigma.URL, Enigma.URL); - JButton link = new JButton(html); - link.addActionListener(event -> GuiUtil.openUrl(Enigma.URL)); - link.setBorderPainted(false); - link.setOpaque(false); - link.setBackground(Color.WHITE); - link.setCursor(new Cursor(Cursor.HAND_CURSOR)); - link.setFocusable(false); - JPanel linkPanel = new JPanel(); - linkPanel.add(link); - pane.add(linkPanel); + JLabel title = new JLabel(Enigma.NAME); + title.setFont(title.getFont().deriveFont(title.getFont().getSize2D() * 1.5f)); - // show ok button JButton okButton = new JButton(I18n.translate("menu.help.about.ok")); - pane.add(okButton); - okButton.addActionListener(arg0 -> frame.dispose()); + okButton.addActionListener(e -> frame.dispose()); - // show the frame - pane.doLayout(); - frame.setSize(ScaleUtil.getDimension(400, 220)); + pane.add(title, cb.pos(0, 0).build()); + pane.add(new JLabel(I18n.translate("menu.help.about.description")), cb.pos(0, 1).width(2).build()); + pane.add(new JLabel(I18n.translateFormatted("menu.help.about.version", Enigma.VERSION)), cb.pos(0, 2).width(2).build()); + pane.add(GuiUtil.createLink(Enigma.URL, () -> GuiUtil.openUrl(Enigma.URL)), cb.pos(0, 3).build()); + pane.add(okButton, cb.pos(1, 3).anchor(GridBagConstraints.SOUTHEAST).build()); + + frame.pack(); frame.setResizable(false); frame.setLocationRelativeTo(parent); - frame.setVisible(true); frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + frame.setVisible(true); } + } diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java index 3b8df61..631e065 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java @@ -1,15 +1,20 @@ package cuchaz.enigma.gui.util; -import javax.swing.*; -import javax.swing.text.BadLocationException; -import javax.swing.text.JTextComponent; -import java.awt.*; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Desktop; +import java.awt.Font; +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.awt.font.TextAttribute; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.Locale; -import java.util.StringJoiner; +import java.util.Map; + +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.ToolTipManager; public class GuiUtil { public static void openUrl(String url) { @@ -40,4 +45,21 @@ public class GuiUtil { manager.setInitialDelay(oldDelay); } + public static JLabel createLink(String text, Runnable action) { + JLabel link = new JLabel(text); + link.setForeground(Color.BLUE.darker()); + link.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + @SuppressWarnings("unchecked") + Map attributes = (Map) link.getFont().getAttributes(); + attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); + link.setFont(link.getFont().deriveFont(attributes)); + link.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + action.run(); + } + }); + return link; + } + } -- cgit v1.2.3