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')
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 fff755d3..18510602 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 3b8df611..631e065c 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