allow removing frames

This commit is contained in:
Honfika
2014-03-16 21:00:10 +01:00
parent 1ab54546d9
commit 8044f7f13e
4 changed files with 29 additions and 22 deletions

View File

@@ -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<Tag> tags;
Timelined timelined = t.getTimelined();
if (timelined instanceof DefineSpriteTag) {
tags = ((DefineSpriteTag) timelined).getSubTags();
} else {
tags = this.tags;
}
List<Tag> 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 {

View File

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

View File

@@ -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())) {

View File

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