opening loaded SWFs fixes

This commit is contained in:
Jindra Petřík
2016-01-03 12:35:14 +01:00
parent 641905d6db
commit 4e0c2db81e
4 changed files with 90 additions and 71 deletions

View File

@@ -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<DoActionTag> actions = timelined.getTimeline().getFrame(frame).actions;
Frame f = timelined.getTimeline().getFrame(frame);
List<DoActionTag> actions = f.actions;
if (lda != null) {
lda.clear();
}

View File

@@ -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<String> 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<String> chlist = ver.changes.get(changeType);
chlist.add(change);
}
}
}

View File

@@ -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);
}
}
}