From fcdf363efc82f4b48dd656e7cfcdbc725623c0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 27 Jul 2025 18:04:36 +0200 Subject: [PATCH] Added: Unknown and errored tags moved to special folders --- CHANGELOG.md | 1 + .../jpexs/decompiler/flash/tags/TagStub.java | 6 ++-- .../decompiler/flash/gui/TreeNodeType.java | 2 +- .../flash/gui/graphics/errored16.png | Bin 0 -> 601 bytes .../flash/gui/graphics/errored32.png | Bin 0 -> 1453 bytes .../flash/gui/graphics/foldererrored16.png | Bin 0 -> 4777 bytes .../flash/gui/graphics/folderunknown16.png | Bin 0 -> 4738 bytes .../flash/gui/graphics/unknown16.png | Bin 0 -> 595 bytes .../flash/gui/graphics/unknown32.png | Bin 0 -> 1433 bytes .../flash/gui/locales/MainFrame.properties | 5 ++- .../flash/gui/locales/MainFrame_cs.properties | 6 ++++ .../flash/gui/tagtree/AbstractTagTree.java | 13 +++++--- .../flash/gui/tagtree/TagTreeModel.java | 29 ++++++++++++++++-- 13 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/errored16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/errored32.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/foldererrored16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/folderunknown16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/unknown16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/unknown32.png diff --git a/CHANGELOG.md b/CHANGELOG.md index a85e2f4cc..88b79b906 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. - Optional heap memory status widget in the titlebar - [#2485] Show variable name in the text tree node label - Deobfuscate identifiers option - non destructible renaming identifiers for display purposes +- Unknown and errored tags moved to special folders ### Fixed - [#2474] Gotos incorrectly decompiled diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java index c2692203f..762070753 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/TagStub.java @@ -70,10 +70,10 @@ public class TagStub extends Tag { return dataStream; } - @Override + /*@Override public String toString() { - return tagName + " [ID = " + id + "]"; - } + return tagName + " (tid = " + id + ")"; + }*/ @Override public Map getNameProperties() { diff --git a/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java b/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java index 7e9d9855e..a477c96ec 100644 --- a/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java +++ b/src/com/jpexs/decompiler/flash/gui/TreeNodeType.java @@ -63,7 +63,7 @@ public enum TreeNodeType { REMOVE_OBJECT, SCALING_GRID, END, - ERROR, + ERRORED, ABC, COOKIE } diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/errored16.png b/src/com/jpexs/decompiler/flash/gui/graphics/errored16.png new file mode 100644 index 0000000000000000000000000000000000000000..357842f7e2e89340709911d32b6b293360febc27 GIT binary patch literal 601 zcmV-f0;c_mP)gYML$%^bJa`fm0s$2~=3sv$h!-Unp=38Dg@FAt0=dW9bE)V_iH8`BF-@$gi`mWo z$gll6Z#5yd-KGP>V`ks?^XAR$ljsPR$z;&&b_swROOiyPP)O>2w+bFgi>;Kfge^T#j;|K2oK!O=l+0QZN|oSL5>(udHBkDMI-|fdYXss#YuX zdTs5NSO*Iq^%5^cqEslAX(TXCBb=L>zCe-4(&qHkMS|ma1BCc#^cj`aI;nTB(&^12 zNtQu3=5Ep)JGannqR)3g@d}GItBEga9dBnQU?g8)gV%gbMZWkAg|9`F%G;1-S=?gw zzbOc@ZnsdQmI)*jLL4JYPDEA z0sGY=^hbAKJiP6~esKO5k4{{#C+-7QlSwp83pJkg`nhr7Wf<-719Zao@#e}Y?D8(H z+1@Aa1Ck7AwL7RA7E}kwUOEm$A0vDD1T@}Zb50p3dmli2P!t6n$3cTZI%l(!V=#H` z!dpBDa3P|z!dmQY{56@uUgEs~7ZQ)h(X;r!Q62WH?|lm&VzJnDzu*5}1n;)Co`~GA n$0i++>z(?U-5gfI9{~mc%A{!2q1vGY00000NkvXXu0mjf7z+~f literal 0 HcmV?d00001 diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/errored32.png b/src/com/jpexs/decompiler/flash/gui/graphics/errored32.png new file mode 100644 index 0000000000000000000000000000000000000000..d68ace272e0022ab50a1aebe45f5d3032f188bf7 GIT binary patch literal 1453 zcmV;e1ycHnP)0;gV>O= zoStntaa(%4oNed!-kyHH_gp+@b6eXE_`>hJ&v|a2@AG?}=l49XB!s||d{q9CBq=R@ zZP~KrIK9_dmX%V#y-Tvp$?vys-~K+mjYMIZJfKupSD&b@treCfgnw{wlm&x9!R1_! z>nFsqfN6Sw;m2}va@LoXmZHB@ z!eI>#hXdEWUJMNl|NGhIO>eOcQ@WG#G);$Pneh31+}_PUaysBQdv6guV!K^Y6hsKL zxvKJAs&|cz(+uY_T8;6kkrKOLI`CV4{fOu~R8_G%Rul3ra=G2nbpdJg zHk=B4LuncM?)sofDwNEb0EvKU*aMrBorRX8$Is2k@RV|+;b5p?W@aV{WC3Ez0v?T= z7Se$40V0YM_g`BE_UKdRJAqIDl3^fk(IWKs_b(2GB4@baoa}7O&&i3pUXrIIz=qF@ z!SCFE2+irlomZBjZC;xAAzK7< z6j_1WB@VBm+P!2C$BTpsIM4YYMK{Bpf$o(HQM9QF zfgf5Rc|5TL=8<^WQW5^H8G@j)LxF5M;GnH{xaDhjySkF$56H~1rXUGkjsUsQaCq?d z3(ufv!zT!LT!tW*LQY-H{7)edv~^s=iuPW}v<_5qe{=I8bd3RjoPd-$4;dzOmj_o1 z=cDMu51@HFX>{_K@Qc6yiRZ7}hDVJ!2bOc!jlE41pk)cYkAHM>ekH2K>PB!So1~+Oid%W zlrrB5xMkp6>u*?j?JmKC6o_=}YubzM?(PZU$#KAwo143qW4mEm5Okt-%f`Pr0fF}!ZCtO0SR#s*ErX(vWnSv4Fo3<9a-Nc!n zTe0fKJ;-#@2~$I3W8+ZJg%3pQvm# z!5y?vIrKKtO=q(3WC7v2y1Gj4fUiuJMrS*TDE8jNk0(!2B$Mom1{+>0q!`PEU%)XqAou_|7FgkBlXg*UArnLz1pWB zAX!9i?2Q<-FCFmz`)Q`ezGC9hGE5dq`M{jc^Q1q|{}W&UWl};9+&RVQ00000NkvXX Hu0mjfcnHTx literal 0 HcmV?d00001 diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/foldererrored16.png b/src/com/jpexs/decompiler/flash/gui/graphics/foldererrored16.png new file mode 100644 index 0000000000000000000000000000000000000000..eb42b4b277133c2ca74d93b18a81605473ca7008 GIT binary patch literal 4777 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 literal 0 HcmV?d00001 diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/unknown32.png b/src/com/jpexs/decompiler/flash/gui/graphics/unknown32.png new file mode 100644 index 0000000000000000000000000000000000000000..d07972017d96a2c07c9308246cefe3b15455485c GIT binary patch literal 1433 zcmV;K1!nq*P)ecnFb^ZcIY_dG|DQsRDI8viJY5|zI4 z^YahWbFE<*V+y!;MF>uwC@3g+lb-&O!YGY^nwOV%w79rf8ithp0|OIG*LBI|T#xII zh+_fwI06i>O-f42wA*ZGcD6ttc0pCeNWapMh>N%4>C~rCUS5vw?(VM&3kx%OB(x~J zxe2!s+}YX&ug43G;J^I#JNoRo5!G{d=!W@Fej%E&61J^Vd%bauk)qhZ%naKEamz#1FN^*YJ^4mXOmT7&Zf z%EVQjqJ1Pz0qL_Gc&!mFD@4ZpXb3?I2mh*1$@ zW^g-h-R>i}f%=S#$f{m}%avD5<8l?PdsaE3=SNu3B$Kh^>(t`(?!AvxD7*Y9Y&1Ak>w4@`1mEXH+I6JY3x)) zI+Oo(G<604^0JHpEUJbBHT&UgX^DjQkp-r5!3f-D-wc;mha{iZEIWhMA1y)eAGaW> z{`f)TKKTCe$aTDRE**xOcN`Ua_wGT<6!6IejPbeK>w%0huy1KSR&HH{{*J-X{Wane zA^7*TzhYz4N)s-mz@FW^r-hFfFb3`o_$YiyR4+b>6CFLg;w7FyY_sy9nEr_2#fE zbP{qnD(@N|DZn~1B>YyIFi%RF(5R&`VFNMYbf2z1k1ba>!0^!MknqZinZd_ILY^#T zWn}=ZXA9}d{y7VERZSE`G}`Gb1XWGrH0PbJI*;tDSr9&ococdo$}46Jj}+i8DJjY2 z4*1CA_mUd|0=d^V;*{eYEW$$TK4g^UJT6lLD!Ir&`DdTc3LbeVWmh~x_F{H+_IE`) zi{#Mo5bdyj^WL$bQnr55X&R?FkIQtoOBNLsNp8b!Lw%?-+TbHj#p)Ol)bX%BOvQ$2 zJ6@;&jyD(|njr5D~tj z3ctg7fIChgo1c@DQ<9pRx`Z=nOZ}m=v^00dvwao(); for (TreeNodeType treeNodeType : TreeNodeType.values()) { - if (treeNodeType != TreeNodeType.UNKNOWN) { - String tagTypeStr = treeNodeType.toString().toLowerCase(Locale.ENGLISH).replace("_", ""); - ICONS.put(treeNodeType, View.getIcon(tagTypeStr + "16")); - } + String tagTypeStr = treeNodeType.toString().toLowerCase(Locale.ENGLISH).replace("_", ""); + ICONS.put(treeNodeType, View.getIcon(tagTypeStr + "16")); } } @@ -484,9 +483,13 @@ public abstract class AbstractTagTree extends JTree { } if (t instanceof TagStub) { - return TreeNodeType.ERROR; + return TreeNodeType.ERRORED; } + if (t instanceof UnknownTag) { + return TreeNodeType.UNKNOWN; + } + if (t instanceof Tag) { return TreeNodeType.OTHER_TAG; } diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java index 045de920e..b30de0910 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java @@ -102,6 +102,11 @@ public class TagTreeModel extends AbstractTagTreeModel { public static final String FOLDER_SCENES = "scenes"; + public static final String FOLDER_UNKNOWN = "unknown"; + + public static final String FOLDER_ERRORED = "errored"; + + public static final List FOLDERS_ORDER = Arrays.asList( "header", "cookies", @@ -118,6 +123,8 @@ public class TagTreeModel extends AbstractTagTreeModel { "frames", "scenes", "others", + "unknown", + "errored", "scripts" ); @@ -202,7 +209,9 @@ public class TagTreeModel extends AbstractTagTreeModel { List movies, List sounds, List binaryData, - List others + List others, + List unknown, + List errored ) { for (Tag t : timelined.getTags()) { TreeNodeType ttype = TagTree.getTreeNodeType(t); @@ -215,7 +224,7 @@ public class TagTreeModel extends AbstractTagTreeModel { break; case SPRITE: sprites.add(t); - walkTimelinedTagList((DefineSpriteTag) t, mappedTags, shapes, morphShapes, sprites, buttons, images, fonts, texts, movies, sounds, binaryData, others); + walkTimelinedTagList((DefineSpriteTag) t, mappedTags, shapes, morphShapes, sprites, buttons, images, fonts, texts, movies, sounds, binaryData, others, unknown, errored); break; case BUTTON: buttons.add(t); @@ -241,6 +250,12 @@ public class TagTreeModel extends AbstractTagTreeModel { case AS: case AS_FRAME: break; + case UNKNOWN: + unknown.add(t); + break; + case ERRORED: + errored.add(t); + break; default: if (t.getId() != ShowFrameTag.ID && !ShowFrameTag.isNestedTagType(t.getId())) { boolean parentFound = false; @@ -283,9 +298,11 @@ public class TagTreeModel extends AbstractTagTreeModel { List sounds = new ArrayList<>(); List binaryData = new ArrayList<>(); List others = new ArrayList<>(); + List unknown = new ArrayList<>(); + List errored = new ArrayList<>(); List emptyFolders = new ArrayList<>(); Map> mappedTags = new HashMap<>(); - walkTimelinedTagList(swf, mappedTags, shapes, morphShapes, sprites, buttons, images, fonts, texts, movies, sounds, binaryData, others); + walkTimelinedTagList(swf, mappedTags, shapes, morphShapes, sprites, buttons, images, fonts, texts, movies, sounds, binaryData, others, unknown, errored); Timeline timeline = swf.getTimeline(); int frameCount = timeline.getFrameCount(); @@ -364,6 +381,12 @@ public class TagTreeModel extends AbstractTagTreeModel { case "others": addFolderItem(nodeList, emptyFolders, true /*always add*/, translate("node.others"), FOLDER_OTHERS, swf, others); break; + case "unknown": + addFolderItem(nodeList, emptyFolders, false, translate("node.unknown"), FOLDER_UNKNOWN, swf, unknown); + break; + case "errored": + addFolderItem(nodeList, emptyFolders, false, translate("node.errored"), FOLDER_ERRORED, swf, errored); + break; case "scripts": if (swf.isAS3()) { if (!swf.getAbcList().isEmpty()) {