From 96e0b368ff356c9fa42f4fd2432faccef5bf6951 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 12 Nov 2014 19:01:21 +0100 Subject: [PATCH] add tree models (tagtraa, dumpviewtree) onlywhen the tree is visible, better preserving the expanded states of the tree nodes --- .../com/jpexs/decompiler/flash/tags/Tag.java | 3 + .../jpexs/decompiler/flash/gui/MainPanel.java | 63 +++++++++++-------- .../flash/gui/dumpview/DumpTree.java | 20 +----- .../decompiler/flash/gui/tagtree/TagTree.java | 12 ++++ 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java index 5528d033f..9824a1fa9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -343,6 +343,9 @@ public abstract class Tag implements NeedsCharacters, Exportable, ContainerItem, */ @Override public String toString() { + if (getName().equals("DefineSprite (406)")) { + int a = 1; + } return getName(); } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 96d755bb3..9827e33bb 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -582,7 +582,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec }); detailPanel.setVisible(false); - showView(Configuration.dumpView.get() ? VIEW_DUMP : VIEW_RESOURCES); + showView(getCurrentView()); updateUi(); //Opening files with drag&drop to main window @@ -593,19 +593,8 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec previewPanel.clear(); - swfs.add(newSwfs); - for (SWF swf : newSwfs) { - tagTree.setModel(new TagTreeModel(swfs, Configuration.tagTreeShowEmptyFolders.get())); - dumpTree.setModel(new DumpTreeModel(swfs)); - - if (swf.isAS3) { - getABCPanel().setSwf(swf); - } - - expandSwfNodes(); - for (Tag t : swf.tags) { if (t instanceof JPEGTablesTag) { swf.jtt = (JPEGTablesTag) t; @@ -625,11 +614,16 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec logger.log(Level.SEVERE, null, ex); } } + } - showDetail(DETAILCARDEMPTYPANEL); - showCard(CARDEMPTYPANEL); + showDetail(DETAILCARDEMPTYPANEL); + showCard(CARDEMPTYPANEL); + swfs.add(newSwfs); + SWF swf = newSwfs.size() > 0 ? newSwfs.get(0) : null; + if (swf != null) { updateUi(swf); } + refreshTree(); } private ABCPanel getABCPanel() { @@ -1883,8 +1877,15 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec showCard(CARDEMPTYPANEL); TreeItem treeItem = tagTree.getCurrentTreeItem(); DumpInfo dumpInfo = (DumpInfo) dumpTree.getLastSelectedPathComponent(); - View.refreshTree(tagTree, new TagTreeModel(swfs, Configuration.tagTreeShowEmptyFolders.get())); - View.refreshTree(dumpTree, new DumpTreeModel(swfs)); + + if (tagTree.getModel() != null) { + View.refreshTree(tagTree, new TagTreeModel(swfs, Configuration.tagTreeShowEmptyFolders.get())); + } + + if (dumpTree.getModel() != null) { + View.refreshTree(dumpTree, new DumpTreeModel(swfs)); + } + if (treeItem != null) { setTagTreeSelectedNode(treeItem); } @@ -2166,9 +2167,29 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec public static final int VIEW_DUMP = 1; public static final int VIEW_TIMELINE = 2; + private int getCurrentView() { + return Configuration.dumpView.get() ? VIEW_DUMP : VIEW_RESOURCES; + } + + public void setTreeModel(int view) { + switch (view) { + case VIEW_DUMP: + if (dumpTree.getModel() == null) { + dumpTree.setModel(new DumpTreeModel(swfs)); + } + break; + case VIEW_RESOURCES: + if (tagTree.getModel() == null) { + tagTree.setModel(new TagTreeModel(swfs, Configuration.tagTreeShowEmptyFolders.get())); + } + break; + } + } + public boolean showView(int view) { CardLayout cl = (CardLayout) (contentPanel.getLayout()); + setTreeModel(view); switch (view) { case VIEW_DUMP: if (!isWelcomeScreen) { @@ -2542,16 +2563,6 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec folderPreviewPanel.setItems(folderPreviewItems); } - public void expandSwfNodes() { - TreeModel model = tagTree.getModel(); - Object node = model.getRoot(); - int childCount = model.getChildCount(node); - for (int j = 0; j < childCount; j++) { - Object child = model.getChild(node, j); - tagTree.expandPath(new TreePath(new Object[]{node, child})); - } - } - private boolean isFreeing; @Override diff --git a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java index 116abe314..e3fe2195c 100644 --- a/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java +++ b/src/com/jpexs/decompiler/flash/gui/dumpview/DumpTree.java @@ -75,27 +75,10 @@ public class DumpTree extends JTree implements ActionListener { public class DumpTreeCellRenderer extends DefaultTreeCellRenderer { - @Override - public Component getTreeCellRendererComponent( - JTree tree, - Object value, - boolean sel, - boolean expanded, - boolean leaf, - int row, - boolean hasFocus) { - - super.getTreeCellRendererComponent( - tree, value, sel, - expanded, leaf, row, - hasFocus); - - //DumpInfo dumpInfo = (DumpInfo) value; + public DumpTreeCellRenderer() { setUI(new BasicLabelUI()); setOpaque(false); setBackgroundNonSelectionColor(Color.white); - - return this; } } @@ -313,5 +296,4 @@ public class DumpTree extends JTree implements ActionListener { } } } - } diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index e2e23803c..818ae5adb 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -124,6 +124,7 @@ import javax.swing.plaf.TreeUI; import javax.swing.plaf.basic.BasicLabelUI; import javax.swing.plaf.basic.BasicTreeUI; import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; @@ -530,4 +531,15 @@ public class TagTree extends JTree { TreeItem item = (TreeItem) getLastSelectedPathComponent(); return item; } + + @Override + public void setModel(TreeModel tm) { + super.setModel(tm); + if (tm != null) { + int rowCount = tm.getChildCount(tm.getRoot()); + for (int i = rowCount - 1; i >= 0; i--) { + expandRow(i); + } + } + } }