summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar Gegy2019-05-12 11:04:33 +0200
committerGravatar GitHub2019-05-12 11:04:33 +0200
commit324af846e90ae38886c2298559510aa935b054ee (patch)
treeffcb1e64b6108100b6636059a85d3f6034eab83d /src/main/java
parentQuick find fixes (#133) (diff)
downloadenigma-324af846e90ae38886c2298559510aa935b054ee.tar.gz
enigma-324af846e90ae38886c2298559510aa935b054ee.tar.xz
enigma-324af846e90ae38886c2298559510aa935b054ee.zip
Rename in place functionality (#131)
* Rename in place functionality * Don't allow rename if renaming is not allowed for the token * Remove redundant 'R' hotkey
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/cuchaz/enigma/gui/Gui.java38
-rw-r--r--src/main/java/cuchaz/enigma/gui/GuiController.java19
-rw-r--r--src/main/java/cuchaz/enigma/gui/panels/PanelEditor.java70
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 });