diff options
| author | 2020-06-08 22:50:28 +0200 | |
|---|---|---|
| committer | 2020-06-08 16:50:28 -0400 | |
| commit | b06a81442bdaf15c4daebe87582c4f50ec1195b4 (patch) | |
| tree | 4008e2b5b01d31252702adc1e47696f8b5a812f8 | |
| parent | Fix javadoc loss when renaming entry (#259) (diff) | |
| download | enigma-b06a81442bdaf15c4daebe87582c4f50ec1195b4.tar.gz enigma-b06a81442bdaf15c4daebe87582c4f50ec1195b4.tar.xz enigma-b06a81442bdaf15c4daebe87582c4f50ec1195b4.zip | |
Top-level package option when generating stats (#264)
* Top-level package option when generating stats
* forgot to rename this
5 files changed, 59 insertions, 26 deletions
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 15afeed1..ed0a2bf0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java | |||
| @@ -484,9 +484,9 @@ public class GuiController implements ClientPacketHandler { | |||
| 484 | chp.invalidateMapped(); | 484 | chp.invalidateMapped(); |
| 485 | } | 485 | } |
| 486 | 486 | ||
| 487 | public void openStats(Set<StatsMember> includedMembers) { | 487 | public void openStats(Set<StatsMember> includedMembers, String topLevelPackage) { |
| 488 | ProgressDialog.runOffThread(gui.getFrame(), progress -> { | 488 | ProgressDialog.runOffThread(gui.getFrame(), progress -> { |
| 489 | String data = new StatsGenerator(project).generate(progress, includedMembers); | 489 | String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage); |
| 490 | 490 | ||
| 491 | try { | 491 | try { |
| 492 | File statsFile = File.createTempFile("stats", ".html"); | 492 | File statsFile = File.createTempFile("stats", ".html"); |
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java index 868eba79..d8d3acd2 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java | |||
| @@ -1,16 +1,13 @@ | |||
| 1 | package cuchaz.enigma.gui.dialog; | 1 | package cuchaz.enigma.gui.dialog; |
| 2 | 2 | ||
| 3 | import java.awt.BorderLayout; | 3 | import java.awt.*; |
| 4 | import java.util.Arrays; | 4 | import java.util.Arrays; |
| 5 | import java.util.Locale; | 5 | import java.util.Locale; |
| 6 | import java.util.Map; | 6 | import java.util.Map; |
| 7 | import java.util.Set; | 7 | import java.util.Set; |
| 8 | import java.util.stream.Collectors; | 8 | import java.util.stream.Collectors; |
| 9 | 9 | ||
| 10 | import javax.swing.JButton; | 10 | import javax.swing.*; |
| 11 | import javax.swing.JCheckBox; | ||
| 12 | import javax.swing.JFrame; | ||
| 13 | import javax.swing.JPanel; | ||
| 14 | 11 | ||
| 15 | import cuchaz.enigma.gui.Gui; | 12 | import cuchaz.enigma.gui.Gui; |
| 16 | import cuchaz.enigma.gui.stats.StatsMember; | 13 | import cuchaz.enigma.gui.stats.StatsMember; |
| @@ -23,10 +20,12 @@ public class StatsDialog { | |||
| 23 | // init frame | 20 | // init frame |
| 24 | JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); | 21 | JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); |
| 25 | JPanel checkboxesPanel = new JPanel(); | 22 | JPanel checkboxesPanel = new JPanel(); |
| 23 | JPanel topLevelPackagePanel = new JPanel(); | ||
| 26 | JPanel buttonPanel = new JPanel(); | 24 | JPanel buttonPanel = new JPanel(); |
| 27 | frame.setLayout(new BorderLayout()); | 25 | frame.setLayout(new GridLayout(3, 0)); |
| 28 | frame.add(BorderLayout.NORTH, checkboxesPanel); | 26 | frame.add(checkboxesPanel); |
| 29 | frame.add(BorderLayout.SOUTH, buttonPanel); | 27 | frame.add(topLevelPackagePanel); |
| 28 | frame.add(buttonPanel); | ||
| 30 | 29 | ||
| 31 | // show checkboxes | 30 | // show checkboxes |
| 32 | Map<StatsMember, JCheckBox> checkboxes = Arrays | 31 | Map<StatsMember, JCheckBox> checkboxes = Arrays |
| @@ -37,13 +36,20 @@ public class StatsDialog { | |||
| 37 | return checkbox; | 36 | return checkbox; |
| 38 | })); | 37 | })); |
| 39 | 38 | ||
| 39 | // show top-level package option | ||
| 40 | JLabel topLevelPackageOption = new JLabel(I18n.translate("menu.file.stats.top_level_package")); | ||
| 41 | JTextField topLevelPackage = new JTextField(); | ||
| 42 | topLevelPackage.setPreferredSize(ScaleUtil.getDimension(200, 25)); | ||
| 43 | topLevelPackagePanel.add(topLevelPackageOption); | ||
| 44 | topLevelPackagePanel.add(topLevelPackage); | ||
| 45 | |||
| 40 | // show generate button | 46 | // show generate button |
| 41 | JButton button = new JButton(I18n.translate("menu.file.stats.generate")); | 47 | JButton button = new JButton(I18n.translate("menu.file.stats.generate")); |
| 42 | buttonPanel.add(button); | 48 | buttonPanel.add(button); |
| 43 | button.setEnabled(false); | 49 | button.setEnabled(false); |
| 44 | button.addActionListener(action -> { | 50 | button.addActionListener(action -> { |
| 45 | frame.dispose(); | 51 | frame.dispose(); |
| 46 | generateStats(gui, checkboxes); | 52 | generateStats(gui, checkboxes, topLevelPackage.getText()); |
| 47 | }); | 53 | }); |
| 48 | 54 | ||
| 49 | // add action listener to each checkbox | 55 | // add action listener to each checkbox |
| @@ -60,12 +66,12 @@ public class StatsDialog { | |||
| 60 | // show the frame | 66 | // show the frame |
| 61 | frame.pack(); | 67 | frame.pack(); |
| 62 | frame.setVisible(true); | 68 | frame.setVisible(true); |
| 63 | frame.setSize(ScaleUtil.getDimension(500, 120)); | 69 | frame.setSize(ScaleUtil.getDimension(500, 150)); |
| 64 | frame.setResizable(false); | 70 | frame.setResizable(false); |
| 65 | frame.setLocationRelativeTo(gui.getFrame()); | 71 | frame.setLocationRelativeTo(gui.getFrame()); |
| 66 | } | 72 | } |
| 67 | 73 | ||
| 68 | private static void generateStats(Gui gui, Map<StatsMember, JCheckBox> checkboxes) { | 74 | private static void generateStats(Gui gui, Map<StatsMember, JCheckBox> checkboxes, String topLevelPackage) { |
| 69 | // get members from selected checkboxes | 75 | // get members from selected checkboxes |
| 70 | Set<StatsMember> includedMembers = checkboxes | 76 | Set<StatsMember> includedMembers = checkboxes |
| 71 | .entrySet() | 77 | .entrySet() |
| @@ -74,9 +80,9 @@ public class StatsDialog { | |||
| 74 | .map(Map.Entry::getKey) | 80 | .map(Map.Entry::getKey) |
| 75 | .collect(Collectors.toSet()); | 81 | .collect(Collectors.toSet()); |
| 76 | 82 | ||
| 77 | // checks if a projet is open | 83 | // checks if a project is open |
| 78 | if (gui.getController().project != null) { | 84 | if (gui.getController().project != null) { |
| 79 | gui.getController().openStats(includedMembers); | 85 | gui.getController().openStats(includedMembers, topLevelPackage); |
| 80 | } | 86 | } |
| 81 | } | 87 | } |
| 82 | } | 88 | } |
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java index aa878bb2..3d031a72 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java | |||
| @@ -30,7 +30,7 @@ public class StatsGenerator { | |||
| 30 | nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); | 30 | nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | public String generate(ProgressListener progress, Set<StatsMember> includedMembers) { | 33 | public String generate(ProgressListener progress, Set<StatsMember> includedMembers, String topLevelPackage) { |
| 34 | includedMembers = EnumSet.copyOf(includedMembers); | 34 | includedMembers = EnumSet.copyOf(includedMembers); |
| 35 | int totalWork = 0; | 35 | int totalWork = 0; |
| 36 | 36 | ||
| @@ -46,7 +46,7 @@ public class StatsGenerator { | |||
| 46 | totalWork += entryIndex.getClasses().size(); | 46 | totalWork += entryIndex.getClasses().size(); |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | progress.init(totalWork, "progress.stats"); | 49 | progress.init(totalWork, I18n.translate("progress.stats")); |
| 50 | 50 | ||
| 51 | Map<String, Integer> counts = new HashMap<>(); | 51 | Map<String, Integer> counts = new HashMap<>(); |
| 52 | 52 | ||
| @@ -97,8 +97,9 @@ public class StatsGenerator { | |||
| 97 | Tree<Integer> tree = new Tree<>(); | 97 | Tree<Integer> tree = new Tree<>(); |
| 98 | 98 | ||
| 99 | for (Map.Entry<String, Integer> entry : counts.entrySet()) { | 99 | for (Map.Entry<String, Integer> entry : counts.entrySet()) { |
| 100 | if (entry.getKey().startsWith("com.mojang")) continue; // just a few unmapped names, no point in having a subsection | 100 | if (entry.getKey().startsWith(topLevelPackage)) { |
| 101 | tree.getNode(entry.getKey()).value = entry.getValue(); | 101 | tree.getNode(entry.getKey()).value = entry.getValue(); |
| 102 | } | ||
| 102 | } | 103 | } |
| 103 | 104 | ||
| 104 | tree.collapse(tree.root); | 105 | tree.collapse(tree.root); |
diff --git a/enigma/src/main/resources/lang/en_us.json b/enigma/src/main/resources/lang/en_us.json index c2a739c1..ec8e6317 100644 --- a/enigma/src/main/resources/lang/en_us.json +++ b/enigma/src/main/resources/lang/en_us.json | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | "menu.file.export.jar": "Export Jar...", | 27 | "menu.file.export.jar": "Export Jar...", |
| 28 | "menu.file.stats": "Mapping Stats...", | 28 | "menu.file.stats": "Mapping Stats...", |
| 29 | "menu.file.stats.title": "Choose Included Members", | 29 | "menu.file.stats.title": "Choose Included Members", |
| 30 | "menu.file.stats.top_level_package": "Top-level package:", | ||
| 30 | "menu.file.stats.generate": "Generate Stats", | 31 | "menu.file.stats.generate": "Generate Stats", |
| 31 | "menu.file.exit": "Exit", | 32 | "menu.file.exit": "Exit", |
| 32 | "menu.decompiler": "Decompiler", | 33 | "menu.decompiler": "Decompiler", |
| @@ -159,6 +160,7 @@ | |||
| 159 | "message.mark_deobf.text": "%s marked %s as deobfuscated", | 160 | "message.mark_deobf.text": "%s marked %s as deobfuscated", |
| 160 | "message.remove_mapping.text": "%s removed mappings for %s", | 161 | "message.remove_mapping.text": "%s removed mappings for %s", |
| 161 | "message.rename.text": "%s renamed %s to %s", | 162 | "message.rename.text": "%s renamed %s to %s", |
| 163 | |||
| 162 | "status.disconnected": "Disconnected.", | 164 | "status.disconnected": "Disconnected.", |
| 163 | "status.connected": "Connected.", | 165 | "status.connected": "Connected.", |
| 164 | "status.connected_user_count": "Connected (%d users).", | 166 | "status.connected_user_count": "Connected (%d users).", |
diff --git a/enigma/src/main/resources/lang/fr_fr.json b/enigma/src/main/resources/lang/fr_fr.json index d169b9a0..567ad2b4 100644 --- a/enigma/src/main/resources/lang/fr_fr.json +++ b/enigma/src/main/resources/lang/fr_fr.json | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | { | 1 | { |
| 2 | "language": "Français", | 2 | "language": "Français", |
| 3 | 3 | ||
| 4 | "general.retry": "Réessayer", | ||
| 5 | |||
| 4 | "mapping_format.enigma_file": "Fichier Enigma", | 6 | "mapping_format.enigma_file": "Fichier Enigma", |
| 5 | "mapping_format.enigma_directory": "Répertoire Enigma", | 7 | "mapping_format.enigma_directory": "Répertoire Enigma", |
| 6 | "mapping_format.enigma_zip": "ZIP Enigma", | 8 | "mapping_format.enigma_zip": "ZIP Enigma", |
| @@ -25,6 +27,7 @@ | |||
| 25 | "menu.file.export.jar": "Exporter le jar...", | 27 | "menu.file.export.jar": "Exporter le jar...", |
| 26 | "menu.file.stats": "Statistiques des mappings...", | 28 | "menu.file.stats": "Statistiques des mappings...", |
| 27 | "menu.file.stats.title": "Choisir les membres inclus", | 29 | "menu.file.stats.title": "Choisir les membres inclus", |
| 30 | "menu.file.stats.top_level_package": "Package de plus haut niveau :", | ||
| 28 | "menu.file.stats.generate": "Générer les statistiques", | 31 | "menu.file.stats.generate": "Générer les statistiques", |
| 29 | "menu.file.exit": "Quitter", | 32 | "menu.file.exit": "Quitter", |
| 30 | "menu.decompiler": "Décompilateur", | 33 | "menu.decompiler": "Décompilateur", |
| @@ -69,6 +72,15 @@ | |||
| 69 | "popup_menu.zoom.in": "Zoomer", | 72 | "popup_menu.zoom.in": "Zoomer", |
| 70 | "popup_menu.zoom.out": "Dézoomer", | 73 | "popup_menu.zoom.out": "Dézoomer", |
| 71 | "popup_menu.zoom.reset": "Réinitialiser le zoom", | 74 | "popup_menu.zoom.reset": "Réinitialiser le zoom", |
| 75 | "popup_menu.editor_tab.close": "Fermer", | ||
| 76 | "popup_menu.editor_tab.close_all": "Tout fermer", | ||
| 77 | "popup_menu.editor_tab.close_others": "Fermer les autres", | ||
| 78 | "popup_menu.editor_tab.close_left": "Tout fermer sur la gauche", | ||
| 79 | "popup_menu.editor_tab.close_right": "Tout fermer sur la droite", | ||
| 80 | |||
| 81 | "editor.decompiling": "Décompilation...", | ||
| 82 | "editor.decompile_error": "Une erreur est survenue lors de la décompilation.", | ||
| 83 | "editor.remap_error": "Une erreur est survenue lors du remapping.", | ||
| 72 | 84 | ||
| 73 | "info_panel.classes.obfuscated": "Classes obfusquées", | 85 | "info_panel.classes.obfuscated": "Classes obfusquées", |
| 74 | "info_panel.classes.deobfuscated": "Classes déobfusquées", | 86 | "info_panel.classes.deobfuscated": "Classes déobfusquées", |
| @@ -127,14 +139,13 @@ | |||
| 127 | "prompt.open": "Ouvrir", | 139 | "prompt.open": "Ouvrir", |
| 128 | "prompt.cancel": "Annuler", | 140 | "prompt.cancel": "Annuler", |
| 129 | "prompt.connect.title": "Se connecter à un serveur", | 141 | "prompt.connect.title": "Se connecter à un serveur", |
| 130 | "prompt.connect.username": "Nom d'utilisateur", | 142 | "prompt.connect.username": "Nom d'utilisateur :", |
| 131 | "prompt.connect.ip": "IP", | 143 | "prompt.connect.address": "Adresse :", |
| 132 | "prompt.port": "Port", | 144 | "prompt.connect.confirm": "Se connecter", |
| 133 | "prompt.port.nan": "Le port n'est pas un nombre", | ||
| 134 | "prompt.port.invalid": "Le port est hors de portée. Il doit être compris entre 0 et 65535.", | ||
| 135 | "prompt.password": "Mot de passe", | ||
| 136 | "prompt.password.too_long": "Le mot de passe est trop long. Il ne doit pas dépasser 255 caractères.", | ||
| 137 | "prompt.create_server.title": "Créer un serveur", | 145 | "prompt.create_server.title": "Créer un serveur", |
| 146 | "prompt.create_server.port": "Port :", | ||
| 147 | "prompt.create_server.confirm": "Créer", | ||
| 148 | "prompt.password": "Mot de passe :", | ||
| 138 | 149 | ||
| 139 | "disconnect.disconnected": "Déconnecté", | 150 | "disconnect.disconnected": "Déconnecté", |
| 140 | "disconnect.server_closed": "Serveur fermé", | 151 | "disconnect.server_closed": "Serveur fermé", |
| @@ -155,6 +166,19 @@ | |||
| 155 | "status.connected_user_count": "Connecté (%d utilisateurs).", | 166 | "status.connected_user_count": "Connecté (%d utilisateurs).", |
| 156 | "status.ready": "Prêt.", | 167 | "status.ready": "Prêt.", |
| 157 | 168 | ||
| 169 | "validation.message.empty_field": "Ce champ est requis.", | ||
| 170 | "validation.message.invalid_ip": "Combinaison IP/port invalide.", | ||
| 171 | "validation.message.not_int": "La valeur doit être un entier.", | ||
| 172 | "validation.message.field_out_of_range_int": "La valeur doit être un entier compris entre %d et %d.", | ||
| 173 | "validation.message.field_length_out_of_range": "La valeur doit être inférieure à %d caractères.", | ||
| 174 | "validation.message.nonunique_name_class": "Le nom '%s' n'est pas unique dans '%s'.", | ||
| 175 | "validation.message.nonunique_name": "Le nom '%s' n'est pas unique.", | ||
| 176 | "validation.message.illegal_class_name": "'%s' n'est pas un nom de classe valide.", | ||
| 177 | "validation.message.illegal_identifier": "'%s' n'est pas un identifiant valide.", | ||
| 178 | "validation.message.illegal_identifier.long": "Caractère '%2$s' invalide à la position %3$d.", | ||
| 179 | "validation.message.illegal_doc_comment_end": "Un commentaire de Javadoc ne peut pas contenir la séquence de caractères '*/'.", | ||
| 180 | "validation.message.reserved_identifier": "'%s' est un identifiant réservé.", | ||
| 181 | |||
| 158 | "crash.title": "%s - Rapport de plantage", | 182 | "crash.title": "%s - Rapport de plantage", |
| 159 | "crash.summary": "%s a planté ! =(", | 183 | "crash.summary": "%s a planté ! =(", |
| 160 | "crash.export": "Exporter", | 184 | "crash.export": "Exporter", |