From 463e615726255a9e668618b3fa5b899b8634afc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 5 Oct 2024 11:17:50 +0200 Subject: [PATCH] Left/Right keys work in Library tree --- .../flash/easygui/LibraryTreeTable.java | 42 +++++++++++++++++++ .../decompiler/flash/easygui/MainFrame.java | 7 +--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/easygui/LibraryTreeTable.java b/src/com/jpexs/decompiler/flash/easygui/LibraryTreeTable.java index 8e5358edd..c6135bee1 100644 --- a/src/com/jpexs/decompiler/flash/easygui/LibraryTreeTable.java +++ b/src/com/jpexs/decompiler/flash/easygui/LibraryTreeTable.java @@ -31,6 +31,8 @@ import com.jpexs.decompiler.flash.tags.base.TextTag; import de.javagl.treetable.JTreeTable; import de.javagl.treetable.TreeTableModel; import java.awt.Component; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.event.TreeModelListener; @@ -52,6 +54,46 @@ public class LibraryTreeTable extends JTreeTable { getTree().setCellRenderer(new LibraryTreeCellRenderer()); getTree().setRootVisible(false); getTree().setShowsRootHandles(true); + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + int selectedRow = getSelectedRow(); + JTree tree = getTree(); + + if (e.getKeyCode() == KeyEvent.VK_LEFT) { + TreePath path = tree.getPathForRow(selectedRow); + if (path != null && tree.isExpanded(path)) { + tree.collapsePath(path); + + int parentRow = tree.getRowForPath(path); + changeSelection(parentRow, 0, false, false); + } else { + TreePath parentPath = path.getParentPath(); + if (parentPath != null) { + int parentRow = tree.getRowForPath(parentPath); + changeSelection(parentRow, 0, false, false); + } + } + e.consume(); + } + + if (e.getKeyCode() == KeyEvent.VK_RIGHT) { + TreePath path = tree.getPathForRow(selectedRow); + if (path != null && !tree.isExpanded(path)) { + tree.expandPath(path); + int parentRow = tree.getRowForPath(path); + changeSelection(parentRow, 0, false, false); + } else { + TreePath childPath = tree.getPathForRow(selectedRow + 1); + if (childPath != null) { + int childRow = tree.getRowForPath(childPath); + changeSelection(childRow, 0, false, false); + } + } + e.consume(); + } + } + }); } public void setSwf(SWF swf) { diff --git a/src/com/jpexs/decompiler/flash/easygui/MainFrame.java b/src/com/jpexs/decompiler/flash/easygui/MainFrame.java index 3c4efa4c6..33c2ea1d4 100644 --- a/src/com/jpexs/decompiler/flash/easygui/MainFrame.java +++ b/src/com/jpexs/decompiler/flash/easygui/MainFrame.java @@ -19,11 +19,8 @@ package com.jpexs.decompiler.flash.easygui; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.gui.ImagePanel; import com.jpexs.decompiler.flash.gui.TimelinedMaker; -import com.jpexs.decompiler.flash.gui.player.Zoom; import com.jpexs.decompiler.flash.tags.Tag; -import de.javagl.treetable.JTreeTable; import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.io.File; @@ -46,7 +43,6 @@ import javax.swing.tree.DefaultMutableTreeNode; * @author JPEXS */ public class MainFrame extends JFrame { - private File file; private SWF swf; private LibraryTreeTable libraryTreeTable; private JSplitPane splitPane; @@ -95,13 +91,14 @@ public class MainFrame extends JFrame { libraryPreviewPanel.setTimelined(TimelinedMaker.makeTimelined(t), t.getSwf(), -1, false, true, true, true, true, false, true); libraryPreviewPanel.zoomFit(); + } else { + libraryPreviewPanel.clearAll(); } } }); } public void open(File file) throws IOException, InterruptedException { - this.file = file; try(FileInputStream fis = new FileInputStream(file)) { swf = new SWF(fis, true); }