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 1de7f9ec..a6431ffd 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
@@ -23,7 +23,8 @@ import me.konloch.kontainer.io.DiskWriter;
import org.apache.commons.io.FilenameUtils;
import org.objectweb.asm.tree.ClassNode;
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
-import the.bytecode.club.bytecodeviewer.resources.IconResources;
+import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenu;
import the.bytecode.club.bytecodeviewer.resources.importing.Import;
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
import the.bytecode.club.bytecodeviewer.translation.TranslatedComponents;
@@ -82,45 +83,8 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File
{
if (selPath == null)
return;
-
- boolean isContainerSelected = selPath.getParentPath() != null && selPath.getParentPath().getParentPath() == null;
-
- //TODO this is hacky - there is probably a better way to do this
- tree.setSelectionPath(selPath);
- DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
- boolean isResourceSelected = !node.children().hasMoreElements();
-
- rightClickMenu.removeAll();
-
- //container selected
- if(isContainerSelected)
- rightClickMenu.add(new ResourceListRightClickRemove(this, x, y, tree));
- else if(isResourceSelected) //container resource selected
- rightClickMenu.add(new ResourceListRightClickOpen(this, x, y, tree));
-
- if(isContainerSelected || !isResourceSelected)
- {
- 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", IconResources.ExpandedIcon.createExpandedIcon())
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- TreePath selPath = ResourceListPane.this.tree.getPathForLocation(x, y);
- expandAll(tree, Objects.requireNonNull(selPath), false);
- }
- });
- }
-
+
+ ContextMenu.buildMenu(tree, selPath, rightClickMenu);
rightClickMenu.show(this.tree, x, y);
}
@@ -186,7 +150,7 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File
tree.expandPath(new TreePath(tree.getModel().getRoot()));
tree.updateUI();
- //TODO add a setting for this
+ //TODO add a setting to expand on resource import
// expandAll(tree, true);
}
@@ -276,7 +240,7 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File
}
@SuppressWarnings("rawtypes")
- private void expandAll(final JTree tree, final TreePath parent,
+ public void expandAll(final JTree tree, final TreePath parent,
final boolean expand) {
// Traverse children
final TreeNode node = (TreeNode) parent.getLastPathComponent();
@@ -302,6 +266,23 @@ public class ResourceListPane extends TranslatedVisibleComponent implements File
tree.repaint();
tree.updateUI();
}
+
+ public void quickDecompile(Decompiler decompiler, TreePath selPath)
+ {
+ Decompiler tempDecompiler1 = BytecodeViewer.viewer.viewPane1.getSelectedDecompiler();
+ Decompiler tempDecompiler2 = BytecodeViewer.viewer.viewPane2.getSelectedDecompiler();
+ Decompiler tempDecompiler3 = BytecodeViewer.viewer.viewPane3.getSelectedDecompiler();
+
+ BytecodeViewer.viewer.viewPane1.setSelectedDecompiler(decompiler);
+ BytecodeViewer.viewer.viewPane2.setSelectedDecompiler(Decompiler.NONE);
+ BytecodeViewer.viewer.viewPane3.setSelectedDecompiler(Decompiler.NONE);
+
+ openPath(selPath);
+
+ BytecodeViewer.viewer.viewPane1.setSelectedDecompiler(tempDecompiler1);
+ BytecodeViewer.viewer.viewPane2.setSelectedDecompiler(tempDecompiler2);
+ BytecodeViewer.viewer.viewPane3.setSelectedDecompiler(tempDecompiler3);
+ }
public void openPath(TreePath path)
{
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickRemove.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickRemove.java
deleted file mode 100644
index 99d64d41..00000000
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickRemove.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package the.bytecode.club.bytecodeviewer.gui.resourcelist;
-
-import the.bytecode.club.bytecodeviewer.BytecodeViewer;
-import the.bytecode.club.bytecodeviewer.resources.ResourceContainer;
-
-import javax.swing.*;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreePath;
-import java.awt.event.ActionEvent;
-import java.util.Enumeration;
-import java.util.Objects;
-
-/***************************************************************************
- * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
- * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
- * *
- * 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 . *
- ***************************************************************************/
-
-/**
- * @author Konloch
- * @since 6/22/2021
- */
-public class ResourceListRightClickRemove extends AbstractAction
-{
- private final ResourceListPane resourceListPane;
- private final int x;
- private final int y;
- private final ResourceTree tree;
-
- public ResourceListRightClickRemove(ResourceListPane resourceListPane, int x, int y, ResourceTree tree)
- {
- super("Remove");
- this.resourceListPane = resourceListPane;
- this.x = x;
- this.y = y;
- this.tree = tree;
- }
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- TreePath selPath = resourceListPane.tree.getClosestPathForLocation(x, y);
- DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) Objects.requireNonNull(selPath).getLastPathComponent();
- Enumeration> enumeration = resourceListPane.treeRoot.children();
- while (enumeration.hasMoreElements())
- {
- DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration.nextElement();
- if (node.isNodeAncestor(selectNode))
- {
- DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
- root.remove(node);
-
- for (ResourceContainer resourceContainer : BytecodeViewer.resourceContainers)
- {
- if (resourceContainer.name.equals(selectNode.toString()))
- {
- resourceListPane.removeResource(resourceContainer);
- resourceListPane.removeFile(resourceContainer);
- break;
- }
- }
-
- return;
- }
- }
- }
-}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/BuildContextMenuItem.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/BuildContextMenuItem.java
new file mode 100644
index 00000000..dba773b1
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/BuildContextMenuItem.java
@@ -0,0 +1,33 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu;
+
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.ResourceTree;
+
+import javax.swing.*;
+import javax.swing.tree.TreePath;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public interface BuildContextMenuItem
+{
+ void buildMenu(ResourceTree tree, TreePath selPath, JPopupMenu menu);
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenu.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenu.java
new file mode 100644
index 00000000..b9258565
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenu.java
@@ -0,0 +1,85 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.ResourceTree;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl.*;
+
+import javax.swing.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+import java.util.ArrayList;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class ContextMenu
+{
+ private static ContextMenu SINGLETON = new ContextMenu();
+ private final ArrayList contextMenuItems = new ArrayList<>();
+
+ static
+ {
+ addContext(new Remove());
+ addContext(new Open());
+ addContext(new QuickOpen());
+ addContext(new Expand());
+ addContext(new Collapse());
+ }
+
+ public static void addContext(ContextMenuItem menuItem)
+ {
+ SINGLETON.contextMenuItems.add(menuItem);
+ }
+
+ public static void buildMenu(ResourceTree tree, TreePath selPath, JPopupMenu menu)
+ {
+ menu.removeAll();
+
+ boolean isContainerSelected = selPath.getParentPath() != null && selPath.getParentPath().getParentPath() == null;
+
+ //TODO this is hacky - there is probably a better way to do this
+ tree.setSelectionPath(selPath);
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
+ boolean isResourceSelected = !node.children().hasMoreElements();
+
+ for(ContextMenuItem item : SINGLETON.contextMenuItems)
+ {
+ switch(item.getMenuType())
+ {
+ case CONTAINER:
+ if(!isContainerSelected)
+ continue;
+ break;
+ case RESOURCE:
+ if(!isResourceSelected || isContainerSelected)
+ continue;
+ break;
+ case DIRECTORY:
+ if(isResourceSelected)
+ continue;
+ break;
+ }
+
+ item.getBuildContextMenuItem().buildMenu(tree, selPath, menu);
+ }
+ }
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuItem.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuItem.java
new file mode 100644
index 00000000..6d0b78c4
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuItem.java
@@ -0,0 +1,44 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class ContextMenuItem
+{
+ private final ContextMenuType menuType;
+ private final BuildContextMenuItem buildContextMenuItem;
+
+ public ContextMenuItem(ContextMenuType menuType, BuildContextMenuItem buildContextMenuItem) {
+ this.menuType = menuType;
+ this.buildContextMenuItem = buildContextMenuItem;
+ }
+
+ public ContextMenuType getMenuType()
+ {
+ return menuType;
+ }
+
+ public BuildContextMenuItem getBuildContextMenuItem()
+ {
+ return buildContextMenuItem;
+ }
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuType.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuType.java
new file mode 100644
index 00000000..312f8ce4
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/ContextMenuType.java
@@ -0,0 +1,31 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public enum ContextMenuType
+{
+ ALL,
+ RESOURCE,
+ DIRECTORY,
+ CONTAINER,
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickOpen.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Collapse.java
similarity index 67%
rename from src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickOpen.java
rename to src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Collapse.java
index 5637cd8c..f4125355 100644
--- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/ResourceListRightClickOpen.java
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Collapse.java
@@ -1,7 +1,10 @@
-package the.bytecode.club.bytecodeviewer.gui.resourcelist;
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuItem;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuType;
import javax.swing.*;
-import javax.swing.tree.TreePath;
import java.awt.event.ActionEvent;
/***************************************************************************
@@ -26,26 +29,20 @@ import java.awt.event.ActionEvent;
* @author Konloch
* @since 7/26/2021
*/
-public class ResourceListRightClickOpen extends AbstractAction
+public class Collapse extends ContextMenuItem
{
- private final ResourceListPane resourceListPane;
- private final int x;
- private final int y;
- private final ResourceTree tree;
-
- public ResourceListRightClickOpen(ResourceListPane resourceListPane, int x, int y, ResourceTree tree)
+ public Collapse()
{
- super("Open");
- this.resourceListPane = resourceListPane;
- this.x = x;
- this.y = y;
- this.tree = tree;
- }
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- TreePath selPath = resourceListPane.tree.getClosestPathForLocation(x, y);
- resourceListPane.openPath(selPath);
+ super(ContextMenuType.DIRECTORY, ((tree, selPath, menu) ->
+ {
+ menu.add(new AbstractAction("Collapse")
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ BytecodeViewer.viewer.resourcePane.expandAll(tree, selPath, false);
+ }
+ });
+ }));
}
}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Expand.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Expand.java
new file mode 100644
index 00000000..7fdf8244
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Expand.java
@@ -0,0 +1,48 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuItem;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuType;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class Expand extends ContextMenuItem
+{
+ public Expand()
+ {
+ super(ContextMenuType.DIRECTORY, ((tree, selPath, menu) ->
+ {
+ menu.add(new AbstractAction("Expand")
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ BytecodeViewer.viewer.resourcePane.expandAll(tree, selPath, true);
+ }
+ });
+ }));
+ }
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Open.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Open.java
new file mode 100644
index 00000000..cd03c7d5
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Open.java
@@ -0,0 +1,48 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuItem;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuType;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class Open extends ContextMenuItem
+{
+ public Open()
+ {
+ super(ContextMenuType.RESOURCE, ((tree, selPath, menu) ->
+ {
+ menu.add(new AbstractAction("Open")
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ BytecodeViewer.viewer.resourcePane.openPath(selPath);
+ }
+ });
+ }));
+ }
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/QuickOpen.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/QuickOpen.java
new file mode 100644
index 00000000..d9ae96a3
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/QuickOpen.java
@@ -0,0 +1,55 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.decompilers.Decompiler;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuItem;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuType;
+
+import javax.swing.*;
+import javax.swing.tree.TreePath;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class QuickOpen extends ContextMenuItem
+{
+ public QuickOpen()
+ {
+ super(ContextMenuType.RESOURCE, ((tree, selPath, menu) ->
+ {
+ JMenu quickOpen = new JMenu("Quick Open");
+ quickOpen.add(createMenu("Procyon", ()->BytecodeViewer.viewer.resourcePane.quickDecompile(Decompiler.PROCYON_DECOMPILER, selPath)));
+ quickOpen.add(createMenu("CFR", ()->BytecodeViewer.viewer.resourcePane.quickDecompile(Decompiler.CFR_DECOMPILER, selPath)));
+ quickOpen.add(createMenu("FernFlower", ()->BytecodeViewer.viewer.resourcePane.quickDecompile(Decompiler.FERNFLOWER_DECOMPILER, selPath)));
+ quickOpen.add(createMenu("Krakatau", ()->BytecodeViewer.viewer.resourcePane.quickDecompile(Decompiler.KRAKATAU_DECOMPILER, selPath)));
+ quickOpen.add(createMenu("Bytecode", ()->BytecodeViewer.viewer.resourcePane.quickDecompile(Decompiler.BYTECODE_DISASSEMBLER, selPath)));
+ menu.add(quickOpen);
+ }));
+ }
+
+ private static JMenuItem createMenu(String name, Runnable onClick)
+ {
+ JMenuItem menu = new JMenuItem(name);
+ menu.addActionListener((e)->onClick.run());
+ return menu;
+ }
+}
diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Remove.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Remove.java
new file mode 100644
index 00000000..c79a62f6
--- /dev/null
+++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/resourcelist/contextmenu/impl/Remove.java
@@ -0,0 +1,48 @@
+package the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.impl;
+
+import the.bytecode.club.bytecodeviewer.BytecodeViewer;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuItem;
+import the.bytecode.club.bytecodeviewer.gui.resourcelist.contextmenu.ContextMenuType;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+
+/***************************************************************************
+ * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite *
+ * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com *
+ * *
+ * 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 . *
+ ***************************************************************************/
+
+/**
+ * @author Konloch
+ * @since 7/26/2021
+ */
+public class Remove extends ContextMenuItem
+{
+ public Remove()
+ {
+ super(ContextMenuType.CONTAINER, ((tree, selPath, menu) ->
+ {
+ menu.add(new AbstractAction("Remove")
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ BytecodeViewer.viewer.resourcePane.expandAll(tree, selPath, false);
+ }
+ });
+ }));
+ }
+}