From 4a9098dbd7af1dce3d2dade8377340f80fc30b92 Mon Sep 17 00:00:00 2001 From: mikera Date: Thu, 21 Mar 2024 12:24:57 +0000 Subject: [PATCH] Add MainGUI launch buttons --- .../src/main/java/convex/gui/MainGUI.java | 52 +++++++++++++++++- .../main/java/convex/gui/utils/Toolkit.java | 5 ++ .../main/resources/images/terminal-icon.png | Bin 1768 -> 0 bytes .../src/main/resources/images/terminal.png | Bin 0 -> 25140 bytes 4 files changed, 56 insertions(+), 1 deletion(-) delete mode 100644 convex-gui/src/main/resources/images/terminal-icon.png create mode 100644 convex-gui/src/main/resources/images/terminal.png diff --git a/convex-gui/src/main/java/convex/gui/MainGUI.java b/convex-gui/src/main/java/convex/gui/MainGUI.java index 193086177..e225689c9 100644 --- a/convex-gui/src/main/java/convex/gui/MainGUI.java +++ b/convex-gui/src/main/java/convex/gui/MainGUI.java @@ -4,9 +4,17 @@ import java.awt.EventQueue; import java.awt.event.WindowEvent; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.JComponent; +import convex.core.crypto.AKeyPair; +import convex.gui.components.ActionPanel; import convex.gui.manager.mainpanels.HomePanel; import convex.gui.utils.Toolkit; import net.miginfocom.swing.MigLayout; @@ -19,7 +27,49 @@ public MainGUI() { MigLayout layout=new MigLayout("center"); setLayout(layout); - add(new HomePanel()); + add(new HomePanel(),"dock center"); + + ActionPanel actionPanel=new ActionPanel(); + actionPanel.setLayout(new MigLayout("center,align center,fillx")); + + JComponent testNet=createLaunchButton("Launch TestNet",Toolkit.TESTNET_ICON,this::launchTestNet); + actionPanel.add(testNet); + + JComponent terminal=createLaunchButton("Convex Terminal",Toolkit.TERMINAL_ICON,this::launchTestNet); + actionPanel.add(terminal); + + JComponent hacker=createLaunchButton("Hacker Tools",Toolkit.HACKER_ICON,this::launchTestNet); + actionPanel.add(hacker); + + JComponent discord=createLaunchButton("Community Discord",Toolkit.ECOSYSTEM_ICON,this::launchTestNet); + actionPanel.add(discord); + + JComponent www=createLaunchButton("https://convex.world",Toolkit.WWW_ICON,this::launchTestNet); + actionPanel.add(www); + + + + add(actionPanel,"dock south"); + } + + public void launchTestNet() { + PeerGUI.launchPeerGUI(3, AKeyPair.generate()); + } + + public JPanel createLaunchButton(String label, ImageIcon icon, Runnable cmd) { + JButton butt=new JButton(icon); + butt.addActionListener(e->{ + EventQueue.invokeLater(cmd); + }); + + JLabel lab = new JLabel(label); + lab.setHorizontalAlignment(SwingConstants.CENTER); + + JPanel panel=new JPanel(); + panel.setLayout(new MigLayout()); + panel.add(butt,"dock center"); + panel.add(lab,"dock south"); + return panel; } @Override diff --git a/convex-gui/src/main/java/convex/gui/utils/Toolkit.java b/convex-gui/src/main/java/convex/gui/utils/Toolkit.java index 0090497bf..e6eb793f4 100644 --- a/convex-gui/src/main/java/convex/gui/utils/Toolkit.java +++ b/convex-gui/src/main/java/convex/gui/utils/Toolkit.java @@ -103,6 +103,11 @@ public class Toolkit { public static final ImageIcon COG = scaledIcon(36, "/images/cog.png"); public static final ImageIcon REPL_ICON = scaledIcon(36, "/images/terminal-icon.png"); + public static final ImageIcon TESTNET_ICON = scaledIcon(128, "/images/testnet.png"); + public static final ImageIcon WWW_ICON = scaledIcon(128, "/images/www.png"); + public static final ImageIcon HACKER_ICON = scaledIcon(128, "/images/hacker.png"); + public static final ImageIcon TERMINAL_ICON = scaledIcon(128, "/images/terminal.png"); + public static final ImageIcon ECOSYSTEM_ICON = scaledIcon(128, "/images/ecosystem.png"); public static ImageIcon scaledIcon(int size, String resourcePath) { java.net.URL imgURL = Toolkit.class.getResource(resourcePath); diff --git a/convex-gui/src/main/resources/images/terminal-icon.png b/convex-gui/src/main/resources/images/terminal-icon.png deleted file mode 100644 index 3fcf8abed0e9c1e4fde7b0c22bebb3674b9d2450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768 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 Eg1eo?D*ylh literal 0 HcmV?d00001