summaryrefslogtreecommitdiff
path: root/enigma-swing/src
diff options
context:
space:
mode:
authorGravatar NebelNidas2022-09-22 11:59:53 +0200
committerGravatar NebelNidas2023-10-09 11:51:28 +0200
commit47de69a821c6e089b01187e93f4f916aceeeea85 (patch)
treeb6e2ccab4e3e3896b9fc32b6f013c35f7ef0995d /enigma-swing/src
parentBump version (diff)
downloadenigma-47de69a821c6e089b01187e93f4f916aceeeea85.tar.gz
enigma-47de69a821c6e089b01187e93f4f916aceeeea85.tar.xz
enigma-47de69a821c6e089b01187e93f4f916aceeeea85.zip
Add initial Mapping-IO export support
Diffstat (limited to 'enigma-swing/src')
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java45
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java23
2 files changed, 68 insertions, 0 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 91037b00..e7e75669 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -29,6 +29,8 @@ import javax.swing.JOptionPane;
29import javax.swing.SwingUtilities; 29import javax.swing.SwingUtilities;
30 30
31import com.google.common.collect.Lists; 31import com.google.common.collect.Lists;
32import net.fabricmc.mappingio.MappingWriter;
33import net.fabricmc.mappingio.tree.MemoryMappingTree;
32 34
33import cuchaz.enigma.Enigma; 35import cuchaz.enigma.Enigma;
34import cuchaz.enigma.EnigmaProfile; 36import cuchaz.enigma.EnigmaProfile;
@@ -77,6 +79,7 @@ import cuchaz.enigma.translation.mapping.EntryUtil;
77import cuchaz.enigma.translation.mapping.MappingDelta; 79import cuchaz.enigma.translation.mapping.MappingDelta;
78import cuchaz.enigma.translation.mapping.ResolutionStrategy; 80import cuchaz.enigma.translation.mapping.ResolutionStrategy;
79import cuchaz.enigma.translation.mapping.serde.MappingFormat; 81import cuchaz.enigma.translation.mapping.serde.MappingFormat;
82import cuchaz.enigma.translation.mapping.serde.MappingIoConverter;
80import cuchaz.enigma.translation.mapping.serde.MappingParseException; 83import cuchaz.enigma.translation.mapping.serde.MappingParseException;
81import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; 84import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters;
82import cuchaz.enigma.translation.mapping.tree.EntryTree; 85import cuchaz.enigma.translation.mapping.tree.EntryTree;
@@ -213,6 +216,48 @@ public class GuiController implements ClientPacketHandler {
213 }); 216 });
214 } 217 }
215 218
219 public CompletableFuture<Void> saveMappings(Path path, net.fabricmc.mappingio.format.MappingFormat format) {
220 if (project == null) {
221 return CompletableFuture.completedFuture(null);
222 }
223
224 return ProgressDialog.runOffThread(this.gui.getFrame(), progress -> {
225 EntryRemapper mapper = project.getMapper();
226 MappingSaveParameters saveParameters = enigma.getProfile().getMappingSaveParameters();
227
228 MappingDelta<EntryMapping> delta = mapper.takeMappingDelta();
229 boolean saveAll = !path.equals(loadedMappingPath);
230
231 switch (format) {
232 case ENIGMA:
233 loadedMappingFormat = MappingFormat.ENIGMA_DIRECTORY;
234 loadedMappingPath = path;
235 break;
236 case PROGUARD:
237 loadedMappingFormat = MappingFormat.PROGUARD;
238 loadedMappingPath = path;
239 break;
240 case SRG:
241 loadedMappingFormat = MappingFormat.SRG_FILE;
242 loadedMappingPath = path;
243 break;
244 case TINY:
245 loadedMappingFormat = MappingFormat.TINY_FILE;
246 loadedMappingPath = path;
247 break;
248 case TINY_2:
249 loadedMappingFormat = MappingFormat.TINY_V2;
250 loadedMappingPath = path;
251 break;
252 }
253
254 MemoryMappingTree mappingTree = MappingIoConverter.toMappingIo(mapper.getObfToDeobf());
255 MappingWriter writer = MappingWriter.create(path, format);
256 mappingTree.accept(writer);
257 writer.close();
258 });
259 }
260
216 public void closeMappings() { 261 public void closeMappings() {
217 if (project == null) { 262 if (project == null) {
218 return; 263 return;
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 1cfad504..1d4c1ca1 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
@@ -7,6 +7,7 @@ import java.io.IOException;
7import java.nio.file.Files; 7import java.nio.file.Files;
8import java.nio.file.Path; 8import java.nio.file.Path;
9import java.util.Arrays; 9import java.util.Arrays;
10import java.util.List;
10import java.util.Locale; 11import java.util.Locale;
11import java.util.Map; 12import java.util.Map;
12import java.util.stream.Collectors; 13import java.util.stream.Collectors;
@@ -439,6 +440,28 @@ public class MenuBar {
439 saveMappingsAsMenu.add(item); 440 saveMappingsAsMenu.add(item);
440 } 441 }
441 } 442 }
443
444 saveMappingsAsMenu.addSeparator();
445
446 List<net.fabricmc.mappingio.format.MappingFormat> writableMappingIoFormats = Arrays.asList(
447 net.fabricmc.mappingio.format.MappingFormat.ENIGMA,
448 net.fabricmc.mappingio.format.MappingFormat.TINY_2);
449 for (net.fabricmc.mappingio.format.MappingFormat format : writableMappingIoFormats) {
450 JMenuItem item = new JMenuItem(format.name + " (via mapping-io, experimental)");
451 item.addActionListener(event -> {
452 // TODO: Use a specific file chooser for it
453 if (gui.enigmaMappingsFileChooser.getCurrentDirectory() == null) {
454 gui.enigmaMappingsFileChooser.setCurrentDirectory(new File(UiConfig.getLastSelectedDir()));
455 }
456
457 if (gui.enigmaMappingsFileChooser.showSaveDialog(gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
458 gui.getController().saveMappings(gui.enigmaMappingsFileChooser.getSelectedFile().toPath(), format);
459 saveMappingsItem.setEnabled(true);
460 UiConfig.setLastSelectedDir(gui.enigmaMappingsFileChooser.getCurrentDirectory().toString());
461 }
462 });
463 saveMappingsAsMenu.add(item);
464 }
442 } 465 }
443 466
444 private static void prepareDecompilerMenu(JMenu decompilerMenu, Gui gui) { 467 private static void prepareDecompilerMenu(JMenu decompilerMenu, Gui gui) {