From 57af19a99b2c7358d78f102b91482b2073126881 Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Mon, 6 Jul 2020 18:48:36 +0200 Subject: Add menu entry to reload jar & mappings from disk (#263) * Add button to reload jar & mappings from disk * Disable menu entry when currently loading * Add menu entry that reloads mappings only * Remove duplicate user query code --- .../src/main/java/cuchaz/enigma/gui/Gui.java | 1 - .../main/java/cuchaz/enigma/gui/GuiController.java | 22 ++++++++++++++++ .../java/cuchaz/enigma/gui/elements/MenuBar.java | 29 +++++++++++++++++++--- 3 files changed, 47 insertions(+), 5 deletions(-) (limited to 'enigma-swing/src/main/java') 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 ec68d0d..8f10505 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java @@ -393,7 +393,6 @@ public class Gui { } public void onCloseJar() { - // update gui this.frame.setTitle(Enigma.NAME); setObfClasses(null); 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 124ad07..2f5e5e1 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java @@ -178,6 +178,28 @@ public class GuiController implements ClientPacketHandler { chp.invalidateMapped(); } + public void reloadAll() { + Path jarPath = this.project.getJarPath(); + MappingFormat loadedMappingFormat = this.loadedMappingFormat; + Path loadedMappingPath = this.loadedMappingPath; + if (jarPath != null) { + this.closeJar(); + CompletableFuture f = this.openJar(jarPath); + if (loadedMappingFormat != null && loadedMappingPath != null) { + f.whenComplete((v, t) -> this.openMappings(loadedMappingFormat, loadedMappingPath)); + } + } + } + + public void reloadMappings() { + MappingFormat loadedMappingFormat = this.loadedMappingFormat; + Path loadedMappingPath = this.loadedMappingPath; + if (loadedMappingFormat != null && loadedMappingPath != null) { + this.closeMappings(); + this.openMappings(loadedMappingFormat, loadedMappingPath); + } + } + public CompletableFuture dropMappings() { if (project == null) return CompletableFuture.completedFuture(null); diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java index 768bc41..d6c60e0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java @@ -40,6 +40,8 @@ public class MenuBar { private final JMenu saveMappingsAsMenu = new JMenu(I18n.translate("menu.file.mappings.save_as")); private final JMenuItem closeMappingsItem = new JMenuItem(I18n.translate("menu.file.mappings.close")); private final JMenuItem dropMappingsItem = new JMenuItem(I18n.translate("menu.file.mappings.drop")); + private final JMenuItem reloadMappingsItem = new JMenuItem(I18n.translate("menu.file.reload_mappings")); + private final JMenuItem reloadAllItem = new JMenuItem(I18n.translate("menu.file.reload_all")); private final JMenuItem exportSourceItem = new JMenuItem(I18n.translate("menu.file.export.source")); private final JMenuItem exportJarItem = new JMenuItem(I18n.translate("menu.file.export.jar")); private final JMenuItem statsItem = new JMenuItem(I18n.translate("menu.file.stats")); @@ -83,6 +85,9 @@ public class MenuBar { this.fileMenu.add(this.closeMappingsItem); this.fileMenu.add(this.dropMappingsItem); this.fileMenu.addSeparator(); + this.fileMenu.add(this.reloadMappingsItem); + this.fileMenu.add(this.reloadAllItem); + this.fileMenu.addSeparator(); this.fileMenu.add(this.exportSourceItem); this.fileMenu.add(this.exportJarItem); this.fileMenu.addSeparator(); @@ -117,6 +122,8 @@ public class MenuBar { this.saveMappingsItem.addActionListener(_e -> this.onSaveMappingsClicked()); this.closeMappingsItem.addActionListener(_e -> this.onCloseMappingsClicked()); this.dropMappingsItem.addActionListener(_e -> this.gui.getController().dropMappings()); + this.reloadMappingsItem.addActionListener(_e -> this.onReloadMappingsClicked()); + this.reloadAllItem.addActionListener(_e -> this.onReloadAllClicked()); this.exportSourceItem.addActionListener(_e -> this.onExportSourceClicked()); this.exportJarItem.addActionListener(_e -> this.onExportJarClicked()); this.statsItem.addActionListener(_e -> StatsDialog.show(this.gui)); @@ -143,6 +150,8 @@ public class MenuBar { this.saveMappingsItem.setEnabled(jarOpen && this.gui.enigmaMappingsFileChooser.getSelectedFile() != null && connectionState != ConnectionState.CONNECTED); this.saveMappingsAsMenu.setEnabled(jarOpen); this.closeMappingsItem.setEnabled(jarOpen); + this.reloadMappingsItem.setEnabled(jarOpen); + this.reloadAllItem.setEnabled(jarOpen); this.exportSourceItem.setEnabled(jarOpen); this.exportJarItem.setEnabled(jarOpen); this.statsItem.setEnabled(jarOpen); @@ -169,21 +178,33 @@ public class MenuBar { this.gui.getController().saveMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile().toPath()); } - private void onCloseMappingsClicked() { + private void openMappingsDiscardPrompt(Runnable then) { if (this.gui.getController().isDirty()) { this.gui.showDiscardDiag((response -> { if (response == JOptionPane.YES_OPTION) { this.gui.saveMapping(); - this.gui.getController().closeMappings(); + then.run(); } else if (response == JOptionPane.NO_OPTION) - this.gui.getController().closeMappings(); + then.run(); return null; }), I18n.translate("prompt.close.save"), I18n.translate("prompt.close.discard"), I18n.translate("prompt.close.cancel")); } else { - this.gui.getController().closeMappings(); + then.run(); } } + private void onCloseMappingsClicked() { + openMappingsDiscardPrompt(() -> this.gui.getController().closeMappings()); + } + + private void onReloadMappingsClicked() { + openMappingsDiscardPrompt(() -> this.gui.getController().reloadMappings()); + } + + private void onReloadAllClicked() { + openMappingsDiscardPrompt(() -> this.gui.getController().reloadAll()); + } + private void onExportSourceClicked() { if (this.gui.exportSourceFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { this.gui.getController().exportSource(this.gui.exportSourceFileChooser.getSelectedFile().toPath()); -- cgit v1.2.3