diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java index d5815fcf..12995ab3 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListPane.java @@ -1,7 +1,5 @@ package the.bytecode.club.bytecodeviewer.gui.resourcelist; -//TODO fix for Java 9+ -import com.sun.java.swing.plaf.windows.WindowsTreeUI; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; @@ -29,6 +27,7 @@ import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import org.objectweb.asm.tree.ClassNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.resources.IconResources; import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings; import the.bytecode.club.bytecodeviewer.translation.Translation; import the.bytecode.club.bytecodeviewer.translation.components.TranslatedJCheckBox; @@ -87,17 +86,14 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File rightClickMenu.add(new ResourceListRightClickRemove(this, x, y, tree)); - //TODO fix for Java 9+ - // You can replace this with any Icon loaded from disk, - // they could be re-used for the plus and minus symbols on the resource list too - rightClickMenu.add(new AbstractAction("Expand", WindowsTreeUI.ExpandedIcon.createExpandedIcon()) { + rightClickMenu.add(new AbstractAction("Expand", IconResources.CollapsedIcon.createCollapsedIcon()) { @Override public void actionPerformed(ActionEvent e) { TreePath selPath = ResourceListPane.this.tree.getPathForLocation(x, y); expandAll(tree, Objects.requireNonNull(selPath), true); } }); - rightClickMenu.add(new AbstractAction("Collapse", WindowsTreeUI.CollapsedIcon.createCollapsedIcon()) { + rightClickMenu.add(new AbstractAction("Collapse", IconResources.ExpandedIcon.createExpandedIcon()) { @Override public void actionPerformed(ActionEvent e) { TreePath selPath = ResourceListPane.this.tree.getPathForLocation(x, y); diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/resources/IconResources.java b/src/main/java/the/bytecode/club/bytecodeviewer/resources/IconResources.java index 3eee6ff1..87200e12 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/resources/IconResources.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/resources/IconResources.java @@ -1,8 +1,10 @@ package the.bytecode.club.bytecodeviewer.resources; +import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.Serializable; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -41,6 +43,9 @@ import the.bytecode.club.bytecodeviewer.BytecodeViewer; public class IconResources { + static protected final int HALF_SIZE = 4; + static protected final int SIZE = 9; + public static List iconList; public static BufferedImage icon; public static ImageIcon nextIcon; @@ -131,4 +136,54 @@ public class IconResources return image; } + + + /** + * The minus sign button icon + */ + public static class ExpandedIcon implements Icon, Serializable + { + static public Icon createExpandedIcon() { + return new ExpandedIcon(); + } + + public void paintIcon(Component c, Graphics g, int x, int y) + { + Color backgroundColor = c.getBackground(); + if(backgroundColor != null) + g.setColor(backgroundColor); + else + g.setColor(Color.white); + + g.fillRect(x, y, SIZE-1, SIZE-1); + g.setColor(Color.gray); + g.drawRect(x, y, SIZE-1, SIZE-1); + g.setColor(Color.black); + g.drawLine(x + 2, y + HALF_SIZE, x + (SIZE - 3), y + HALF_SIZE); + } + + public int getIconWidth() { + return SIZE; + } + + public int getIconHeight() { + return SIZE; + } + } + + /** + * The plus sign button icon + */ + public static class CollapsedIcon extends ExpandedIcon + { + static public Icon createCollapsedIcon() { + return new CollapsedIcon(); + } + + public void paintIcon(Component c, Graphics g, int x, int y) + { + super.paintIcon(c, g, x, y); + g.drawLine(x + HALF_SIZE, y + 2, x + HALF_SIZE, y + (SIZE - 3)); + } + } }