diff options
5 files changed, 32 insertions, 7 deletions
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 30bf4d3e..a657d171 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java | |||
| @@ -75,6 +75,7 @@ public class Gui implements LanguageChangeListener { | |||
| 75 | private ConnectionState connectionState; | 75 | private ConnectionState connectionState; |
| 76 | private boolean isJarOpen; | 76 | private boolean isJarOpen; |
| 77 | private final Set<EditableType> editableTypes; | 77 | private final Set<EditableType> editableTypes; |
| 78 | private boolean singleClassTree; | ||
| 78 | 79 | ||
| 79 | public JFileChooser jarFileChooser; | 80 | public JFileChooser jarFileChooser; |
| 80 | public JFileChooser tinyMappingsFileChooser; | 81 | public JFileChooser tinyMappingsFileChooser; |
| @@ -424,7 +425,19 @@ public class Gui implements LanguageChangeListener { | |||
| 424 | public GuiController getController() { | 425 | public GuiController getController() { |
| 425 | return this.controller; | 426 | return this.controller; |
| 426 | } | 427 | } |
| 427 | 428 | ||
| 429 | public void setSingleClassTree(boolean singleClassTree) { | ||
| 430 | this.singleClassTree = singleClassTree; | ||
| 431 | this.classesPanel.removeAll(); | ||
| 432 | this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); | ||
| 433 | getController().refreshClasses(); | ||
| 434 | retranslateUi(); | ||
| 435 | } | ||
| 436 | |||
| 437 | public boolean isSingleClassTree() { | ||
| 438 | return singleClassTree; | ||
| 439 | } | ||
| 440 | |||
| 428 | public void onStartOpenJar() { | 441 | public void onStartOpenJar() { |
| 429 | this.classesPanel.removeAll(); | 442 | this.classesPanel.removeAll(); |
| 430 | redraw(); | 443 | redraw(); |
| @@ -434,7 +447,7 @@ public class Gui implements LanguageChangeListener { | |||
| 434 | // update gui | 447 | // update gui |
| 435 | this.frame.setTitle(Enigma.NAME + " - " + jarName); | 448 | this.frame.setTitle(Enigma.NAME + " - " + jarName); |
| 436 | this.classesPanel.removeAll(); | 449 | this.classesPanel.removeAll(); |
| 437 | this.classesPanel.add(splitClasses); | 450 | this.classesPanel.add(isSingleClassTree() ? deobfPanel : splitClasses); |
| 438 | closeAllEditorTabs(); | 451 | closeAllEditorTabs(); |
| 439 | 452 | ||
| 440 | // update menu | 453 | // update menu |
| @@ -816,8 +829,6 @@ public class Gui implements LanguageChangeListener { | |||
| 816 | } else if (data instanceof ClassEntry) { | 829 | } else if (data instanceof ClassEntry) { |
| 817 | // class rename | 830 | // class rename |
| 818 | 831 | ||
| 819 | // assume this is deobf since the obf tree doesn't allow renaming in | ||
| 820 | // the first place | ||
| 821 | // TODO optimize reverse class lookup, although it looks like it's | 832 | // TODO optimize reverse class lookup, although it looks like it's |
| 822 | // fast enough for now | 833 | // fast enough for now |
| 823 | EntryRemapper mapper = this.controller.project.getMapper(); | 834 | EntryRemapper mapper = this.controller.project.getMapper(); |
| @@ -826,7 +837,7 @@ public class Gui implements LanguageChangeListener { | |||
| 826 | .filter(e -> e instanceof ClassEntry) | 837 | .filter(e -> e instanceof ClassEntry) |
| 827 | .map(e -> (ClassEntry) e) | 838 | .map(e -> (ClassEntry) e) |
| 828 | .filter(e -> mapper.deobfuscate(e).equals(deobf)) | 839 | .filter(e -> mapper.deobfuscate(e).equals(deobf)) |
| 829 | .findAny().get(); | 840 | .findAny().orElse(deobf); |
| 830 | 841 | ||
| 831 | this.controller.rename(vc, new EntryReference<>(obf, obf.getFullName()), ((ClassEntry) data).getFullName(), false); | 842 | this.controller.rename(vc, new EntryReference<>(obf, obf.getFullName()), ((ClassEntry) data).getFullName(), false); |
| 832 | if (!vc.canProceed()) return; | 843 | if (!vc.canProceed()) return; |
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java index e28271e7..2b75655a 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java | |||
| @@ -359,7 +359,9 @@ public class GuiController implements ClientPacketHandler { | |||
| 359 | openReference(reference); | 359 | openReference(reference); |
| 360 | } | 360 | } |
| 361 | 361 | ||
| 362 | private void refreshClasses() { | 362 | public void refreshClasses() { |
| 363 | if (project == null) return; | ||
| 364 | |||
| 363 | List<ClassEntry> obfClasses = Lists.newArrayList(); | 365 | List<ClassEntry> obfClasses = Lists.newArrayList(); |
| 364 | List<ClassEntry> deobfClasses = Lists.newArrayList(); | 366 | List<ClassEntry> deobfClasses = Lists.newArrayList(); |
| 365 | this.addSeparatedClasses(obfClasses, deobfClasses); | 367 | this.addSeparatedClasses(obfClasses, deobfClasses); |
| @@ -375,6 +377,11 @@ public class GuiController implements ClientPacketHandler { | |||
| 375 | .filter(entry -> !entry.isInnerClass()); | 377 | .filter(entry -> !entry.isInnerClass()); |
| 376 | 378 | ||
| 377 | visibleClasses.forEach(entry -> { | 379 | visibleClasses.forEach(entry -> { |
| 380 | if (gui.isSingleClassTree()) { | ||
| 381 | deobfClasses.add(entry); | ||
| 382 | return; | ||
| 383 | } | ||
| 384 | |||
| 378 | ClassEntry deobfEntry = mapper.deobfuscate(entry); | 385 | ClassEntry deobfEntry = mapper.deobfuscate(entry); |
| 379 | 386 | ||
| 380 | List<ObfuscationTestService> obfService = enigma.getServices().get(ObfuscationTestService.TYPE); | 387 | List<ObfuscationTestService> obfService = enigma.getServices().get(ObfuscationTestService.TYPE); |
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java index cd968fce..f6a03f54 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Main.java | |||
| @@ -60,6 +60,8 @@ public class Main { | |||
| 60 | parser.acceptsAll(List.of("edit-javadocs", "d"), "Enable editing Javadocs"); | 60 | parser.acceptsAll(List.of("edit-javadocs", "d"), "Enable editing Javadocs"); |
| 61 | parser.acceptsAll(List.of("no-edit-javadocs", "D"), "Disable editing Javadocs"); | 61 | parser.acceptsAll(List.of("no-edit-javadocs", "D"), "Disable editing Javadocs"); |
| 62 | 62 | ||
| 63 | parser.accepts("single-class-tree", "Unify the deobfuscated and obfuscated class panels"); | ||
| 64 | |||
| 63 | parser.accepts("help", "Displays help information"); | 65 | parser.accepts("help", "Displays help information"); |
| 64 | 66 | ||
| 65 | try { | 67 | try { |
| @@ -107,6 +109,10 @@ public class Main { | |||
| 107 | 109 | ||
| 108 | Gui gui = new Gui(parsedProfile, editables); | 110 | Gui gui = new Gui(parsedProfile, editables); |
| 109 | GuiController controller = gui.getController(); | 111 | GuiController controller = gui.getController(); |
| 112 | |||
| 113 | if (options.has("single-class-tree")) { | ||
| 114 | gui.setSingleClassTree(true); | ||
| 115 | } | ||
| 110 | 116 | ||
| 111 | if (options.has(jar)) { | 117 | if (options.has(jar)) { |
| 112 | Path jarPath = options.valueOf(jar); | 118 | Path jarPath = options.valueOf(jar); |
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java index 3e357cbd..5b7882b0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/DeobfPanel.java | |||
| @@ -32,7 +32,7 @@ public class DeobfPanel extends JPanel { | |||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | public void retranslateUi() { | 34 | public void retranslateUi() { |
| 35 | this.title.setText(I18n.translate("info_panel.classes.deobfuscated")); | 35 | this.title.setText(I18n.translate(gui.isSingleClassTree() ? "info_panel.classes" : "info_panel.classes.deobfuscated")); |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | } | 38 | } |
diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index b3085be0..4488bb2e 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json | |||
| @@ -92,6 +92,7 @@ | |||
| 92 | "editor.decompile_error": "An error was encountered while decompiling.", | 92 | "editor.decompile_error": "An error was encountered while decompiling.", |
| 93 | "editor.remap_error": "An error was encountered while remapping.", | 93 | "editor.remap_error": "An error was encountered while remapping.", |
| 94 | 94 | ||
| 95 | "info_panel.classes": "Classes", | ||
| 95 | "info_panel.classes.obfuscated": "Obfuscated Classes", | 96 | "info_panel.classes.obfuscated": "Obfuscated Classes", |
| 96 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", | 97 | "info_panel.classes.deobfuscated": "De-obfuscated Classes", |
| 97 | "info_panel.identifier": "Identifier Info", | 98 | "info_panel.identifier": "Identifier Info", |