From e0b55e0410429d1519338b70a5437f110767a508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Fri, 8 Sep 2023 21:27:05 +0200 Subject: [PATCH] Fixed Handling currently selected tags when using folder preview selection (Not working Replace button, etc.) --- CHANGELOG.md | 9 ++++----- .../flash/gui/FolderPreviewPanel.java | 4 ++-- .../jpexs/decompiler/flash/gui/MainPanel.java | 19 ++++++++++++++----- .../flash/gui/tagtree/AbstractTagTree.java | 2 +- .../decompiler/flash/gui/tagtree/TagTree.java | 2 +- .../flash/gui/tagtree/TagTreeContextMenu.java | 2 +- 6 files changed, 23 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77a1995a9..901e9d0f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ All notable changes to this project will be documented in this file. (including XML export), allows decide whether to write length in tag header as long ### Fixed +- [#2043] StartSound2 tag handling +- PR176 - slow loading of allowed charsets - now lazy loaded +- PR178 - infinite recursion when getter/setter calls same property of superclass - [#2070] Handling newlines and tabs in string values inside SWF to XML export - [#2017], PR179 Classes in same package displayed as fully qualified - PR177 AS3 direct editation - Vector literal @@ -18,6 +21,7 @@ All notable changes to this project will be documented in this file. - [#2029] Simplify expressions stripping getlex and also ignoring some types of expressions - [#2052] Detection of switches based on notequal operator - [#2073] Recalculating frameCount field in SWF header and DefineSprite after deleting frame +- Handling currently selected tags when using folder preview selection (Not working Replace button, etc.) ### Changed - [#2070] String values inside SWF to XML export are backslash escaped @@ -25,11 +29,6 @@ to properly handle newlines and tabs. Older versions of FFDec can read this new format wrong and corrupt SWFs. Major version of SWF to XML export changed to 2. -### Fixed -- [#2043] StartSound2 tag handling -- PR176 - slow loading of allowed charsets - now lazy loaded -- PR178 - infinite recursion when getter/setter calls same property of superclass - ## [18.5.0] - 2023-06-25 ### Added - [#1998] Setting for maximum number of items in the cache - allows less memory consumption (Defaults to 500 per cache) diff --git a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java index 476cb0154..bdeb53982 100644 --- a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java @@ -170,10 +170,10 @@ public class FolderPreviewPanel extends JPanel { executor.shutdownNow(); executor = Executors.newFixedThreadPool(Configuration.parallelSpeedUp.get() ? Configuration.getParallelThreadCount() : 1); cachedPreviews.clear(); - revalidate(); - repaint(); selectedItems.clear(); selectedIndex = -1; + revalidate(); + repaint(); ((JScrollPane)getParent().getParent()).getVerticalScrollBar().setValue(0); } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index e0620efb1..521abf41d 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -348,6 +348,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private final JPanel displayPanel; public FolderPreviewPanel folderPreviewPanel; + + private String currentFolderName = null; + + public JPanel folderPreviewCard; public FolderListPanel folderListPanel; @@ -974,7 +978,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } private JPanel createFolderPreviewCard() { - JPanel folderPreviewCard = new JPanel(new BorderLayout()); + folderPreviewCard = new JPanel(new BorderLayout()); folderPreviewPanel = new FolderPreviewPanel(this, new ArrayList<>()); FasterScrollPane folderPreviewScrollPane = new FasterScrollPane(folderPreviewPanel); folderPreviewCard.add(folderPreviewScrollPane, BorderLayout.CENTER); @@ -4493,7 +4497,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private void showCard(String card) { CardLayout cl = (CardLayout) (displayPanel.getLayout()); - cl.show(displayPanel, card); + cl.show(displayPanel, card); } private void valueChanged(Object source, TreePath selectedPath) { @@ -5047,6 +5051,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se public void reload(boolean forceReload, boolean scrollToVisible) { View.checkAccess(); + String previousFolderName = currentFolderName; + JScrollBar folderPreviewScrollBar = ((JScrollPane)folderPreviewPanel.getParent().getParent()).getVerticalScrollBar(); int scrollValue = folderPreviewScrollBar.getValue(); Map folderItems = new HashMap<>(folderPreviewPanel.getSelectedItems()); @@ -5269,8 +5275,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se pinsPanel.setCurrent(oldItem); } - folderPreviewPanel.setSelectedItems(folderItems); - folderPreviewScrollBar.setValue(scrollValue); + if (currentFolderName != null && currentFolderName.equals(previousFolderName)) { + folderPreviewPanel.setSelectedItems(folderItems); + folderPreviewScrollBar.setValue(scrollValue); + } View.execInEventDispatchLater(new Runnable(){ @Override @@ -5397,7 +5405,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se SWF swf = item.swf; addFolderPreviewItems(folderPreviewItems, folderName, swf); - folderPreviewPanel.setItems(folderPreviewItems); + currentFolderName = folderName; + folderPreviewPanel.setItems(folderPreviewItems); showCard(CARDFOLDERPREVIEWPANEL); } diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java index 8340aad6f..f888c7c8d 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java @@ -540,7 +540,7 @@ public abstract class AbstractTagTree extends JTree { } public List getSelected() { - if (mainPanel.folderPreviewPanel.isSomethingSelected()) { + if (mainPanel.folderPreviewCard.isVisible() && mainPanel.folderPreviewPanel.isSomethingSelected()) { return mainPanel.folderPreviewPanel.getSelectedItemsSorted(); } TreePath[] tps = getSelectionPathsSorted(); diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 9545811d8..3b43645c6 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -312,7 +312,7 @@ public class TagTree extends AbstractTagTree { @Override public List getSelection(Openable openable) { List sel; - if (!mainPanel.folderPreviewPanel.isSomethingSelected()) { + if (!(mainPanel.folderPreviewCard.isVisible() && mainPanel.folderPreviewPanel.isSomethingSelected())) { sel = getAllSelected(); } else { sel = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java index ec5b798bb..e35c3dd14 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java @@ -2789,7 +2789,7 @@ public class TagTreeContextMenu extends JPopupMenu { } }; - if (!mainPanel.folderPreviewPanel.isSomethingSelected()) { + if (!(mainPanel.folderPreviewCard.isVisible() && mainPanel.folderPreviewPanel.isSomethingSelected())) { mainPanel.treeOperation(r); } else { //current folder must stay selected