items = new ArrayList<>();
items.add(openable);
-
+
mainFrame.getPanel().exportJavaSource(items);
}
-
- /*protected void exportXamlActionPerformed(ActionEvent evt) {
+
+ protected void exportSwcActionPerformed(ActionEvent evt) {
+ if (Main.isWorking()) {
+ return;
+ }
+ if (mainFrame.getPanel().checkEdited()) {
+ return;
+ }
+
+ Main.saveSwc((SWF) openable);
+ }
+
+ protected void exportXamlActionPerformed(ActionEvent evt) {
if (Main.isWorking()) {
return;
}
@@ -545,7 +555,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
mainFrame.getPanel().exportXaml((SWF) openable);
- }*/
+ }
protected void exportFlaActionPerformed(ActionEvent evt) {
if (Main.isWorking()) {
@@ -831,7 +841,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
ViewMessages.showMessageDialog(Main.getDefaultMessagesComponent(), translate("message.homepage").replace("%url%", homePageURL));
}
}
-
+
protected void wikiActionPerformed(ActionEvent evt) {
if (Main.isWorking()) {
return;
@@ -900,7 +910,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
Main.advancedSettings();
}
-
+
protected void solEditorActionPerformed(ActionEvent evt) {
Main.openSolEditor();
}
@@ -941,12 +951,12 @@ public abstract class MainFrameMenu implements MenuBuilder {
button.setSelected(Configuration.autoRenameIdentifiers.get());
}
}
-
+
protected void autoDeobfuscateIdentifiersActionPerformed(ActionEvent evt) {
AbstractButton button = (AbstractButton) evt.getSource();
boolean selected = button.isSelected();
- Configuration.autoDeobfuscateIdentifiers.set(selected);
+ Configuration.autoDeobfuscateIdentifiers.set(selected);
mainFrame.getPanel().autoDeobfuscateChanged();
}
@@ -1157,7 +1167,11 @@ public abstract class MainFrameMenu implements MenuBuilder {
setMenuEnabled("/file/export/exportMore/exportIdea", allSameSwf && openableSelected && isAs3 && !isWorking && canExportIdea);
//setMenuEnabled("_/exportVsCode", swfSelected && !isWorking && canExportVsCode);
setMenuEnabled("/file/export/exportMore/exportVsCode", allSameSwf && openableSelected && isAs3 && !isWorking && canExportVsCode);
-
+ setMenuEnabled("/file/export/exportMore/exportJava", swfSelected && !isWorking);
+ setMenuEnabled("/file/export/exportMore/exportSwc", swfSelected && !isWorking);
+ setMenuEnabled("/file/export/exportMore/exportExe", swfSelected && !isWorking);
+ setMenuEnabled("/file/export/exportMore/exportXaml", swfSelected && !isWorking);
+
setMenuEnabled("_/exportSelected", openableSelected && !isWorking);
setMenuEnabled("/file/export/exportSelected", openableSelected && !isWorking);
//setMenuEnabled("/file/export/exportXml", swfSelected && !isWorking);
@@ -1186,7 +1200,6 @@ public abstract class MainFrameMenu implements MenuBuilder {
setMenuEnabled("/tools/abcExplorer", isAs3);
setMenuEnabled("/tools/gotoDocumentClass", hasAbc);
- setMenuEnabled("/tools/saveAsExe", swfSelected && !isWorking);
/*setMenuEnabled("/tools/debugger/debuggerSwitch", hasAbc);
setMenuChecked("/tools/debugger/debuggerSwitch", hasDebugger);
@@ -1205,12 +1218,12 @@ public abstract class MainFrameMenu implements MenuBuilder {
setMenuEnabled("/file/start/debugpcode", swfSelected && !isRunningOrDebugging);
setMenuEnabled("/file/start/debuglisten", !isDebugRunning);
- setMenuEnabled("/file/start/stop", isRunningOrDebugging);
+ setMenuEnabled("/file/start/stop", isRunningOrDebugging);
setMenuEnabled("/debugging/debug/stop", isRunningOrDebugging); //same as previous
-
+
setMenuEnabled("/debuggingListen/debug/stopListening", isListening);
- setMenuEnabled("/debuggingListen/debug/disconnectSession", isSessionConnected);
-
+ setMenuEnabled("/debuggingListen/debug/disconnectSession", isSessionConnected);
+
setPathVisible("/debugging", !isListening && isDebugRunning);
setPathVisible("/debugging/debug", !isListening && isDebugRunning);
//setMenuEnabled("/debugging/debug/pause", isDebugRunning);
@@ -1220,16 +1233,14 @@ public abstract class MainFrameMenu implements MenuBuilder {
setMenuEnabled("/debugging/debug/continue", isDebugPaused);
//setMenuEnabled("/debugging/debug/stack", isDebugPaused);
//setMenuEnabled("/debugging/debug/watch", isDebugPaused);
-
+
setPathVisible("/debuggingListen", isListening);
setPathVisible("/debuggingListen/debug", isListening);
setMenuEnabled("/debuggingListen/debug/stepOver", isDebugPaused);
setMenuEnabled("/debuggingListen/debug/stepInto", isDebugPaused);
setMenuEnabled("/debuggingListen/debug/stepOut", isDebugPaused);
setMenuEnabled("/debuggingListen/debug/continue", isDebugPaused);
-
-
-
+
StringBuilder titleBuilder = new StringBuilder();
titleBuilder.append(ApplicationInfo.applicationVerName);
@@ -1278,7 +1289,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
/*addMenuItem("_/exportFlashDevelop", translate("menu.file.export.flashDevelop"), "exportflashdevelop32", this::exportFlashDevelopActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("_/exportIdea", translate("menu.file.export.idea"), "exportidea32", this::exportIdeaActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("_/exportVsCode", translate("menu.file.export.vsCode"), "exportvscode32", this::exportVsCodeActionPerformed, PRIORITY_TOP, null, true, null, false);
- */
+ */
addMenuItem("_/exportAll", translate("menu.file.export.all"), "export32", this::exportAllActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("_/exportSelected", translate("menu.file.export.selection"), "exportsel32", this::exportSelectedActionPerformed, PRIORITY_TOP, null, true, null, false);
addSeparator("_");
@@ -1315,17 +1326,19 @@ public abstract class MainFrameMenu implements MenuBuilder {
addMenuItem("/file/export/exportFla", translate("menu.file.export.fla"), "exportfla32", this::exportFlaActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("/file/export/exportAll", translate("menu.file.export.all"), "exportall16", this::exportAllActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+E"), false);
addMenuItem("/file/export/exportSelected", translate("menu.file.export.selection"), "exportsel16", this::exportSelectedActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
-
+
addMenuItem("/file/export/exportMore", translate("menu.export.file"), "export16", null, PRIORITY_MEDIUM, null, false, null, false);
- addMenuItem("/file/export/exportMore/exportXml", "XML", "exportxml32", this::exportXmlActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
- addMenuItem("/file/export/exportMore/exportFlashDevelop", "Flash Develop", "exportflashdevelop32", this::exportFlashDevelopActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
- addMenuItem("/file/export/exportMore/exportIdea", "IntelliJ Idea", "exportidea32", this::exportIdeaActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
- addMenuItem("/file/export/exportMore/exportVsCode", "Visual Studio Code", "exportvscode32", this::exportVsCodeActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
- addMenuItem("/file/export/exportMore/exportJava", "Java", "exportjava32", this::exportJavaActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
- //addMenuItem("/file/export/exportMore/exportXaml", "XAML", "exportxml32", this::exportXamlActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
-
+ addMenuItem("/file/export/exportMore/exportXml", "XML", "exportxml16", this::exportXmlActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportFlashDevelop", "Flash Develop", "exportflashdevelop16", this::exportFlashDevelopActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportIdea", "IntelliJ Idea", "exportidea16", this::exportIdeaActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportVsCode", "Visual Studio Code", "exportvscode16", this::exportVsCodeActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportJava", "Java", "exportjava16", this::exportJavaActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportSwc", "SWC", "bundleswc16", this::exportSwcActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportExe", "EXE", "saveasexe16", this::saveAsExeActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ addMenuItem("/file/export/exportMore/exportXaml", "XAML", "exportxml16", this::exportXamlActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+
finishMenu("/file/export/exportMore");
-
+
finishMenu("/file/export");
addMenuItem("/import", translate("menu.import"), null, null, 0, null, false, null, false);
@@ -1359,7 +1372,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
addToggleMenuItem("/file/view/viewTagList", translate("menu.file.view.tagList"), "view", "taglist16", this::viewTagListActionPerformed, PRIORITY_MEDIUM, null);
addToggleMenuItem("/file/view/viewHex", translate("menu.file.view.hex"), "view", "viewhex16", this::viewHexActionPerformed, PRIORITY_MEDIUM, null);
addToggleMenuItem("/file/view/easy", translate("menu.file.view.easy"), null, "easy32", this::easyActionPerformed, PRIORITY_TOP, null);
-
+
finishMenu("/file/view");
addSeparator("/file");
@@ -1399,8 +1412,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
//addMenuItem("/debugging/debug/watch", translate("menu.debugging.debug.watch"), "watch32", this::watchActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
finishMenu("/debugging/debug");
finishMenu("/debugging");
-
-
+
addMenuItem("/debuggingListen", translate("menu.debugging"), null, null, 0, null, false, null, true);
addMenuItem("/debuggingListen/debug", translate("menu.debugging.debug"), null, null, 0, null, false, null, false);
addMenuItem("/debuggingListen/debug/stopListening", translate("menu.debugging.debug.stopListening"), "stop32", this::stopActionPerformed, PRIORITY_TOP, null, true, null, false);
@@ -1423,14 +1435,14 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
addMenuItem("/tools/replace", translate("menu.tools.replace"), "replace32", this::replaceActionPerformed, PRIORITY_TOP, null, true, null, false);
-
+
addMenuItem("/tools/abcExplorer", translate("menu.tools.abcexplorer"), "abcexplorer32", this::abcExplorerActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("/tools/gotoDocumentClass", translate("menu.tools.gotoDocumentClass"), "gotomainclass32", this::gotoDocumentClassActionPerformed, PRIORITY_TOP, null, true, null, false);
addMenuItem("/tools/solEditor", translate("menu.tools.solEditor"), "soleditor32", this::solEditorActionPerformed, PRIORITY_TOP, null, true, null, false);
if (Platform.isWindows()) {
addMenuItem("/tools/searchMemory", translate("menu.tools.searchMemory"), "loadmemory16", this::searchMemoryActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
}
- addMenuItem("/tools/saveAsExe", translate("menu.file.saveasexe"), "saveasexe16", this::saveAsExeActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
+ //addMenuItem("/tools/saveAsExe", translate("menu.file.saveasexe"), "saveasexe16", this::saveAsExeActionPerformed, PRIORITY_MEDIUM, null, true, null, false);
//addMenuItem("/tools/searchCache", translate("menu.tools.searchCache"), "loadcache16", this::searchCacheActionPerformed, PRIORITY_MEDIUM, null, true, null);
addMenuItem("/tools/deobfuscation", translate("menu.tools.deobfuscation"), "deobfuscate16", null, 0, null, false, null, false);
@@ -1526,12 +1538,11 @@ public abstract class MainFrameMenu implements MenuBuilder {
Configuration.autoRenameIdentifiers.addListener(configListenerAutoRenameIdentifiers = (Boolean newValue) -> {
setMenuChecked("/settings/autoRenameIdentifiers", newValue);
});*/
-
setMenuChecked("/settings/autoDeobfuscateIdentifiers", Configuration.autoDeobfuscateIdentifiers.get());
Configuration.autoDeobfuscateIdentifiers.addListener(configListenerAutoDeobfuscateIdentifiers = (Boolean newValue) -> {
setMenuChecked("/settings/autoDeobfuscateIdentifiers", newValue);
});
-
+
setMenuChecked("/settings/autoOpenLoadedSWFs", Configuration.autoOpenLoadedSWFs.get());
Configuration.autoOpenLoadedSWFs.addListener(configListenerAutoOpenLoadedSWFs = (Boolean newValue) -> {
setMenuChecked("/settings/autoOpenLoadedSWFs", newValue);
@@ -1636,7 +1647,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
break;
}
}
-
+
private void alwaysOnTopActionPerformed(ActionEvent evt) {
mainFrame.getWindow().setAlwaysOnTop(!mainFrame.getWindow().isAlwaysOnTop());
setMenuChecked("/file/view/alwaysOnTop", mainFrame.getWindow().isAlwaysOnTop());
@@ -1650,7 +1661,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
Configuration.dumpView.set(false);
mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES);
setGroupSelection("view", "/file/view/viewResources");
- setMenuChecked("/file/view/easy", false);
+ setMenuChecked("/file/view/easy", false);
}
private void viewHexActionPerformed(ActionEvent evt) {
@@ -1678,7 +1689,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
MainPanel mainPanel = mainFrame.getPanel();
mainPanel.showView(MainPanel.VIEW_TAGLIST);
setGroupSelection("view", "/file/view/viewTagList");
- setMenuChecked("/file/view/easy", false);
+ setMenuChecked("/file/view/easy", false);
}
private void debuggerSwitchActionPerformed(ActionEvent evt) {
@@ -1799,13 +1810,13 @@ public abstract class MainFrameMenu implements MenuBuilder {
Main.runDebug((SWF) openable, false);
return true;
}
-
+
public void debugListenActionPerformed(ActionEvent evt) {
if (ViewMessages.showConfirmDialog(mainFrame.getPanel(), "" + translate("message.info.debugListen").replace("\n", "
") + "
", translate("message.info"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, Configuration.showDebugListenInfo, JOptionPane.OK_OPTION) != JOptionPane.OK_OPTION) {
return;
}
-
- Main.startDebugListening();
+
+ Main.startDebugListening();
}
public boolean debugPCodeActionPerformed(ActionEvent evt) {
@@ -1817,7 +1828,7 @@ public abstract class MainFrameMenu implements MenuBuilder {
Main.stopRun();
return true;
}
-
+
public boolean disconnectSessionActionPerformed(ActionEvent evt) {
Main.disconnectSession();
return true;
diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
index e99fb818a..58133f39c 100644
--- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
@@ -61,6 +61,7 @@ import com.jpexs.decompiler.flash.exporters.ShapeExporter;
import com.jpexs.decompiler.flash.exporters.SoundExporter;
import com.jpexs.decompiler.flash.exporters.SymbolClassExporter;
import com.jpexs.decompiler.flash.exporters.TextExporter;
+import com.jpexs.decompiler.flash.exporters.XamlExporter;
import com.jpexs.decompiler.flash.exporters.modes.BinaryDataExportMode;
import com.jpexs.decompiler.flash.exporters.modes.ButtonExportMode;
import com.jpexs.decompiler.flash.exporters.modes.Font4ExportMode;
@@ -449,9 +450,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
private Map breakpointsListDialogs = new WeakHashMap<>();
private boolean loadingScrollPosEnabled = true;
-
+
private static final DataFlavor TREE_FILE_FLAVOR = new DataFlavor(TreeFileFlavor.class, "TreeFile");
-
+
private boolean editingStatusSet = false;
public synchronized void setLoadingScrollPosEnabled(boolean loadingScrollPosEnabled) {
@@ -844,11 +845,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|| (actionPanel != null && actionPanel.isEditing())
|| previewPanel.isEditing() || headerPanel.isEditing();
}
-
+
private class TreeFileFlavor {
-
+
}
-
+
private class MyTreeSelectionModel extends DefaultTreeSelectionModel {
@Override
@@ -1167,19 +1168,19 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
tagListTree = new TagListTree(null, this);
tagListTree.addTreeSelectionListener(this);
- tagListTree.setSelectionModel(new MyTreeSelectionModel());
-
+ tagListTree.setSelectionModel(new MyTreeSelectionModel());
+
DragSource dragSource = DragSource.getDefaultDragSource();
- dragSource.createDefaultDragGestureRecognizer(tagTree, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() {
+ dragSource.createDefaultDragGestureRecognizer(tagTree, DnDConstants.ACTION_COPY_OR_MOVE, new DragGestureListener() {
@Override
public void dragGestureRecognized(DragGestureEvent dge) {
if (!Configuration.allowDragAndDropFromResourcesTree.get()) {
return;
}
dge.startDrag(DragSource.DefaultCopyDrop, new Transferable() {
-
+
private List cachedFiles = null;
-
+
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{TREE_FILE_FLAVOR, DataFlavor.javaFileListFlavor};
@@ -1188,8 +1189,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(TREE_FILE_FLAVOR) || flavor.equals(DataFlavor.javaFileListFlavor);
- }
-
+ }
+
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (flavor.equals(DataFlavor.javaFileListFlavor)) {
@@ -1197,7 +1198,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
Main.stopWork();
return cachedFiles;
}
-
+
List files;
String tempDir = System.getProperty("java.io.tmpdir");
if (!tempDir.endsWith(File.separator)) {
@@ -1232,13 +1233,14 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
new File(tempDir).deleteOnExit();
cachedFiles = files;
-
+
return cachedFiles;
}
return null;
}
- }, new DragSourceAdapter() {});
+ }, new DragSourceAdapter() {
+ });
}
});
@@ -1430,33 +1432,33 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void dragEnter(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(TREE_FILE_FLAVOR)
- || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+ || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.rejectDrag();
} else {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
}
- }
+ }
@Override
public void dragOver(DropTargetDragEvent dtde) {
- if (dtde.isDataFlavorSupported(TREE_FILE_FLAVOR)
- || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+ if (dtde.isDataFlavorSupported(TREE_FILE_FLAVOR)
+ || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.rejectDrag();
} else {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
}
- }
+ }
@Override
- public void drop(DropTargetDropEvent dtde) {
+ public void drop(DropTargetDropEvent dtde) {
if (dtde.isDataFlavorSupported(TREE_FILE_FLAVOR)
- || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+ || !dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.rejectDrop();
return;
}
try {
dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("unchecked")
List droppedFiles = (List) dtde.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
if (droppedFiles != null && !droppedFiles.isEmpty()) {
OpenableSourceInfo[] sourceInfos = new OpenableSourceInfo[droppedFiles.size()];
@@ -1470,9 +1472,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
dtde.dropComplete(false);
//ignored
}
- }
- });
-
+ }
+ });
+
calculateMissingNeededThread = new CalculateMissingNeededThread();
calculateMissingNeededThread.start();
pinsPanel.load();
@@ -1655,7 +1657,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
if (!abcFound) {
getABCPanel().setAbc(abcList.get(0).getABC());
}
- }
+ }
}
mainMenu.updateComponents(openable);
@@ -1948,7 +1950,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
return true;
}
-
public void updateClassesList() {
String selectionPath = getCurrentTree().getSelectionPathString();
List nodes = getASTreeNodes(tagTree);
@@ -2123,7 +2124,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
List ret = new ArrayList<>();
List sel = getSelection(null, selection);
-
+
Set usedOpenables = new HashSet<>();
Set usedOpenableLists = new HashSet<>();
@@ -2138,7 +2139,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
usedOpenableLists.add(list);
}
}
-
+
Map usedSwfsIds = new HashMap<>();
for (Openable openable : usedOpenables) {
@@ -2280,10 +2281,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
selFile2 = selFile;
}
-
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
-
-
+
EventListener evl = swf.getExportEventListener();
if (export.isOptionEnabled(ImageExportMode.class)) {
@@ -2403,7 +2402,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
-
+
EventListener evl = swf.getExportEventListener();
if (export.isOptionEnabled(ImageExportMode.class)) {
@@ -2499,7 +2498,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
EventListener evl = swf.getExportEventListener();
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
-
+
if (export.isOptionEnabled(ImageExportMode.class)) {
for (ImageExportMode exportMode : ImageExportMode.values()) {
new ImageExporter().exportImages(handler, Path.combine(selFile, ImageExportSettings.EXPORT_FOLDER_NAME, exportMode.name()), swf.getTags(),
@@ -2878,7 +2877,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
if (asms.containsKey(rawScriptName)) {
oldItem = null;
getCurrentTree().setSelectionPath(null);
- setTagTreeSelectedNode(getCurrentTree(), asms.get(rawScriptName));
+ setTagTreeSelectedNode(getCurrentTree(), asms.get(rawScriptName));
return true;
}
/*if (actionPanel != null && asms.containsKey(rawScriptName)) {
@@ -2987,7 +2986,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
public void searchInActionScriptOrText(Boolean searchInText, Openable openable, boolean useSelection) {
View.checkAccess();
-
+
if (checkEdited()) {
return;
}
@@ -3435,7 +3434,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
updateClassesList();
reload(true);
}
-
+
public void skipDetectionOfUninitializedClassFieldsChanged() {
clearAllScriptCache();
updateClassesList();
@@ -4562,9 +4561,57 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
}
}
-
+
public void exportXaml(SWF swf) {
- //TODO
+ JFileChooser fc = View.getFileChooserWithIcon("exportxml");
+ fc.setDialogTitle(AppStrings.translate("menu.file.export.xaml"));
+ String selDir = Configuration.lastExportDir.get();
+ fc.setCurrentDirectory(new File(selDir));
+ if (!selDir.endsWith(File.separator)) {
+ selDir += File.separator;
+ }
+ String swfFileName = swf.getTitleOrShortFileName();
+ String slnxFileName = swfFileName + ".slnx";
+ if (swfFileName.toLowerCase(Locale.ENGLISH).endsWith(".swf")
+ || swfFileName.toLowerCase(Locale.ENGLISH).endsWith(".gfx")) {
+ slnxFileName = swfFileName.substring(0, swfFileName.lastIndexOf(".")) + ".slnx";
+ }
+ fc.setSelectedFile(new File(selDir + slnxFileName));
+ fc.setFileFilter(new FileFilter() {
+ @Override
+ public boolean accept(File f) {
+ return f.isDirectory() || f.getName().toLowerCase(Locale.ENGLISH).endsWith(".slnx");
+ }
+
+ @Override
+ public String getDescription() {
+ return AppStrings.translate("filter.slnx");
+ }
+ });
+ if (fc.showSaveDialog(Main.getDefaultMessagesComponent()) != JFileChooser.APPROVE_OPTION) {
+ return;
+ }
+ String selFile = Helper.fixDialogFile(fc.getSelectedFile()).getAbsolutePath();
+ if (selFile.toLowerCase(Locale.ENGLISH).endsWith(".slnx")) {
+ selFile = selFile.substring(0, selFile.lastIndexOf("."));
+ }
+ File parentDir = new File(selFile).getParentFile();
+ String projectName = new File(selFile).getName();
+
+ AbortRetryIgnoreHandler handler = new GuiAbortRetryIgnoreHandler();
+
+ Main.startWork(translate("work.exporting.xaml") + "...", null, true);
+ try {
+ new RetryTask(() -> {
+ XamlExporter xamlExporter = new XamlExporter();
+ xamlExporter.exportSwf(swf, parentDir, projectName, 1);
+ }, handler).run();
+ } catch (IOException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } catch (InterruptedException ex) {
+ //ignore
+ }
+ Main.stopWork();
}
public void exportJavaSource(List items) {
@@ -4953,7 +5000,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
List tagsToRemove = new ArrayList<>();
- loopTags: for (Tag tag : swf.getTags()) {
+ loopTags:
+ for (Tag tag : swf.getTags()) {
if (tag instanceof CharacterTag) {
CharacterTag characterTag = (CharacterTag) tag;
for (String cls : characterTag.getClassNames()) {
@@ -5091,10 +5139,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
};
}
- public boolean saveText(TextTag textTag, String formattedText, String[] texts, LineMarkedEditorPane editor, UndoManager undoManager) {
- if (undoManager != null) {
+ public boolean saveText(TextTag textTag, String formattedText, String[] texts, LineMarkedEditorPane editor, UndoManager undoManager) {
+ if (undoManager != null) {
String prevText = textTag.getFormattedText(false).text;
- if (saveTextInternal(textTag, formattedText, texts, editor)) {
+ if (saveTextInternal(textTag, formattedText, texts, editor)) {
undoManager.doOperation(new DoableOperation() {
boolean first = true;
@@ -5110,7 +5158,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void undoOperation() {
- saveTextInternal(textTag, prevText, texts, editor);
+ saveTextInternal(textTag, prevText, texts, editor);
}
@Override
@@ -5122,11 +5170,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
return false;
}
- return saveTextInternal(textTag, formattedText, texts, editor);
+ return saveTextInternal(textTag, formattedText, texts, editor);
}
- private boolean saveTextInternal(TextTag textTag, String formattedText, String[] texts, LineMarkedEditorPane editor) {
-
+ private boolean saveTextInternal(TextTag textTag, String formattedText, String[] texts, LineMarkedEditorPane editor) {
+
try {
if (textTag.setFormattedText(getMissingCharacterHandler(), formattedText, texts)) {
return true;
@@ -5626,8 +5674,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
AbortRetryIgnoreHandler errorHandler = new GuiAbortRetryIgnoreHandler();
int aaScale = Configuration.reduceAntialiasConflationByScalingForExport.get() ? Configuration.reduceAntialiasConflationByScalingValueForExport.get() : 1;
-
-
+
FrameExporter frameExporter = new FrameExporter();
FrameExportSettings fes = new FrameExportSettings(mode, dialog.getZoom(), dialog.isTransparentFrameBackgroundEnabled(), aaScale);
String subFolder = FrameExportSettings.EXPORT_FOLDER_NAME;
@@ -5782,15 +5829,14 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
private void valueChanged(Object source, TreePath selectedPath) {
TreeItem treeItem = selectedPath == null ? null : (TreeItem) selectedPath.getLastPathComponent();
-
- if (treeItem == null) {
+
+ if (treeItem == null) {
updateUi(null);
reload(false);
return;
}
-
- //Main.updateSession();
+ //Main.updateSession();
if (!(treeItem instanceof OpenableList)) {
Openable openable = treeItem.getOpenable();
if (openables.isEmpty()) {
@@ -6354,12 +6400,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public Dimension getFilterDimensions() {
return new Dimension(0, 0);
- }
+ }
@Override
public RECT getRectWithFilters() {
return getRect();
- }
+ }
};
previewPanel.showImagePanel(tim, origSwf, 0, true, true, !Configuration.animateSubsprites.get(), false, !Configuration.playFrameSounds.get(), true, false, true, true, true);
} else if (treeItem instanceof DefineFont4Tag) {
@@ -6523,7 +6569,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
Set needed;
Set neededClasses;
-
+
if (neededCharacters.containsKey(treeItem)) {
needed = neededCharacters.get(treeItem);
neededClasses = neededCharacterClasses.get(treeItem);
@@ -6534,8 +6580,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
neededCharacters.put(treeItem, needed);
neededCharacterClasses.put(treeItem, neededClasses);
}
-
-
if (needed.size() > 0) {
tagInfo.addInfo("general", "neededCharacters", Helper.joinStrings(needed, ", "));
@@ -6905,13 +6949,13 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
Set resultNeeded = new LinkedHashSet<>();
Set resultNeededClasses = new LinkedHashSet<>();
t.getMissingNeededCharacters(needed, neededClasses, resultNeeded, resultNeededClasses);
-
- missingNeededCharacters.put(t, resultNeeded);
+
+ missingNeededCharacters.put(t, resultNeeded);
missingNeededCharacterClasses.put(t, resultNeededClasses);
if (characterId != -1 && tim.getTimeline().swf.getCharacter(characterId) == null) {
missingNeededCharacters.get(t).add(characterId);
}
-
+
//FIXME: missingNeededCharacterClasses ??
}
/*if (t instanceof DefineSpriteTag) {
@@ -6936,7 +6980,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
this.neededCharacters = neededCharacters;
this.missingNeededCharacters = missingNeededCharacters;
-
+
tagTree.setMissingNeededCharacters(missingNeededCharacters);
tagListTree.setMissingNeededCharacters(missingNeededCharacters);
}
@@ -7071,7 +7115,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
public EasyPanel getEasyPanel() {
return easyPanel;
}
-
+
public void showDebugStackFrame() {
showDetail(DETAILCARDDEBUGSTACKFRAME);
}
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/exportall16.png b/src/com/jpexs/decompiler/flash/gui/graphics/exportall16.png
index 5dd60266c..910234133 100644
Binary files a/src/com/jpexs/decompiler/flash/gui/graphics/exportall16.png and b/src/com/jpexs/decompiler/flash/gui/graphics/exportall16.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/exportall32.png b/src/com/jpexs/decompiler/flash/gui/graphics/exportall32.png
index 141f86a94..67475d721 100644
Binary files a/src/com/jpexs/decompiler/flash/gui/graphics/exportall32.png and b/src/com/jpexs/decompiler/flash/gui/graphics/exportall32.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
index b20f4d660..0bbac8350 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
@@ -1141,4 +1141,8 @@ menu.debugging.debug.disconnectSession = Disconnect session
sort.alphabetically = Sort alphabetically
#after 25.1.3
-menu.export.file = Export file as...
\ No newline at end of file
+menu.export.file = Export file to...
+filter.slnx = .NET solution XML (*.slnx)
+menu.file.export.xaml = Export XAML
+work.exporting.xaml = Exporting XAML
+contextmenu.exportXaml = Export XAML
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties
index d40d6e98d..a9d7c3717 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties
@@ -1141,4 +1141,8 @@ menu.debugging.debug.disconnectSession = Odpojit sezen\u00ed
sort.alphabetically = Se\u0159adit abecedn\u011b
#after 25.1.3
-menu.export.file = Exportovat soubor jako...
\ No newline at end of file
+menu.export.file = Exportovat soubor do...
+filter.slnx = .NET solution XML (*.slnx)
+menu.file.export.xaml = Exportovat XAML
+work.exporting.xaml = Exportov\u00e1n\u00ed XAML
+contextmenu.exportXaml = Exportovat XAML
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties
index 127ca5c5e..c50952046 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties
@@ -999,4 +999,11 @@ variables.header.watches = \u00dcberwachungen
menu.debugging.debug.stopListening = Listening beenden
menu.debugging.debug.disconnectSession = Sitzung trennen
-sort.alphabetically = Alphabetisch sortieren
\ No newline at end of file
+sort.alphabetically = Alphabetisch sortieren
+
+#after 25.1.3
+menu.export.file = Datei exportieren nach...
+filter.slnx = .NET solution XML (*.slnx)
+menu.file.export.xaml = Exportiere als XAML
+work.exporting.xaml = XAML exportieren
+contextmenu.exportXaml = Exportiere als XAML
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sk.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sk.properties
index ec9a8f00c..e4dd3a744 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sk.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sk.properties
@@ -1138,4 +1138,11 @@ variables.header.watches = Sledovania
menu.debugging.debug.stopListening = Zastavi\u0165 po\u010d\u00favanie
menu.debugging.debug.disconnectSession = Odpoji\u0165 sedenie
-sort.alphabetically = Zoradi\u0165 abecedne
\ No newline at end of file
+sort.alphabetically = Zoradi\u0165 abecedne
+
+#after 25.1.3
+menu.export.file = Exportova\u0165 s\u00fabor do...
+filter.slnx = .NET solution XML (*.slnx)
+menu.file.export.xaml = Exportova\u0165 XAML
+work.exporting.xaml = Exportovanie XAML
+contextmenu.exportXaml = Exportova\u0165 XAML
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java
index e06ea52b1..0d1c68815 100644
--- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java
+++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java
@@ -255,6 +255,8 @@ public class TagTreeContextMenu extends JPopupMenu {
private JMenuItem saveExeMenuItem;
+ private JMenuItem exportXamlMenuItem;
+
private JMenuItem importSwfXmlMenuItem;
private JMenuItem importScriptsMenuItem;
@@ -591,6 +593,16 @@ public class TagTreeContextMenu extends JPopupMenu {
saveExeMenuItem.setIcon(View.getIcon("saveasexe16"));
add(saveExeMenuItem);
+ exportXamlMenuItem = new JMenuItem(mainPanel.translate("contextmenu.exportXaml"));
+ exportXamlMenuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ mainPanel.exportXaml((SWF) getCurrentItem().getOpenable());
+ }
+ });
+ exportXamlMenuItem.setIcon(View.getIcon("exportxml16"));
+ add(exportXamlMenuItem);
+
addSeparator();
rawEditMenuItem = new JMenuItem(mainPanel.translate("contextmenu.rawEdit"));
@@ -1423,6 +1435,7 @@ public class TagTreeContextMenu extends JPopupMenu {
exportSwfXmlMenuItem.setVisible(allSelectedIsSwf);
saveSwcMenuItem.setVisible(allSelectedIsSwf && items.size() == 1);
saveExeMenuItem.setVisible(allSelectedIsSwf && items.size() == 1);
+ exportXamlMenuItem.setVisible(allSelectedIsSwf && items.size() == 1);
importImagesMenuItem.setVisible(false);
importShapesMenuItem.setVisible(false);
@@ -3169,7 +3182,7 @@ public class TagTreeContextMenu extends JPopupMenu {
protected void onStart() {
Main.startWork(AppStrings.translate("work.prepareDebug"), this, true);
}
-
+
@Override
protected Object doInBackground() throws Exception {
List tempFiles = new ArrayList<>();
@@ -3198,7 +3211,7 @@ public class TagTreeContextMenu extends JPopupMenu {
public void workerCancelled() {
Main.stopWork();
}
- };
+ };
prepareDebugWorker.execute();
}