From b06a81442bdaf15c4daebe87582c4f50ec1195b4 Mon Sep 17 00:00:00 2001 From: Yanis48 Date: Mon, 8 Jun 2020 22:50:28 +0200 Subject: Top-level package option when generating stats (#264) * Top-level package option when generating stats * forgot to rename this--- .../main/java/cuchaz/enigma/gui/GuiController.java | 4 +-- .../java/cuchaz/enigma/gui/dialog/StatsDialog.java | 32 ++++++++++-------- .../cuchaz/enigma/gui/stats/StatsGenerator.java | 9 ++--- enigma/src/main/resources/lang/en_us.json | 2 ++ enigma/src/main/resources/lang/fr_fr.json | 38 ++++++++++++++++++---- 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 { chp.invalidateMapped(); } - public void openStats(Set includedMembers) { + public void openStats(Set includedMembers, String topLevelPackage) { ProgressDialog.runOffThread(gui.getFrame(), progress -> { - String data = new StatsGenerator(project).generate(progress, includedMembers); + String data = new StatsGenerator(project).generate(progress, includedMembers, topLevelPackage); try { 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 @@ package cuchaz.enigma.gui.dialog; -import java.awt.BorderLayout; +import java.awt.*; import java.util.Arrays; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JFrame; -import javax.swing.JPanel; +import javax.swing.*; import cuchaz.enigma.gui.Gui; import cuchaz.enigma.gui.stats.StatsMember; @@ -23,10 +20,12 @@ public class StatsDialog { // init frame JFrame frame = new JFrame(I18n.translate("menu.file.stats.title")); JPanel checkboxesPanel = new JPanel(); + JPanel topLevelPackagePanel = new JPanel(); JPanel buttonPanel = new JPanel(); - frame.setLayout(new BorderLayout()); - frame.add(BorderLayout.NORTH, checkboxesPanel); - frame.add(BorderLayout.SOUTH, buttonPanel); + frame.setLayout(new GridLayout(3, 0)); + frame.add(checkboxesPanel); + frame.add(topLevelPackagePanel); + frame.add(buttonPanel); // show checkboxes Map checkboxes = Arrays @@ -37,13 +36,20 @@ public class StatsDialog { return checkbox; })); + // show top-level package option + JLabel topLevelPackageOption = new JLabel(I18n.translate("menu.file.stats.top_level_package")); + JTextField topLevelPackage = new JTextField(); + topLevelPackage.setPreferredSize(ScaleUtil.getDimension(200, 25)); + topLevelPackagePanel.add(topLevelPackageOption); + topLevelPackagePanel.add(topLevelPackage); + // show generate button JButton button = new JButton(I18n.translate("menu.file.stats.generate")); buttonPanel.add(button); button.setEnabled(false); button.addActionListener(action -> { frame.dispose(); - generateStats(gui, checkboxes); + generateStats(gui, checkboxes, topLevelPackage.getText()); }); // add action listener to each checkbox @@ -60,12 +66,12 @@ public class StatsDialog { // show the frame frame.pack(); frame.setVisible(true); - frame.setSize(ScaleUtil.getDimension(500, 120)); + frame.setSize(ScaleUtil.getDimension(500, 150)); frame.setResizable(false); frame.setLocationRelativeTo(gui.getFrame()); } - private static void generateStats(Gui gui, Map checkboxes) { + private static void generateStats(Gui gui, Map checkboxes, String topLevelPackage) { // get members from selected checkboxes Set includedMembers = checkboxes .entrySet() @@ -74,9 +80,9 @@ public class StatsDialog { .map(Map.Entry::getKey) .collect(Collectors.toSet()); - // checks if a projet is open + // checks if a project is open if (gui.getController().project != null) { - gui.getController().openStats(includedMembers); + gui.getController().openStats(includedMembers, topLevelPackage); } } } 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 { nameProposalServices = project.getEnigma().getServices().get(NameProposalService.TYPE); } - public String generate(ProgressListener progress, Set includedMembers) { + public String generate(ProgressListener progress, Set includedMembers, String topLevelPackage) { includedMembers = EnumSet.copyOf(includedMembers); int totalWork = 0; @@ -46,7 +46,7 @@ public class StatsGenerator { totalWork += entryIndex.getClasses().size(); } - progress.init(totalWork, "progress.stats"); + progress.init(totalWork, I18n.translate("progress.stats")); Map counts = new HashMap<>(); @@ -97,8 +97,9 @@ public class StatsGenerator { Tree tree = new Tree<>(); for (Map.Entry entry : counts.entrySet()) { - if (entry.getKey().startsWith("com.mojang")) continue; // just a few unmapped names, no point in having a subsection - tree.getNode(entry.getKey()).value = entry.getValue(); + if (entry.getKey().startsWith(topLevelPackage)) { + tree.getNode(entry.getKey()).value = entry.getValue(); + } } 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 @@ "menu.file.export.jar": "Export Jar...", "menu.file.stats": "Mapping Stats...", "menu.file.stats.title": "Choose Included Members", + "menu.file.stats.top_level_package": "Top-level package:", "menu.file.stats.generate": "Generate Stats", "menu.file.exit": "Exit", "menu.decompiler": "Decompiler", @@ -159,6 +160,7 @@ "message.mark_deobf.text": "%s marked %s as deobfuscated", "message.remove_mapping.text": "%s removed mappings for %s", "message.rename.text": "%s renamed %s to %s", + "status.disconnected": "Disconnected.", "status.connected": "Connected.", "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 @@ { "language": "Français", + "general.retry": "Réessayer", + "mapping_format.enigma_file": "Fichier Enigma", "mapping_format.enigma_directory": "Répertoire Enigma", "mapping_format.enigma_zip": "ZIP Enigma", @@ -25,6 +27,7 @@ "menu.file.export.jar": "Exporter le jar...", "menu.file.stats": "Statistiques des mappings...", "menu.file.stats.title": "Choisir les membres inclus", + "menu.file.stats.top_level_package": "Package de plus haut niveau :", "menu.file.stats.generate": "Générer les statistiques", "menu.file.exit": "Quitter", "menu.decompiler": "Décompilateur", @@ -69,6 +72,15 @@ "popup_menu.zoom.in": "Zoomer", "popup_menu.zoom.out": "Dézoomer", "popup_menu.zoom.reset": "Réinitialiser le zoom", + "popup_menu.editor_tab.close": "Fermer", + "popup_menu.editor_tab.close_all": "Tout fermer", + "popup_menu.editor_tab.close_others": "Fermer les autres", + "popup_menu.editor_tab.close_left": "Tout fermer sur la gauche", + "popup_menu.editor_tab.close_right": "Tout fermer sur la droite", + + "editor.decompiling": "Décompilation...", + "editor.decompile_error": "Une erreur est survenue lors de la décompilation.", + "editor.remap_error": "Une erreur est survenue lors du remapping.", "info_panel.classes.obfuscated": "Classes obfusquées", "info_panel.classes.deobfuscated": "Classes déobfusquées", @@ -127,14 +139,13 @@ "prompt.open": "Ouvrir", "prompt.cancel": "Annuler", "prompt.connect.title": "Se connecter à un serveur", - "prompt.connect.username": "Nom d'utilisateur", - "prompt.connect.ip": "IP", - "prompt.port": "Port", - "prompt.port.nan": "Le port n'est pas un nombre", - "prompt.port.invalid": "Le port est hors de portée. Il doit être compris entre 0 et 65535.", - "prompt.password": "Mot de passe", - "prompt.password.too_long": "Le mot de passe est trop long. Il ne doit pas dépasser 255 caractères.", + "prompt.connect.username": "Nom d'utilisateur :", + "prompt.connect.address": "Adresse :", + "prompt.connect.confirm": "Se connecter", "prompt.create_server.title": "Créer un serveur", + "prompt.create_server.port": "Port :", + "prompt.create_server.confirm": "Créer", + "prompt.password": "Mot de passe :", "disconnect.disconnected": "Déconnecté", "disconnect.server_closed": "Serveur fermé", @@ -155,6 +166,19 @@ "status.connected_user_count": "Connecté (%d utilisateurs).", "status.ready": "Prêt.", + "validation.message.empty_field": "Ce champ est requis.", + "validation.message.invalid_ip": "Combinaison IP/port invalide.", + "validation.message.not_int": "La valeur doit être un entier.", + "validation.message.field_out_of_range_int": "La valeur doit être un entier compris entre %d et %d.", + "validation.message.field_length_out_of_range": "La valeur doit être inférieure à %d caractères.", + "validation.message.nonunique_name_class": "Le nom '%s' n'est pas unique dans '%s'.", + "validation.message.nonunique_name": "Le nom '%s' n'est pas unique.", + "validation.message.illegal_class_name": "'%s' n'est pas un nom de classe valide.", + "validation.message.illegal_identifier": "'%s' n'est pas un identifiant valide.", + "validation.message.illegal_identifier.long": "Caractère '%2$s' invalide à la position %3$d.", + "validation.message.illegal_doc_comment_end": "Un commentaire de Javadoc ne peut pas contenir la séquence de caractères '*/'.", + "validation.message.reserved_identifier": "'%s' est un identifiant réservé.", + "crash.title": "%s - Rapport de plantage", "crash.summary": "%s a planté ! =(", "crash.export": "Exporter", -- cgit v1.2.3