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 +++++++++-- enigma-swing/src/main/resources/about.html | 6 -- enigma/src/main/resources/lang/de_de.json | 2 + enigma/src/main/resources/lang/en_us.json | 2 + 5 files changed, 58 insertions(+), 52 deletions(-) delete mode 100644 enigma-swing/src/main/resources/about.html 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; + } + } diff --git a/enigma-swing/src/main/resources/about.html b/enigma-swing/src/main/resources/about.html deleted file mode 100644 index b75c1bf0..00000000 --- a/enigma-swing/src/main/resources/about.html +++ /dev/null @@ -1,6 +0,0 @@ - -

%s

-

A tool for debofuscation of Java code

-

-

Version: %s

- \ No newline at end of file diff --git a/enigma/src/main/resources/lang/de_de.json b/enigma/src/main/resources/lang/de_de.json index 7a2f385c..31acb5c2 100644 --- a/enigma/src/main/resources/lang/de_de.json +++ b/enigma/src/main/resources/lang/de_de.json @@ -5,6 +5,8 @@ "menu.file.stats.title": "Mapping-Statistiken", "menu.file.stats.generate": "Diagramm generieren", + "menu.help.about.description": "Ein Tool zur Dekompilierung von Java-Code", + "menu.help.about.version": "Version: %s", "popup_menu.editor_tab.close": "Schließen", "popup_menu.editor_tab.close_all": "Alle schließen", diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index debe9d15..ca0b007c 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json @@ -58,6 +58,8 @@ "menu.help.about": "About", "menu.help.about.title": "%s - About", "menu.help.about.ok": "Ok", + "menu.help.about.description": "A tool for deobfuscation of Java code", + "menu.help.about.version": "Version: %s", "menu.help.github": "Github Page", "popup_menu.rename": "Rename", -- cgit v1.2.3