From 3aee5e5c3d19c141be24d166ca78cb4162733316 Mon Sep 17 00:00:00 2001 From: afffsdd Date: Thu, 24 Dec 2015 20:01:21 -0500 Subject: [PATCH] Add option for whether the name of the containing file should be shown in the tab title Fix bug with closing tabs Fix bug with updating tab names when changing show container name option --- .../club/bytecodeviewer/gui/ClassViewer.java | 4 +--- .../club/bytecodeviewer/gui/FileViewer.java | 4 +--- .../bytecodeviewer/gui/MainViewerGUI.java | 22 ++++++++++++++++--- .../club/bytecodeviewer/gui/Viewer.java | 5 +++++ .../club/bytecodeviewer/gui/WorkPane.java | 4 ++-- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/ClassViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/ClassViewer.java index 5f0db855..5dd0f090 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/ClassViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/ClassViewer.java @@ -119,8 +119,6 @@ public class ClassViewer extends Viewer { return splitter; } - String name; - String container; JSplitPane sp; JSplitPane sp2; public List decompilers = Arrays.asList(null, null, null); @@ -321,7 +319,7 @@ public class ClassViewer extends Viewer { this.name = name; this.container = container; this.cn = cn; - this.setName(name + "(" + container + ")"); + updateName(); this.setLayout(new BorderLayout()); this.sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panels.get(0), panels.get(1)); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/FileViewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/FileViewer.java index 59be284b..1e0aeaaa 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/FileViewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/FileViewer.java @@ -50,8 +50,6 @@ public class FileViewer extends Viewer { private static final long serialVersionUID = 6103372882168257164L; - String name; - String container; private byte[] contents; RSyntaxTextArea panelArea = new RSyntaxTextArea(); JPanel panel = new JPanel(new BorderLayout()); @@ -194,7 +192,7 @@ public class FileViewer extends Viewer { this.name = name; this.container = container; this.contents = contents; - this.setName(name); + updateName(); this.setLayout(new BorderLayout()); this.add(panel2, BorderLayout.CENTER); 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 73bc1c01..7bd7e1e5 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/MainViewerGUI.java @@ -205,6 +205,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { public final ButtonGroup panelGroup1 = new ButtonGroup(); public final ButtonGroup panelGroup2 = new ButtonGroup(); public final ButtonGroup panelGroup3 = new ButtonGroup(); + public final JCheckBox mnShowContainer = new JCheckBox("Show Containing File's Name"); private final JMenuItem mntmSetOpitonalLibrary = new JMenuItem("Set Optional Library Folder"); private final JMenuItem mntmPingback = new JMenuItem("Pingback"); private final JMenu mnFontSize = new JMenu("Font Size"); @@ -1225,11 +1226,26 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier { fontSpinner.setSize(new Dimension(42, 20)); fontSpinner.setModel(new SpinnerNumberModel(12, 1, null, 1)); viewMenu.add(mnFontSize); - mnFontSize.add(fontSpinner); - - panelGroup1.setSelected(allDecompilersRev.get(panelGroup1).get(Decompiler.JDGUI).getModel(), true); + viewMenu.add(mnShowContainer); + mnShowContainer.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + JTabbedPane tabs = workPane.tabs; + Component[] components = tabs.getComponents(); + for (int i = 0; i < components.length; i++) { + Component c = components[i]; + if (c instanceof Viewer) { + ((Viewer) c).updateName(); + int idx = tabs.indexOfComponent(c); + tabs.setTabComponentAt(idx, new TabbedPane(c.getName(), tabs)); + workPane.tabs.setTitleAt(idx, c.getName()); + } + } + } + }); + panelGroup1.setSelected(allDecompilersRev.get(panelGroup1).get(Decompiler.JDGUI).getModel(), true); panelGroup2.setSelected(allDecompilersRev.get(panelGroup2).get(Decompiler.BYTECODE).getModel(), true); panelGroup3.setSelected(allDecompilersRev.get(panelGroup3).get(null).getModel(), true); this.setLocationRelativeTo(null); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/Viewer.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/Viewer.java index 36dee117..783ca30c 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/Viewer.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/Viewer.java @@ -1,6 +1,7 @@ package the.bytecode.club.bytecodeviewer.gui; import org.objectweb.asm.tree.ClassNode; +import the.bytecode.club.bytecodeviewer.BytecodeViewer; import javax.swing.*; @@ -26,7 +27,11 @@ public abstract class Viewer extends JPanel { public ClassNode cn; public String name; + public String container; private static final long serialVersionUID = -2965538493489119191L; + public void updateName() { + this.setName(name + (BytecodeViewer.viewer.mnShowContainer.isSelected() ? "(" + container + ")" : "")); + } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/WorkPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/WorkPane.java index d0acc8ba..48c4dce8 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/WorkPane.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/WorkPane.java @@ -86,11 +86,11 @@ public class WorkPane extends VisibleComponent implements ActionListener { final Component c = e.getChild(); if (c instanceof ClassViewer) { ClassViewer cv = (ClassViewer) c; - workingOn.remove(cv.name + "$" + cv.name); + workingOn.remove(cv.container + "$" + cv.name); } if (c instanceof FileViewer) { FileViewer fv = (FileViewer) c; - workingOn.remove(fv.name + "$" + fv.name); + workingOn.remove(fv.container + "$" + fv.name); } }