diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 7615eaf6b..db7874997 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -243,4 +243,11 @@ public class ScriptPack extends AS3ClassTreeItem { } return true; } + + @Override + public boolean isModified() { + return abc.script_info.get(scriptIndex).isModified(); + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java index 9ecd56fec..86308e5c6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBinaryDataTag.java @@ -128,4 +128,15 @@ public class DefineBinaryDataTag extends CharacterTag { return false; } + + @Override + public boolean isModified() { + if(super.isModified()){ + return true; + } + if(innerSwf!=null){ + return innerSwf.isModified(); + } + return false; + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS2Package.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS2Package.java index e4154d635..408bd7409 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS2Package.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS2Package.java @@ -113,4 +113,21 @@ public class AS2Package implements TreeItem { public String toString() { return name; } + + @Override + public boolean isModified() { + for(ASMSource s:scripts.values()){ + if(s.isModified()){ + return true; + } + } + for(AS2Package p:subPackages.values()){ + if(p.isModified()){ + return true; + } + } + return false; + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java index 59b783b3a..274be4918 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/AS3Package.java @@ -147,4 +147,23 @@ public class AS3Package extends AS3ClassTreeItem { public String toString() { return packageName; } + + @Override + public boolean isModified() { + List sps=getScriptPacks(); + for(ScriptPack sp:sps){ + if(sp.isModified()){ + return true; + } + } + List ps=getSubPackages(); + for(AS3Package p:ps){ + if(p.isModified()){ + return true; + } + } + return false; + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Frame.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Frame.java index 18c12f735..02f59f66f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Frame.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Frame.java @@ -87,4 +87,29 @@ public class Frame implements TreeItem, Exportable { public String getExportFileName() { return "frame_" + (frame + 1); } + + @Override + public boolean isModified() { + for(Tag t:innerTags){ + if(t.isModified()){ + return true; + } + } + for(Tag t:actions){ + if(t.isModified()){ + return true; + } + } + for(ASMSourceContainer t:actionContainers){ + if(t.isModified()){ + return true; + } + } + if(showFrameTag!=null && showFrameTag.isModified()){ + return true; + } + return false; + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/FrameScript.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/FrameScript.java index 87dc0fac6..2786ea475 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/FrameScript.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/FrameScript.java @@ -53,4 +53,11 @@ public class FrameScript implements TreeItem, Exportable { public String getExportFileName() { return frame.getExportFileName(); } + + @Override + public boolean isModified() { + return frame.isModified(); + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/TagScript.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/TagScript.java index 99d8d3a08..6b58ad636 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/TagScript.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/TagScript.java @@ -76,4 +76,16 @@ public class TagScript implements TreeItem, Exportable { public int hashCode() { return tag.hashCode(); } + + @Override + public boolean isModified() { + for(TreeItem f:frames){ + if(f.isModified()){ + return true; + } + } + return tag.isModified(); + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/FolderItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/FolderItem.java index 29deabddd..2bf9f7c56 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/FolderItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/FolderItem.java @@ -53,4 +53,15 @@ public class FolderItem implements TreeItem { public String toString() { return str; } + + @Override + public boolean isModified() { + for(TreeItem ti:subItems){ + if(ti.isModified()){ + return true; + } + } + return false; + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/HeaderItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/HeaderItem.java index 0c8ce6bd6..71fbdad3f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/HeaderItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/HeaderItem.java @@ -42,4 +42,11 @@ public class HeaderItem implements TreeItem { public String toString() { return name; } + + @Override + public boolean isModified() { + return false; //?? + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/SWFList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/SWFList.java index e5a941f69..7aa4ae364 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/SWFList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/SWFList.java @@ -172,4 +172,16 @@ public class SWFList implements List, SWFContainerItem { public List subList(int i, int i1) { return swfs.subList(i, i1); } + + @Override + public boolean isModified() { + for(SWF s:swfs){ + if(s.isModified()){ + return true; + } + } + return false; + } + + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/TreeItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/TreeItem.java index fba9f8e36..749aa67d0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/TreeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/treeitems/TreeItem.java @@ -25,4 +25,6 @@ import com.jpexs.decompiler.flash.SWF; public interface TreeItem { public SWF getSwf(); + + public boolean isModified(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java index e6999ca72..5f2710425 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java @@ -145,7 +145,7 @@ public class BUTTONCONDACTION implements ASMSource, Serializable { */ @Internal public ByteArrayRange actionBytes; - + /** * Sets actions associated with this object * @@ -239,6 +239,16 @@ public class BUTTONCONDACTION implements ASMSource, Serializable { } } + @Override + public boolean isModified() { + if (tag != null) { + return tag.isModified(); + } + return false; + } + + + @Override public GraphTextWriter getActionBytesAsHex(GraphTextWriter writer) { return Helper.byteArrayToHexWithHeader(writer, actionBytes.getRangeData()); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java index 0bd1ed68b..3dfa2232f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java @@ -43,7 +43,7 @@ import java.util.logging.Logger; * @author JPEXS */ public class CLIPACTIONRECORD implements ASMSource, Serializable { - + public static String keyToString(int key) { if ((key < CLIPACTIONRECORD.KEYNAMES.length) && (key > 0) && (CLIPACTIONRECORD.KEYNAMES[key] != null)) { return CLIPACTIONRECORD.KEYNAMES[key]; @@ -229,9 +229,19 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable { public void setModified() { if (tag != null) { tag.setModified(true); - } + } } + @Override + public boolean isModified() { + if (tag != null) { + return tag.isModified(); + } + return false; + } + + + @Override public GraphTextWriter getActionBytesAsHex(GraphTextWriter writer) { return Helper.byteArrayToHexWithHeader(writer, actionBytes.getRangeData()); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ClassesListTreeModel.java b/src/com/jpexs/decompiler/flash/gui/abc/ClassesListTreeModel.java index de57feb98..41e70fcb6 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ClassesListTreeModel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ClassesListTreeModel.java @@ -186,4 +186,11 @@ public class ClassesListTreeModel extends AS3ClassTreeItem implements TreeModel public String toString() { return AppStrings.translate("node.scripts"); } + + @Override + public boolean isModified() { + return root.isModified(); + } + + } diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 077bb18c3..262180647 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -191,14 +191,14 @@ public class TagTree extends JTree { setIcon(icons.get(type)); } - boolean isModified = val instanceof Tag && ((Tag) val).isModified(); + /* boolean isModified = val instanceof Tag && ((Tag) val).isModified(); if(val instanceof ScriptPack){ ScriptPack sp=(ScriptPack)val; if(sp.abc.script_info.get(sp.scriptIndex).isModified()){ isModified = true; } - } - + }*/ + boolean isModified = val.isModified(); if (isModified) { if (boldFont == null) { Font font = getFont();