From c31d8020c928eb0f1957d78bd18497a42f46c0e2 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 28 Apr 2015 13:18:48 +0200 Subject: [PATCH] allow to configure what object types to export in exportdialog --- .../flash/configuration/Configuration.java | 2 +- .../shape/DefaultSVGShapeExporter.java | 28 ++- .../exporters/shape/SVGShapeExporter.java | 4 +- .../decompiler/flash/gui/ExportDialog.java | 119 ++++++--- .../jpexs/decompiler/flash/gui/MainPanel.java | 238 ++++++++++++------ 5 files changed, 261 insertions(+), 130 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 9e8e63137..160eddaef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -226,7 +226,7 @@ public class Configuration { @ConfigurationCategory("script") public static final ConfigurationItem registerNameFormat = null; - @ConfigurationDefaultInt(10) + @ConfigurationDefaultInt(15) public static final ConfigurationItem maxRecentFileCount = null; public static final ConfigurationItem recentFiles = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/DefaultSVGShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/DefaultSVGShapeExporter.java index caa2860e8..ddf102d92 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/DefaultSVGShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/DefaultSVGShapeExporter.java @@ -35,7 +35,7 @@ public abstract class DefaultSVGShapeExporter extends ShapeExporterBase { protected String currentDrawCommand = ""; - protected String pathData; + protected StringBuilder pathData; protected double zoom; @@ -101,35 +101,37 @@ public abstract class DefaultSVGShapeExporter extends ShapeExporterBase { @Override public void moveTo(double x, double y) { currentDrawCommand = ""; - pathData += "M" - + roundPixels20(x * zoom / SWF.unitDivisor) + " " - + roundPixels20(y * zoom / SWF.unitDivisor) + " "; + pathData.append("M") + .append(roundPixels20(x * zoom / SWF.unitDivisor)).append(" ") + .append(roundPixels20(y * zoom / SWF.unitDivisor)).append(" "); } @Override public void lineTo(double x, double y) { if (!currentDrawCommand.equals(DRAW_COMMAND_L)) { currentDrawCommand = DRAW_COMMAND_L; - pathData += "L"; + pathData.append("L"); } - pathData += roundPixels20(x * zoom / SWF.unitDivisor) + " " - + roundPixels20(y * zoom / SWF.unitDivisor) + " "; + + pathData.append(roundPixels20(x * zoom / SWF.unitDivisor)).append(" ") + .append(roundPixels20(y * zoom / SWF.unitDivisor)).append(" "); } @Override public void curveTo(double controlX, double controlY, double anchorX, double anchorY) { if (!currentDrawCommand.equals(DRAW_COMMAND_Q)) { currentDrawCommand = DRAW_COMMAND_Q; - pathData += "Q"; + pathData.append("Q"); } - pathData += roundPixels20(controlX * zoom / SWF.unitDivisor) + " " - + roundPixels20(controlY * zoom / SWF.unitDivisor) + " " - + roundPixels20(anchorX * zoom / SWF.unitDivisor) + " " - + roundPixels20(anchorY * zoom / SWF.unitDivisor) + " "; + + pathData.append(roundPixels20(controlX * zoom / SWF.unitDivisor)).append(" ") + .append(roundPixels20(controlY * zoom / SWF.unitDivisor)).append(" ") + .append(roundPixels20(anchorX * zoom / SWF.unitDivisor)).append(" ") + .append(roundPixels20(anchorY * zoom / SWF.unitDivisor)).append(" "); } protected void finalizePath() { - pathData = ""; + pathData = new StringBuilder(); currentDrawCommand = ""; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java index 515757b37..a8776c26d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java @@ -218,8 +218,8 @@ public class SVGShapeExporter extends DefaultSVGShapeExporter { @Override protected void finalizePath() { - if (path != null && !"".equals(pathData)) { - path.setAttribute("d", pathData.trim()); + if (path != null && pathData.length() > 0) { + path.setAttribute("d", pathData.toString().trim()); exporter.addToGroup(path); } path = exporter.createElement("path"); diff --git a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java index 1d32188ef..04e5e8451 100644 --- a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java @@ -49,12 +49,12 @@ import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Arrays; import java.util.List; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; @@ -125,6 +125,10 @@ public class ExportDialog extends AppDialog { private final JComboBox[] combos; + private final JCheckBox[] checkBoxes; + + private final JCheckBox selectAllCheckBox; + private JTextField zoomTextField = new JTextField(); public E getValue(Class option) { @@ -134,9 +138,20 @@ public class ExportDialog extends AppDialog { return values[combos[i].getSelectedIndex()]; } } + return null; } + public boolean isOptionEnabled(Class option) { + for (int i = 0; i < optionClasses.length; i++) { + if (option == optionClasses[i]) { + return checkBoxes[i].isSelected(); + } + } + + return false; + } + public double getZoom() { return Double.parseDouble(zoomTextField.getText()) / 100; } @@ -153,6 +168,7 @@ public class ExportDialog extends AppDialog { } cfg += key; } + Configuration.lastSelectedExportZoom.set(Double.parseDouble(zoomTextField.getText()) / 100); Configuration.lastSelectedExportFormats.set(cfg); } @@ -170,18 +186,39 @@ public class ExportDialog extends AppDialog { Container cnt = getContentPane(); cnt.setLayout(new BorderLayout()); JPanel comboPanel = new JPanel(null); - combos = new JComboBox[optionNames.length]; int labWidth = 0; + boolean[] exportableExistsArray = new boolean[optionNames.length]; for (int i = 0; i < optionNames.length; i++) { + boolean exportableExists = false; + if (exportables == null) { + exportableExists = true; + } else { + for (TreeItem e : exportables) { + for (int j = 0; j < objClasses[i].length; j++) { + if (objClasses[i][j].isInstance(e)) { + exportableExists = true; + } + } + } + } + + if (!exportableExists) { + continue; + } + + exportableExistsArray[i] = true; + JLabel label = new JLabel(translate(optionNames[i])); if (label.getPreferredSize().width > labWidth) { labWidth = label.getPreferredSize().width; } } + String exportFormatsStr = Configuration.lastSelectedExportFormats.get(); if ("".equals(exportFormatsStr)) { exportFormatsStr = null; } + String exportFormatsArr[] = new String[0]; if (exportFormatsStr != null) { if (exportFormatsStr.contains(",")) { @@ -191,9 +228,29 @@ public class ExportDialog extends AppDialog { } } - List exportFormats = Arrays.asList(exportFormatsArr); + int comboWidth = 200; + int checkBoxWidth; int top = 10; + + List exportFormats = Arrays.asList(exportFormatsArr); + combos = new JComboBox[optionNames.length]; + checkBoxes = new JCheckBox[optionNames.length]; + selectAllCheckBox = new JCheckBox(); + checkBoxWidth = selectAllCheckBox.getPreferredSize().width; + selectAllCheckBox.setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, selectAllCheckBox.getPreferredSize().height); + selectAllCheckBox.setSelected(true); + selectAllCheckBox.addActionListener((ActionEvent e) -> { + boolean selected = selectAllCheckBox.isSelected(); + for (JCheckBox checkBox : checkBoxes) { + if (checkBox != null){ + checkBox.setSelected(selected); + } + } + }); + comboPanel.add(selectAllCheckBox); + top += selectAllCheckBox.getHeight(); + boolean zoomable = false; for (int i = 0; i < optionNames.length; i++) { Class c = optionClasses[i]; @@ -213,31 +270,29 @@ public class ExportDialog extends AppDialog { if (itemIndex > -1) { combos[i].setSelectedIndex(itemIndex); } + combos[i].setBounds(10 + labWidth + 10, top, comboWidth, combos[i].getPreferredSize().height); - boolean exportableExists = false; - if (exportables == null) { - exportableExists = true; - } else { - for (TreeItem e : exportables) { - for (int j = 0; j < objClasses[i].length; j++) { - if (objClasses[i][j].isInstance(e)) { - exportableExists = true; - } - } - } - } - if (!exportableExists) { + + checkBoxes[i] = new JCheckBox(); + checkBoxes[i].setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, checkBoxes[i].getPreferredSize().height); + checkBoxes[i].setSelected(true); + + if (!exportableExistsArray[i]) { continue; } + if (Arrays.asList(zoomClasses).contains(c)) { zoomable = true; } + JLabel lab = new JLabel(translate(optionNames[i])); lab.setBounds(10, top, lab.getPreferredSize().width, lab.getPreferredSize().height); comboPanel.add(lab); + comboPanel.add(checkBoxes[i]); comboPanel.add(combos[i]); top += combos[i].getHeight(); } + int zoomWidth = 50; if (zoomable) { top += 2; @@ -253,34 +308,29 @@ public class ExportDialog extends AppDialog { top += zoomTextField.getHeight(); } - Dimension dim = new Dimension(10 + labWidth + 10 + comboWidth + 10, top + 10); + Dimension dim = new Dimension(10 + labWidth + 10 + checkBoxWidth + 10 + comboWidth + 10, top + 10); comboPanel.setMinimumSize(dim); comboPanel.setPreferredSize(dim); cnt.add(comboPanel, BorderLayout.CENTER); JPanel buttonsPanel = new JPanel(new FlowLayout()); JButton okButton = new JButton(translate("button.ok")); - okButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - saveConfig(); - } catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - zoomTextField.requestFocusInWindow(); - return; - } - setVisible(false); + okButton.addActionListener((ActionEvent e) -> { + try { + saveConfig(); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + zoomTextField.requestFocusInWindow(); + return; } + + setVisible(false); }); JButton cancelButton = new JButton(translate("button.cancel")); - cancelButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - cancelled = true; - setVisible(false); - } + cancelButton.addActionListener((ActionEvent e) -> { + cancelled = true; + setVisible(false); }); buttonsPanel.add(okButton); @@ -296,6 +346,7 @@ public class ExportDialog extends AppDialog { if (pct.endsWith(".0")) { pct = pct.substring(0, pct.length() - 2); } + zoomTextField.setText(pct); } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 774ce44c5..e14f3ec75 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -49,6 +49,7 @@ import com.jpexs.decompiler.flash.exporters.modes.MovieExportMode; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.exporters.modes.ShapeExportMode; import com.jpexs.decompiler.flash.exporters.modes.SoundExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode; import com.jpexs.decompiler.flash.exporters.modes.TextExportMode; import com.jpexs.decompiler.flash.exporters.script.AS2ScriptExporter; import com.jpexs.decompiler.flash.exporters.settings.BinaryDataExportSettings; @@ -1085,103 +1086,180 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec EventListener evl = swf.getExportEventListener(); - ret.addAll(new ImageExporter().exportImages(handler, selFile + File.separator + "images", images, - new ImageExportSettings(export.getValue(ImageExportMode.class)), evl)); - ret.addAll(new ShapeExporter().exportShapes(handler, selFile + File.separator + "shapes", shapes, - new ShapeExportSettings(export.getValue(ShapeExportMode.class), export.getZoom()), evl)); - ret.addAll(new MorphShapeExporter().exportMorphShapes(handler, selFile + File.separator + "morphshapes", morphshapes, - new MorphShapeExportSettings(export.getValue(MorphShapeExportMode.class), export.getZoom()), evl)); - ret.addAll(new TextExporter().exportTexts(handler, selFile + File.separator + TextExportSettings.EXPORT_FOLDER_NAME, texts, - new TextExportSettings(export.getValue(TextExportMode.class), Configuration.textExportSingleFile.get(), export.getZoom()), evl)); - ret.addAll(new MovieExporter().exportMovies(handler, selFile + File.separator + "movies", movies, - new MovieExportSettings(export.getValue(MovieExportMode.class)), evl)); - ret.addAll(new SoundExporter().exportSounds(handler, selFile + File.separator + "sounds", sounds, - new SoundExportSettings(export.getValue(SoundExportMode.class)), evl)); - ret.addAll(new BinaryDataExporter().exportBinaryData(handler, selFile + File.separator + "binaryData", binaryData, - new BinaryDataExportSettings(export.getValue(BinaryDataExportMode.class)), evl)); - ret.addAll(new FontExporter().exportFonts(handler, selFile + File.separator + "fonts", fonts, - new FontExportSettings(export.getValue(FontExportMode.class)), evl)); - ret.addAll(new SymbolClassExporter().exportNames(selFile, symbolNames, evl)); + if (export.isOptionEnabled(ImageExportMode.class)) { + ret.addAll(new ImageExporter().exportImages(handler, selFile + File.separator + "images", images, + new ImageExportSettings(export.getValue(ImageExportMode.class)), evl)); + } + + if (export.isOptionEnabled(ShapeExportMode.class)) { + ret.addAll(new ShapeExporter().exportShapes(handler, selFile + File.separator + "shapes", shapes, + new ShapeExportSettings(export.getValue(ShapeExportMode.class), export.getZoom()), evl)); + } + + if (export.isOptionEnabled(MorphShapeExportMode.class)) { + ret.addAll(new MorphShapeExporter().exportMorphShapes(handler, selFile + File.separator + "morphshapes", morphshapes, + new MorphShapeExportSettings(export.getValue(MorphShapeExportMode.class), export.getZoom()), evl)); + } + + if (export.isOptionEnabled(TextExportMode.class)) { + ret.addAll(new TextExporter().exportTexts(handler, selFile + File.separator + TextExportSettings.EXPORT_FOLDER_NAME, texts, + new TextExportSettings(export.getValue(TextExportMode.class), Configuration.textExportSingleFile.get(), export.getZoom()), evl)); + } + + if (export.isOptionEnabled(MovieExportMode.class)) { + ret.addAll(new MovieExporter().exportMovies(handler, selFile + File.separator + "movies", movies, + new MovieExportSettings(export.getValue(MovieExportMode.class)), evl)); + } + + if (export.isOptionEnabled(SoundExportMode.class)) { + ret.addAll(new SoundExporter().exportSounds(handler, selFile + File.separator + "sounds", sounds, + new SoundExportSettings(export.getValue(SoundExportMode.class)), evl)); + } + + if (export.isOptionEnabled(BinaryDataExportMode.class)) { + ret.addAll(new BinaryDataExporter().exportBinaryData(handler, selFile + File.separator + "binaryData", binaryData, + new BinaryDataExportSettings(export.getValue(BinaryDataExportMode.class)), evl)); + } + + if (export.isOptionEnabled(FontExportMode.class)) { + ret.addAll(new FontExporter().exportFonts(handler, selFile + File.separator + "fonts", fonts, + new FontExportSettings(export.getValue(FontExportMode.class)), evl)); + } + + if (export.isOptionEnabled(SymbolClassExportMode.class)) { + ret.addAll(new SymbolClassExporter().exportNames(selFile, symbolNames, evl)); + } FrameExporter frameExporter = new FrameExporter(); - FramesExportSettings fes = new FramesExportSettings(export.getValue(FramesExportMode.class), export.getZoom()); - for (Entry> entry : frames.entrySet()) { - int containerId = entry.getKey(); - String subFolder = containerId == 0 ? "frames" : "sprites"; - ret.addAll(frameExporter.exportFrames(handler, selFile + File.separator + subFolder, swf, containerId, entry.getValue(), fes, evl)); - } - ButtonExportSettings bes = new ButtonExportSettings(export.getValue(ButtonExportMode.class), export.getZoom()); - for (Tag tag : buttons) { - ButtonTag button = (ButtonTag) tag; - String subFolder = "buttons"; - List frameNums = new ArrayList<>(); - frameNums.add(0); // todo: export all frames - ret.addAll(frameExporter.exportFrames(handler, selFile + File.separator + subFolder, swf, button.getCharacterId(), frameNums, bes, evl)); - } - - boolean parallel = Configuration.parallelSpeedUp.get(); - String scriptsFolder = Path.combine(selFile, ScriptExportSettings.EXPORT_FOLDER_NAME); - Path.createDirectorySafe(new File(scriptsFolder)); - ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), !parallel && Configuration.scriptExportSingleFile.get()); - String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension()); - if (swf.isAS3()) { - try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { - scriptExportSettings.singleFileWriter = writer; - for (int i = 0; i < as3scripts.size(); i++) { - ScriptPack tls = as3scripts.get(i); - Main.startWork(translate("work.exporting") + " " + (i + 1) + "/" + as3scripts.size() + " " + tls.getPath() + " ..."); - ret.add(tls.export(scriptsFolder, scriptExportSettings, parallel)); - } + if (export.isOptionEnabled(FramesExportMode.class)) { + FramesExportSettings fes = new FramesExportSettings(export.getValue(FramesExportMode.class), export.getZoom()); + for (Entry> entry : frames.entrySet()) { + int containerId = entry.getKey(); + String subFolder = containerId == 0 ? "frames" : "sprites"; + ret.addAll(frameExporter.exportFrames(handler, selFile + File.separator + subFolder, swf, containerId, entry.getValue(), fes, evl)); } - } else { - Map asmsToExport = swf.getASMs(true, as12scripts, false); - try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { - scriptExportSettings.singleFileWriter = writer; - ret.addAll(new AS2ScriptExporter().exportAS2ScriptsTimeout(handler, scriptsFolder, asmsToExport, scriptExportSettings, evl)); + } + + if (export.isOptionEnabled(ButtonExportMode.class)) { + ButtonExportSettings bes = new ButtonExportSettings(export.getValue(ButtonExportMode.class), export.getZoom()); + for (Tag tag : buttons) { + ButtonTag button = (ButtonTag) tag; + String subFolder = "buttons"; + List frameNums = new ArrayList<>(); + frameNums.add(0); // todo: export all frames + ret.addAll(frameExporter.exportFrames(handler, selFile + File.separator + subFolder, swf, button.getCharacterId(), frameNums, bes, evl)); + } + } + + if (export.isOptionEnabled(ScriptExportMode.class)) { + boolean parallel = Configuration.parallelSpeedUp.get(); + String scriptsFolder = Path.combine(selFile, ScriptExportSettings.EXPORT_FOLDER_NAME); + Path.createDirectorySafe(new File(scriptsFolder)); + ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), !parallel && Configuration.scriptExportSingleFile.get()); + String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension()); + if (swf.isAS3()) { + try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { + scriptExportSettings.singleFileWriter = writer; + for (int i = 0; i < as3scripts.size(); i++) { + ScriptPack tls = as3scripts.get(i); + Main.startWork(translate("work.exporting") + " " + (i + 1) + "/" + as3scripts.size() + " " + tls.getPath() + " ..."); + ret.add(tls.export(scriptsFolder, scriptExportSettings, parallel)); + } + } + } else { + Map asmsToExport = swf.getASMs(true, as12scripts, false); + try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { + scriptExportSettings.singleFileWriter = writer; + ret.addAll(new AS2ScriptExporter().exportAS2ScriptsTimeout(handler, scriptsFolder, asmsToExport, scriptExportSettings, evl)); + } } } } + return ret; } public void exportAll(SWF swf, AbortRetryIgnoreHandler handler, String selFile, ExportDialog export) throws IOException { EventListener evl = swf.getExportEventListener(); - new ImageExporter().exportImages(handler, selFile + File.separator + "images", swf.tags, - new ImageExportSettings(export.getValue(ImageExportMode.class)), evl); - new ShapeExporter().exportShapes(handler, selFile + File.separator + "shapes", swf.tags, - new ShapeExportSettings(export.getValue(ShapeExportMode.class), export.getZoom()), evl); - new MorphShapeExporter().exportMorphShapes(handler, selFile + File.separator + "morphshapes", swf.tags, - new MorphShapeExportSettings(export.getValue(MorphShapeExportMode.class), export.getZoom()), evl); - new TextExporter().exportTexts(handler, selFile + File.separator + TextExportSettings.EXPORT_FOLDER_NAME, swf.tags, - new TextExportSettings(export.getValue(TextExportMode.class), Configuration.textExportSingleFile.get(), export.getZoom()), evl); - new MovieExporter().exportMovies(handler, selFile + File.separator + "movies", swf.tags, - new MovieExportSettings(export.getValue(MovieExportMode.class)), evl); - new SoundExporter().exportSounds(handler, selFile + File.separator + "sounds", swf.tags, - new SoundExportSettings(export.getValue(SoundExportMode.class)), evl); - new BinaryDataExporter().exportBinaryData(handler, selFile + File.separator + "binaryData", swf.tags, - new BinaryDataExportSettings(export.getValue(BinaryDataExportMode.class)), evl); - new FontExporter().exportFonts(handler, selFile + File.separator + "fonts", swf.tags, - new FontExportSettings(export.getValue(FontExportMode.class)), evl); - new SymbolClassExporter().exportNames(selFile, swf.tags, evl); + + if (export.isOptionEnabled(ImageExportMode.class)) { + new ImageExporter().exportImages(handler, selFile + File.separator + "images", swf.tags, + new ImageExportSettings(export.getValue(ImageExportMode.class)), evl); + } + + if (export.isOptionEnabled(ShapeExportMode.class)) { + new ShapeExporter().exportShapes(handler, selFile + File.separator + "shapes", swf.tags, + new ShapeExportSettings(export.getValue(ShapeExportMode.class), export.getZoom()), evl); + } + + if (export.isOptionEnabled(MorphShapeExportMode.class)) { + new MorphShapeExporter().exportMorphShapes(handler, selFile + File.separator + "morphshapes", swf.tags, + new MorphShapeExportSettings(export.getValue(MorphShapeExportMode.class), export.getZoom()), evl); + } + + if (export.isOptionEnabled(TextExportMode.class)) { + new TextExporter().exportTexts(handler, selFile + File.separator + TextExportSettings.EXPORT_FOLDER_NAME, swf.tags, + new TextExportSettings(export.getValue(TextExportMode.class), Configuration.textExportSingleFile.get(), export.getZoom()), evl); + } + + if (export.isOptionEnabled(MovieExportMode.class)) { + new MovieExporter().exportMovies(handler, selFile + File.separator + "movies", swf.tags, + new MovieExportSettings(export.getValue(MovieExportMode.class)), evl); + } + + if (export.isOptionEnabled(SoundExportMode.class)) { + new SoundExporter().exportSounds(handler, selFile + File.separator + "sounds", swf.tags, + new SoundExportSettings(export.getValue(SoundExportMode.class)), evl); + } + + if (export.isOptionEnabled(BinaryDataExportMode.class)) { + new BinaryDataExporter().exportBinaryData(handler, selFile + File.separator + "binaryData", swf.tags, + new BinaryDataExportSettings(export.getValue(BinaryDataExportMode.class)), evl); + } + + if (export.isOptionEnabled(FontExportMode.class)) { + new FontExporter().exportFonts(handler, selFile + File.separator + "fonts", swf.tags, + new FontExportSettings(export.getValue(FontExportMode.class)), evl); + } + + if (export.isOptionEnabled(SymbolClassExportMode.class)) { + new SymbolClassExporter().exportNames(selFile, swf.tags, evl); + } FrameExporter frameExporter = new FrameExporter(); - FramesExportSettings fes = new FramesExportSettings(export.getValue(FramesExportMode.class), export.getZoom()); - frameExporter.exportFrames(handler, selFile + File.separator + "frames", swf, 0, null, fes, evl); - for (CharacterTag c : swf.getCharacters().values()) { - if (c instanceof DefineSpriteTag) { - frameExporter.exportFrames(handler, selFile + File.separator + "sprites", swf, c.getCharacterId(), null, fes, evl); + + if (export.isOptionEnabled(FramesExportMode.class)) { + FramesExportSettings fes = new FramesExportSettings(export.getValue(FramesExportMode.class), export.getZoom()); + frameExporter.exportFrames(handler, selFile + File.separator + "frames", swf, 0, null, fes, evl); + for (CharacterTag c : swf.getCharacters().values()) { + if (c instanceof DefineSpriteTag) { + frameExporter.exportFrames(handler, selFile + File.separator + "sprites", swf, c.getCharacterId(), null, fes, evl); + } } } - boolean parallel = Configuration.parallelSpeedUp.get(); - String scriptsFolder = Path.combine(selFile, ScriptExportSettings.EXPORT_FOLDER_NAME); - Path.createDirectorySafe(new File(scriptsFolder)); - ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), !parallel && Configuration.scriptExportSingleFile.get()); - String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension()); - try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { - scriptExportSettings.singleFileWriter = writer; - swf.exportActionScript(handler, scriptsFolder, scriptExportSettings, parallel, evl); + if (export.isOptionEnabled(ButtonExportMode.class)) { + ButtonExportSettings bes = new ButtonExportSettings(export.getValue(ButtonExportMode.class), export.getZoom()); + for (CharacterTag c : swf.getCharacters().values()) { + if (c instanceof ButtonTag) { + List frameNums = new ArrayList<>(); + frameNums.add(0); // todo: export all frames + frameExporter.exportFrames(handler, selFile + File.separator + "buttons", swf, c.getCharacterId(), frameNums, bes, evl); + } + } + } + + if (export.isOptionEnabled(ScriptExportMode.class)) { + boolean parallel = Configuration.parallelSpeedUp.get(); + String scriptsFolder = Path.combine(selFile, ScriptExportSettings.EXPORT_FOLDER_NAME); + Path.createDirectorySafe(new File(scriptsFolder)); + ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), !parallel && Configuration.scriptExportSingleFile.get()); + String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension()); + try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) { + scriptExportSettings.singleFileWriter = writer; + swf.exportActionScript(handler, scriptsFolder, scriptExportSettings, parallel, evl); + } } }