diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/Gui.java | 38 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/GuiController.java | 19 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java | 70 |
3 files changed, 70 insertions, 57 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index 3e859208..304b7799 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java | |||
| @@ -79,6 +79,8 @@ public class Gui { | |||
| 79 | private JList<Token> tokens; | 79 | private JList<Token> tokens; |
| 80 | private JTabbedPane tabs; | 80 | private JTabbedPane tabs; |
| 81 | 81 | ||
| 82 | public JTextField renameTextField; | ||
| 83 | |||
| 82 | public void setEditorTheme(Config.LookAndFeel feel) { | 84 | public void setEditorTheme(Config.LookAndFeel feel) { |
| 83 | if (editor != null && (editorFeel == null || editorFeel != feel)) { | 85 | if (editor != null && (editorFeel == null || editorFeel != feel)) { |
| 84 | editor.updateUI(); | 86 | editor.updateUI(); |
| @@ -570,22 +572,22 @@ public class Gui { | |||
| 570 | public void startRename() { | 572 | public void startRename() { |
| 571 | 573 | ||
| 572 | // init the text box | 574 | // init the text box |
| 573 | final JTextField text = new JTextField(); | 575 | renameTextField = new JTextField(); |
| 574 | 576 | ||
| 575 | EntryReference<Entry<?>, Entry<?>> translatedReference = controller.getDeobfuscator().deobfuscate(cursorReference); | 577 | EntryReference<Entry<?>, Entry<?>> translatedReference = controller.getDeobfuscator().deobfuscate(cursorReference); |
| 576 | text.setText(translatedReference.getNameableName()); | 578 | renameTextField.setText(translatedReference.getNameableName()); |
| 577 | 579 | ||
| 578 | text.setPreferredSize(new Dimension(360, text.getPreferredSize().height)); | 580 | renameTextField.setPreferredSize(new Dimension(360, renameTextField.getPreferredSize().height)); |
| 579 | text.addKeyListener(new KeyAdapter() { | 581 | renameTextField.addKeyListener(new KeyAdapter() { |
| 580 | @Override | 582 | @Override |
| 581 | public void keyPressed(KeyEvent event) { | 583 | public void keyPressed(KeyEvent event) { |
| 582 | switch (event.getKeyCode()) { | 584 | switch (event.getKeyCode()) { |
| 583 | case KeyEvent.VK_ENTER: | 585 | case KeyEvent.VK_ENTER: |
| 584 | finishRename(text, true); | 586 | finishRename(true); |
| 585 | break; | 587 | break; |
| 586 | 588 | ||
| 587 | case KeyEvent.VK_ESCAPE: | 589 | case KeyEvent.VK_ESCAPE: |
| 588 | finishRename(text, false); | 590 | finishRename(false); |
| 589 | break; | 591 | break; |
| 590 | default: | 592 | default: |
| 591 | break; | 593 | break; |
| @@ -596,28 +598,28 @@ public class Gui { | |||
| 596 | // find the label with the name and replace it with the text box | 598 | // find the label with the name and replace it with the text box |
| 597 | JPanel panel = (JPanel) infoPanel.getComponent(0); | 599 | JPanel panel = (JPanel) infoPanel.getComponent(0); |
| 598 | panel.remove(panel.getComponentCount() - 1); | 600 | panel.remove(panel.getComponentCount() - 1); |
| 599 | panel.add(text); | 601 | panel.add(renameTextField); |
| 600 | text.grabFocus(); | 602 | renameTextField.grabFocus(); |
| 601 | 603 | ||
| 602 | int offset = text.getText().lastIndexOf('/') + 1; | 604 | int offset = renameTextField.getText().lastIndexOf('/') + 1; |
| 603 | // If it's a class and isn't in the default package, assume that it's deobfuscated. | 605 | // If it's a class and isn't in the default package, assume that it's deobfuscated. |
| 604 | if (translatedReference.getNameableEntry() instanceof ClassEntry && text.getText().contains("/") && offset != 0) | 606 | if (translatedReference.getNameableEntry() instanceof ClassEntry && renameTextField.getText().contains("/") && offset != 0) |
| 605 | text.select(offset, text.getText().length()); | 607 | renameTextField.select(offset, renameTextField.getText().length()); |
| 606 | else | 608 | else |
| 607 | text.selectAll(); | 609 | renameTextField.selectAll(); |
| 608 | 610 | ||
| 609 | redraw(); | 611 | redraw(); |
| 610 | } | 612 | } |
| 611 | 613 | ||
| 612 | private void finishRename(JTextField text, boolean saveName) { | 614 | private void finishRename(boolean saveName) { |
| 613 | String newName = text.getText(); | 615 | String newName = renameTextField.getText(); |
| 614 | if (saveName && newName != null && !newName.isEmpty()) { | 616 | if (saveName && newName != null && !newName.isEmpty()) { |
| 615 | try { | 617 | try { |
| 616 | this.controller.rename(cursorReference, newName, true); | 618 | this.controller.rename(cursorReference, newName, true); |
| 617 | } catch (IllegalNameException ex) { | 619 | } catch (IllegalNameException ex) { |
| 618 | text.setBorder(BorderFactory.createLineBorder(Color.red, 1)); | 620 | renameTextField.setBorder(BorderFactory.createLineBorder(Color.red, 1)); |
| 619 | text.setToolTipText(ex.getReason()); | 621 | renameTextField.setToolTipText(ex.getReason()); |
| 620 | Utils.showToolTipNow(text); | 622 | Utils.showToolTipNow(renameTextField); |
| 621 | } | 623 | } |
| 622 | return; | 624 | return; |
| 623 | } | 625 | } |
| @@ -627,6 +629,8 @@ public class Gui { | |||
| 627 | panel.remove(panel.getComponentCount() - 1); | 629 | panel.remove(panel.getComponentCount() - 1); |
| 628 | panel.add(Utils.unboldLabel(new JLabel(cursorReference.getNameableName(), JLabel.LEFT))); | 630 | panel.add(Utils.unboldLabel(new JLabel(cursorReference.getNameableName(), JLabel.LEFT))); |
| 629 | 631 | ||
| 632 | renameTextField = null; | ||
| 633 | |||
| 630 | this.editor.grabFocus(); | 634 | this.editor.grabFocus(); |
| 631 | 635 | ||
| 632 | redraw(); | 636 | redraw(); |
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java index 5610233b..16833331 100644 --- a/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/src/main/java/cuchaz/enigma/gui/GuiController.java | |||
| @@ -297,14 +297,7 @@ public class GuiController { | |||
| 297 | * @param reference | 297 | * @param reference |
| 298 | */ | 298 | */ |
| 299 | private void showReference(EntryReference<Entry<?>, Entry<?>> reference) { | 299 | private void showReference(EntryReference<Entry<?>, Entry<?>> reference) { |
| 300 | EntryRemapper mapper = this.deobfuscator.getMapper(); | 300 | Collection<Token> tokens = getTokensForReference(reference); |
| 301 | |||
| 302 | SourceIndex index = this.currentSource.getIndex(); | ||
| 303 | Collection<Token> tokens = mapper.getObfResolver().resolveReference(reference, ResolutionStrategy.RESOLVE_CLOSEST) | ||
| 304 | .stream() | ||
| 305 | .flatMap(r -> index.getReferenceTokens(r).stream()) | ||
| 306 | .collect(Collectors.toList()); | ||
| 307 | |||
| 308 | if (tokens.isEmpty()) { | 301 | if (tokens.isEmpty()) { |
| 309 | // DEBUG | 302 | // DEBUG |
| 310 | System.err.println(String.format("WARNING: no tokens found for %s in %s", reference, this.currentSource.getEntry())); | 303 | System.err.println(String.format("WARNING: no tokens found for %s in %s", reference, this.currentSource.getEntry())); |
| @@ -313,6 +306,16 @@ public class GuiController { | |||
| 313 | } | 306 | } |
| 314 | } | 307 | } |
| 315 | 308 | ||
| 309 | public Collection<Token> getTokensForReference(EntryReference<Entry<?>, Entry<?>> reference) { | ||
| 310 | EntryRemapper mapper = this.deobfuscator.getMapper(); | ||
| 311 | |||
| 312 | SourceIndex index = this.currentSource.getIndex(); | ||
| 313 | return mapper.getObfResolver().resolveReference(reference, ResolutionStrategy.RESOLVE_CLOSEST) | ||
| 314 | .stream() | ||
| 315 | .flatMap(r -> index.getReferenceTokens(r).stream()) | ||
| 316 | .collect(Collectors.toList()); | ||
| 317 | } | ||
| 318 | |||
| 316 | public void openPreviousReference() { | 319 | public void openPreviousReference() { |
| 317 | if (hasPreviousReference()) { | 320 | if (hasPreviousReference()) { |
| 318 | setReference(gui.referenceHistory.goBack()); | 321 | setReference(gui.referenceHistory.goBack()); |
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java b/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java index f19d98f6..849c7c1a 100644 --- a/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java +++ b/src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java | |||
| @@ -39,51 +39,57 @@ public class PanelEditor extends JEditorPane { | |||
| 39 | this.addKeyListener(new KeyAdapter() { | 39 | this.addKeyListener(new KeyAdapter() { |
| 40 | @Override | 40 | @Override |
| 41 | public void keyPressed(KeyEvent event) { | 41 | public void keyPressed(KeyEvent event) { |
| 42 | switch (event.getKeyCode()) { | 42 | if (event.isControlDown()) { |
| 43 | case KeyEvent.VK_R: | 43 | switch (event.getKeyCode()) { |
| 44 | gui.popupMenu.renameMenu.doClick(); | 44 | case KeyEvent.VK_I: |
| 45 | break; | 45 | gui.popupMenu.showInheritanceMenu.doClick(); |
| 46 | 46 | break; | |
| 47 | case KeyEvent.VK_I: | ||
| 48 | gui.popupMenu.showInheritanceMenu.doClick(); | ||
| 49 | break; | ||
| 50 | 47 | ||
| 51 | case KeyEvent.VK_M: | 48 | case KeyEvent.VK_M: |
| 52 | gui.popupMenu.showImplementationsMenu.doClick(); | 49 | gui.popupMenu.showImplementationsMenu.doClick(); |
| 53 | break; | 50 | break; |
| 54 | 51 | ||
| 55 | case KeyEvent.VK_N: | 52 | case KeyEvent.VK_N: |
| 56 | gui.popupMenu.openEntryMenu.doClick(); | 53 | gui.popupMenu.openEntryMenu.doClick(); |
| 57 | break; | 54 | break; |
| 58 | 55 | ||
| 59 | case KeyEvent.VK_P: | 56 | case KeyEvent.VK_P: |
| 60 | gui.popupMenu.openPreviousMenu.doClick(); | 57 | gui.popupMenu.openPreviousMenu.doClick(); |
| 61 | break; | 58 | break; |
| 62 | 59 | ||
| 63 | case KeyEvent.VK_E: | 60 | case KeyEvent.VK_E: |
| 64 | gui.popupMenu.openNextMenu.doClick(); | 61 | gui.popupMenu.openNextMenu.doClick(); |
| 65 | break; | 62 | break; |
| 66 | 63 | ||
| 67 | case KeyEvent.VK_C: | 64 | case KeyEvent.VK_C: |
| 68 | gui.popupMenu.showCallsMenu.doClick(); | 65 | gui.popupMenu.showCallsMenu.doClick(); |
| 69 | break; | 66 | break; |
| 70 | 67 | ||
| 71 | case KeyEvent.VK_O: | 68 | case KeyEvent.VK_O: |
| 72 | gui.popupMenu.toggleMappingMenu.doClick(); | 69 | gui.popupMenu.toggleMappingMenu.doClick(); |
| 73 | break; | 70 | break; |
| 74 | case KeyEvent.VK_F5: | 71 | case KeyEvent.VK_F5: |
| 75 | gui.getController().refreshCurrentClass(); | 72 | gui.getController().refreshCurrentClass(); |
| 76 | break; | 73 | break; |
| 77 | default: | 74 | default: |
| 78 | break; | 75 | break; |
| 76 | } | ||
| 79 | } | 77 | } |
| 80 | 78 | ||
| 81 | gui.setShouldNavigateOnClick(event.isControlDown()); | 79 | gui.setShouldNavigateOnClick(event.isControlDown()); |
| 82 | } | 80 | } |
| 83 | 81 | ||
| 84 | @Override | 82 | @Override |
| 83 | public void keyTyped(KeyEvent event) { | ||
| 84 | if (!gui.popupMenu.renameMenu.isEnabled()) return; | ||
| 85 | if (!event.isControlDown() && !event.isAltDown()) { | ||
| 86 | gui.popupMenu.renameMenu.doClick(); | ||
| 87 | gui.renameTextField.setText(String.valueOf(event.getKeyChar())); | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | @Override | ||
| 85 | public void keyReleased(KeyEvent event) { | 92 | public void keyReleased(KeyEvent event) { |
| 86 | super.keyReleased(event); | ||
| 87 | gui.setShouldNavigateOnClick(event.isControlDown()); | 93 | gui.setShouldNavigateOnClick(event.isControlDown()); |
| 88 | } | 94 | } |
| 89 | }); | 95 | }); |