From b9cb48c5e22fa6f1b92ec7c89a83375ae1f79df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 23 Jan 2016 21:32:11 +0100 Subject: [PATCH] Icons for tag types in Dump view --- .../flash/gui/dumpview/DumpTree.java | 153 ++++++++++++++++++ .../decompiler/flash/gui/tagtree/TagTree.java | 29 ++-- 2 files changed, 171 insertions(+), 11 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java index d7782e72e..a7280c991 100644 --- a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java +++ b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java @@ -28,10 +28,55 @@ import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.dumpview.DumpInfoSwfNode; import com.jpexs.decompiler.flash.gui.Main; import com.jpexs.decompiler.flash.gui.MainPanel; +import com.jpexs.decompiler.flash.gui.TreeNodeType; import com.jpexs.decompiler.flash.gui.View; +import com.jpexs.decompiler.flash.gui.tagtree.TagTree; +import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; +import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag; +import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag; +import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag; +import com.jpexs.decompiler.flash.tags.DefineBitsLossless2Tag; +import com.jpexs.decompiler.flash.tags.DefineBitsLosslessTag; +import com.jpexs.decompiler.flash.tags.DefineBitsTag; +import com.jpexs.decompiler.flash.tags.DefineButton2Tag; +import com.jpexs.decompiler.flash.tags.DefineButtonTag; +import com.jpexs.decompiler.flash.tags.DefineEditTextTag; +import com.jpexs.decompiler.flash.tags.DefineFont2Tag; +import com.jpexs.decompiler.flash.tags.DefineFont3Tag; +import com.jpexs.decompiler.flash.tags.DefineFont4Tag; +import com.jpexs.decompiler.flash.tags.DefineFontTag; +import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag; +import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag; +import com.jpexs.decompiler.flash.tags.DefineShape2Tag; +import com.jpexs.decompiler.flash.tags.DefineShape3Tag; +import com.jpexs.decompiler.flash.tags.DefineShape4Tag; +import com.jpexs.decompiler.flash.tags.DefineShapeTag; +import com.jpexs.decompiler.flash.tags.DefineSoundTag; +import com.jpexs.decompiler.flash.tags.DefineSpriteTag; +import com.jpexs.decompiler.flash.tags.DefineText2Tag; +import com.jpexs.decompiler.flash.tags.DefineTextTag; +import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; +import com.jpexs.decompiler.flash.tags.DoABC2Tag; +import com.jpexs.decompiler.flash.tags.DoABCTag; +import com.jpexs.decompiler.flash.tags.DoActionTag; +import com.jpexs.decompiler.flash.tags.DoInitActionTag; +import com.jpexs.decompiler.flash.tags.FileAttributesTag; +import com.jpexs.decompiler.flash.tags.MetadataTag; +import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; +import com.jpexs.decompiler.flash.tags.PlaceObject3Tag; +import com.jpexs.decompiler.flash.tags.PlaceObject4Tag; +import com.jpexs.decompiler.flash.tags.PlaceObjectTag; +import com.jpexs.decompiler.flash.tags.RemoveObject2Tag; +import com.jpexs.decompiler.flash.tags.RemoveObjectTag; +import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag; +import com.jpexs.decompiler.flash.tags.ShowFrameTag; +import com.jpexs.decompiler.flash.tags.SoundStreamHead2Tag; +import com.jpexs.decompiler.flash.tags.SoundStreamHeadTag; +import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont; import com.jpexs.helpers.Helper; import com.jpexs.helpers.MemoryInputStream; import java.awt.Color; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -45,6 +90,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTree; @@ -72,6 +118,113 @@ public class DumpTree extends JTree { setOpaque(false); setBackgroundNonSelectionColor(Color.white); } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + Component ret = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + if (ret instanceof JLabel) { + JLabel lab = (JLabel) ret; + if (value instanceof DumpInfo) { + DumpInfo di = (DumpInfo) value; + TreeNodeType nodeType = null; + if ("".equals(di.type)) { + nodeType = TreeNodeType.FLASH; + } else if ("TAG".equals(di.type)) { + String name = di.name; + if (name.contains(" ")) { + name = name.substring(0, name.indexOf(" ")).trim(); + } + switch (name) { + case DefineFontTag.NAME: + case DefineFont2Tag.NAME: + case DefineFont3Tag.NAME: + case DefineFont4Tag.NAME: + case DefineCompactedFont.NAME: + nodeType = TreeNodeType.FONT; + break; + case DefineTextTag.NAME: + case DefineText2Tag.NAME: + case DefineEditTextTag.NAME: + nodeType = TreeNodeType.TEXT; + break; + case DefineBitsTag.NAME: + case DefineBitsJPEG2Tag.NAME: + case DefineBitsJPEG3Tag.NAME: + case DefineBitsJPEG4Tag.NAME: + case DefineBitsLosslessTag.NAME: + case DefineBitsLossless2Tag.NAME: + nodeType = TreeNodeType.IMAGE; + break; + case DefineShapeTag.NAME: + case DefineShape2Tag.NAME: + case DefineShape3Tag.NAME: + case DefineShape4Tag.NAME: + nodeType = TreeNodeType.SHAPE; + break; + case DefineMorphShapeTag.NAME: + case DefineMorphShape2Tag.NAME: + nodeType = TreeNodeType.MORPH_SHAPE; + break; + case DefineSpriteTag.NAME: + nodeType = TreeNodeType.SPRITE; + break; + case DefineButtonTag.NAME: + case DefineButton2Tag.NAME: + nodeType = TreeNodeType.BUTTON; + break; + case DefineVideoStreamTag.NAME: + nodeType = TreeNodeType.MOVIE; + break; + + case DefineSoundTag.NAME: + case SoundStreamHeadTag.NAME: + case SoundStreamHead2Tag.NAME: + nodeType = TreeNodeType.SOUND; + break; + case DefineBinaryDataTag.NAME: + nodeType = TreeNodeType.BINARY_DATA; + break; + case DoActionTag.NAME: + case DoInitActionTag.NAME: + case DoABCTag.NAME: + case DoABC2Tag.NAME: + nodeType = TreeNodeType.AS; + break; + case ShowFrameTag.NAME: + nodeType = TreeNodeType.FRAME; //show_frame? + break; + case SetBackgroundColorTag.NAME: + nodeType = TreeNodeType.SET_BACKGROUNDCOLOR; + break; + case FileAttributesTag.NAME: + nodeType = TreeNodeType.FILE_ATTRIBUTES; + break; + case MetadataTag.NAME: + nodeType = TreeNodeType.METADATA; + break; + case PlaceObjectTag.NAME: + case PlaceObject2Tag.NAME: + case PlaceObject3Tag.NAME: + case PlaceObject4Tag.NAME: + nodeType = TreeNodeType.PLACE_OBJECT; + break; + case RemoveObjectTag.NAME: + case RemoveObject2Tag.NAME: + nodeType = TreeNodeType.REMOVE_OBJECT; + break; + default: + nodeType = TreeNodeType.OTHER_TAG; + } + } + if (nodeType != null) { + lab.setIcon(TagTree.getIconForType(nodeType)); + } + } + } + return ret; + + } + } public DumpTree(DumpTreeModel treeModel, MainPanel mainPanel) { diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 78268b8f7..42324f2ee 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -139,14 +139,28 @@ public class TagTree extends JTree { private final MainPanel mainPanel; - public class TagTreeCellRenderer extends DefaultTreeCellRenderer { + private static final Map ICONS; + + static { + ICONS = new HashMap<>(); + for (TreeNodeType treeNodeType : TreeNodeType.values()) { + if (treeNodeType != TreeNodeType.UNKNOWN && treeNodeType != TreeNodeType.SHOW_FRAME) { + String tagTypeStr = treeNodeType.toString().toLowerCase().replace("_", ""); + ICONS.put(treeNodeType, View.getIcon(tagTypeStr + "16")); + } + } + } + + public static Icon getIconForType(TreeNodeType t) { + return ICONS.get(t); + } + + public static class TagTreeCellRenderer extends DefaultTreeCellRenderer { private Font plainFont; private Font boldFont; - private final Map icons; - public TagTreeCellRenderer() { setUI(new BasicLabelUI()); setOpaque(false); @@ -154,13 +168,6 @@ public class TagTree extends JTree { setBackgroundNonSelectionColor(Color.white); //setBackgroundSelectionColor(Color.ORANGE); - icons = new HashMap<>(); - for (TreeNodeType treeNodeType : TreeNodeType.values()) { - if (treeNodeType != TreeNodeType.UNKNOWN && treeNodeType != TreeNodeType.SHOW_FRAME) { - String tagTypeStr = treeNodeType.toString().toLowerCase().replace("_", ""); - icons.put(treeNodeType, View.getIcon(tagTypeStr + "16")); - } - } } @Override @@ -196,7 +203,7 @@ public class TagTree extends JTree { setIcon(View.getIcon(itemName.toLowerCase() + "16")); } } else { - setIcon(icons.get(type)); + setIcon(ICONS.get(type)); } /* boolean isModified = val instanceof Tag && ((Tag) val).isModified();