diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index acdbe46db..e5953c557 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -20,17 +20,10 @@ import com.jpexs.decompiler.flash.AppStrings; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.exporters.Matrix; import com.jpexs.decompiler.flash.gui.player.FlashDisplay; -import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.base.BoundedTag; -import com.jpexs.decompiler.flash.tags.base.ButtonTag; -import com.jpexs.decompiler.flash.tags.base.CharacterTag; import com.jpexs.decompiler.flash.tags.base.DrawableTag; import com.jpexs.decompiler.flash.tags.base.FontTag; import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; -import com.jpexs.decompiler.flash.timeline.DepthState; -import com.jpexs.decompiler.flash.timeline.Frame; -import com.jpexs.decompiler.flash.timeline.Timeline; -import com.jpexs.decompiler.flash.timeline.Timelined; import com.jpexs.decompiler.flash.types.ColorTransform; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.helpers.SerializableImage; @@ -42,13 +35,8 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.awt.Paint; -import java.awt.PaintContext; import java.awt.Point; import java.awt.Rectangle; -import java.awt.RenderingHints; -import java.awt.Shape; -import java.awt.TexturePaint; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; @@ -56,12 +44,6 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; -import java.awt.geom.AffineTransform; -import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; -import java.awt.image.ColorModel; -import java.util.ArrayList; -import java.util.List; import java.util.Timer; import java.util.TimerTask; import javax.swing.ImageIcon; diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java index df82e6d20..76db0105b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -160,7 +160,6 @@ import java.util.HashMap; import java.util.List; import java.util.Random; import java.util.Set; -import java.util.Stack; import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; @@ -284,6 +283,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec private static final String ACTION_CANCEL_TEXT = "CANCELTEXT"; private static final String ACTION_SAVE_TEXT = "SAVETEXT"; private static final String ACTION_CLOSE_SWF = "CLOSESWF"; + private static final String ACTION_EXPAND_RECURSIVE = "EXPANDRECURSIVE"; private static final Logger logger = Logger.getLogger(MainPanel.class.getName()); @@ -328,6 +328,11 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec private void createContextMenu() { final JPopupMenu contextPopupMenu = new JPopupMenu(); + final JMenuItem expandRecursiveMenuItem = new JMenuItem(translate("contextmenu.expandAll")); + expandRecursiveMenuItem.addActionListener(this); + expandRecursiveMenuItem.setActionCommand(ACTION_EXPAND_RECURSIVE); + contextPopupMenu.add(expandRecursiveMenuItem); + final JMenuItem removeMenuItem = new JMenuItem(translate("contextmenu.remove")); removeMenuItem.addActionListener(this); removeMenuItem.setActionCommand(ACTION_REMOVE_ITEM); @@ -374,10 +379,10 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } boolean allSelectedIsTag = true; for (TreePath treePath : paths) { - Object tagObj = treePath.getLastPathComponent(); + TreeNode treeNode = (TreeNode) treePath.getLastPathComponent(); - if (tagObj instanceof TreeNode) { - TreeItem tag = ((TreeNode) tagObj).getItem(); + if (treeNode instanceof TreeNode) { + TreeItem tag = treeNode.getItem(); if (!(tag instanceof Tag)) { allSelectedIsTag = false; break; @@ -391,6 +396,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec replaceBinarySelectionMenuItem.setVisible(false); closeSelectionMenuItem.setVisible(false); moveTagMenu.setVisible(false); + expandRecursiveMenuItem.setVisible(false); if (paths.length == 1) { TreeNode treeNode = (TreeNode) paths[0].getLastPathComponent(); @@ -431,6 +437,9 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } moveTagMenu.setVisible(true); } + + TreeModel model = tagTree.getModel(); + expandRecursiveMenuItem.setVisible(model.getChildCount(treeNode) > 0); } removeMenuItem.setVisible(allSelectedIsTag); @@ -1312,13 +1321,13 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } for (TreePath tp : tps) { - Object o = tp.getLastPathComponent(); - ret.add((TreeNode) o); + TreeNode treeNode = (TreeNode) tp.getLastPathComponent(); + ret.add(treeNode); } return ret; } - public List getAllSubs(JTree tree, Object o) { + public List getAllSubs(JTree tree, TreeNode o) { TagTreeModel tm = (TagTreeModel) tree.getModel(); List ret = new ArrayList<>(); for (int i = 0; i < tm.getChildCount(o); i++) { @@ -1338,9 +1347,9 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } for (TreePath tp : tps) { - Object o = tp.getLastPathComponent(); - ret.add((TreeNode) o); - ret.addAll(getAllSubs(tree, o)); + TreeNode treeNode = (TreeNode) tp.getLastPathComponent(); + ret.add(treeNode); + ret.addAll(getAllSubs(tree, treeNode)); } return ret; } @@ -2084,15 +2093,12 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } break; case ACTION_REPLACE_IMAGE: { - Object tagObj = tagTree.getLastSelectedPathComponent(); - if (tagObj == null) { + TreeNode treeNode = (TreeNode) tagTree.getLastSelectedPathComponent(); + if (treeNode == null) { return; } - TreeItem item = null; - if (tagObj instanceof TreeNode) { - item = ((TreeNode) tagObj).getItem(); - } + TreeItem item = treeNode.getItem(); if (item instanceof ImageTag) { ImageTag it = (ImageTag) item; if (it.importSupported()) { @@ -2143,15 +2149,12 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } break; case ACTION_REPLACE_BINARY: { - Object tagObj = tagTree.getLastSelectedPathComponent(); - if (tagObj == null) { + TreeNode treeNode = (TreeNode) tagTree.getLastSelectedPathComponent(); + if (treeNode == null) { return; } - TreeItem item = null; - if (tagObj instanceof TreeNode) { - item = ((TreeNode) tagObj).getItem(); - } + TreeItem item = treeNode.getItem(); if (item instanceof DefineBinaryDataTag) { DefineBinaryDataTag bt = (DefineBinaryDataTag) item; JFileChooser fc = new JFileChooser(); @@ -2170,15 +2173,12 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec } break; case ACTION_EDIT_GENERIC_TAG: { - Object tagObj = tagTree.getLastSelectedPathComponent(); - if (tagObj == null) { + TreeNode treeNode = (TreeNode) tagTree.getLastSelectedPathComponent(); + if (treeNode == null) { return; } - TreeItem item = null; - if (tagObj instanceof TreeNode) { - item = ((TreeNode) tagObj).getItem(); - } + TreeItem item = treeNode.getItem(); if (item instanceof Tag) { genericEditButton.setVisible(false); genericSaveButton.setVisible(true); @@ -2206,6 +2206,14 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec genericTagPanel.setEditMode(false, null); } break; + case ACTION_EXPAND_RECURSIVE: { + TreePath path = tagTree.getSelectionPath(); + if (path == null) { + return; + } + View.expandTreeNodesRecursive(tagTree, path, true); + } + break; case ACTION_REMOVE_ITEM: List sel = getSelected(tagTree); diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java b/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java index d7d9a2d7b..7b7ed62a4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/PreviewImage.java @@ -42,7 +42,6 @@ import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; -import java.util.Stack; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/SWFPreviewPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/SWFPreviewPanel.java index ed584ee8d..f0c41cc3f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/SWFPreviewPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/SWFPreviewPanel.java @@ -24,10 +24,6 @@ import com.jpexs.decompiler.flash.gui.player.PlayerControls; import com.jpexs.decompiler.flash.types.ColorTransform; import com.jpexs.helpers.SerializableImage; import java.awt.BorderLayout; -import java.awt.Point; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionAdapter; import java.util.ArrayList; import java.util.List; import java.util.Stack; diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/View.java b/trunk/src/com/jpexs/decompiler/flash/gui/View.java index 77a85895c..f8a9d6191 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/View.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/View.java @@ -448,4 +448,22 @@ public class View { TreePath tp = new TreePath(path.toArray(new Object[path.size()])); tree.expandPath(tp); } + + public static void expandTreeNodesRecursive(JTree tree, TreePath parent, boolean expand) { + TreeModel model = tree.getModel(); + + Object node = parent.getLastPathComponent(); + int childCount = model.getChildCount(node); + for (int j = 0; j < childCount; j++) { + Object child = model.getChild(node, j); + TreePath path = parent.pathByAddingChild(child); + expandTreeNodesRecursive(tree, path, expand); + } + + if (expand) { + tree.expandPath(parent); + } else { + tree.collapsePath(parent); + } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 4dc0334a7..d66c7cfea 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -451,3 +451,6 @@ generictag.array.insertbefore = Insert %item% before generictag.array.remove = Remove %item% generictag.array.insertafter = Insert %item% after generictag.array.insertend = Insert %item% at the end + +#after version 2.0.0 +contextmenu.expandAll = Expand all diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties index 879627a83..6e4fe9dc1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties +++ b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties @@ -451,3 +451,6 @@ generictag.array.insertbefore = %item% besz\u00far\u00e1sa el\u00e9 generictag.array.remove = %item% t\u00f6rl\u00e9se generictag.array.insertafter = %item% besz\u00far\u00e1sa m\u00f6g\u00e9 generictag.array.insertend = %item% besz\u00far\u00e1sa a v\u00e9g\u00e9re + +#after version 2.0.0 +contextmenu.expandAll = Mindent kinyit diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java index 3f737f489..0376ee343 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java @@ -29,8 +29,6 @@ import com.jpexs.decompiler.flash.tags.base.Container; import com.jpexs.decompiler.flash.tags.base.ContainerItem; import com.jpexs.decompiler.flash.tags.base.DrawableTag; import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag; -import com.jpexs.decompiler.flash.timeline.DepthState; -import com.jpexs.decompiler.flash.timeline.Frame; import com.jpexs.decompiler.flash.timeline.Timeline; import com.jpexs.decompiler.flash.timeline.Timelined; import com.jpexs.decompiler.flash.types.BasicType; diff --git a/trunk/src/com/jpexs/decompiler/flash/timeline/DepthState.java b/trunk/src/com/jpexs/decompiler/flash/timeline/DepthState.java index 035b8ed3b..9dc78f661 100644 --- a/trunk/src/com/jpexs/decompiler/flash/timeline/DepthState.java +++ b/trunk/src/com/jpexs/decompiler/flash/timeline/DepthState.java @@ -50,8 +50,8 @@ public class DepthState { public boolean key = false; public int clipDepth = -1; public int time = 0; - private SWF swf; - private Frame frame; + private final SWF swf; + private final Frame frame; public DepthState(SWF swf,Frame frame) { this.swf = swf; this.frame = frame; diff --git a/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java index f3e9168e7..86b6ad466 100644 --- a/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -31,9 +31,6 @@ import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.filters.FILTER; import com.jpexs.helpers.SerializableImage; import java.awt.Point; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.List;