From 6f1648c99408d000792a23d41a6d0ba3aee008f0 Mon Sep 17 00:00:00 2001 From: gegy1000 Date: Sat, 11 May 2019 08:50:01 +0200 Subject: Support navigation to declaration on ctrl+click --- src/main/java/cuchaz/enigma/gui/Gui.java | 21 ++++++++++++++++----- .../java/cuchaz/enigma/gui/panels/PanelEditor.java | 12 ++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src/main/java/cuchaz') diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index 47844485..92c68aca 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java @@ -55,6 +55,8 @@ public class Gui { private final MenuBar menuBar; // state public EntryReference, Entry> reference; + private boolean shouldNavigateOnClick; + public FileDialog jarFileChooser; public FileDialog tinyMappingsFileChooser; public JFileChooser enigmaMappingsFileChooser; @@ -521,19 +523,24 @@ public class Gui { } public void onCaretMove(int pos) { - Token token = this.controller.getToken(pos); boolean isToken = token != null; reference = this.controller.getReference(token); - Entry referenceEntry = reference != null ? reference.entry : null; + + if (referenceEntry != null && shouldNavigateOnClick) { + shouldNavigateOnClick = false; + navigateTo(referenceEntry); + return; + } + boolean isClassEntry = isToken && referenceEntry instanceof ClassEntry; boolean isFieldEntry = isToken && referenceEntry instanceof FieldEntry; boolean isMethodEntry = isToken && referenceEntry instanceof MethodEntry && !((MethodEntry) referenceEntry).isConstructor(); boolean isConstructorEntry = isToken && referenceEntry instanceof MethodEntry && ((MethodEntry) referenceEntry).isConstructor(); boolean isInJar = isToken && this.controller.entryIsInJar(referenceEntry); - boolean isRenameable = isToken && this.controller.getDeobfuscator().isRenamable(reference); + boolean isRenamable = isToken && this.controller.getDeobfuscator().isRenamable(reference); if (isToken) { showReference(reference); @@ -541,14 +548,14 @@ public class Gui { infoPanel.clearReference(); } - this.popupMenu.renameMenu.setEnabled(isRenameable); + this.popupMenu.renameMenu.setEnabled(isRenamable); this.popupMenu.showInheritanceMenu.setEnabled(isClassEntry || isMethodEntry || isConstructorEntry); this.popupMenu.showImplementationsMenu.setEnabled(isClassEntry || isMethodEntry); this.popupMenu.showCallsMenu.setEnabled(isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry); this.popupMenu.showCallsSpecificMenu.setEnabled(isMethodEntry); this.popupMenu.openEntryMenu.setEnabled(isInJar && (isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry)); this.popupMenu.openPreviousMenu.setEnabled(this.controller.hasPreviousLocation()); - this.popupMenu.toggleMappingMenu.setEnabled(isRenameable); + this.popupMenu.toggleMappingMenu.setEnabled(isRenamable); if (isToken && this.controller.getDeobfuscator().isRemapped(referenceEntry)) { this.popupMenu.toggleMappingMenu.setText("Reset to obfuscated"); @@ -843,4 +850,8 @@ public class Gui { public PanelDeobf getDeobfPanel() { return deobfPanel; } + + public void setShouldNavigateOnClick(boolean shouldNavigateOnClick) { + this.shouldNavigateOnClick = shouldNavigateOnClick; + } } diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java b/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java index 9b016313..f7667436 100644 --- a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java +++ b/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java @@ -12,11 +12,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class PanelEditor extends JEditorPane { - private final Gui gui; - public PanelEditor(Gui gui) { - this.gui = gui; - this.setEditable(false); this.setSelectionColor(new Color(31, 46, 90)); this.setCaret(new BrowserCaret()); @@ -66,6 +62,14 @@ public class PanelEditor extends JEditorPane { default: break; } + + gui.setShouldNavigateOnClick(event.isControlDown()); + } + + @Override + public void keyReleased(KeyEvent event) { + super.keyReleased(event); + gui.setShouldNavigateOnClick(event.isControlDown()); } }); } -- cgit v1.2.3