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 ++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) (limited to 'enigma-swing/src') 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; } } -- cgit v1.2.3