From 0934b0df5563bcf4ead6186e23bb2b719bea2797 Mon Sep 17 00:00:00 2001 From: Yanis48 Date: Sat, 31 Oct 2020 12:32:03 +0100 Subject: Improvements to deobf panel popup menu --- .../src/main/java/cuchaz/enigma/gui/Gui.java | 4 +++ .../enigma/gui/elements/DeobfPanelPopupMenu.java | 33 ++++++++++++++++++---- enigma/src/main/resources/lang/en_us.json | 3 +- enigma/src/main/resources/lang/fr_fr.json | 3 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java index cbc9688e..9c0ff704 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java @@ -295,11 +295,15 @@ public class Gui implements LanguageChangeListener { @Override public void mousePressed(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { + deobfPanel.deobfClasses.setSelectionRow(deobfPanel.deobfClasses.getClosestRowForLocation(e.getX(), e.getY())); int i = deobfPanel.deobfClasses.getRowForPath(deobfPanel.deobfClasses.getSelectionPath()); if (i != -1) { deobfPanelPopupMenu.show(deobfPanel.deobfClasses, e.getX(), e.getY()); } } + + // Only enable rename class if selected path is a class + deobfPanelPopupMenu.getRenameClass().setEnabled(deobfPanel.deobfClasses.getSelectedClass() != null); } }); diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/DeobfPanelPopupMenu.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/DeobfPanelPopupMenu.java index a4d749c2..16f666d0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/DeobfPanelPopupMenu.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/DeobfPanelPopupMenu.java @@ -5,21 +5,39 @@ import cuchaz.enigma.gui.Gui; import cuchaz.enigma.utils.I18n; import javax.swing.*; +import javax.swing.tree.TreePath; import java.awt.*; public class DeobfPanelPopupMenu { private final JPopupMenu ui; - private final JMenuItem rename; + private final JMenuItem renamePackage; + private final JMenuItem renameClass; public DeobfPanelPopupMenu(Gui gui) { this.ui = new JPopupMenu(); ClassSelector deobfClasses = gui.getDeobfPanel().deobfClasses; - this.rename = new JMenuItem(); - this.rename.addActionListener(a -> deobfClasses.getUI().startEditingAtPath(deobfClasses, deobfClasses.getSelectionPath())); - this.ui.add(this.rename); + this.renamePackage = new JMenuItem(); + this.renamePackage.addActionListener(a -> { + TreePath path; + + if (deobfClasses.getSelectedClass() != null) { + // Rename parent package if selected path is a class + path = deobfClasses.getSelectionPath().getParentPath(); + } else { + // Rename selected path if it's already a package + path = deobfClasses.getSelectionPath(); + } + + deobfClasses.getUI().startEditingAtPath(deobfClasses, path); + }); + this.ui.add(this.renamePackage); + + this.renameClass = new JMenuItem(); + this.renameClass.addActionListener(a -> deobfClasses.getUI().startEditingAtPath(deobfClasses, deobfClasses.getSelectionPath())); + this.ui.add(this.renameClass); this.retranslateUi(); } @@ -29,6 +47,11 @@ public class DeobfPanelPopupMenu { } public void retranslateUi() { - this.rename.setText(I18n.translate("popup_menu.deobf_panel.rename")); + this.renamePackage.setText(I18n.translate("popup_menu.deobf_panel.rename_package")); + this.renameClass.setText(I18n.translate("popup_menu.deobf_panel.rename_class")); + } + + public JMenuItem getRenameClass() { + return this.renameClass; } } diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index 50d06a82..9db4e1fc 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json @@ -79,7 +79,8 @@ "popup_menu.editor_tab.close_others": "Close Others", "popup_menu.editor_tab.close_left": "Close All to the Left", "popup_menu.editor_tab.close_right": "Close All to the Right", - "popup_menu.deobf_panel.rename": "Rename", + "popup_menu.deobf_panel.rename_package": "Rename Package", + "popup_menu.deobf_panel.rename_class": "Rename Class", "editor.decompiling": "Decompiling...", "editor.decompile_error": "An error was encountered while decompiling.", diff --git a/enigma/src/main/resources/lang/fr_fr.json b/enigma/src/main/resources/lang/fr_fr.json index b2b12093..127b9c88 100644 --- a/enigma/src/main/resources/lang/fr_fr.json +++ b/enigma/src/main/resources/lang/fr_fr.json @@ -79,7 +79,8 @@ "popup_menu.editor_tab.close_others": "Fermer les autres", "popup_menu.editor_tab.close_left": "Tout fermer sur la gauche", "popup_menu.editor_tab.close_right": "Tout fermer sur la droite", - "popup_menu.deobf_panel.rename": "Renommer", + "popup_menu.deobf_panel.rename_package": "Renommer le package", + "popup_menu.deobf_panel.rename_class": "Renommer la classe", "editor.decompiling": "Décompilation...", "editor.decompile_error": "Une erreur est survenue lors de la décompilation.", -- cgit v1.2.3