From 8044f7f13ea1f03ede3d5cb640ebccbddbb917de Mon Sep 17 00:00:00 2001 From: Honfika Date: Sun, 16 Mar 2014 21:00:10 +0100 Subject: [PATCH] allow removing frames --- trunk/src/com/jpexs/decompiler/flash/SWF.java | 18 +++++++++--------- .../jpexs/decompiler/flash/gui/MainPanel.java | 19 +++++++++---------- .../decompiler/flash/gui/TagTreeModel.java | 4 ++-- .../flash/treeitems/FrameNodeItem.java | 10 +++++++++- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index e430f6e18..cfeaa34d6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -1049,7 +1049,7 @@ public final class SWF implements TreeItem, Timelined { TreeNode addNode = null; if (t instanceof ShowFrameTag) { // do not add PlaceObjects (+etc) to script nodes - FrameNode tti = new FrameNode(new FrameNodeItem(t.getSwf(), frame, parent, false), null, true); + FrameNode tti = new FrameNode(new FrameNodeItem(t.getSwf(), frame, parent, (ShowFrameTag) t, false), null, true); for (int r = ret.size() - 1; r >= 0; r--) { if (!(ret.get(r).getItem() instanceof DefineSpriteTag)) { @@ -2722,14 +2722,14 @@ public final class SWF implements TreeItem, Timelined { } public void removeTag(Tag t) { - if (ShowFrameTag.isNestedTagType(t.getId())) { - List tags; - Timelined timelined = t.getTimelined(); - if (timelined instanceof DefineSpriteTag) { - tags = ((DefineSpriteTag) timelined).getSubTags(); - } else { - tags = this.tags; - } + List tags; + Timelined timelined = t.getTimelined(); + if (timelined instanceof DefineSpriteTag) { + tags = ((DefineSpriteTag) timelined).getSubTags(); + } else { + tags = this.tags; + } + if (t instanceof ShowFrameTag || ShowFrameTag.isNestedTagType(t.getId())) { tags.remove(t); timelined.resetTimeline(); } else { diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java index b61f35241..5a5279a2e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -409,18 +409,14 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec if (paths == null || paths.length == 0) { return; } - boolean allSelectedIsTag = true; + boolean allSelectedIsTagOrFrame = true; for (TreePath treePath : paths) { TreeNode treeNode = (TreeNode) treePath.getLastPathComponent(); - if (treeNode instanceof TreeNode) { - TreeItem tag = treeNode.getItem(); - if (!(tag instanceof Tag)) { - allSelectedIsTag = false; - break; - } - } else { - allSelectedIsTag = false; + TreeItem tag = treeNode.getItem(); + if (!(tag instanceof Tag) && !(tag instanceof FrameNodeItem)) { + allSelectedIsTagOrFrame = false; + break; } } @@ -479,7 +475,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec expandRecursiveMenuItem.setVisible(model.getChildCount(treeNode) > 0); } - removeMenuItem.setVisible(allSelectedIsTag); + removeMenuItem.setVisible(allSelectedIsTagOrFrame); exportSelectionMenuItem.setEnabled(hasExportableNodes()); contextPopupMenu.show(e.getComponent(), e.getX(), e.getY()); } @@ -2421,6 +2417,9 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec TreeItem tag = o.getItem(); if (tag instanceof Tag) { tagsToRemove.add((Tag) tag); + } else if (tag instanceof FrameNodeItem) { + FrameNodeItem frame = (FrameNodeItem) tag; + tagsToRemove.add(frame.getShowFrameTag()); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java b/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java index 213e463de..0e124bda1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java @@ -122,7 +122,7 @@ public class TagTreeModel implements TreeModel { switch (ttype) { case SHOW_FRAME: ShowFrameTag showFrameTag = (ShowFrameTag) t; - frames.add(new FrameNode(new FrameNodeItem(t.getSwf(), ++frameCnt, parent, true), showFrameTag.innerTags, false)); + frames.add(new FrameNode(new FrameNodeItem(t.getSwf(), ++frameCnt, parent, showFrameTag, true), showFrameTag.innerTags, false)); break; case SHAPE: shapes.add(new TagNode(t)); @@ -277,7 +277,7 @@ public class TagTreeModel implements TreeModel { switch (ttype) { case SHOW_FRAME: ShowFrameTag showFrameTag = (ShowFrameTag) t; - frames.add(new FrameNode(new FrameNodeItem(t.getSwf(), ++frameCnt, parent, true), showFrameTag.innerTags, false)); + frames.add(new FrameNode(new FrameNodeItem(t.getSwf(), ++frameCnt, parent, showFrameTag, true), showFrameTag.innerTags, false)); break; default: if (!actionScriptTags.contains(t) && !ShowFrameTag.isNestedTagType(t.getId())) { diff --git a/trunk/src/com/jpexs/decompiler/flash/treeitems/FrameNodeItem.java b/trunk/src/com/jpexs/decompiler/flash/treeitems/FrameNodeItem.java index 400f04e3e..063cf5de4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/treeitems/FrameNodeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/treeitems/FrameNodeItem.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.treeitems; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.tags.ShowFrameTag; import com.jpexs.decompiler.flash.tags.Tag; /** @@ -28,12 +29,15 @@ public class FrameNodeItem implements TreeItem { private final SWF swf; private final int frame; private final Tag parent; + private final ShowFrameTag showFrameTag; private final boolean display; - public FrameNodeItem(SWF swf, int frame, Tag parent, boolean display) { + public FrameNodeItem(SWF swf, int frame, Tag parent, ShowFrameTag showFrameTag, boolean display) { + this.swf = swf; this.frame = frame; this.parent = parent; + this.showFrameTag = showFrameTag; this.display = display; } @@ -58,4 +62,8 @@ public class FrameNodeItem implements TreeItem { public Tag getParent() { return parent; } + + public ShowFrameTag getShowFrameTag() { + return showFrameTag; + } }