From 04463b6ffc1bce8f83f3ec7d8b434c58df12a2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Wed, 9 Nov 2022 21:42:14 +0100 Subject: [PATCH] Fixed dragging tags into frames --- .../flash/gui/taglistview/TagListTree.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/taglistview/TagListTree.java b/src/com/jpexs/decompiler/flash/gui/taglistview/TagListTree.java index 2e4cf5af8..706d4dd99 100644 --- a/src/com/jpexs/decompiler/flash/gui/taglistview/TagListTree.java +++ b/src/com/jpexs/decompiler/flash/gui/taglistview/TagListTree.java @@ -124,6 +124,15 @@ class TreeTransferHandler extends TransferHandler { return false; } + //no insert before SWF header + if ((dl.getPath().getLastPathComponent() instanceof SWF) && dl.getChildIndex() == 0) { + return false; + } + + /*if (dl.getPath().getLastPathComponent() instanceof TagListTreeRoot) { + return false; + }*/ + AbstractTagTree tree = (AbstractTagTree) support.getComponent(); List selected = tree.getSelected(); @@ -205,10 +214,30 @@ class TreeTransferHandler extends TransferHandler { Frame frame = (Frame) dest; timelined = frame.timeline.timelined; position = childIndex == frame.allInnerTags.size() ? null : frame.allInnerTags.get(childIndex); - } else { + } else if (dest instanceof SWF) { + SWF swf = (SWF) dest; + timelined = swf; + Frame frame = swf.getTimeline().getFrame(childIndex - 1/*header*/); + position = frame.allInnerTags.get(0); + } else if (dest instanceof Tag) { timelined = ((Tag) dest).getTimelined(); position = (Tag) dest; - } + } else { + int childCount = tree.getModel().getChildCount(dest); + TreeItem child; + if (childIndex >= childCount) { + child = tree.getModel().getChild(dest, childCount - 1); + } else { + child = tree.getModel().getChild(dest, childIndex); + } + if (child instanceof SWF) { + SWF swf = (SWF) child; + timelined = swf; + position = null; + } else { + return; + } + } } mainPanel.getContextPopupMenu().copyOrMoveTagsBeforeAfter(sourceItems, (action & MOVE) == MOVE, timelined, position); }