summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Yanis482020-06-08 22:50:28 +0200
committerGravatar GitHub2020-06-08 16:50:28 -0400
commitb06a81442bdaf15c4daebe87582c4f50ec1195b4 (patch)
tree4008e2b5b01d31252702adc1e47696f8b5a812f8
parentFix javadoc loss when renaming entry (#259) (diff)
downloadenigma-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
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java4
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/StatsDialog.java32
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/stats/StatsGenerator.java9
-rw-r--r--enigma/src/main/resources/lang/en_us.json2
-rw-r--r--enigma/src/main/resources/lang/fr_fr.json38
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 @@
1package cuchaz.enigma.gui.dialog; 1package cuchaz.enigma.gui.dialog;
2 2
3import java.awt.BorderLayout; 3import java.awt.*;
4import java.util.Arrays; 4import java.util.Arrays;
5import java.util.Locale; 5import java.util.Locale;
6import java.util.Map; 6import java.util.Map;
7import java.util.Set; 7import java.util.Set;
8import java.util.stream.Collectors; 8import java.util.stream.Collectors;
9 9
10import javax.swing.JButton; 10import javax.swing.*;
11import javax.swing.JCheckBox;
12import javax.swing.JFrame;
13import javax.swing.JPanel;
14 11
15import cuchaz.enigma.gui.Gui; 12import cuchaz.enigma.gui.Gui;
16import cuchaz.enigma.gui.stats.StatsMember; 13import 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",