From 9f4fbe003198c96449037e92e12f3988dc19d8e7 Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Sat, 16 Sep 2023 20:55:31 +0200 Subject: [PATCH] Use event system for GUI related events --- .../java/net/raphimc/viaproxy/ViaProxy.java | 3 ++- .../java/net/raphimc/viaproxy/ui/AUITab.java | 6 ----- .../net/raphimc/viaproxy/ui/ViaProxyUI.java | 24 ++++++++++++++----- .../viaproxy/ui/events/UICloseEvent.java | 21 ++++++++++++++++ .../viaproxy/ui/events/UIInitEvent.java | 21 ++++++++++++++++ .../raphimc/viaproxy/ui/impl/AccountsTab.java | 6 +++-- .../raphimc/viaproxy/ui/impl/AdvancedTab.java | 11 +++++---- .../raphimc/viaproxy/ui/impl/GeneralTab.java | 11 +++++---- 8 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java create mode 100644 src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java diff --git a/src/main/java/net/raphimc/viaproxy/ViaProxy.java b/src/main/java/net/raphimc/viaproxy/ViaProxy.java index 6ecca44..0d39928 100644 --- a/src/main/java/net/raphimc/viaproxy/ViaProxy.java +++ b/src/main/java/net/raphimc/viaproxy/ViaProxy.java @@ -47,6 +47,7 @@ import net.raphimc.viaproxy.saves.SaveManager; import net.raphimc.viaproxy.tasks.LoaderTask; import net.raphimc.viaproxy.tasks.UpdateCheckTask; import net.raphimc.viaproxy.ui.ViaProxyUI; +import net.raphimc.viaproxy.ui.events.UIInitEvent; import net.raphimc.viaproxy.util.ClassLoaderPriorityUtil; import net.raphimc.viaproxy.util.logging.Logger; @@ -143,7 +144,7 @@ public class ViaProxy { Logger.LOGGER.info("Waiting for UI to be initialized..."); Thread.sleep(1000); } - ui.setReady(); + ViaProxyUI.EVENT_MANAGER.call(new UIInitEvent()); Logger.LOGGER.info("ViaProxy started successfully!"); return; } diff --git a/src/main/java/net/raphimc/viaproxy/ui/AUITab.java b/src/main/java/net/raphimc/viaproxy/ui/AUITab.java index 92701ec..ceff2c1 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/AUITab.java +++ b/src/main/java/net/raphimc/viaproxy/ui/AUITab.java @@ -44,10 +44,4 @@ public abstract class AUITab { protected abstract void init(final JPanel contentPane); - public void setReady() { - } - - public void onClose() { - } - } diff --git a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java index e56a759..9d88268 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java +++ b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyUI.java @@ -18,8 +18,14 @@ package net.raphimc.viaproxy.ui; import com.formdev.flatlaf.FlatDarkLaf; +import net.lenni0451.lambdaevents.EventHandler; +import net.lenni0451.lambdaevents.LambdaManager; +import net.lenni0451.lambdaevents.generator.LambdaMetaFactoryGenerator; +import net.lenni0451.reflect.JavaBypass; import net.lenni0451.reflect.stream.RStream; import net.raphimc.viaproxy.ViaProxy; +import net.raphimc.viaproxy.ui.events.UICloseEvent; +import net.raphimc.viaproxy.ui.events.UIInitEvent; import net.raphimc.viaproxy.ui.impl.AccountsTab; import net.raphimc.viaproxy.ui.impl.AdvancedTab; import net.raphimc.viaproxy.ui.impl.GeneralTab; @@ -35,6 +41,8 @@ import java.util.List; public class ViaProxyUI extends JFrame { + public static final LambdaManager EVENT_MANAGER = LambdaManager.threadSafe(new LambdaMetaFactoryGenerator(JavaBypass.TRUSTED_LOOKUP)); + public static final int BORDER_PADDING = 10; public static final int BODY_BLOCK_PADDING = 10; @@ -59,6 +67,8 @@ public class ViaProxyUI extends JFrame { ToolTipManager.sharedInstance().setDismissDelay(10_000); SwingUtilities.updateComponentTreeUI(this); this.setVisible(true); + + EVENT_MANAGER.register(this); } private void setLookAndFeel() { @@ -83,7 +93,7 @@ public class ViaProxyUI extends JFrame { this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - for (AUITab tab : ViaProxyUI.this.tabs) tab.onClose(); + EVENT_MANAGER.call(new UICloseEvent()); } }); this.setSize(500, 360); @@ -98,18 +108,20 @@ public class ViaProxyUI extends JFrame { .fields() .filter(field -> AUITab.class.isAssignableFrom(field.type())) .forEach(field -> { - AUITab tab = field.get(); + final AUITab tab = field.get(); this.tabs.add(field.get()); tab.add(this.contentPane); + EVENT_MANAGER.register(tab); }); this.contentPane.setEnabledAt(this.contentPane.indexOfTab(this.accountsTab.getName()), false); } - - public void setReady() { - for (AUITab tab : this.tabs) tab.setReady(); - for (int i = 0; i < this.contentPane.getTabCount(); i++) this.contentPane.setEnabledAt(i, true); + @EventHandler + private void onInit(final UIInitEvent event) { + for (int i = 0; i < this.contentPane.getTabCount(); i++) { + this.contentPane.setEnabledAt(i, true); + } } public void openURL(final String url) { diff --git a/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java b/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java new file mode 100644 index 0000000..7b49a39 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/ui/events/UICloseEvent.java @@ -0,0 +1,21 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2023 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viaproxy.ui.events; + +public class UICloseEvent { +} diff --git a/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java b/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java new file mode 100644 index 0000000..bcf0cc7 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/ui/events/UIInitEvent.java @@ -0,0 +1,21 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2023 RK_01/RaphiMC and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package net.raphimc.viaproxy.ui.events; + +public class UIInitEvent { +} diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java index 35ec9e1..11a8182 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java +++ b/src/main/java/net/raphimc/viaproxy/ui/impl/AccountsTab.java @@ -17,6 +17,7 @@ */ package net.raphimc.viaproxy.ui.impl; +import net.lenni0451.lambdaevents.EventHandler; import net.raphimc.mcauth.MinecraftAuth; import net.raphimc.mcauth.step.msa.StepMsaDeviceCode; import net.raphimc.mcauth.util.MicrosoftConstants; @@ -27,6 +28,7 @@ import net.raphimc.viaproxy.saves.impl.accounts.BedrockAccount; import net.raphimc.viaproxy.saves.impl.accounts.MicrosoftAccount; import net.raphimc.viaproxy.ui.AUITab; import net.raphimc.viaproxy.ui.ViaProxyUI; +import net.raphimc.viaproxy.ui.events.UIInitEvent; import net.raphimc.viaproxy.ui.popups.AddAccountPopup; import net.raphimc.viaproxy.util.GBC; import net.raphimc.viaproxy.util.TFunction; @@ -216,8 +218,8 @@ public class AccountsTab extends AUITab { contentPane.add(body, BorderLayout.CENTER); } - @Override - public void setReady() { + @EventHandler + private void onInit(final UIInitEvent event) { ViaProxy.saveManager.accountsSave.getAccounts().forEach(this::addAccount); DefaultListModel model = (DefaultListModel) this.accountsList.getModel(); if (!model.isEmpty()) this.markSelected(0); diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java index 20d6f4d..1e3d0a7 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java +++ b/src/main/java/net/raphimc/viaproxy/ui/impl/AdvancedTab.java @@ -20,10 +20,13 @@ package net.raphimc.viaproxy.ui.impl; import com.viaversion.viaversion.util.DumpUtil; import gs.mclo.api.MclogsClient; import gs.mclo.api.response.UploadLogResponse; +import net.lenni0451.lambdaevents.EventHandler; import net.raphimc.viaproxy.ViaProxy; import net.raphimc.viaproxy.saves.impl.UISave; import net.raphimc.viaproxy.ui.AUITab; import net.raphimc.viaproxy.ui.ViaProxyUI; +import net.raphimc.viaproxy.ui.events.UICloseEvent; +import net.raphimc.viaproxy.ui.events.UIInitEvent; import net.raphimc.viaproxy.util.GBC; import net.raphimc.viaproxy.util.logging.Logger; import org.apache.logging.log4j.LogManager; @@ -200,15 +203,15 @@ public class AdvancedTab extends AUITab { container.add(padding, BorderLayout.CENTER); } - @Override - public void setReady() { + @EventHandler + private void onInit(final UIInitEvent event) { SwingUtilities.invokeLater(() -> { this.viaVersionDumpButton.setEnabled(true); }); } - @Override - public void onClose() { + @EventHandler + private void onClose(final UICloseEvent event) { UISave save = ViaProxy.saveManager.uiSave; save.put("bind_port", String.valueOf(this.bindPort.getValue())); save.put("proxy", this.proxy.getText()); diff --git a/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java b/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java index bf932af..330241c 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java +++ b/src/main/java/net/raphimc/viaproxy/ui/impl/GeneralTab.java @@ -18,6 +18,7 @@ package net.raphimc.viaproxy.ui.impl; import com.google.common.net.HostAndPort; +import net.lenni0451.lambdaevents.EventHandler; import net.raphimc.vialoader.util.VersionEnum; import net.raphimc.viaproxy.ViaProxy; import net.raphimc.viaproxy.cli.options.Options; @@ -27,6 +28,8 @@ import net.raphimc.viaproxy.saves.impl.UISave; import net.raphimc.viaproxy.saves.impl.accounts.OfflineAccount; import net.raphimc.viaproxy.ui.AUITab; import net.raphimc.viaproxy.ui.ViaProxyUI; +import net.raphimc.viaproxy.ui.events.UICloseEvent; +import net.raphimc.viaproxy.ui.events.UIInitEvent; import net.raphimc.viaproxy.util.GBC; import net.raphimc.viaproxy.util.logging.Logger; import org.jdesktop.swingx.VerticalLayout; @@ -185,16 +188,16 @@ public class GeneralTab extends AUITab { parent.add(footer); } - @Override - public void setReady() { + @EventHandler + private void setReady(final UIInitEvent event) { SwingUtilities.invokeLater(() -> { this.stateButton.setText("Start"); this.stateButton.setEnabled(true); }); } - @Override - public void onClose() { + @EventHandler + private void onClose(final UICloseEvent event) { UISave save = ViaProxy.saveManager.uiSave; save.put("server_address", this.serverAddress.getText()); save.put("server_version", String.valueOf(this.serverVersion.getSelectedIndex()));