From 4e0c2db81e8fbfafbd424ff2910bf8a33614f778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 3 Jan 2016 12:35:14 +0100 Subject: [PATCH] opening loaded SWFs fixes --- .../decompiler/flash/gui/ImagePanel.java | 6 +- src/com/jpexs/decompiler/flash/gui/Main.java | 139 +++++++++--------- .../flash/gui/debugger/DebuggerTools.java | 16 ++ .../decompiler/flash/gui/debugger/debug.swf | Bin 2322 -> 2651 bytes 4 files changed, 90 insertions(+), 71 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index 31e527695..30f0c071a 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -37,6 +37,7 @@ import com.jpexs.decompiler.flash.tags.base.RenderContext; import com.jpexs.decompiler.flash.tags.base.SoundTag; import com.jpexs.decompiler.flash.tags.base.TextTag; import com.jpexs.decompiler.flash.timeline.DepthState; +import com.jpexs.decompiler.flash.timeline.Frame; import com.jpexs.decompiler.flash.timeline.Timeline; import com.jpexs.decompiler.flash.timeline.Timelined; import com.jpexs.decompiler.flash.types.ColorTransform; @@ -533,7 +534,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay { } public void setTimelined(final Timelined drawable, final SWF swf, int frame) { - Stage stage = new Stage() { + Stage stage = new Stage(drawable) { @Override public void callFrame(int frame) { executeFrame(frame); @@ -893,7 +894,8 @@ public final class ImagePanel extends JPanel implements MediaDisplay { if (timelined == null) { return; } - List actions = timelined.getTimeline().getFrame(frame).actions; + Frame f = timelined.getTimeline().getFrame(frame); + List actions = f.actions; if (lda != null) { lda.clear(); } diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 383764cb7..3be9a10b0 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -319,8 +319,10 @@ public class Main { Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); } if (instrSWF != null) { + if (!DebuggerTools.hasDebugger(instrSWF)) { + DebuggerTools.switchDebugger(instrSWF); + } DebuggerTools.injectDebugLoader(instrSWF); - instrSWF.enableDebugging(true, new File(".")); try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(tempFile))) { instrSWF.saveTo(fos); } @@ -376,6 +378,9 @@ public class Main { } if (instrSWF != null) { if (instrSWF.isAS3() && Configuration.autoOpenLoadedSWFs.get()) { + if (!DebuggerTools.hasDebugger(instrSWF)) { + DebuggerTools.switchDebugger(instrSWF); + } DebuggerTools.injectDebugLoader(instrSWF); } instrSWF.enableDebugging(true, new File("."), true, doPCode); @@ -1117,14 +1122,12 @@ public class Main { } }; fc.setFileFilter(exeFilter); + } else if (swf.gfx) { + fc.addChoosableFileFilter(swfFilter); + fc.setFileFilter(gfxFilter); } else { - if (swf.gfx) { - fc.addChoosableFileFilter(swfFilter); - fc.setFileFilter(gfxFilter); - } else { - fc.setFileFilter(swfFilter); - fc.addChoosableFileFilter(gfxFilter); - } + fc.setFileFilter(swfFilter); + fc.addChoosableFileFilter(gfxFilter); } final String extension = ext; fc.setAcceptAllFileFilterUsed(false); @@ -1906,70 +1909,68 @@ public class Main { if (header.equals("noversion")) { break; } - } else { - if (s.contains("=")) { - String key = s.substring(0, s.indexOf('=')); - String val = s.substring(s.indexOf('=') + 1); - if ("updateSystem".equals(header)) { - if (key.equals("majorVersion")) { - updateMajor = Integer.parseInt(val); - if (updateMajor > UPDATE_SYSTEM_MAJOR) { - break; - } - } - if (key.equals("minorVersion")) { - updateMinor = Integer.parseInt(val); + } else if (s.contains("=")) { + String key = s.substring(0, s.indexOf('=')); + String val = s.substring(s.indexOf('=') + 1); + if ("updateSystem".equals(header)) { + if (key.equals("majorVersion")) { + updateMajor = Integer.parseInt(val); + if (updateMajor > UPDATE_SYSTEM_MAJOR) { + break; } } - if ("version".equals(header) && (ver != null)) { - if (key.equals("versionId")) { - ver.versionId = Integer.parseInt(val); - } - if (key.equals("versionName")) { - ver.versionName = val; - } - if (key.equals("nightly")) { - ver.nightly = val.equals("true"); - } - if (key.equals("revision")) { - ver.revision = val; - } - if (key.equals("build")) { - ver.build = Integer.parseInt(val); - } - if (key.equals("major")) { - ver.major = Integer.parseInt(val); - } - if (key.equals("minor")) { - ver.minor = Integer.parseInt(val); - } - if (key.equals("release")) { - ver.release = Integer.parseInt(val); - } - if (key.equals("longVersionName")) { - ver.longVersionName = val; - } - if (key.equals("releaseDate")) { - ver.releaseDate = val; - } - if (key.equals("appName")) { - ver.appName = val; - } - if (key.equals("appFullName")) { - ver.appFullName = val; - } - if (key.equals("updateLink")) { - ver.updateLink = val; - } - if (key.equals("change[]")) { - String changeType = val.substring(0, val.indexOf('|')); - String change = val.substring(val.indexOf('|') + 1); - if (!ver.changes.containsKey(changeType)) { - ver.changes.put(changeType, new ArrayList<>()); - } - List chlist = ver.changes.get(changeType); - chlist.add(change); + if (key.equals("minorVersion")) { + updateMinor = Integer.parseInt(val); + } + } + if ("version".equals(header) && (ver != null)) { + if (key.equals("versionId")) { + ver.versionId = Integer.parseInt(val); + } + if (key.equals("versionName")) { + ver.versionName = val; + } + if (key.equals("nightly")) { + ver.nightly = val.equals("true"); + } + if (key.equals("revision")) { + ver.revision = val; + } + if (key.equals("build")) { + ver.build = Integer.parseInt(val); + } + if (key.equals("major")) { + ver.major = Integer.parseInt(val); + } + if (key.equals("minor")) { + ver.minor = Integer.parseInt(val); + } + if (key.equals("release")) { + ver.release = Integer.parseInt(val); + } + if (key.equals("longVersionName")) { + ver.longVersionName = val; + } + if (key.equals("releaseDate")) { + ver.releaseDate = val; + } + if (key.equals("appName")) { + ver.appName = val; + } + if (key.equals("appFullName")) { + ver.appFullName = val; + } + if (key.equals("updateLink")) { + ver.updateLink = val; + } + if (key.equals("change[]")) { + String changeType = val.substring(0, val.indexOf('|')); + String change = val.substring(val.indexOf('|') + 1); + if (!ver.changes.containsKey(changeType)) { + ver.changes.put(changeType, new ArrayList<>()); } + List chlist = ver.changes.get(changeType); + chlist.add(change); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java b/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java index 26bdf832a..b0f5f03c1 100644 --- a/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java +++ b/src/com/jpexs/decompiler/flash/gui/debugger/DebuggerTools.java @@ -100,6 +100,22 @@ public class DebuggerTools { m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); m.name_index = a.constants.getStringId("DebugLoader", true); ((Tag) ct).setModified(true); + } else if ("flash.utils.getDefinitionByName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); + m.name_index = a.constants.getStringId("debugGetDefinitionByName", true); + ((Tag) ct).setModified(true); + } else if ("flash.utils.getQualifiedClassName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); + m.name_index = a.constants.getStringId("debugGetQualifiedClassName", true); + ((Tag) ct).setModified(true); + } else if ("flash.utils.getQualifiedSuperclassName".equals(m.getNameWithNamespace(a.constants).toRawString())) { + m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); + m.name_index = a.constants.getStringId("debugGetQualifiedSuperclassName", true); + ((Tag) ct).setModified(true); + } else if ("flash.utils.describeType".equals(m.getNameWithNamespace(a.constants).toRawString())) { + m.namespace_index = a.constants.getNamespaceId(Namespace.KIND_PACKAGE, debuggerPkg, 0, true); + m.name_index = a.constants.getStringId("debugDescribeType", true); + ((Tag) ct).setModified(true); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/debugger/debug.swf b/src/com/jpexs/decompiler/flash/gui/debugger/debug.swf index 2bd76b1576dcd7cf9cb33f5e41bfb78f25660101..dcad53097eb5680f637ef0f88d5eb62bac8ba164 100644 GIT binary patch literal 2651 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 J{0AvRI7HGgE>Hjf literal 2322 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