diff options
| author | 2022-09-22 11:59:53 +0200 | |
|---|---|---|
| committer | 2023-10-09 11:51:28 +0200 | |
| commit | 47de69a821c6e089b01187e93f4f916aceeeea85 (patch) | |
| tree | b6e2ccab4e3e3896b9fc32b6f013c35f7ef0995d /enigma-swing | |
| parent | Bump version (diff) | |
| download | enigma-47de69a821c6e089b01187e93f4f916aceeeea85.tar.gz enigma-47de69a821c6e089b01187e93f4f916aceeeea85.tar.xz enigma-47de69a821c6e089b01187e93f4f916aceeeea85.zip | |
Add initial Mapping-IO export support
Diffstat (limited to 'enigma-swing')
| -rw-r--r-- | enigma-swing/src/main/java/cuchaz/enigma/gui/GuiController.java | 45 | ||||
| -rw-r--r-- | enigma-swing/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java | 23 |
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; | |||
| 29 | import javax.swing.SwingUtilities; | 29 | import javax.swing.SwingUtilities; |
| 30 | 30 | ||
| 31 | import com.google.common.collect.Lists; | 31 | import com.google.common.collect.Lists; |
| 32 | import net.fabricmc.mappingio.MappingWriter; | ||
| 33 | import net.fabricmc.mappingio.tree.MemoryMappingTree; | ||
| 32 | 34 | ||
| 33 | import cuchaz.enigma.Enigma; | 35 | import cuchaz.enigma.Enigma; |
| 34 | import cuchaz.enigma.EnigmaProfile; | 36 | import cuchaz.enigma.EnigmaProfile; |
| @@ -77,6 +79,7 @@ import cuchaz.enigma.translation.mapping.EntryUtil; | |||
| 77 | import cuchaz.enigma.translation.mapping.MappingDelta; | 79 | import cuchaz.enigma.translation.mapping.MappingDelta; |
| 78 | import cuchaz.enigma.translation.mapping.ResolutionStrategy; | 80 | import cuchaz.enigma.translation.mapping.ResolutionStrategy; |
| 79 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | 81 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; |
| 82 | import cuchaz.enigma.translation.mapping.serde.MappingIoConverter; | ||
| 80 | import cuchaz.enigma.translation.mapping.serde.MappingParseException; | 83 | import cuchaz.enigma.translation.mapping.serde.MappingParseException; |
| 81 | import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; | 84 | import cuchaz.enigma.translation.mapping.serde.MappingSaveParameters; |
| 82 | import cuchaz.enigma.translation.mapping.tree.EntryTree; | 85 | import 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; | |||
| 7 | import java.nio.file.Files; | 7 | import java.nio.file.Files; |
| 8 | import java.nio.file.Path; | 8 | import java.nio.file.Path; |
| 9 | import java.util.Arrays; | 9 | import java.util.Arrays; |
| 10 | import java.util.List; | ||
| 10 | import java.util.Locale; | 11 | import java.util.Locale; |
| 11 | import java.util.Map; | 12 | import java.util.Map; |
| 12 | import java.util.stream.Collectors; | 13 | import 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) { |