From bdfeaabe40b3d9b4f6556d02127426a817ea06b7 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 23 Apr 2015 17:00:27 +0200 Subject: [PATCH 1/2] allow to cop/move multiple tags from the same swf --- .../flash/gui/tagtree/TagTreeContextMenu.java | 142 +++++++++++------- 1 file changed, 85 insertions(+), 57 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java index 3f13f6acb..9283e1d74 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeContextMenu.java @@ -223,7 +223,7 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener { }); } - public void update(List items) { + public void update(final List items) { if (items.isEmpty()) { return; @@ -283,6 +283,23 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener { } } + boolean allSelectedIsInTheSameSwf = true; + SWF singleSwf = null; + for (TreeItem item : items) { + if (item instanceof SWFList) { + allSelectedIsInTheSameSwf = false; + break; + } + if (singleSwf == null) { + singleSwf = item.getSwf(); + } else { + if (singleSwf != item.getSwf()) { + allSelectedIsInTheSameSwf = false; + break; + } + } + } + expandRecursiveMenuItem.setVisible(false); removeMenuItem.setVisible(allSelectedIsTagOrFrame); removeWithDependenciesMenuItem.setVisible(allSelectedIsTagOrFrame); @@ -300,10 +317,11 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener { copyTagMenu.setVisible(false); openSWFInsideTagMenuItem.setVisible(false); - final TreeItem firstItem = items.get(0); boolean singleSelect = items.size() == 1; if (singleSelect) { + final TreeItem firstItem = items.get(0); + // replace if (firstItem instanceof ImageTag && ((ImageTag) firstItem).importSupported()) { replaceMenuItem.setVisible(true); @@ -374,61 +392,6 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener { addTagMenu.setVisible(true); } - if (firstItem instanceof Tag && swfs.size() > 1) { - final Tag tag = (Tag) firstItem; - moveTagMenu.removeAll(); - copyTagMenu.removeAll(); - for (SWFList targetSwfList : swfs) { - for (final SWF targetSwf : targetSwfList) { - if (targetSwf != tag.getSwf()) { - JMenuItem swfItem = new JMenuItem(targetSwf.getShortFileName()); - swfItem.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent ae) { - SWF sourceSwf = tag.getSwf(); - sourceSwf.tags.remove(tag); - tag.setSwf(targetSwf); - targetSwf.tags.add(tag); - tag.setModified(true); - sourceSwf.assignExportNamesToSymbols(); - targetSwf.assignExportNamesToSymbols(); - sourceSwf.assignClassesToSymbols(); - targetSwf.assignClassesToSymbols(); - sourceSwf.clearImageCache(); - targetSwf.clearImageCache(); - mainPanel.refreshTree(null); // refresh all opened swfs - } - }); - moveTagMenu.add(swfItem); - - swfItem = new JMenuItem(targetSwf.getShortFileName()); - swfItem.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent ae) { - try { - Tag copyTag = tag.cloneTag(); - copyTag.setSwf(targetSwf); - targetSwf.tags.add(copyTag); - copyTag.setModified(true); - targetSwf.assignExportNamesToSymbols(); - targetSwf.assignClassesToSymbols(); - targetSwf.clearImageCache(); - mainPanel.refreshTree(targetSwf); - } catch (IOException | InterruptedException ex) { - Logger.getLogger(TagTreeContextMenu.class.getName()).log(Level.SEVERE, null, ex); - } - } - }); - copyTagMenu.add(swfItem); - } - } - } - moveTagMenu.setVisible(true); - copyTagMenu.setVisible(true); - } - if (tagTree.getModel().getChildCount(firstItem) > 0) { expandRecursiveMenuItem.setVisible(true); } @@ -441,6 +404,71 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener { rawEditMenuItem.setVisible(firstItem instanceof Tag); } } + + if (allSelectedIsInTheSameSwf && allSelectedIsTag && swfs.size() > 1) { + moveTagMenu.removeAll(); + copyTagMenu.removeAll(); + for (SWFList targetSwfList : swfs) { + for (final SWF targetSwf : targetSwfList) { + if (targetSwf != singleSwf) { + JMenuItem swfItem = new JMenuItem(targetSwf.getShortFileName()); + swfItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent ae) { + SWF sourceSwf = items.get(0).getSwf(); + for (TreeItem item : items) { + Tag tag = (Tag) item; + sourceSwf.tags.remove(tag); + tag.setSwf(targetSwf); + targetSwf.tags.add(tag); + tag.setModified(true); + } + + sourceSwf.assignExportNamesToSymbols(); + targetSwf.assignExportNamesToSymbols(); + sourceSwf.assignClassesToSymbols(); + targetSwf.assignClassesToSymbols(); + sourceSwf.clearImageCache(); + targetSwf.clearImageCache(); + sourceSwf.updateCharacters(); + targetSwf.updateCharacters(); + mainPanel.refreshTree(null); // refresh all opened swfs + } + }); + moveTagMenu.add(swfItem); + + swfItem = new JMenuItem(targetSwf.getShortFileName()); + swfItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent ae) { + try { + for (TreeItem item : items) { + Tag tag = (Tag) item; + Tag copyTag = tag.cloneTag(); + copyTag.setSwf(targetSwf); + targetSwf.tags.add(copyTag); + copyTag.setModified(true); + } + + targetSwf.assignExportNamesToSymbols(); + targetSwf.assignClassesToSymbols(); + targetSwf.clearImageCache(); + targetSwf.updateCharacters(); + mainPanel.refreshTree(targetSwf); + } catch (IOException | InterruptedException ex) { + Logger.getLogger(TagTreeContextMenu.class.getName()).log(Level.SEVERE, null, ex); + } + } + }); + copyTagMenu.add(swfItem); + } + } + } + moveTagMenu.setVisible(true); + copyTagMenu.setVisible(true); + } if (allSelectedIsBinaryData) { boolean anyInnerSwf = false; From cb269451fd26e502fd888419cc0c95cce0c8f5b7 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 23 Apr 2015 19:01:34 +0200 Subject: [PATCH 2/2] Issue #865, #613: ribbon prefered width fix --- src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java index f97ca9d53..ae601f3ce 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java @@ -388,17 +388,19 @@ public class MainFrameRibbonMenu extends MainFrameMenu implements ActionListener private List getIconBandResizePolicies(JRibbonBand ribbonBand) { List resizePolicies = new ArrayList<>(); + IconRibbonBandResizePolicy iconBandResizePolicy = new IconRibbonBandResizePolicy(ribbonBand.getControlPanel()); + final int width = Math.max(105, iconBandResizePolicy.getPreferredWidth(0, 0)); resizePolicies.add(new BaseRibbonBandResizePolicy(ribbonBand.getControlPanel()) { @Override public int getPreferredWidth(int i, int i1) { - return 105; + return width; } @Override public void install(int i, int i1) { } }); - resizePolicies.add(new IconRibbonBandResizePolicy(ribbonBand.getControlPanel())); + resizePolicies.add(iconBandResizePolicy); return resizePolicies; }