#745 Copy tag to

This commit is contained in:
honfika@gmail.com
2014-12-14 12:37:41 +01:00
parent 05a0d04e2f
commit caaee42318
3 changed files with 51 additions and 0 deletions

View File

@@ -538,3 +538,6 @@ preview.gotoframe.dialog.message = Enter frame number (%min% - %max%)
preview.gotoframe.dialog.frame.error = Invalid frame number. It must be number between %min% and %max%.
error.text.invalid.continue = Invalid text: %text% on line %line%. Do you want to continue?
#after version 4.0.5
contextmenu.copyTag = Copy tag to

View File

@@ -527,3 +527,17 @@ contextmenu.addTag = Tag hozz\u00e1ad\u00e1sa
deobfuscation.comment.tryenable = Tipp: Megpr\u00f3b\u00e1lhatja bekapcsolni az "Automatikus deobfuszk\u00e1l\u00e1st" a Be\u00e1ll\u00edt\u00e1sokban
deobfuscation.comment.failed = Deobfuszk\u00e1l\u00e1s be van kapcsolva, de a visszaford\u00edt\u00e1s meghi\u00fasult. Ha a f\u00e1jl NEM obfuszk\u00e1lt kapcsolja ki az "Automatikus deobfuszk\u00e1l\u00e1st" jobb eredm\u00e9nyek el\u00e9r\u00e9se \u00e9rdek\u00e9ben.
#after version 4.0.2
preview.nextframe = K\u00f6vetkez\u0151 keret
preview.prevframe = El\u0151z\u0151 keret
preview.gotoframe = Keretre ugr\u00e1s...
preview.gotoframe.dialog.title = Keretre ugr\u00e1s
preview.gotoframe.dialog.message = \u00cdrja be a keret sz\u00e1m\u00e1t (%min% - %max%)
preview.gotoframe.dialog.frame.error = Hib\u00e1s keret sz\u00e1m. A k\u00f6vetkez\u0151 \u00e9rt\u00e9kek k\u00f6z\u00f6tt kell lennie: %min% \u00e9s %max%.
error.text.invalid.continue = Hib\u00e1s sz\u00f6veg: %text% a %line%. sorban. Folytatja?
#after version 4.0.5
contextmenu.copyTag = M\u00e1sol\u00e1s ide

View File

@@ -17,6 +17,7 @@
package com.jpexs.decompiler.flash.gui.tagtree;
import com.jpexs.decompiler.flash.SWF;
import com.jpexs.decompiler.flash.SWFInputStream;
import com.jpexs.decompiler.flash.gui.Main;
import com.jpexs.decompiler.flash.gui.MainFrameRibbonMenu;
import com.jpexs.decompiler.flash.gui.MainPanel;
@@ -25,6 +26,7 @@ import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag;
import com.jpexs.decompiler.flash.tags.DefineSoundTag;
import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
import com.jpexs.decompiler.flash.tags.Tag;
import com.jpexs.decompiler.flash.tags.TagStub;
import com.jpexs.decompiler.flash.tags.base.CharacterIdTag;
import com.jpexs.decompiler.flash.tags.base.CharacterTag;
import com.jpexs.decompiler.flash.tags.base.ImageTag;
@@ -39,6 +41,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
@@ -78,6 +81,7 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener {
private JMenuItem closeMenuItem;
private JMenu addTagMenu;
private JMenu moveTagMenu;
private JMenu copyTagMenu;
private JMenuItem openSWFInsideTagMenuItem;
public TagTreeContextMenu(final TagTree tagTree, MainPanel mainPanel) {
@@ -131,6 +135,9 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener {
moveTagMenu = new JMenu(mainPanel.translate("contextmenu.moveTag"));
add(moveTagMenu);
copyTagMenu = new JMenu(mainPanel.translate("contextmenu.copyTag"));
add(copyTagMenu);
openSWFInsideTagMenuItem = new JMenuItem(mainPanel.translate("contextmenu.openswfinside"));
add(openSWFInsideTagMenuItem);
openSWFInsideTagMenuItem.setActionCommand(ACTION_OPEN_SWFINSIDE);
@@ -213,6 +220,7 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener {
closeMenuItem.setVisible(allSelectedIsSwf);
addTagMenu.setVisible(false);
moveTagMenu.setVisible(false);
copyTagMenu.setVisible(false);
openSWFInsideTagMenuItem.setVisible(false);
final TreeItem firstItem = items.get(0);
@@ -280,6 +288,7 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener {
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()) {
@@ -299,10 +308,35 @@ public class TagTreeContextMenu extends JPopupMenu implements ActionListener {
}
});
moveTagMenu.add(swfItem);
swfItem = new JMenuItem(targetSwf.getShortFileName());
swfItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
try {
SWF sourceSwf = tag.getSwf();
byte[] data = tag.getData();
SWFInputStream tagDataStream = new SWFInputStream(sourceSwf, data, tag.getDataPos(), data.length);
TagStub copy = new TagStub(sourceSwf, tag.getId(), "Unresolved", tag.getOriginalRange(), tagDataStream);
copy.forceWriteAsLong = tag.forceWriteAsLong;
Tag copyTag = SWFInputStream.resolveTag(copy, 0, false, true, false);
copyTag.setSwf(targetSwf);
targetSwf.tags.add(copyTag);
copyTag.setModified(true);
targetSwf.clearImageCache();
mainPanel.refreshTree();
} 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) {