From 25a367a369a6264189d52ee29ff4bc86c7743e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 2 Apr 2023 16:46:41 +0200 Subject: [PATCH] Export in order inside folder preview --- .../decompiler/flash/gui/FolderListPanel.java | 16 ++++++++-- .../flash/gui/FolderPreviewPanel.java | 30 +++++++++++++++---- .../jpexs/decompiler/flash/gui/MainPanel.java | 12 ++++---- .../flash/gui/tagtree/AbstractTagTree.java | 4 +-- .../decompiler/flash/gui/tagtree/TagTree.java | 6 ++-- .../flash/gui/tagtree/TagTreeContextMenu.java | 2 +- 6 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/FolderListPanel.java b/src/com/jpexs/decompiler/flash/gui/FolderListPanel.java index fce2ec0b3..ac075ae4e 100644 --- a/src/com/jpexs/decompiler/flash/gui/FolderListPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/FolderListPanel.java @@ -33,11 +33,14 @@ import java.awt.event.MouseEvent; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.WeakHashMap; import javax.swing.Icon; import javax.swing.JLabel; @@ -63,8 +66,7 @@ public class FolderListPanel extends JPanel { private int selectedIndex = -1; - public Map selectedItems = new HashMap<>(); - + private Map selectedItems = new TreeMap<>(); private static final int PREVIEW_SIZE = 150; @@ -160,7 +162,7 @@ public class FolderListPanel extends JPanel { } if (SwingUtilities.isRightMouseButton(e)) { - mainPanel.getContextPopupMenu().update(new ArrayList<>(selectedItems.values())); + mainPanel.getContextPopupMenu().update(getSelectedItemsSorted()); mainPanel.getContextPopupMenu().show(FolderListPanel.this, e.getX(), e.getY()); } repaint(); @@ -270,4 +272,12 @@ public class FolderListPanel extends JPanel { } } } + + public List getSelectedItemsSorted() { + return new ArrayList<>(selectedItems.values()); + } + + public boolean isSomethingSelected() { + return !selectedItems.isEmpty(); + } } diff --git a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java index 430e93b24..476cb0154 100644 --- a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java @@ -44,16 +44,20 @@ import java.awt.event.MouseEvent; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; +import javax.swing.tree.TreePath; import org.pushingpixels.substance.api.ColorSchemeAssociationKind; import org.pushingpixels.substance.api.ComponentState; import org.pushingpixels.substance.api.DecorationAreaType; @@ -74,11 +78,7 @@ public class FolderPreviewPanel extends JPanel { private boolean repaintQueued; - private int lastWidth; - - private int lastHeight; - - public Map selectedItems = new LinkedHashMap<>(); + private Map selectedItems = new TreeMap<>(); private Cache cachedPreviews; @@ -156,7 +156,7 @@ public class FolderPreviewPanel extends JPanel { } if (SwingUtilities.isRightMouseButton(e)) { - mainPanel.getContextPopupMenu().update(new ArrayList<>(selectedItems.values())); + mainPanel.getContextPopupMenu().update(getSelectedItemsSorted()); mainPanel.getContextPopupMenu().show(FolderPreviewPanel.this, e.getX(), e.getY()); } repaint(); @@ -386,4 +386,22 @@ public class FolderPreviewPanel extends JPanel { } return image; } + + public List getSelectedItemsSorted() { + return new ArrayList<>(selectedItems.values()); + } + + public boolean isSomethingSelected() { + return !selectedItems.isEmpty(); + } + + public Map getSelectedItems() { + return selectedItems; + } + + public void setSelectedItems(Map selectedItems) { + this.selectedItems = selectedItems; + } + + } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 0a4681290..f50cf22be 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -491,9 +491,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se Object source = e.getSource(); List items = new ArrayList<>(); if (source == folderPreviewPanel) { - items.addAll(folderPreviewPanel.selectedItems.values()); + items.addAll(folderPreviewPanel.getSelectedItemsSorted()); } else if (source == folderListPanel) { - items.addAll(folderListPanel.selectedItems.values()); + items.addAll(folderListPanel.getSelectedItemsSorted()); } else { AbstractTagTree tree = (AbstractTagTree) e.getSource(); TreePath[] paths = tree.getSelectionPathsSorted(); @@ -578,9 +578,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se Object source = e.getSource(); List items = new ArrayList<>(); if (source == folderPreviewPanel) { - items.addAll(folderPreviewPanel.selectedItems.values()); + items.addAll(folderPreviewPanel.getSelectedItemsSorted()); } else if (source == folderListPanel) { - items.addAll(folderListPanel.selectedItems.values()); + items.addAll(folderListPanel.getSelectedItemsSorted()); } else { AbstractTagTree tree = (AbstractTagTree) e.getSource(); TreePath[] paths = tree.getSelectionPathsSorted(); @@ -5049,7 +5049,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se JScrollBar folderPreviewScrollBar = ((JScrollPane)folderPreviewPanel.getParent().getParent()).getVerticalScrollBar(); int scrollValue = folderPreviewScrollBar.getValue(); - Map folderItems = new HashMap<>(folderPreviewPanel.selectedItems); + Map folderItems = new HashMap<>(folderPreviewPanel.getSelectedItems()); if (scrollToVisible) { @@ -5269,7 +5269,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se pinsPanel.setCurrent(oldItem); } - folderPreviewPanel.selectedItems = folderItems; + folderPreviewPanel.setSelectedItems(folderItems); folderPreviewScrollBar.setValue(scrollValue); View.execInEventDispatchLater(new Runnable(){ diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java index 4cff75408..8340aad6f 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/AbstractTagTree.java @@ -540,8 +540,8 @@ public abstract class AbstractTagTree extends JTree { } public List getSelected() { - if (!mainPanel.folderPreviewPanel.selectedItems.isEmpty()) { - return new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values()); + if (mainPanel.folderPreviewPanel.isSomethingSelected()) { + return mainPanel.folderPreviewPanel.getSelectedItemsSorted(); } TreePath[] tps = getSelectionPathsSorted(); List ret = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 1bf76edb4..9545811d8 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -312,12 +312,14 @@ public class TagTree extends AbstractTagTree { @Override public List getSelection(Openable openable) { List sel; - if (mainPanel.folderPreviewPanel.selectedItems.isEmpty()) { + if (!mainPanel.folderPreviewPanel.isSomethingSelected()) { sel = getAllSelected(); } else { sel = new ArrayList<>(); - for (TreeItem treeItem : mainPanel.folderPreviewPanel.selectedItems.values()) { + List siSorted = mainPanel.folderPreviewPanel.getSelectedItemsSorted(); + + for (TreeItem treeItem : siSorted) { sel.add(treeItem); getAllSubs(treeItem, sel); } diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java index 7d2658d63..26dda4086 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java @@ -2775,7 +2775,7 @@ public class TagTreeContextMenu extends JPopupMenu { } }; - if (mainPanel.folderPreviewPanel.selectedItems.isEmpty()) { + if (!mainPanel.folderPreviewPanel.isSomethingSelected()) { mainPanel.treeOperation(r); } else { //current folder must stay selected