diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java index db6a3876..e52e769d 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java @@ -20,6 +20,7 @@ import the.bytecode.club.bytecodeviewer.api.ClassNodeLoader; import the.bytecode.club.bytecodeviewer.compilers.Compilers; import the.bytecode.club.bytecodeviewer.gui.components.DecompilerViewComponent; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.ResourcePanelCompileMode; +import the.bytecode.club.bytecodeviewer.gui.resourceviewer.TabbedPane; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer; import the.bytecode.club.bytecodeviewer.gui.resourcelist.ResourceListPane; import the.bytecode.club.bytecodeviewer.gui.MainViewerGUI; @@ -27,6 +28,7 @@ import the.bytecode.club.bytecodeviewer.gui.components.RunOptions; import the.bytecode.club.bytecodeviewer.gui.resourcesearch.SearchBoxPane; import the.bytecode.club.bytecodeviewer.gui.components.SystemErrConsole; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.WorkPaneMainComponent; +import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer; import the.bytecode.club.bytecodeviewer.obfuscators.mapping.Refactorer; import the.bytecode.club.bytecodeviewer.plugin.PluginManager; import the.bytecode.club.bytecodeviewer.util.*; @@ -71,6 +73,8 @@ import static the.bytecode.club.bytecodeviewer.Constants.*; * http://the.bytecode.club * * TODO BUGS: + * + Removing a tab disrupts the tab order + * Tab index orders need to be recounted on removal probably * + Last selected directory isn't set on most file chooser dialogues * + Synchronized scrolling is broken * + Spam-clicking the refresh button will cause the swing thread to deadlock (Quickly opening resources used to also do this) @@ -600,6 +604,15 @@ public class BytecodeViewer while (!tempF.exists()) // keep making dirs tempF.mkdir(); } + + public static void refreshAllTabTitles() + { + for(int i = 0; i < BytecodeViewer.viewer.workPane.tabs.getTabCount(); i++) + { + ResourceViewer viewer = ((TabbedPane) BytecodeViewer.viewer.workPane.tabs.getTabComponentAt(i)).resource; + viewer.refreshTitle(); + } + } /** * Checks the hotkeys diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java index 7936910f..0e57b45d 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java @@ -544,10 +544,12 @@ public class MainViewerGUI extends JFrame showFileInTabTitle.addActionListener(arg0 -> { Configuration.displayParentInTab = BytecodeViewer.viewer.showFileInTabTitle.isSelected(); Settings.saveSettings(); + BytecodeViewer.refreshAllTabTitles(); }); simplifyNameInTabTitle.addActionListener(arg0 -> { Configuration.simplifiedTabNames = BytecodeViewer.viewer.simplifyNameInTabTitle.isSelected(); Settings.saveSettings(); + BytecodeViewer.refreshAllTabTitles(); }); } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java index d54871a8..4263963e 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/TabbedPane.java @@ -14,6 +14,7 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.gui.components.ButtonHoverAnimation; import the.bytecode.club.bytecodeviewer.gui.components.MaxWidthJLabel; import the.bytecode.club.bytecodeviewer.gui.components.listeners.MouseClickedListener; +import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer; import the.bytecode.club.bytecodeviewer.gui.util.DelayTabbedPaneThread; /*************************************************************************** @@ -48,18 +49,20 @@ public class TabbedPane extends JPanel private long startedDragging = 0; public final String tabName; public final String fileContainerName; + public final ResourceViewer resource; private static long lastMouseClick = System.currentTimeMillis(); public final static MouseListener buttonHoverAnimation = new ButtonHoverAnimation(); public static final Color BLANK_COLOR = new Color(0, 0, 0, 0); - public TabbedPane(int tabIndex, String tabWorkingName, String fileContainerName, String name, final JTabbedPane existingTabs) + public TabbedPane(int tabIndex, String tabWorkingName, String fileContainerName, String name, final JTabbedPane existingTabs, ResourceViewer resource) { // unset default FlowLayout' gaps super(new FlowLayout(FlowLayout.LEFT, 0, 0)); this.tabName = name; this.fileContainerName = fileContainerName; - + this.resource = resource; + if (existingTabs == null) throw new NullPointerException("TabbedPane is null"); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneMainComponent.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneMainComponent.java index 644d3541..7610945d 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneMainComponent.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourceviewer/WorkPaneMainComponent.java @@ -14,13 +14,11 @@ import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; import org.objectweb.asm.tree.ClassNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; -import the.bytecode.club.bytecodeviewer.Configuration; import the.bytecode.club.bytecodeviewer.gui.components.VisibleComponent; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ClassViewer; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.FileViewer; import the.bytecode.club.bytecodeviewer.gui.resourceviewer.viewer.ResourceViewer; import the.bytecode.club.bytecodeviewer.util.FileContainer; -import the.bytecode.club.bytecodeviewer.util.MiscUtils; import static the.bytecode.club.bytecodeviewer.Constants.BLOCK_TAB_MENU; @@ -164,16 +162,16 @@ public class WorkPaneMainComponent extends VisibleComponent if (!workingOn.containsKey(workingName)) { - final ClassViewer tabComp = new ClassViewer(container, name, cn, workingName); - tabs.add(tabComp); - final int tabIndex = tabs.indexOfComponent(tabComp); + final ClassViewer resourceView = new ClassViewer(container, name, cn, workingName); + tabs.add(resourceView); + final int tabIndex = tabs.indexOfComponent(resourceView); workingOn.put(workingName, tabIndex); - TabbedPane tabbedPane = new TabbedPane(tabIndex, workingName, container.name, name, tabs); - tabComp.tabbedPane = tabbedPane; + TabbedPane tabbedPane = new TabbedPane(tabIndex, workingName, container.name, name, tabs, resourceView); + resourceView.tabbedPane = tabbedPane; tabs.setTabComponentAt(tabIndex, tabbedPane); tabs.setSelectedIndex(tabIndex); - tabComp.refreshTitle(); + resourceView.refreshTitle(); } else { @@ -196,16 +194,16 @@ public class WorkPaneMainComponent extends VisibleComponent if (!workingOn.containsKey(workingName)) { - final FileViewer tabComp = new FileViewer(container, name, contents, workingName); - tabs.add(tabComp); - final int tabIndex = tabs.indexOfComponent(tabComp); + final FileViewer resourceView = new FileViewer(container, name, contents, workingName); + tabs.add(resourceView); + final int tabIndex = tabs.indexOfComponent(resourceView); workingOn.put(workingName, tabIndex); - TabbedPane tabbedPane = new TabbedPane(tabIndex, workingName, container.name, name, tabs); - tabComp.tabbedPane = tabbedPane; + TabbedPane tabbedPane = new TabbedPane(tabIndex, workingName, container.name, name, tabs, resourceView); + resourceView.tabbedPane = tabbedPane; tabs.setTabComponentAt(tabIndex, tabbedPane); tabs.setSelectedIndex(tabIndex); - tabComp.refreshTitle(); + resourceView.refreshTitle(); } else {