diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java index c5c23cd9..60c138c9 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/api/ExceptionUI.java @@ -11,6 +11,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.Configuration; import the.bytecode.club.bytecodeviewer.gui.components.JFrameConsole; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ComponentViewer; +import the.bytecode.club.bytecodeviewer.plugin.PluginManager; import the.bytecode.club.bytecodeviewer.resources.IconResources; import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings; @@ -116,7 +117,7 @@ public class ExceptionUI extends JFrameConsole //embed error log as a new tab if(Configuration.errorLogsAsNewTab) { - ComponentViewer.addComponentAsTab("Error #" + errorCounter++, getComponent(0)); + PluginManager.addExceptionUI(this, "Error #" + errorCounter++); } //pop open a new window frame else diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/PluginManager.java b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/PluginManager.java index 1df602d3..85f52f26 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/plugin/PluginManager.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/plugin/PluginManager.java @@ -7,6 +7,7 @@ import java.util.List; import javax.swing.filechooser.FileFilter; import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.Configuration; +import the.bytecode.club.bytecodeviewer.api.ExceptionUI; import the.bytecode.club.bytecodeviewer.api.Plugin; import the.bytecode.club.bytecodeviewer.api.PluginConsole; import the.bytecode.club.bytecodeviewer.gui.components.JFrameConsoleTabbed; @@ -55,7 +56,10 @@ public final class PluginManager private static Plugin activePlugin; private static JFrameConsoleTabbed activeTabbedConsole; + private static JFrameConsoleTabbed activeTabbedException; + private static HashMap exceptionTabs = new HashMap<>(); private static int consoleCount = 0; + private static int exceptionCount = 0; static { @@ -85,9 +89,12 @@ public final class PluginManager { //reset the console count consoleCount = 0; + exceptionCount = 0; //reset the active tabbed console activeTabbedConsole = null; + activeTabbedException = null; + exceptionTabs.clear(); //reset the active plugin activePlugin = newPluginInstance; @@ -122,6 +129,43 @@ public final class PluginManager runPlugin(p); } + /** + * Add an active console from a plugin being ran + */ + public static void addExceptionUI(ExceptionUI ui, String title) + { + if(activePlugin == null) + { + ui.setLocationRelativeTo(BytecodeViewer.viewer); + ui.setVisible(true); + return; + } + + final String name = (activePlugin == null || activePlugin.activeContainer == null) + ? ("#" + (activeTabbedException.getTabbedPane().getTabCount() + 1)) : activePlugin.activeContainer.name; + + ExceptionUI existingUI = exceptionTabs.get(name); + + int id = exceptionCount++; + if(activeTabbedException == null) + { + activeTabbedException = new JFrameConsoleTabbed(title); + + if(Configuration.pluginConsoleAsNewTab) + ComponentViewer.addComponentAsTab(title, activeTabbedException.getComponent(0)); + else + activeTabbedException.setVisible(true); + } + + if(existingUI == null) + { + activeTabbedException.addConsole(ui.getComponent(0), name); + exceptionTabs.put(name, ui); + } + else + existingUI.appendText("\n\r" + ui.getTextArea().getText()); + } + /** * Add an active console from a plugin being ran */