diff --git a/lib/flacomdoc.jar b/lib/flacomdoc.jar
index eb4041b73..6218cc825 100644
Binary files a/lib/flacomdoc.jar and b/lib/flacomdoc.jar differ
diff --git a/libsrc/ffdec_lib/lib/flacomdoc.jar b/libsrc/ffdec_lib/lib/flacomdoc.jar
index eb4041b73..6218cc825 100644
Binary files a/libsrc/ffdec_lib/lib/flacomdoc.jar and b/libsrc/ffdec_lib/lib/flacomdoc.jar differ
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
index 7f963ac1a..b49e88594 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/FLAVersion.java
@@ -24,21 +24,20 @@ import com.jpexs.flash.fla.converter.FlaFormatVersion;
* @author JPEXS
*/
public enum FLAVersion {
- F5("F5", "Flash 5", FlaFormatVersion.F5, null, 5),
- MX("MX", "Flash MX", FlaFormatVersion.MX, null, 6),
- MX2004("MX2004", "Flash MX 2004", FlaFormatVersion.MX2004, null, 7),
- F8("F8", "Flash 8", FlaFormatVersion.F8, null, 8),
- CS3("CS3", "Flash CS 3", FlaFormatVersion.CS3, null, 9),
- CS4("CS4", "Flash CS 4", FlaFormatVersion.CS4, null, 10),
- CS5("CS5", "Flash CS 5", null, "2.0", 10),
- CS5_5("CS5.5", "Flash CS 5.5", null, "2.1", 11),
- CS6("CS6", "Flash CS 6", null, "2.2", 17),
- CC("CC", "Flash CC", null, "2.4", Integer.MAX_VALUE) {
- @Override
- public int minASVersion() {
- return 3; //AS 1/2 not supported anymore
- }
- };
+ F1("F1", "FutureSplash Animator", FlaFormatVersion.F1, null, 1, 1, 1),
+ F2("F2", "Macromedia Flash 2", FlaFormatVersion.F2, null, 2, 1, 1),
+ F3("F3", "Macromedia Flash 3", FlaFormatVersion.F3, null, 3, 1, 1),
+ F4("F4", "Macromedia Flash 4", FlaFormatVersion.F4, null, 4, 1, 1),
+ F5("F5", "Macromedia Flash 5", FlaFormatVersion.F5, null, 5, 1, 1),
+ MX("MX", "Macromedia Flash MX", FlaFormatVersion.MX, null, 6, 1, 1),
+ MX2004("MX2004", "Macromedia Flash MX 2004", FlaFormatVersion.MX2004, null, 7, 1, 2),
+ F8("F8", "Macromedia Flash 8", FlaFormatVersion.F8, null, 8, 1, 2),
+ CS3("CS3", "Adobe Flash Professional CS 3", FlaFormatVersion.CS3, null, 9, 1, 3),
+ CS4("CS4", "Adobe Flash Professional CS 4", FlaFormatVersion.CS4, null, 10, 1, 3),
+ CS5("CS5", "Adobe Flash Professional CS 5", null, "2.0", 10, 1, 3),
+ CS5_5("CS5.5", "Adobe Flash Professional CS 5.5", null, "2.1", 11, 1, 3),
+ CS6("CS6", "Adobe Flash Professional CS 6", null, "2.2", 17, 1, 3),
+ CC("CC", "Adobe Flash Professional CC", null, "2.4", Integer.MAX_VALUE, 3, 3);
private final FlaFormatVersion cfbFlaVersion;
private final String xflVersion;
@@ -48,13 +47,19 @@ public enum FLAVersion {
private final String applicationName;
private final int maxSwfVersion;
+
+ private final int minASVersion;
- private FLAVersion(String shortName, String applicationName, FlaFormatVersion cfbFlaVersion, String xflVersion, int maxSwfVersion) {
+ private final int maxASVersion;
+
+ private FLAVersion(String shortName, String applicationName, FlaFormatVersion cfbFlaVersion, String xflVersion, int maxSwfVersion, int minASVersion, int maxASVersion) {
this.cfbFlaVersion = cfbFlaVersion;
this.xflVersion = xflVersion;
this.shortName = shortName;
this.applicationName = applicationName;
this.maxSwfVersion = maxSwfVersion;
+ this.minASVersion = minASVersion;
+ this.maxASVersion = maxASVersion;
}
public FlaFormatVersion getCfbFlaVersion() {
@@ -70,7 +75,11 @@ public enum FLAVersion {
}
public int minASVersion() {
- return 1;
+ return minASVersion;
+ }
+
+ public int maxASVersion() {
+ return maxASVersion;
}
public String applicationName() {
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/LosslessImageBinDataReader.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/LosslessImageBinDataReader.java
index 9b374b327..3e4ca30b5 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/LosslessImageBinDataReader.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/LosslessImageBinDataReader.java
@@ -118,6 +118,10 @@ public class LosslessImageBinDataReader {
g = (int) Math.floor(g * 256f / a);
b = (int) Math.floor(b * 256f / a);
}
+
+ if (!hasAlpha) {
+ a = 0xFF;
+ }
int rgba = r + (g << 8) + (b << 16) + (a << 24);
img.setRGB(x, y, rgba);
@@ -143,9 +147,9 @@ public class LosslessImageBinDataReader {
}
public static void main(String[] args) throws IOException {
- File f = new File("in.bin");
+ File f = new File("c:\\Dropbox\\Programovani\\JavaSE\\FlaComDoc\\out\\media\\M 6 1776533974.dat");
LosslessImageBinDataReader r = new LosslessImageBinDataReader(new FileInputStream(f));
BufferedImage i = r.readImage();
- ImageIO.write(i, "PNG", new File("out.png"));
+ ImageIO.write(i, "PNG", new File("c:\\Dropbox\\Programovani\\JavaSE\\FlaComDoc\\out\\media\\out.png"));
}
}
diff --git a/src/com/jpexs/decompiler/flash/gui/FlaExportDialog.java b/src/com/jpexs/decompiler/flash/gui/FlaExportDialog.java
new file mode 100644
index 000000000..073fbe3d6
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/FlaExportDialog.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2010-2026 JPEXS
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.jpexs.decompiler.flash.gui;
+
+import com.jpexs.decompiler.flash.SWF;
+import com.jpexs.decompiler.flash.configuration.Configuration;
+import static com.jpexs.decompiler.flash.gui.AppDialog.CANCEL_OPTION;
+import static com.jpexs.decompiler.flash.gui.AppDialog.ERROR_OPTION;
+import static com.jpexs.decompiler.flash.gui.AppDialog.OK_OPTION;
+import com.jpexs.decompiler.flash.xfl.FLAVersion;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import javax.swing.BoxLayout;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class FlaExportDialog extends AppDialog {
+
+ private int result = ERROR_OPTION;
+
+ private JComboBox combo;
+
+ private JCheckBox compressedCheckBox;
+
+ public FlaExportDialog(Window owner) {
+ super(owner);
+ setTitle(translate("dialog.title"));
+
+ Container cnt = getContentPane();
+
+
+ JPanel comboPanel = new JPanel(new FlowLayout());
+ combo = new JComboBox<>();
+
+ combo.addActionListener(this::comboActionPerformed);
+
+ combo.setRenderer(new DefaultListCellRenderer() {
+ @Override
+ public Component getListCellRendererComponent(JList> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ JLabel lab = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+ if (value instanceof FlaVersionItem) {
+ FLAVersion ver = ((FlaVersionItem) value).flaVersion;
+ lab.setIcon(View.getIcon("flash/" + ver.shortName().toLowerCase()));
+ }
+ return lab;
+ }
+ });
+
+ JLabel comboLabel = new JLabel(translate("version"));
+ comboPanel.add(comboLabel);
+ comboLabel.setLabelFor(combo);
+ comboPanel.add(combo);
+ comboPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
+
+ compressedCheckBox = new JCheckBox(translate("compressed"));
+ compressedCheckBox.setAlignmentX(Component.CENTER_ALIGNMENT);
+
+
+ JPanel centerPanel = new JPanel();
+ centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.Y_AXIS));
+ centerPanel.add(comboPanel);
+ centerPanel.add(compressedCheckBox);
+
+ cnt.add(centerPanel, BorderLayout.CENTER);
+
+
+ JPanel buttonsPanel = new JPanel(new FlowLayout());
+ JButton okButton = new JButton(translate("button.ok"));
+ okButton.addActionListener(this::okButtonActionPerformed);
+
+ JButton cancelButton = new JButton(translate("button.cancel"));
+ cancelButton.addActionListener(this::cancelButtonActionPerformed);
+
+ buttonsPanel.add(okButton);
+ buttonsPanel.add(cancelButton);
+
+ cnt.add(buttonsPanel, BorderLayout.SOUTH);
+ pack();
+ View.centerScreen(this);
+ View.setWindowIcon(this, "flash");
+ getRootPane().setDefaultButton(okButton);
+ setModal(true);
+ }
+
+ private void comboActionPerformed(ActionEvent e) {
+ int selectedIndex = combo.getSelectedIndex();
+ if (selectedIndex > -1) {
+
+ FlaVersionItem item = (FlaVersionItem) combo.getItemAt(selectedIndex);
+ if (item != null) {
+ if (item.flaVersion.xflVersion() == null) {
+ compressedCheckBox.setSelected(true);
+ }
+ compressedCheckBox.setEnabled(item.flaVersion.xflVersion() != null);
+ }
+ }
+ }
+
+
+ private class FlaVersionItem {
+ private final FLAVersion flaVersion;
+ private final boolean recommended;
+
+ public FlaVersionItem(FLAVersion flaVersion, boolean recommended) {
+ this.flaVersion = flaVersion;
+ this.recommended = recommended;
+ }
+
+ @Override
+ public String toString() {
+ return flaVersion.applicationName() + " " + (recommended ? translate("recommended"): "");
+ }
+ }
+
+ @Override
+ public void setVisible(boolean b) {
+ if (b) {
+ result = ERROR_OPTION;
+ }
+ super.setVisible(b);
+ }
+
+ public boolean isCompressed() {
+ return compressedCheckBox.isSelected();
+ }
+
+ public FLAVersion getFlaVersion() {
+ if (combo.getSelectedItem() == null) {
+ return null;
+ }
+ return ((FlaVersionItem) combo.getSelectedItem()).flaVersion;
+ }
+
+ private void okButtonActionPerformed(ActionEvent evt) {
+ result = OK_OPTION;
+ setVisible(false);
+ }
+
+ private void cancelButtonActionPerformed(ActionEvent evt) {
+ result = CANCEL_OPTION;
+ setVisible(false);
+ }
+
+ public int showExportDialog(SWF swf) {
+ DefaultComboBoxModel model = new DefaultComboBoxModel<>();
+ boolean recommended = true;
+ boolean isAs3 = swf.isAS3();
+ int recommendedIndex = -1;
+ for (FLAVersion ver : FLAVersion.values()) {
+ if (ver.minASVersion() == 3 && !isAs3) {
+ continue;
+ }
+ if (ver.maxASVersion() < 3 && isAs3) {
+ continue;
+ }
+ if (swf.version <= ver.maxSwfVersion()) {
+ model.addElement(new FlaVersionItem(ver, recommended));
+ if (recommended) {
+ recommendedIndex = model.getSize() - 1;
+ }
+ recommended = false;
+ } else {
+ model.addElement(new FlaVersionItem(ver, false));
+ }
+ }
+ combo.setModel(model);
+ if (recommendedIndex > -1) {
+ combo.setSelectedIndex(recommendedIndex);
+ compressedCheckBox.setSelected(Configuration.lastFlaExportCompressed.get());
+ comboActionPerformed(null);
+ }
+ pack();
+ setVisible(true);
+ return result;
+ }
+}
diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
index 9640d4f69..6218c21b0 100644
--- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
@@ -3824,6 +3824,14 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
if (swf == null) {
return;
}
+ FlaExportDialog exportDialog = new FlaExportDialog(mainFrame.getWindow());
+ if (exportDialog.showExportDialog(swf) != AppDialog.OK_OPTION) {
+ return;
+ }
+
+ FLAVersion version = exportDialog.getFlaVersion();
+ boolean compressed = exportDialog.isCompressed();
+
JFileChooser fc = View.getFileChooserWithIcon("exportfla");
String selDir = Configuration.lastOpenDir.get();
fc.setCurrentDirectory(new File(selDir));
@@ -3836,9 +3844,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
String fileName;
if (swfShortName.contains(".")) {
- fileName = swfShortName.substring(0, swfShortName.lastIndexOf(".")) + ".fla";
+ fileName = swfShortName.substring(0, swfShortName.lastIndexOf(".")) + (version == FLAVersion.F1 ? ".spa" : ".fla");
} else {
- fileName = swfShortName + ".fla";
+ fileName = swfShortName + (version == FLAVersion.F1 ? ".spa" : ".fla");
}
final String fSwfShortName = swfShortName;
@@ -3853,76 +3861,36 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
Map filterToFlaVersion = new HashMap<>();
FLAVersion lastVersion = FLAVersion.fromString(Configuration.lastFlaExportVersion.get("CS6"));
- boolean lastCompressed = Configuration.lastFlaExportCompressed.get(true);
-
- for (int i = FLAVersion.values().length - 1; i >= 0; i--) {
- final FLAVersion v = FLAVersion.values()[i];
- if (!isAS3 && v.minASVersion() > 2) {
- // This version does not support AS1/2
- } else {
- versions.add(v);
- FileFilter f = new FileFilter() {
- @Override
- public boolean accept(File f) {
- return f.isDirectory() || (f.getName().toLowerCase(Locale.ENGLISH).endsWith(".fla"));
- }
-
- @Override
- public String getDescription() {
- return translate("filter.fla").replace("%version%", v.applicationName());
- }
- };
- if (v == lastVersion && lastCompressed) {
- fc.setFileFilter(f);
- } else {
- fc.addChoosableFileFilter(f);
- }
- filterToFlaVersion.put(f, v);
- filterToVersion.put(f, "" + v);
- filterToCompressed.put(f, true);
- flaFilters.add(f);
-
- if (v.xflVersion() != null) {
- f = new FileFilter() {
- @Override
- public boolean accept(File f) {
- return f.isDirectory() || (f.getName().toLowerCase(Locale.ENGLISH).endsWith(".xfl"));
- }
-
- @Override
- public String getDescription() {
- return translate("filter.xfl").replace("%version%", v.applicationName());
- }
- };
- filterToFlaVersion.put(f, v);
- filterToVersion.put(f, "" + v);
- filterToCompressed.put(f, false);
-
- if (v == lastVersion && !lastCompressed) {
- fc.setFileFilter(f);
- } else {
- fc.addChoosableFileFilter(f);
- }
- xflFilters.add(f);
- }
+ FileFilter f = new FileFilter() {
+ @Override
+ public boolean accept(File f) {
+ return f.isDirectory()
+ || (!compressed && f.getName().toLowerCase(Locale.ENGLISH).endsWith(".xfl"))
+ || (compressed && version == FLAVersion.F1 && f.getName().toLowerCase(Locale.ENGLISH).endsWith(".spa"))
+ || (compressed && version != FLAVersion.F1 && f.getName().toLowerCase(Locale.ENGLISH).endsWith(".fla"));
}
- }
+ @Override
+ public String getDescription() {
+ if (!compressed) {
+ return translate("filter.xfl").replace("%version%", version.applicationName());
+ }
+ return translate("filter.fla").replace("%version%", version.applicationName());
+ }
+ };
+ fc.setFileFilter(f);
fc.setAcceptAllFileFilterUsed(false);
if (fc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
- Configuration.lastFlaExportVersion.set(filterToVersion.get(fc.getFileFilter()));
- Configuration.lastFlaExportCompressed.set(filterToCompressed.get(fc.getFileFilter()));
+ Configuration.lastFlaExportVersion.set(version.toString());
+ Configuration.lastFlaExportCompressed.set(compressed);
Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath());
File sf = Helper.fixDialogFile(fc.getSelectedFile());
-
- FileFilter selectedFilter = fc.getFileFilter();
- final boolean compressed = flaFilters.contains(selectedFilter);
+
String path = sf.getAbsolutePath();
- if (path.endsWith(".fla") || path.endsWith(".xfl")) {
+ if (path.endsWith(".fla") || path.endsWith(".spa") || path.endsWith(".xfl")) {
path = path.substring(0, path.length() - 4);
}
- path += compressed ? ".fla" : ".xfl";
- final FLAVersion selectedVersion = filterToFlaVersion.get(selectedFilter);
+ path += compressed ? (version == FLAVersion.F1 ? ".spa" : ".fla") : ".xfl";
final File selfile = new File(path);
long timeBefore = System.currentTimeMillis();
new CancellableWorker("exportFla") {
@@ -3946,9 +3914,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
try {
AbortRetryIgnoreHandler errorHandler = new GuiAbortRetryIgnoreHandler();
if (compressed) {
- swf.exportFla(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion, prog);
+ swf.exportFla(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), version, prog);
} else {
- swf.exportXfl(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), selectedVersion, prog);
+ swf.exportXfl(errorHandler, selfile.getAbsolutePath(), fSwfShortName, ApplicationInfo.APPLICATION_NAME, ApplicationInfo.applicationVerName, ApplicationInfo.version, Configuration.parallelSpeedUp.get(), version, prog);
}
} catch (Exception ex) {
logger.log(Level.SEVERE, "FLA export error", ex);
diff --git a/src/com/jpexs/decompiler/flash/gui/View.java b/src/com/jpexs/decompiler/flash/gui/View.java
index 10f8e2566..5c8be0896 100644
--- a/src/com/jpexs/decompiler/flash/gui/View.java
+++ b/src/com/jpexs/decompiler/flash/gui/View.java
@@ -523,7 +523,8 @@ public class View {
}
public static ImageIcon getIcon(String name) {
- return new ImageIcon(View.class.getClassLoader().getResource("com/jpexs/decompiler/flash/gui/graphics/" + name + ".png"));
+ String path = "com/jpexs/decompiler/flash/gui/graphics/" + name + ".png";
+ return new ImageIcon(View.class.getClassLoader().getResource(path));
}
private static final KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cc.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cc.png
new file mode 100644
index 000000000..2f41bf921
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cc.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs3.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs3.png
new file mode 100644
index 000000000..b28164e48
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs3.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs4.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs4.png
new file mode 100644
index 000000000..33f708ade
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs4.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.5.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.5.png
new file mode 100644
index 000000000..8b47b20e7
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.5.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.png
new file mode 100644
index 000000000..8b47b20e7
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs5.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs6.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs6.png
new file mode 100644
index 000000000..d04e9f565
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/cs6.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f1.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f1.png
new file mode 100644
index 000000000..bb845b8e8
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f1.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f2.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f2.png
new file mode 100644
index 000000000..7782a3934
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f2.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f3.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f3.png
new file mode 100644
index 000000000..8d453dd2a
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f3.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f4.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f4.png
new file mode 100644
index 000000000..8e8cb8e78
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f4.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f5.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f5.png
new file mode 100644
index 000000000..d99f32536
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f5.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/f8.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f8.png
new file mode 100644
index 000000000..19facbdd0
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/f8.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx.png
new file mode 100644
index 000000000..a9797cb53
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx2004.png b/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx2004.png
new file mode 100644
index 000000000..93489c82c
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/flash/mx2004.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/FlaExportDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/FlaExportDialog.properties
new file mode 100644
index 000000000..e6f407537
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/locales/FlaExportDialog.properties
@@ -0,0 +1,8 @@
+dialog.title = FLA export
+button.ok = OK
+button.cancel = Cancel
+
+recommended = (recommended)
+version = FLA format version:
+
+compressed = Compressed
\ No newline at end of file