summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/Gui.java
diff options
context:
space:
mode:
authorGravatar Modmuss502019-06-19 18:51:31 +0100
committerGravatar GitHub2019-06-19 18:51:31 +0100
commit546c617598b10c341fe6549678803f6ac0c95619 (patch)
treed818bcebf7634ed5b716ee29619725fdc29a04e8 /src/main/java/cuchaz/enigma/gui/Gui.java
parentfix unwanted declaration navigation during Quick Find (diff)
parentParse profile json from cli args (diff)
downloadenigma-fork-546c617598b10c341fe6549678803f6ac0c95619.tar.gz
enigma-fork-546c617598b10c341fe6549678803f6ac0c95619.tar.xz
enigma-fork-546c617598b10c341fe6549678803f6ac0c95619.zip
Merge pull request #135 from gegy1000/proposal-tweak
Plugin rework
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/Gui.java')
-rw-r--r--src/main/java/cuchaz/enigma/gui/Gui.java49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java
index dceeaa4..5b9a331 100644
--- a/src/main/java/cuchaz/enigma/gui/Gui.java
+++ b/src/main/java/cuchaz/enigma/gui/Gui.java
@@ -13,6 +13,7 @@ package cuchaz.enigma.gui;
13 13
14import com.google.common.collect.Lists; 14import com.google.common.collect.Lists;
15import cuchaz.enigma.Constants; 15import cuchaz.enigma.Constants;
16import cuchaz.enigma.EnigmaProfile;
16import cuchaz.enigma.ExceptionIgnorer; 17import cuchaz.enigma.ExceptionIgnorer;
17import cuchaz.enigma.analysis.*; 18import cuchaz.enigma.analysis.*;
18import cuchaz.enigma.config.Config; 19import cuchaz.enigma.config.Config;
@@ -31,9 +32,7 @@ import cuchaz.enigma.gui.panels.PanelIdentifier;
31import cuchaz.enigma.gui.panels.PanelObf; 32import cuchaz.enigma.gui.panels.PanelObf;
32import cuchaz.enigma.gui.util.History; 33import cuchaz.enigma.gui.util.History;
33import cuchaz.enigma.throwables.IllegalNameException; 34import cuchaz.enigma.throwables.IllegalNameException;
34import cuchaz.enigma.translation.mapping.AccessModifier; 35import cuchaz.enigma.translation.mapping.*;
35import cuchaz.enigma.translation.mapping.EntryResolver;
36import cuchaz.enigma.translation.mapping.ResolutionStrategy;
37import cuchaz.enigma.translation.representation.entry.*; 36import cuchaz.enigma.translation.representation.entry.*;
38import cuchaz.enigma.utils.Utils; 37import cuchaz.enigma.utils.Utils;
39import de.sciss.syntaxpane.DefaultSyntaxKit; 38import de.sciss.syntaxpane.DefaultSyntaxKit;
@@ -95,7 +94,7 @@ public class Gui {
95 } 94 }
96 } 95 }
97 96
98 public Gui() { 97 public Gui(EnigmaProfile profile) {
99 Config.getInstance().lookAndFeel.setGlobalLAF(); 98 Config.getInstance().lookAndFeel.setGlobalLAF();
100 99
101 // init frame 100 // init frame
@@ -114,7 +113,7 @@ public class Gui {
114 }); 113 });
115 } 114 }
116 115
117 this.controller = new GuiController(this); 116 this.controller = new GuiController(this, profile);
118 117
119 // init file choosers 118 // init file choosers
120 this.jarFileChooser = new FileDialog(getFrame(), "Open Jar", FileDialog.LOAD); 119 this.jarFileChooser = new FileDialog(getFrame(), "Open Jar", FileDialog.LOAD);
@@ -312,13 +311,8 @@ public class Gui {
312 return this.controller; 311 return this.controller;
313 } 312 }
314 313
315 public void onStartOpenJar(String message) { 314 public void onStartOpenJar() {
316 this.classesPanel.removeAll(); 315 this.classesPanel.removeAll();
317 JPanel panel = new JPanel();
318 panel.setLayout(new FlowLayout());
319 panel.add(new JLabel(message));
320 this.classesPanel.add(panel);
321
322 redraw(); 316 redraw();
323 } 317 }
324 318
@@ -447,7 +441,7 @@ public class Gui {
447 441
448 this.cursorReference = reference; 442 this.cursorReference = reference;
449 443
450 EntryReference<Entry<?>, Entry<?>> translatedReference = controller.getDeobfuscator().deobfuscate(reference); 444 EntryReference<Entry<?>, Entry<?>> translatedReference = controller.project.getMapper().deobfuscate(reference);
451 445
452 infoPanel.removeAll(); 446 infoPanel.removeAll();
453 if (translatedReference.entry instanceof ClassEntry) { 447 if (translatedReference.entry instanceof ClassEntry) {
@@ -509,7 +503,7 @@ public class Gui {
509 } 503 }
510 504
511 private JComboBox<AccessModifier> addModifierComboBox(JPanel container, String name, Entry entry) { 505 private JComboBox<AccessModifier> addModifierComboBox(JPanel container, String name, Entry entry) {
512 if (!getController().entryIsInJar(entry)) 506 if (!getController().project.isRenamable(entry))
513 return null; 507 return null;
514 JPanel panel = new JPanel(); 508 JPanel panel = new JPanel();
515 panel.setLayout(new FlowLayout(FlowLayout.LEFT, 6, 0)); 509 panel.setLayout(new FlowLayout(FlowLayout.LEFT, 6, 0));
@@ -519,8 +513,16 @@ public class Gui {
519 JComboBox<AccessModifier> combo = new JComboBox<>(AccessModifier.values()); 513 JComboBox<AccessModifier> combo = new JComboBox<>(AccessModifier.values());
520 ((JLabel) combo.getRenderer()).setHorizontalAlignment(JLabel.LEFT); 514 ((JLabel) combo.getRenderer()).setHorizontalAlignment(JLabel.LEFT);
521 combo.setPreferredSize(new Dimension(100, label.getPreferredSize().height)); 515 combo.setPreferredSize(new Dimension(100, label.getPreferredSize().height));
522 combo.setSelectedIndex(getController().getDeobfuscator().getModifier(entry).ordinal()); 516
523 combo.addItemListener(getController()::modifierChange); 517 EntryMapping mapping = controller.project.getMapper().getDeobfMapping(entry);
518 if (mapping != null) {
519 combo.setSelectedIndex(mapping.getAccessModifier().ordinal());
520 } else {
521 combo.setSelectedIndex(AccessModifier.UNCHANGED.ordinal());
522 }
523
524 combo.addItemListener(controller::modifierChange);
525
524 panel.add(combo); 526 panel.add(combo);
525 527
526 container.add(panel); 528 container.add(panel);
@@ -529,6 +531,7 @@ public class Gui {
529 } 531 }
530 532
531 public void onCaretMove(int pos, boolean fromClick) { 533 public void onCaretMove(int pos, boolean fromClick) {
534 EntryRemapper mapper = controller.project.getMapper();
532 Token token = this.controller.getToken(pos); 535 Token token = this.controller.getToken(pos);
533 boolean isToken = token != null; 536 boolean isToken = token != null;
534 537
@@ -539,7 +542,7 @@ public class Gui {
539 shouldNavigateOnClick = false; 542 shouldNavigateOnClick = false;
540 Entry<?> navigationEntry = referenceEntry; 543 Entry<?> navigationEntry = referenceEntry;
541 if (cursorReference.context == null) { 544 if (cursorReference.context == null) {
542 EntryResolver resolver = controller.getDeobfuscator().getMapper().getObfResolver(); 545 EntryResolver resolver = mapper.getObfResolver();
543 navigationEntry = resolver.resolveFirstEntry(referenceEntry, ResolutionStrategy.RESOLVE_ROOT); 546 navigationEntry = resolver.resolveFirstEntry(referenceEntry, ResolutionStrategy.RESOLVE_ROOT);
544 } 547 }
545 controller.navigateTo(navigationEntry); 548 controller.navigateTo(navigationEntry);
@@ -550,8 +553,7 @@ public class Gui {
550 boolean isFieldEntry = isToken && referenceEntry instanceof FieldEntry; 553 boolean isFieldEntry = isToken && referenceEntry instanceof FieldEntry;
551 boolean isMethodEntry = isToken && referenceEntry instanceof MethodEntry && !((MethodEntry) referenceEntry).isConstructor(); 554 boolean isMethodEntry = isToken && referenceEntry instanceof MethodEntry && !((MethodEntry) referenceEntry).isConstructor();
552 boolean isConstructorEntry = isToken && referenceEntry instanceof MethodEntry && ((MethodEntry) referenceEntry).isConstructor(); 555 boolean isConstructorEntry = isToken && referenceEntry instanceof MethodEntry && ((MethodEntry) referenceEntry).isConstructor();
553 boolean isInJar = isToken && this.controller.entryIsInJar(referenceEntry); 556 boolean isRenamable = isToken && this.controller.project.isRenamable(cursorReference);
554 boolean isRenamable = isToken && this.controller.getDeobfuscator().isRenamable(cursorReference);
555 557
556 if (isToken) { 558 if (isToken) {
557 showCursorReference(cursorReference); 559 showCursorReference(cursorReference);
@@ -564,12 +566,12 @@ public class Gui {
564 this.popupMenu.showImplementationsMenu.setEnabled(isClassEntry || isMethodEntry); 566 this.popupMenu.showImplementationsMenu.setEnabled(isClassEntry || isMethodEntry);
565 this.popupMenu.showCallsMenu.setEnabled(isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry); 567 this.popupMenu.showCallsMenu.setEnabled(isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry);
566 this.popupMenu.showCallsSpecificMenu.setEnabled(isMethodEntry); 568 this.popupMenu.showCallsSpecificMenu.setEnabled(isMethodEntry);
567 this.popupMenu.openEntryMenu.setEnabled(isInJar && (isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry)); 569 this.popupMenu.openEntryMenu.setEnabled(isRenamable && (isClassEntry || isFieldEntry || isMethodEntry || isConstructorEntry));
568 this.popupMenu.openPreviousMenu.setEnabled(this.controller.hasPreviousReference()); 570 this.popupMenu.openPreviousMenu.setEnabled(this.controller.hasPreviousReference());
569 this.popupMenu.openNextMenu.setEnabled(this.controller.hasNextReference()); 571 this.popupMenu.openNextMenu.setEnabled(this.controller.hasNextReference());
570 this.popupMenu.toggleMappingMenu.setEnabled(isRenamable); 572 this.popupMenu.toggleMappingMenu.setEnabled(isRenamable);
571 573
572 if (isToken && this.controller.getDeobfuscator().isRemapped(referenceEntry)) { 574 if (isToken && !Objects.equals(referenceEntry, mapper.deobfuscate(referenceEntry))) {
573 this.popupMenu.toggleMappingMenu.setText("Reset to obfuscated"); 575 this.popupMenu.toggleMappingMenu.setText("Reset to obfuscated");
574 } else { 576 } else {
575 this.popupMenu.toggleMappingMenu.setText("Mark as deobfuscated"); 577 this.popupMenu.toggleMappingMenu.setText("Mark as deobfuscated");
@@ -581,7 +583,7 @@ public class Gui {
581 // init the text box 583 // init the text box
582 renameTextField = new JTextField(); 584 renameTextField = new JTextField();
583 585
584 EntryReference<Entry<?>, Entry<?>> translatedReference = controller.getDeobfuscator().deobfuscate(cursorReference); 586 EntryReference<Entry<?>, Entry<?>> translatedReference = controller.project.getMapper().deobfuscate(cursorReference);
585 renameTextField.setText(translatedReference.getNameableName()); 587 renameTextField.setText(translatedReference.getNameableName());
586 588
587 renameTextField.setPreferredSize(new Dimension(360, renameTextField.getPreferredSize().height)); 589 renameTextField.setPreferredSize(new Dimension(360, renameTextField.getPreferredSize().height));
@@ -728,7 +730,10 @@ public class Gui {
728 } 730 }
729 731
730 public void toggleMapping() { 732 public void toggleMapping() {
731 if (this.controller.getDeobfuscator().isRemapped(cursorReference.entry)) { 733 Entry<?> obfEntry = cursorReference.entry;
734 Entry<?> deobfEntry = controller.project.getMapper().deobfuscate(obfEntry);
735
736 if (!Objects.equals(obfEntry, deobfEntry)) {
732 this.controller.removeMapping(cursorReference); 737 this.controller.removeMapping(cursorReference);
733 } else { 738 } else {
734 this.controller.markAsDeobfuscated(cursorReference); 739 this.controller.markAsDeobfuscated(cursorReference);