diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index 4c8c9821f..d5d6bc0c6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -133,8 +133,15 @@ public final class ImagePanel extends JPanel implements ActionListener, FlashDis if (drawable instanceof BoundedTag) { BoundedTag bounded = (BoundedTag) drawable; RECT rect = bounded.getRect(); - SerializableImage image = new SerializableImage((int) (rect.getWidth() / SWF.unitDivisor) + 1, - (int) (rect.getHeight() / SWF.unitDivisor) + 1, SerializableImage.TYPE_INT_ARGB); + int width = (int) (rect.getWidth() / SWF.unitDivisor); + int height = (int) (rect.getHeight() / SWF.unitDivisor); + if (rect.getWidth() > width * SWF.unitDivisor) { + width++; + } + if (rect.getHeight()> height * SWF.unitDivisor) { + height++; + } + SerializableImage image = new SerializableImage(width, height, SerializableImage.TYPE_INT_ARGB); image.fillTransparent(); Matrix m = new Matrix(); m.translate(-rect.Xmin, -rect.Ymin); diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 42ca33d61..ea17d8a72 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -1640,8 +1640,12 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec public void setTreeItem(TreeItem treeItem) { TagTreeModel ttm = (TagTreeModel) tagTree.getModel(); TreePath tp = ttm.getTagPath(treeItem); - tagTree.setSelectionPath(tp); - tagTree.scrollPathToVisible(tp); + if (tp != null) { + tagTree.setSelectionPath(tp); + tagTree.scrollPathToVisible(tp); + } else { + showCard(CARDEMPTYPANEL); + } } public void autoDeobfuscateChanged() { @@ -2063,6 +2067,11 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } return false; } + + public void removeTag(Tag tag) { + tag.getSwf().removeTag(tag); + refreshTree(); + } @Override public void actionPerformed(ActionEvent e) { @@ -2118,6 +2127,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec swf.tags.set(swf.tags.indexOf(it), jpeg2Tag); showCard(CARDEMPTYPANEL); refreshTree(); + setTreeItem(jpeg2Tag); } else { it.setImage(data); } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java b/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java index d89ea0fd0..c99bc4081 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java @@ -36,6 +36,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; @@ -43,9 +44,12 @@ import java.util.Stack; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.JLabel; +import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JPopupMenu; /** * @@ -76,14 +80,32 @@ public class PreviewImage extends JPanel { setSize(dim); setLayout(null); setBorder(BorderFactory.createLineBorder(Color.black)); + + if (treeItem instanceof Tag) { + JPopupMenu contextMenu = new JPopupMenu(); + final JMenuItem removeMenuItem = new JMenuItem(mainPanel.translate("contextmenu.remove")); + removeMenuItem.addActionListener(new AbstractAction() { + + @Override + public void actionPerformed(ActionEvent e) { + TreeItem previewNode = mainPanel.oldTag; + mainPanel.removeTag((Tag) treeItem); + mainPanel.refreshTree(); + // refresh preview list + mainPanel.setTreeItem(previewNode); + } + }); + contextMenu.add(removeMenuItem); + this.setComponentPopupMenu(contextMenu); + } + this.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { - if (e.getClickCount() >= 2) { + if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() >= 2) { mainPanel.setTreeItem(treeItem); - } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java b/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java index 9739425bc..75d708ef2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/TagTreeModel.java @@ -317,8 +317,17 @@ public class TagTreeModel implements TreeModel { } if (n instanceof TreeNode) { TreeNode nd = (TreeNode) n; - if (nd.getItem() == obj) { - return newPath; + if (obj instanceof StringItem && nd.getItem() instanceof StringItem) { + // StringItems are always recreated, so compare them by name + StringItem nds = (StringItem) nd.getItem(); + StringItem objs = (StringItem) obj; + if (objs.getName().equals(nds.getName())) { + return newPath; + } + } else { + if (nd.getItem() == obj) { + return newPath; + } } } ret = searchTag(obj, n, newPath); @@ -337,6 +346,9 @@ public class TagTreeModel implements TreeModel { List path = new ArrayList<>(); path.add(getRoot()); path = searchTag(obj, getRoot(), path); + if (path == null) { + return null; + } TreePath tp = new TreePath(path.toArray(new Object[path.size()])); return tp; }