From 29c8fb98f95da4bde0796fb1e1e51f512b7c60b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sat, 12 Jan 2013 16:22:49 +0100 Subject: [PATCH] Merged AS1/2/3 frame, displaying shapes, images,... --- trunk/src/com/jpexs/asdec/Main.java | 80 +-- trunk/src/com/jpexs/asdec/SWF.java | 83 +-- trunk/src/com/jpexs/asdec/SWFInputStream.java | 9 +- .../src/com/jpexs/asdec/SWFOutputStream.java | 11 +- .../src/com/jpexs/asdec/abc/gui/ABCPanel.java | 351 +++++++++ .../jpexs/asdec/abc/gui/ClassesListTree.java | 12 +- .../asdec/abc/gui/DecompiledEditorPane.java | 22 +- .../com/jpexs/asdec/abc/gui/DetailPanel.java | 6 +- .../com/jpexs/asdec/abc/gui/MainFrame.java | 580 --------------- .../asdec/abc/gui/MethodBodyParamsPanel.java | 2 +- .../jpexs/asdec/abc/gui/MethodCodePanel.java | 2 +- .../asdec/abc/gui/MethodTraitDetailPanel.java | 2 +- .../com/jpexs/asdec/abc/gui/TraitsList.java | 2 +- .../com/jpexs/asdec/abc/gui/UsageFrame.java | 4 +- .../gui/tablemodels/DecimalTableModel.java | 3 + .../abc/gui/tablemodels/DoubleTableModel.java | 3 + .../abc/gui/tablemodels/IntTableModel.java | 3 + .../gui/tablemodels/MultinameTableModel.java | 3 + .../tablemodels/NamespaceSetTableModel.java | 3 + .../gui/tablemodels/NamespaceTableModel.java | 3 + .../abc/gui/tablemodels/StringTableModel.java | 3 + .../abc/gui/tablemodels/UIntTableModel.java | 3 + .../jpexs/asdec/action/gui/ActionPanel.java | 175 +++++ .../com/jpexs/asdec/action/gui/MainFrame.java | 359 ---------- trunk/src/com/jpexs/asdec/gui/FlashPanel.java | 134 ---- trunk/src/com/jpexs/asdec/gui/ImagePanel.java | 49 ++ trunk/src/com/jpexs/asdec/gui/MainFrame.java | 673 ++++++++++++++++++ .../com/jpexs/asdec/gui/TagBrowserFrame.java | 239 ------- trunk/src/com/jpexs/asdec/gui/TagPanel.java | 279 ++++++++ .../com/jpexs/asdec/gui/proxy/ProxyFrame.java | 9 +- .../jpexs/asdec/tags/CSMTextSettingsTag.java | 2 +- .../src/com/jpexs/asdec/tags/DebugIDTag.java | 12 +- .../jpexs/asdec/tags/DefineBinaryDataTag.java | 7 +- .../jpexs/asdec/tags/DefineBitsJPEG2Tag.java | 16 +- .../jpexs/asdec/tags/DefineBitsJPEG3Tag.java | 16 +- .../jpexs/asdec/tags/DefineBitsJPEG4Tag.java | 21 +- .../asdec/tags/DefineBitsLossless2Tag.java | 50 +- .../asdec/tags/DefineBitsLosslessTag.java | 58 +- .../com/jpexs/asdec/tags/DefineBitsTag.java | 40 +- .../jpexs/asdec/tags/DefineButton2Tag.java | 25 +- .../asdec/tags/DefineButtonCxformTag.java | 12 +- .../asdec/tags/DefineButtonSoundTag.java | 13 +- .../com/jpexs/asdec/tags/DefineButtonTag.java | 26 +- .../jpexs/asdec/tags/DefineEditTextTag.java | 13 +- .../com/jpexs/asdec/tags/DefineFont2Tag.java | 11 +- .../com/jpexs/asdec/tags/DefineFont3Tag.java | 6 +- .../com/jpexs/asdec/tags/DefineFont4Tag.java | 8 +- .../asdec/tags/DefineFontAlignZonesTag.java | 6 +- .../jpexs/asdec/tags/DefineFontInfo2Tag.java | 12 +- .../jpexs/asdec/tags/DefineFontInfoTag.java | 12 +- .../jpexs/asdec/tags/DefineFontNameTag.java | 7 +- .../com/jpexs/asdec/tags/DefineFontTag.java | 11 +- .../asdec/tags/DefineMorphShape2Tag.java | 13 +- .../jpexs/asdec/tags/DefineMorphShapeTag.java | 13 +- .../asdec/tags/DefineScalingGridTag.java | 7 +- .../tags/DefineSceneAndFrameLabelDataTag.java | 12 +- .../com/jpexs/asdec/tags/DefineShape2Tag.java | 17 +- .../com/jpexs/asdec/tags/DefineShape3Tag.java | 18 +- .../com/jpexs/asdec/tags/DefineShape4Tag.java | 18 +- .../com/jpexs/asdec/tags/DefineShapeTag.java | 20 +- .../com/jpexs/asdec/tags/DefineSoundTag.java | 14 +- .../com/jpexs/asdec/tags/DefineSpriteTag.java | 26 +- .../com/jpexs/asdec/tags/DefineText2Tag.java | 13 +- .../com/jpexs/asdec/tags/DefineTextTag.java | 16 +- .../asdec/tags/DefineVideoStreamTag.java | 13 +- trunk/src/com/jpexs/asdec/tags/DoABCTag.java | 12 +- .../src/com/jpexs/asdec/tags/DoActionTag.java | 2 +- .../com/jpexs/asdec/tags/DoInitActionTag.java | 35 +- .../jpexs/asdec/tags/EnableDebugger2Tag.java | 11 +- .../jpexs/asdec/tags/EnableDebuggerTag.java | 12 +- trunk/src/com/jpexs/asdec/tags/EndTag.java | 14 +- .../com/jpexs/asdec/tags/ExportAssetsTag.java | 11 +- .../jpexs/asdec/tags/FileAttributesTag.java | 6 +- .../com/jpexs/asdec/tags/FrameLabelTag.java | 6 +- .../jpexs/asdec/tags/ImportAssets2Tag.java | 11 +- .../com/jpexs/asdec/tags/ImportAssetsTag.java | 12 +- .../com/jpexs/asdec/tags/JPEGTablesTag.java | 6 +- .../src/com/jpexs/asdec/tags/MetadataTag.java | 6 +- .../com/jpexs/asdec/tags/NotDefinedTag.java | 36 - .../com/jpexs/asdec/tags/PlaceObject2Tag.java | 14 +- .../com/jpexs/asdec/tags/PlaceObject3Tag.java | 12 +- .../com/jpexs/asdec/tags/PlaceObjectTag.java | 15 +- .../com/jpexs/asdec/tags/ProductInfoTag.java | 6 +- .../src/com/jpexs/asdec/tags/ProtectTag.java | 12 +- .../jpexs/asdec/tags/RemoveObject2Tag.java | 7 +- .../com/jpexs/asdec/tags/RemoveObjectTag.java | 11 +- .../com/jpexs/asdec/tags/ScriptLimitsTag.java | 7 +- .../asdec/tags/SetBackgroundColorTag.java | 10 +- .../com/jpexs/asdec/tags/SetTabIndexTag.java | 11 +- .../com/jpexs/asdec/tags/ShowFrameTag.java | 13 +- .../jpexs/asdec/tags/SoundStreamBlockTag.java | 12 +- .../jpexs/asdec/tags/SoundStreamHead2Tag.java | 12 +- .../jpexs/asdec/tags/SoundStreamHeadTag.java | 12 +- .../com/jpexs/asdec/tags/StartSound2Tag.java | 11 +- .../com/jpexs/asdec/tags/StartSoundTag.java | 12 +- .../com/jpexs/asdec/tags/SymbolClassTag.java | 7 +- trunk/src/com/jpexs/asdec/tags/Tag.java | 17 +- trunk/src/com/jpexs/asdec/tags/TagStub.java | 12 +- .../com/jpexs/asdec/tags/VideoFrameTag.java | 12 +- .../jpexs/asdec/tags/base/CharacterTag.java | 41 +- .../com/jpexs/asdec/tags/base/TagName.java | 26 - trunk/src/com/jpexs/asdec/types/MATRIX.java | 3 + trunk/src/com/jpexs/asdec/types/PIX24.java | 7 + trunk/src/com/jpexs/asdec/types/RECT.java | 1 + 104 files changed, 1956 insertions(+), 2218 deletions(-) create mode 100644 trunk/src/com/jpexs/asdec/abc/gui/ABCPanel.java delete mode 100644 trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java create mode 100644 trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java delete mode 100644 trunk/src/com/jpexs/asdec/action/gui/MainFrame.java delete mode 100644 trunk/src/com/jpexs/asdec/gui/FlashPanel.java create mode 100644 trunk/src/com/jpexs/asdec/gui/ImagePanel.java create mode 100644 trunk/src/com/jpexs/asdec/gui/MainFrame.java delete mode 100644 trunk/src/com/jpexs/asdec/gui/TagBrowserFrame.java create mode 100644 trunk/src/com/jpexs/asdec/gui/TagPanel.java delete mode 100644 trunk/src/com/jpexs/asdec/tags/NotDefinedTag.java delete mode 100644 trunk/src/com/jpexs/asdec/tags/base/TagName.java diff --git a/trunk/src/com/jpexs/asdec/Main.java b/trunk/src/com/jpexs/asdec/Main.java index efe09b5c1..8be5baaee 100644 --- a/trunk/src/com/jpexs/asdec/Main.java +++ b/trunk/src/com/jpexs/asdec/Main.java @@ -20,6 +20,7 @@ import com.jpexs.asdec.abc.NotSameException; import com.jpexs.asdec.abc.avm2.AVM2Code; import com.jpexs.asdec.gui.AboutDialog; import com.jpexs.asdec.gui.LoadingDialog; +import com.jpexs.asdec.gui.MainFrame; import com.jpexs.asdec.gui.ModeFrame; import com.jpexs.asdec.gui.View; import com.jpexs.asdec.gui.proxy.ProxyFrame; @@ -60,8 +61,6 @@ import org.w3c.dom.NodeList; */ public class Main { - public static com.jpexs.asdec.abc.gui.MainFrame abcMainFrame; - public static com.jpexs.asdec.action.gui.MainFrame actionMainFrame; public static ProxyFrame proxyFrame; public static String file; public static String maskURL; @@ -77,6 +76,7 @@ public class Main { private static TrayIcon trayIcon; private static MenuItem stopMenuItem; private static boolean commandLineMode = false; + public static MainFrame mainFrame; public static boolean isCommandLineMode() { return commandLineMode; @@ -143,12 +143,14 @@ public class Main { public static void startWork(String name) { working = true; - if (abcMainFrame != null) { - abcMainFrame.setStatus(name); - } - if (actionMainFrame != null) { - actionMainFrame.setStatus(name); + if (mainFrame != null) { + if (mainFrame.abcPanel != null) { + mainFrame.setStatus(name); + } } + /*if (actionMainFrame != null) { + actionMainFrame.setStatus(name); + }*/ if (loadingDialog != null) { loadingDialog.setDetail(name); } @@ -159,12 +161,14 @@ public class Main { public static void stopWork() { working = false; - if (abcMainFrame != null) { - abcMainFrame.setStatus(""); - } - if (actionMainFrame != null) { - actionMainFrame.setStatus(""); + if (mainFrame != null) { + if (mainFrame.abcPanel != null) { + mainFrame.setStatus(""); + } } + /*if (actionMainFrame != null) { + actionMainFrame.setStatus(""); + }*/ if (loadingDialog != null) { loadingDialog.setDetail(""); } @@ -199,12 +203,12 @@ public class Main { FileInputStream fis = new FileInputStream(file); DEBUG_COPY = true; ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - swf.saveTo(baos); - } catch (NotSameException nse) { - Logger.getLogger(Main.class.getName()).log(Level.FINE, null, nse); - JOptionPane.showMessageDialog(null, "WARNING: The SWF decompiler may have problems saving this file. Recommended usage is READ ONLY."); - } + /*try { + swf.saveTo(baos); + } catch (NotSameException nse) { + Logger.getLogger(Main.class.getName()).log(Level.FINE, null, nse); + JOptionPane.showMessageDialog(null, "WARNING: The SWF decompiler may have problems saving this file. Recommended usage is READ ONLY."); + }*/ DEBUG_COPY = false; //DEBUG_COPY=true; } catch (Exception ex) { @@ -213,45 +217,25 @@ public class Main { loadingDialog.setVisible(false); return false; } - List listAbc = new ArrayList(); - for (Tag t : swf.tags) { - if (t instanceof DoABCTag) { - listAbc.add(t); - } - } - - if (false) { - JOptionPane.showMessageDialog(null, "This SWF file does not contain any ActionScript parts"); + try { + mainFrame = new MainFrame(swf); loadingDialog.setVisible(false); - if (!openFileDialog()) { - System.exit(0); - } - } else { - if (listAbc.size() > 0) { - List listAbc2 = new ArrayList(); - for (Tag tag : listAbc) { - listAbc2.add((DoABCTag) tag); - } - abcMainFrame = new com.jpexs.asdec.abc.gui.MainFrame(listAbc2); - abcMainFrame.display(); - } else { - actionMainFrame = new com.jpexs.asdec.action.gui.MainFrame(swf.tags); - actionMainFrame.display(); - } + mainFrame.setVisible(true); + } catch (Exception ex) { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } - loadingDialog.setVisible(false); return true; } } public static boolean openFile(String swfFile) { - if (abcMainFrame != null) { - abcMainFrame.setVisible(false); - } - if (actionMainFrame != null) { - actionMainFrame.setVisible(false); + if (mainFrame != null) { + mainFrame.setVisible(false); } + /*if (actionMainFrame != null) { + actionMainFrame.setVisible(false); + }*/ Main.file = swfFile; if (Main.loadingDialog == null) { Main.loadingDialog = new LoadingDialog(); diff --git a/trunk/src/com/jpexs/asdec/SWF.java b/trunk/src/com/jpexs/asdec/SWF.java index c6719837e..4d3d4b915 100644 --- a/trunk/src/com/jpexs/asdec/SWF.java +++ b/trunk/src/com/jpexs/asdec/SWF.java @@ -29,7 +29,6 @@ import com.jpexs.asdec.tags.DoABCTag; import com.jpexs.asdec.tags.JPEGTablesTag; import com.jpexs.asdec.tags.Tag; import com.jpexs.asdec.tags.base.ASMSource; -import com.jpexs.asdec.tags.base.TagName; import com.jpexs.asdec.types.ALPHABITMAPDATA; import com.jpexs.asdec.types.ALPHACOLORMAPDATA; import com.jpexs.asdec.types.BITMAPDATA; @@ -395,11 +394,9 @@ public class SWF { } List existingNames = new ArrayList(); for (TagNode node : nodeList) { - String name; - if (node.tag instanceof TagName) { - name = ((TagName) node.tag).getName(); - } else { - name = node.tag.toString(); + String name=""; + if (node.tag instanceof Tag) { + name = ((Tag) node.tag).getExportName(); } int i = 1; String baseName = name; @@ -470,7 +467,7 @@ public class SWF { return "unk"; } - private boolean hasErrorHeader(byte data[]) { + public static boolean hasErrorHeader(byte data[]) { if (data.length > 4) { if ((data[0] & 0xff) == 0xff) { if ((data[1] & 0xff) == 0xd9) { @@ -529,82 +526,20 @@ public class SWF { } } if (t instanceof DefineBitsLosslessTag) { - DefineBitsLosslessTag dbl = (DefineBitsLosslessTag) t; - BufferedImage bi = new BufferedImage(dbl.bitmapWidth, dbl.bitmapHeight, BufferedImage.TYPE_INT_RGB); - Graphics g = bi.getGraphics(); - COLORMAPDATA colorMapData = null; - BITMAPDATA bitmapData = null; - if (dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_8BIT_COLORMAPPED) { - colorMapData = dbl.getColorMapData(); - } - if ((dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_15BIT_RGB) || (dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_24BIT_RGB)) { - bitmapData = dbl.getBitmapData(); - } - int pos32aligned = 0; - int pos = 0; - for (int y = 0; y < dbl.bitmapHeight; y++) { - for (int x = 0; x < dbl.bitmapWidth; x++) { - if (dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_8BIT_COLORMAPPED) { - RGB color = colorMapData.colorTableRGB[colorMapData.colorMapPixelData[pos32aligned]]; - g.setColor(new Color(color.red, color.green, color.blue)); - } - if (dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_15BIT_RGB) { - g.setColor(new Color(bitmapData.bitmapPixelDataPix15[pos].red * 8, bitmapData.bitmapPixelDataPix15[pos].green * 8, bitmapData.bitmapPixelDataPix15[pos].blue * 8)); - } - if (dbl.bitmapFormat == DefineBitsLosslessTag.FORMAT_24BIT_RGB) { - g.setColor(new Color(bitmapData.bitmapPixelDataPix24[pos].red, bitmapData.bitmapPixelDataPix24[pos].green, bitmapData.bitmapPixelDataPix24[pos].blue)); - } - g.fillRect(x, y, 1, 1); - pos32aligned++; - pos++; - } - while ((pos32aligned % 4 != 0)) { - pos32aligned++; - } - } - ImageIO.write(bi, "PNG", new File(outdir + File.separator + dbl.characterID + ".png")); + DefineBitsLosslessTag dbl = (DefineBitsLosslessTag) t; + ImageIO.write(dbl.getImage(), "PNG", new File(outdir + File.separator + dbl.characterID + ".png")); } if (t instanceof DefineBitsLossless2Tag) { DefineBitsLossless2Tag dbl = (DefineBitsLossless2Tag) t; - BufferedImage bi = new BufferedImage(dbl.bitmapWidth, dbl.bitmapHeight, BufferedImage.TYPE_INT_ARGB); - Graphics g = bi.getGraphics(); - ALPHACOLORMAPDATA colorMapData = null; - ALPHABITMAPDATA bitmapData = null; - if (dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_8BIT_COLORMAPPED) { - colorMapData = dbl.getColorMapData(); - } - if ((dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_15BIT_RGB) || (dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_24BIT_RGB)) { - bitmapData = dbl.getBitmapData(); - } - int pos32aligned = 0; - int pos = 0; - for (int y = 0; y < dbl.bitmapHeight; y++) { - for (int x = 0; x < dbl.bitmapWidth; x++) { - if ((dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_8BIT_COLORMAPPED)) { - RGBA color = colorMapData.colorTableRGB[colorMapData.colorMapPixelData[pos32aligned]]; - g.setColor(new Color(color.red, color.green, color.blue, color.alpha)); - } - if ((dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_15BIT_RGB) || (dbl.bitmapFormat == DefineBitsLossless2Tag.FORMAT_24BIT_RGB)) { - g.setColor(new Color(bitmapData.bitmapPixelData[pos].red, bitmapData.bitmapPixelData[pos].green, bitmapData.bitmapPixelData[pos].blue, bitmapData.bitmapPixelData[pos].alpha)); - } - g.fillRect(x, y, 1, 1); - pos32aligned++; - pos++; - } - while ((pos32aligned % 4 != 0)) { - pos32aligned++; - } - } - ImageIO.write(bi, "PNG", new File(outdir + File.separator + dbl.characterID + ".png")); + + ImageIO.write(dbl.getImage(), "PNG", new File(outdir + File.separator + dbl.characterID + ".png")); } if ((jtt != null) && (t instanceof DefineBitsTag)) { DefineBitsTag dbt = (DefineBitsTag) t; FileOutputStream fos = null; try { fos = new FileOutputStream(outdir + File.separator + dbt.characterID + ".jpg"); - byte data[] = jtt.getData(10); - fos.write(data, hasErrorHeader(data) ? 4 : 0, data.length - (hasErrorHeader(data) ? 6 : 2)); - fos.write(dbt.jpegData, hasErrorHeader(dbt.jpegData) ? 6 : 2, dbt.jpegData.length - (hasErrorHeader(data) ? 6 : 2)); + fos.write(dbt.getFullImageData(jtt)); } finally { if (fos != null) { try { diff --git a/trunk/src/com/jpexs/asdec/SWFInputStream.java b/trunk/src/com/jpexs/asdec/SWFInputStream.java index 145cd30f9..28d384fff 100644 --- a/trunk/src/com/jpexs/asdec/SWFInputStream.java +++ b/trunk/src/com/jpexs/asdec/SWFInputStream.java @@ -409,6 +409,7 @@ public class SWFInputStream extends InputStream { ret.Xmax = (int) readSB(NBits); ret.Ymin = (int) readSB(NBits); ret.Ymax = (int) readSB(NBits); + ret.nbits=NBits; alignByte(); return ret; } @@ -711,7 +712,7 @@ public class SWFInputStream extends InputStream { ret = new DefineFont4Tag(data, version, pos); break; default: - ret = new Tag(tagID, data, pos); + ret = new Tag(tagID,"Unknown", data, pos); } ret.forceWriteAsLong = readLong; byte dataNew[] = ret.getData(version); @@ -744,7 +745,7 @@ public class SWFInputStream extends InputStream { e += (Long.toHexString(data[j] & 0xff) + " "); } } - log.severe(e); + log.fine(e); } } return ret; @@ -995,16 +996,19 @@ public class SWFInputStream extends InputStream { int NScaleBits = (int) readUB(5); ret.scaleX = (int)readSB(NScaleBits); ret.scaleY = (int)readSB(NScaleBits); + ret.bitsScale=NScaleBits; } ret.hasRotate = readUB(1) == 1; if (ret.hasRotate) { int NRotateBits = (int) readUB(5); ret.rotateSkew0 = (int)readSB(NRotateBits); ret.rotateSkew1 = (int)readSB(NRotateBits); + ret.bitsRotate=NRotateBits; } int NTranslateBits = (int) readUB(5); ret.translateX = (int) readSB(NTranslateBits); ret.translateY = (int) readSB(NTranslateBits); + ret.bitsTranslate=NTranslateBits; alignByte(); return ret; } @@ -2233,6 +2237,7 @@ public class SWFInputStream extends InputStream { } dataLen++; } + x--; while ((x % 4) != 0) { dataLen++; readUI8(); diff --git a/trunk/src/com/jpexs/asdec/SWFOutputStream.java b/trunk/src/com/jpexs/asdec/SWFOutputStream.java index ca533891a..e38d4c0e6 100644 --- a/trunk/src/com/jpexs/asdec/SWFOutputStream.java +++ b/trunk/src/com/jpexs/asdec/SWFOutputStream.java @@ -341,7 +341,6 @@ public class SWFOutputStream extends OutputStream { nBits = enlargeBitCountS(nBits, value.Xmax); nBits = enlargeBitCountS(nBits, value.Ymin); nBits = enlargeBitCountS(nBits, value.Ymax); - writeUB(5, nBits); writeSB(nBits, value.Xmin); writeSB(nBits, value.Xmax); @@ -374,7 +373,7 @@ public class SWFOutputStream extends OutputStream { * @throws IOException */ public void writeTag(Tag tag) throws IOException { - byte data[] = tag.getData(version); + byte data[] = tag.getData(version); int tagLength = data.length; int tagID = tag.getId(); int tagIDLength = (tagID << 6); @@ -415,6 +414,9 @@ public class SWFOutputStream extends OutputStream { * @return Number of bits */ public static int getNeededBitsS(int v) { + if(v==0){ + //return 0; + } int counter = 32; int mask = 0x80000000; final int val = (v < 0) ? -v : v; @@ -521,10 +523,9 @@ public class SWFOutputStream extends OutputStream { int NTranslateBits=0; NTranslateBits = enlargeBitCountS(NTranslateBits, value.translateX); NTranslateBits = enlargeBitCountS(NTranslateBits, value.translateY); - + writeUB(5, NTranslateBits); - - + writeSB(NTranslateBits, value.translateX); writeSB(NTranslateBits, value.translateY); alignByte(); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ABCPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/ABCPanel.java new file mode 100644 index 000000000..c91cab24a --- /dev/null +++ b/trunk/src/com/jpexs/asdec/abc/gui/ABCPanel.java @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2010-2011 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.asdec.abc.gui; + +import com.jpexs.asdec.Configuration; +import com.jpexs.asdec.Main; +import com.jpexs.asdec.abc.ABC; +import com.jpexs.asdec.abc.gui.tablemodels.*; +import com.jpexs.asdec.gui.LoadingPanel; +import com.jpexs.asdec.gui.View; +import com.jpexs.asdec.tags.DoABCTag; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.*; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.*; +import javax.swing.border.BevelBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.*; +import jsyntaxpane.DefaultSyntaxKit; + +public class ABCPanel extends JPanel implements ItemListener, ActionListener { + + public TraitsList navigator; + public ClassesListTree classTree; + public ABC abc; + public List list; + public JComboBox abcComboBox; + public int listIndex = 0; + public DecompiledEditorPane decompiledTextArea; + public JScrollPane decompiledScrollPane; + public JSplitPane splitPaneDecompiledVSDetail; + public JSplitPane splitPaneTreeVSNavigator; + public JSplitPane splitPaneTreeNavVSDecompiledDetail; + private JTable constantTable; + public JComboBox constantTypeList; + + + public JLabel asmLabel = new JLabel("P-code source (editable)"); + public JLabel decLabel = new JLabel("ActionScript source"); + public DetailPanel detailPanel; + public JTextField filterField = new JTextField(""); + + + + private JTable autoResizeColWidth(JTable table, TableModel model) { + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + table.setModel(model); + + int margin = 5; + + for (int i = 0; i < table.getColumnCount(); i++) { + int vColIndex = i; + DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); + TableColumn col = colModel.getColumn(vColIndex); + int width; + + // Get width of column header + TableCellRenderer renderer = col.getHeaderRenderer(); + + if (renderer == null) { + renderer = table.getTableHeader().getDefaultRenderer(); + } + + Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0); + + width = comp.getPreferredSize().width; + + // Get maximum width of column data + for (int r = 0; r < table.getRowCount(); r++) { + renderer = table.getCellRenderer(r, vColIndex); + comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false, + r, vColIndex); + width = Math.max(width, comp.getPreferredSize().width); + } + + // Add margin + width += 2 * margin; + + // Set the width + col.setPreferredWidth(width); + } + + ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment( + SwingConstants.LEFT); + + // table.setAutoCreateRowSorter(true); + table.getTableHeader().setReorderingAllowed(false); + + return table; + } + + public void setAbc(ABC abc) { + this.abc = abc; + updateConstList(); + } + + public void updateConstList() { + switch (constantTypeList.getSelectedIndex()) { + case 0: + autoResizeColWidth(constantTable, new UIntTableModel(abc)); + break; + case 1: + autoResizeColWidth(constantTable, new IntTableModel(abc)); + break; + case 2: + autoResizeColWidth(constantTable, new DoubleTableModel(abc)); + break; + case 3: + autoResizeColWidth(constantTable, new DecimalTableModel(abc)); + break; + case 4: + autoResizeColWidth(constantTable, new StringTableModel(abc)); + break; + case 5: + autoResizeColWidth(constantTable, new NamespaceTableModel(abc)); + break; + case 6: + autoResizeColWidth(constantTable, new NamespaceSetTableModel(abc)); + break; + case 7: + autoResizeColWidth(constantTable, new MultinameTableModel(abc)); + break; + } + //DefaultTableColumnModel colModel = (DefaultTableColumnModel) constantTable.getColumnModel(); + //colModel.getColumn(0).setMaxWidth(50); + } + + public void switchAbc(int index) { + listIndex = index; + if (index == -1) { + classTree.setDoABCTags(list); + } else { + List oneList = new ArrayList(); + oneList.add(list.get(index)); + this.abc = list.get(index).abc; + classTree.setDoABCTags(oneList); + } + updateConstList(); + } + + public void initSplits(){ + splitPaneDecompiledVSDetail.setDividerLocation(getWidth()*1/3); + splitPaneTreeVSNavigator.setDividerLocation(getHeight()/2); + splitPaneTreeNavVSDecompiledDetail.setDividerLocation(getWidth()*1/3); + } + + public ABCPanel(List list) { + + + DefaultSyntaxKit.initKit(); + + this.list = list; + if(list.size()>0){ + this.abc = list.get(listIndex).abc; + } + setLayout(new BorderLayout()); + + + + + + decompiledTextArea = new DecompiledEditorPane(); + + decompiledScrollPane = new JScrollPane(decompiledTextArea); + + detailPanel = new DetailPanel(); + JPanel panB = new JPanel(); + panB.setLayout(new BorderLayout()); + panB.add(decompiledScrollPane, BorderLayout.CENTER); + panB.add(decLabel, BorderLayout.NORTH); + decLabel.setHorizontalAlignment(SwingConstants.CENTER); + decLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); + splitPaneDecompiledVSDetail = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, + panB, detailPanel); + decompiledTextArea.setContentType("text/actionscript"); + + JPanel pan2 = new JPanel(); + pan2.setLayout(new BorderLayout()); + pan2.add((abcComboBox = new JComboBox(new ABCComboBoxModel(list))), BorderLayout.NORTH); + + navigator = new TraitsList(); + navigator.setABC(list, abc); + + + JPanel navPanel = new JPanel(new BorderLayout()); + JLabel traitsLabel = new JLabel("Traits"); + navPanel.add(traitsLabel, BorderLayout.NORTH); + + traitsLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); + navPanel.add(new JScrollPane(navigator), BorderLayout.CENTER); + + Main.startWork("Building script tree..."); + + filterField.setActionCommand("FILTERSCRIPT"); + filterField.addActionListener(this); + + + filterField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void changedUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + warn(); + } + + public void warn() { + doFilter(); + } + }); + + JPanel treePanel = new JPanel(); + treePanel.setLayout(new BorderLayout()); + treePanel.add(new JScrollPane(classTree = new ClassesListTree(list)), BorderLayout.CENTER); + JPanel searchPanel = new JPanel(); + searchPanel.setLayout(new BorderLayout()); + searchPanel.add(filterField, BorderLayout.CENTER); + JLabel picLabel = new JLabel(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/search.png"))); + searchPanel.add(picLabel, BorderLayout.EAST); + treePanel.add(searchPanel, BorderLayout.NORTH); + + splitPaneTreeVSNavigator = new JSplitPane(JSplitPane.VERTICAL_SPLIT, + treePanel, + navPanel); + Main.startWork("Creating window..."); + JTabbedPane tabbedPane = new JTabbedPane(); + tabbedPane.addTab("Scripts", splitPaneTreeVSNavigator); + + pan2.add(tabbedPane, BorderLayout.CENTER); + abcComboBox.addItemListener(this); + + + splitPaneTreeNavVSDecompiledDetail = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, + pan2, + splitPaneDecompiledVSDetail); + + + //pan2.setPreferredSize(new Dimension(300, 200)); + + + + + + add(splitPaneTreeNavVSDecompiledDetail, BorderLayout.CENTER); + + + JPanel panConstants = new JPanel(); + panConstants.setLayout(new BorderLayout()); + constantTypeList = new JComboBox(new String[]{"UINT", "INT", "DOUBLE", "DECIMAL", "STRING", "NAMESPACE", "NAMESPACESET", "MULTINAME"}); + constantTable = new JTable(); + if(abc!=null){ + autoResizeColWidth(constantTable, new UIntTableModel(abc)); + } + constantTable.setAutoCreateRowSorter(true); + + final List inlist = list; + + constantTable.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) { + if (constantTypeList.getSelectedIndex() == 7) { //MULTINAME + int rowIndex = constantTable.getSelectedRow(); + if (rowIndex == -1) { + return; + } + int multinameIndex = constantTable.convertRowIndexToModel(rowIndex); + if (multinameIndex > 0) { + UsageFrame usageFrame = new UsageFrame(inlist, abc, multinameIndex); + usageFrame.setVisible(true); + } + } + } + } + }); + constantTypeList.addItemListener(this); + panConstants.add(constantTypeList, BorderLayout.NORTH); + panConstants.add(new JScrollPane(constantTable), BorderLayout.CENTER); + tabbedPane.addTab("Constants", panConstants); + + + } + + public void doFilter() { + classTree.applyFilter(filterField.getText()); + } + + + + public void reload() { + switchAbc(listIndex - 1); + } + + public void itemStateChanged(ItemEvent e) { + if (e.getSource() == abcComboBox) { + int index = ((JComboBox) e.getSource()).getSelectedIndex(); + if (index == -1) { + return; + } + switchAbc(index - 1); + } + if (e.getSource() == constantTypeList) { + int index = ((JComboBox) e.getSource()).getSelectedIndex(); + if (index == -1) { + return; + } + updateConstList(); + } + } + + public void display() { + setVisible(true); + splitPaneTreeVSNavigator.setDividerLocation(0.5); + splitPaneDecompiledVSDetail.setDividerLocation(0.5); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("FILTERSCRIPT")) { + doFilter(); + } + } +} diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java index 45dbccbfe..ce70972ef 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/ClassesListTree.java @@ -138,12 +138,12 @@ public class ClassesListTree extends JTree implements TreeSelectionListener { break; } } - Main.abcMainFrame.navigator.setABC(abcList, scriptLeaf.abc); - Main.abcMainFrame.navigator.setClassIndex(classIndex); - Main.abcMainFrame.setAbc(scriptLeaf.abc); - Main.abcMainFrame.decompiledTextArea.setScript(scriptLeaf.abc.script_info[scriptLeaf.scriptIndex], scriptLeaf.abc, abcList); - Main.abcMainFrame.decompiledTextArea.setClassIndex(classIndex); - Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText(""); + Main.mainFrame.abcPanel.navigator.setABC(abcList, scriptLeaf.abc); + Main.mainFrame.abcPanel.navigator.setClassIndex(classIndex); + Main.mainFrame.abcPanel.setAbc(scriptLeaf.abc); + Main.mainFrame.abcPanel.decompiledTextArea.setScript(scriptLeaf.abc.script_info[scriptLeaf.scriptIndex], scriptLeaf.abc, abcList); + Main.mainFrame.abcPanel.decompiledTextArea.setClassIndex(classIndex); + Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setText(""); Main.stopWork(); } }).start(); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java index 1d824744a..e2735d49e 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/DecompiledEditorPane.java @@ -43,7 +43,7 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL public int lastTraitIndex = 0; public void setNoTrait() { - Main.abcMainFrame.detailPanel.showCard(DetailPanel.UNSUPPORTED_TRAIT_CARD); + Main.mainFrame.abcPanel.detailPanel.showCard(DetailPanel.UNSUPPORTED_TRAIT_CARD); } public void setClassIndex(int classIndex) { @@ -55,17 +55,17 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL if (bi == -1) { return false; } - Main.abcMainFrame.detailPanel.showCard(DetailPanel.METHOD_TRAIT_CARD); - if (Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.bodyIndex != bi) { - Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setBodyIndex(bi, abc); - Main.abcMainFrame.detailPanel.methodTraitPanel.methodBodyParamsPanel.loadFromBody(abc.bodies[bi]); - Main.abcMainFrame.detailPanel.methodTraitPanel.methodInfoPanel.load(abc.bodies[bi].method_info, abc); + Main.mainFrame.abcPanel.detailPanel.showCard(DetailPanel.METHOD_TRAIT_CARD); + if (Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.bodyIndex != bi) { + Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.setBodyIndex(bi, abc); + Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodBodyParamsPanel.loadFromBody(abc.bodies[bi]); + Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodInfoPanel.load(abc.bodies[bi].method_info, abc); } boolean success = false; for (Highlighting h : highlights) { if ((pos >= h.startPos) && (pos < h.startPos + h.len)) { try { - Main.abcMainFrame.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.selectInstruction(abc.bodies[bi].code.adr2pos(h.offset)); + Main.mainFrame.abcPanel.detailPanel.methodTraitPanel.methodCodePanel.sourceTextArea.selectInstruction(abc.bodies[bi].code.adr2pos(h.offset)); } catch (ConvertException ex) { } @@ -77,8 +77,8 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL } public void displayClass(int classIndex) { - if (Main.abcMainFrame.navigator.getClassIndex() != classIndex) { - Main.abcMainFrame.navigator.setClassIndex(classIndex); + if (Main.mainFrame.abcPanel.navigator.getClassIndex() != classIndex) { + Main.mainFrame.abcPanel.navigator.setClassIndex(classIndex); } } private int classIndex = -1; @@ -112,8 +112,8 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements MouseL Trait tr = abc.findTraitByTraitId(classIndex, (int) th.offset); if (tr != null) { if (tr instanceof TraitSlotConst) { - Main.abcMainFrame.detailPanel.slotConstTraitPanel.load((TraitSlotConst) tr, abc); - Main.abcMainFrame.detailPanel.showCard(DetailPanel.SLOT_CONST_TRAIT_CARD); + Main.mainFrame.abcPanel.detailPanel.slotConstTraitPanel.load((TraitSlotConst) tr, abc); + Main.mainFrame.abcPanel.detailPanel.showCard(DetailPanel.SLOT_CONST_TRAIT_CARD); return; } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/DetailPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/DetailPanel.java index 1eb3bc780..337ddf136 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/DetailPanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/DetailPanel.java @@ -97,9 +97,9 @@ public class DetailPanel extends JPanel implements ActionListener { if (e.getActionCommand().equals("SAVEDETAIL")) { if (cardMap.get(selectedCard) instanceof TraitDetail) { if (((TraitDetail) cardMap.get(selectedCard)).save()) { - int lasttrait = Main.abcMainFrame.decompiledTextArea.lastTraitIndex; - Main.abcMainFrame.decompiledTextArea.reloadClass(); - Main.abcMainFrame.decompiledTextArea.gotoTrait(lasttrait); + int lasttrait = Main.mainFrame.abcPanel.decompiledTextArea.lastTraitIndex; + Main.mainFrame.abcPanel.decompiledTextArea.reloadClass(); + Main.mainFrame.abcPanel.decompiledTextArea.gotoTrait(lasttrait); JOptionPane.showMessageDialog(this, "Trait Successfully saved"); } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java deleted file mode 100644 index ec8b74809..000000000 --- a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java +++ /dev/null @@ -1,580 +0,0 @@ -/* - * Copyright (C) 2010-2011 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.asdec.abc.gui; - -import com.jpexs.asdec.Configuration; -import com.jpexs.asdec.Main; -import com.jpexs.asdec.abc.ABC; -import com.jpexs.asdec.abc.gui.tablemodels.*; -import com.jpexs.asdec.gui.LoadingPanel; -import com.jpexs.asdec.gui.View; -import com.jpexs.asdec.tags.DoABCTag; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.event.*; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.table.*; -import jsyntaxpane.DefaultSyntaxKit; - -public class MainFrame extends JFrame implements ActionListener, ItemListener { - - public TraitsList navigator; - public ClassesListTree classTree; - public ABC abc; - public List list; - public JComboBox abcComboBox; - public int listIndex = 0; - public DecompiledEditorPane decompiledTextArea; - public JScrollPane decompiledScrollPane; - public JSplitPane splitPane1; - public JSplitPane splitPane2; - public JSplitPane splitPane3; - //private ConstantsListModel constantListModel; - private JTable constantTable; - //private JList constantsList; - public JComboBox constantTypeList; - public JPanel statusPanel = new JPanel(); - public LoadingPanel loadingPanel = new LoadingPanel(20, 20); - public JLabel statusLabel = new JLabel(""); - public JLabel asmLabel = new JLabel("P-code source (editable)"); - public JLabel decLabel = new JLabel("ActionScript source"); - public DetailPanel detailPanel; - public JTextField filterField = new JTextField(""); - - public void setStatus(String s) { - if (s.equals("")) { - loadingPanel.setVisible(false); - } else { - loadingPanel.setVisible(true); - } - statusLabel.setText(s); - } - - private JTable autoResizeColWidth(JTable table, TableModel model) { - table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); - table.setModel(model); - - int margin = 5; - - for (int i = 0; i < table.getColumnCount(); i++) { - int vColIndex = i; - DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); - TableColumn col = colModel.getColumn(vColIndex); - int width; - - // Get width of column header - TableCellRenderer renderer = col.getHeaderRenderer(); - - if (renderer == null) { - renderer = table.getTableHeader().getDefaultRenderer(); - } - - Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0); - - width = comp.getPreferredSize().width; - - // Get maximum width of column data - for (int r = 0; r < table.getRowCount(); r++) { - renderer = table.getCellRenderer(r, vColIndex); - comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, vColIndex), false, false, - r, vColIndex); - width = Math.max(width, comp.getPreferredSize().width); - } - - // Add margin - width += 2 * margin; - - // Set the width - col.setPreferredWidth(width); - } - - ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment( - SwingConstants.LEFT); - - // table.setAutoCreateRowSorter(true); - table.getTableHeader().setReorderingAllowed(false); - - return table; - } - - public void setAbc(ABC abc) { - this.abc = abc; - updateConstList(); - } - - public void updateConstList() { - switch (constantTypeList.getSelectedIndex()) { - case 0: - autoResizeColWidth(constantTable, new UIntTableModel(abc)); - break; - case 1: - autoResizeColWidth(constantTable, new IntTableModel(abc)); - break; - case 2: - autoResizeColWidth(constantTable, new DoubleTableModel(abc)); - break; - case 3: - autoResizeColWidth(constantTable, new DecimalTableModel(abc)); - break; - case 4: - autoResizeColWidth(constantTable, new StringTableModel(abc)); - break; - case 5: - autoResizeColWidth(constantTable, new NamespaceTableModel(abc)); - break; - case 6: - autoResizeColWidth(constantTable, new NamespaceSetTableModel(abc)); - break; - case 7: - autoResizeColWidth(constantTable, new MultinameTableModel(abc)); - break; - } - //DefaultTableColumnModel colModel = (DefaultTableColumnModel) constantTable.getColumnModel(); - //colModel.getColumn(0).setMaxWidth(50); - } - - public void switchAbc(int index) { - listIndex = index; - if (index == -1) { - classTree.setDoABCTags(list); - } else { - List oneList = new ArrayList(); - oneList.add(list.get(index)); - this.abc = list.get(index).abc; - classTree.setDoABCTags(oneList); - } - //decompiledTextArea.setABC(abc); - //navigator.setABC(abc); - //constantTypeList = new JComboBox(new String[]{"UINT", "INT", "DOUBLE", "STRING", "NAMESPACE", "NAMESPACESET", "MULTINAME"}); - updateConstList(); - } - - public MainFrame(List list) { - - View.setWindowIcon(this); - - DefaultSyntaxKit.initKit(); - - this.list = list; - setSize(1024, 600); - this.abc = list.get(listIndex).abc; - getContentPane().setLayout(new BorderLayout()); - - - - - - - - decompiledTextArea = new DecompiledEditorPane(); - - decompiledScrollPane = new JScrollPane(decompiledTextArea); - - detailPanel = new DetailPanel(); - JPanel panB = new JPanel(); - panB.setLayout(new BorderLayout()); - panB.add(decompiledScrollPane, BorderLayout.CENTER); - panB.add(decLabel, BorderLayout.NORTH); - decLabel.setHorizontalAlignment(SwingConstants.CENTER); - decLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); - splitPane1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, - panB, detailPanel); - decompiledTextArea.setContentType("text/actionscript"); - - JPanel pan2 = new JPanel(); - pan2.setLayout(new BorderLayout()); - pan2.add((abcComboBox = new JComboBox(new ABCComboBoxModel(list))), BorderLayout.NORTH); - - navigator = new TraitsList(); - navigator.setABC(list, abc); - - - JPanel navPanel = new JPanel(new BorderLayout()); - JLabel traitsLabel = new JLabel("Traits"); - navPanel.add(traitsLabel, BorderLayout.NORTH); - - traitsLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); - navPanel.add(new JScrollPane(navigator), BorderLayout.CENTER); - - Main.startWork("Building script tree..."); - - filterField.setActionCommand("FILTERSCRIPT"); - filterField.addActionListener(this); - - - filterField.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void changedUpdate(DocumentEvent e) { - warn(); - } - - @Override - public void removeUpdate(DocumentEvent e) { - warn(); - } - - @Override - public void insertUpdate(DocumentEvent e) { - warn(); - } - - public void warn() { - doFilter(); - } - }); - - JPanel treePanel = new JPanel(); - treePanel.setLayout(new BorderLayout()); - treePanel.add(new JScrollPane(classTree = new ClassesListTree(list)), BorderLayout.CENTER); - JPanel searchPanel = new JPanel(); - searchPanel.setLayout(new BorderLayout()); - searchPanel.add(filterField, BorderLayout.CENTER); - JLabel picLabel = new JLabel(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/search.png"))); - searchPanel.add(picLabel, BorderLayout.EAST); - treePanel.add(searchPanel, BorderLayout.NORTH); - - splitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, - treePanel, - navPanel); - Main.startWork("Creating window..."); - JTabbedPane tabbedPane = new JTabbedPane(); - tabbedPane.addTab("Scripts", splitPane2); - - pan2.add(tabbedPane, BorderLayout.CENTER); - abcComboBox.addItemListener(this); - - - splitPane3 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, - pan2, - splitPane1); - - pan2.setPreferredSize(new Dimension(300, 200)); - - - loadingPanel.setPreferredSize(new Dimension(30, 30)); - statusPanel = new JPanel(); - statusPanel.setPreferredSize(new Dimension(1, 30)); - statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED)); - statusPanel.setLayout(new BorderLayout()); - statusPanel.add(loadingPanel, BorderLayout.WEST); - statusPanel.add(statusLabel, BorderLayout.CENTER); - loadingPanel.setVisible(false); - - - getContentPane().add(splitPane3, BorderLayout.CENTER); - getContentPane().add(statusPanel, BorderLayout.SOUTH); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - if (Main.proxyFrame != null) { - if (Main.proxyFrame.isVisible()) { - return; - } - } - Main.exit(); - } - }); - setTitle(Main.applicationName + " - " + Main.getFileTitle()); - - JMenuBar menuBar = new JMenuBar(); - - JMenu menuFile = new JMenu("File"); - JMenuItem miOpen = new JMenuItem("Open..."); - miOpen.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/open16.png"))); - miOpen.setActionCommand("OPEN"); - miOpen.addActionListener(this); - JMenuItem miSave = new JMenuItem("Save"); - miSave.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); - miSave.setActionCommand("SAVE"); - miSave.addActionListener(this); - JMenuItem miSaveAs = new JMenuItem("Save as..."); - miSaveAs.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); - miSaveAs.setActionCommand("SAVEAS"); - miSaveAs.addActionListener(this); - JMenu menuExportAll = new JMenu("Export all"); - JMenuItem miExportAllAS = new JMenuItem("ActionScript..."); - miExportAllAS.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportas16.png"))); - miExportAllAS.setActionCommand("EXPORT"); - miExportAllAS.addActionListener(this); - - JMenuItem miExportAllPCode = new JMenuItem("PCode..."); - miExportAllPCode.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportpc16.png"))); - miExportAllPCode.setActionCommand("EXPORTPCODE"); - miExportAllPCode.addActionListener(this); - - menuExportAll.add(miExportAllAS); - menuExportAll.add(miExportAllPCode); - - - JMenu menuExportSel = new JMenu("Export selection"); - JMenuItem miExportSelAS = new JMenuItem("ActionScript..."); - miExportSelAS.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportas16.png"))); - miExportSelAS.setActionCommand("EXPORTSEL"); - miExportSelAS.addActionListener(this); - - JMenuItem miExportSelPCode = new JMenuItem("PCode..."); - miExportSelPCode.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportpc16.png"))); - miExportSelPCode.setActionCommand("EXPORTPCODESEL"); - miExportSelPCode.addActionListener(this); - - menuExportSel.add(miExportSelAS); - menuExportSel.add(miExportSelPCode); - - - menuFile.add(miOpen); - menuFile.add(miSave); - menuFile.add(miSaveAs); - menuFile.add(menuExportAll); - menuFile.add(menuExportSel); - menuFile.addSeparator(); - JMenuItem miClose = new JMenuItem("Exit"); - miClose.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exit16.png"))); - miClose.setActionCommand("EXIT"); - miClose.addActionListener(this); - menuFile.add(miClose); - menuBar.add(menuFile); - - JMenu menuDeobfuscation = new JMenu("Deobfuscation"); - JCheckBoxMenuItem miSubLimiter = new JCheckBoxMenuItem("Enable sub limiter"); - miSubLimiter.setActionCommand("SUBLIMITER"); - miSubLimiter.addActionListener(this); - - JMenuItem miRenameIdentifiers = new JMenuItem("Rename identifiers"); - miRenameIdentifiers.setActionCommand("RENAMEIDENTIFIERS"); - miRenameIdentifiers.addActionListener(this); - - - menuDeobfuscation.add(miSubLimiter); - menuDeobfuscation.add(miRenameIdentifiers); - - - //menuBar.add(menuOptions); - - JMenu menuTools = new JMenu("Tools"); - JMenuItem miProxy = new JMenuItem("Proxy"); - miProxy.setActionCommand("SHOWPROXY"); - miProxy.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/proxy16.png"))); - miProxy.addActionListener(this); - menuTools.add(miProxy); - - menuTools.add(menuDeobfuscation); - menuBar.add(menuTools); - - JMenu menuHelp = new JMenu("Help"); - JMenuItem miAbout = new JMenuItem("About..."); - miAbout.setActionCommand("ABOUT"); - miAbout.addActionListener(this); - - JMenuItem miCheckUpdates = new JMenuItem("Check for updates..."); - miCheckUpdates.setActionCommand("CHECKUPDATES"); - miCheckUpdates.addActionListener(this); - menuHelp.add(miAbout); - menuHelp.add(miCheckUpdates); - menuBar.add(menuHelp); - - setJMenuBar(menuBar); - - - JPanel panConstants = new JPanel(); - panConstants.setLayout(new BorderLayout()); - constantTypeList = new JComboBox(new String[]{"UINT", "INT", "DOUBLE", "DECIMAL", "STRING", "NAMESPACE", "NAMESPACESET", "MULTINAME"}); - constantTable = new JTable(); - autoResizeColWidth(constantTable, new UIntTableModel(abc)); - constantTable.setAutoCreateRowSorter(true); - - final List inlist = list; - - constantTable.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { - if (constantTypeList.getSelectedIndex() == 7) { //MULTINAME - int rowIndex = constantTable.getSelectedRow(); - if (rowIndex == -1) { - return; - } - int multinameIndex = constantTable.convertRowIndexToModel(rowIndex); - if (multinameIndex > 0) { - UsageFrame usageFrame = new UsageFrame(inlist, abc, multinameIndex); - usageFrame.setVisible(true); - } - } - } - } - }); - constantTypeList.addItemListener(this); - panConstants.add(constantTypeList, BorderLayout.NORTH); - panConstants.add(new JScrollPane(constantTable), BorderLayout.CENTER); - tabbedPane.addTab("Constants", panConstants); - View.centerScreen(this); - Main.stopWork(); - - } - - private void doFilter() { - classTree.applyFilter(filterField.getText()); - } - - public void actionPerformed(ActionEvent e) { - - if (e.getActionCommand().equals("FILTERSCRIPT")) { - doFilter(); - } - - if (e.getActionCommand().equals("EXIT")) { - setVisible(false); - if (Main.proxyFrame != null) { - if (Main.proxyFrame.isVisible()) { - return; - } - } - Main.exit(); - } - if (Main.isWorking()) { - return; - } - - if (e.getActionCommand().equals("ABOUT")) { - Main.about(); - } - - - if (e.getActionCommand().equals("SHOWPROXY")) { - Main.showProxy(); - } - - if (e.getActionCommand().equals("SUBLIMITER")) { - if (e.getSource() instanceof JCheckBoxMenuItem) { - Main.setSubLimiter(((JCheckBoxMenuItem) e.getSource()).getState()); - } - - } - - if (e.getActionCommand().equals("SAVE")) { - try { - Main.saveFile(Main.file); - } catch (IOException ex) { - Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); - JOptionPane.showMessageDialog(null, "Cannot save file", "Error", JOptionPane.ERROR_MESSAGE); - } - } - if (e.getActionCommand().equals("SAVEAS")) { - if (Main.saveFileDialog()) { - setTitle(Main.applicationName + " - " + Main.getFileTitle()); - } - } - if (e.getActionCommand().equals("OPEN")) { - Main.openFileDialog(); - - } - - if (e.getActionCommand().startsWith("EXPORT")) { - JFileChooser chooser = new JFileChooser(); - chooser.setCurrentDirectory(new java.io.File((String) Configuration.getConfig("lastExportDir", "."))); - chooser.setDialogTitle("Select directory to export"); - chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - chooser.setAcceptAllFileFilterUsed(false); - if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - Main.startWork("Exporting..."); - final String selFile = chooser.getSelectedFile().getAbsolutePath(); - Configuration.setConfig("lastExportDir", chooser.getSelectedFile().getParentFile().getAbsolutePath()); - final boolean isPcode = e.getActionCommand().startsWith("EXPORTPCODE"); - final boolean onlySel = e.getActionCommand().endsWith("SEL"); - (new Thread() { - @Override - public void run() { - try { - if (onlySel) { - List tlsList = classTree.getSelectedScripts(); - if (tlsList.isEmpty()) { - JOptionPane.showMessageDialog(null, "No script selected!"); - } - for (int i = 0; i < tlsList.size(); i++) { - TreeLeafScript tls = tlsList.get(i); - Main.startWork("Exporting " + (i + 1) + "/" + tlsList.size() + " " + tls.abc.script_info[tls.scriptIndex].getPath(tls.abc) + " ..."); - tls.abc.script_info[tls.scriptIndex].export(tls.abc, list, selFile, isPcode); - } - } else { - Main.swf.exportActionScript(selFile, isPcode); - } - } catch (Exception ignored) { - JOptionPane.showMessageDialog(null, "Cannot write to the file"); - } - Main.stopWork(); - } - }).start(); - - } - - } - - if (e.getActionCommand().equals("CHECKUPDATES")) { - if (!Main.checkForUpdates()) { - JOptionPane.showMessageDialog(null, "No new version available."); - } - } - if (e.getActionCommand().equals("RENAMEIDENTIFIERS")) { - if (JOptionPane.showConfirmDialog(null, "Following procedure can damage SWF file which can be then unplayable.\r\nUSE IT ON YOUR OWN RISK. Do you want to continue?", "Warning", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.OK_OPTION) { - int pocet = 0; - Main.startWork("Renaming identifiers..."); - for (DoABCTag tag : list) { - pocet += tag.abc.deobfuscateIdentifiers(); - } - JOptionPane.showMessageDialog(null, "Identifiers renamed: " + pocet); - reload(); - Main.stopWork(); - } - } - - } - - public void reload() { - switchAbc(listIndex - 1); - } - - public void itemStateChanged(ItemEvent e) { - if (e.getSource() == abcComboBox) { - int index = ((JComboBox) e.getSource()).getSelectedIndex(); - if (index == -1) { - return; - } - switchAbc(index - 1); - } - if (e.getSource() == constantTypeList) { - int index = ((JComboBox) e.getSource()).getSelectedIndex(); - if (index == -1) { - return; - } - updateConstList(); - } - } - - public void display() { - setVisible(true); - splitPane2.setDividerLocation(0.5); - splitPane1.setDividerLocation(0.5); - } -} diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java index b8953b094..c41da3c82 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodBodyParamsPanel.java @@ -100,7 +100,7 @@ public class MethodBodyParamsPanel extends JPanel implements ChangeListener { body.max_regs = Integer.parseInt(localCountField.getText()); body.max_scope_depth = Integer.parseInt(maxScopeDepthField.getText()); } else { - if (!body.autoFillStats(Main.abcMainFrame.abc)) { + if (!body.autoFillStats(Main.mainFrame.abcPanel.abc)) { JOptionPane.showMessageDialog(null, "Cannot get code stats for automatic body params.\r\nUncheck autofill to avoid this message.", "Warning", JOptionPane.WARNING_MESSAGE); } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodCodePanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodCodePanel.java index 9aff5ca93..efe608ca2 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MethodCodePanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodCodePanel.java @@ -74,7 +74,7 @@ public class MethodCodePanel extends JPanel implements ActionListener { sourceTextArea.exec(); } if (e.getActionCommand().equals("VERIFYBODY")) { - sourceTextArea.verify(Main.abcMainFrame.abc.constants, Main.abcMainFrame.abc); + sourceTextArea.verify(Main.mainFrame.abcPanel.abc.constants, Main.mainFrame.abcPanel.abc); } } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java b/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java index 713824ad6..df30ebea0 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MethodTraitDetailPanel.java @@ -44,7 +44,7 @@ public class MethodTraitDetailPanel extends JTabbedPane implements TraitDetail { if (!methodInfoPanel.save()) { return false; } - if (!methodCodePanel.sourceTextArea.save(Main.abcMainFrame.abc.constants)) { + if (!methodCodePanel.sourceTextArea.save(Main.mainFrame.abcPanel.abc.constants)) { return false; } if (!methodBodyParamsPanel.save()) { diff --git a/trunk/src/com/jpexs/asdec/abc/gui/TraitsList.java b/trunk/src/com/jpexs/asdec/abc/gui/TraitsList.java index 343295a22..63f99e628 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/TraitsList.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/TraitsList.java @@ -62,7 +62,7 @@ public class TraitsList extends JList implements ListSelectionListener { int index = getSelectedIndex(); - Main.abcMainFrame.decompiledTextArea.gotoTrait(index); + Main.mainFrame.abcPanel.decompiledTextArea.gotoTrait(index); } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/UsageFrame.java b/trunk/src/com/jpexs/asdec/abc/gui/UsageFrame.java index 44650743f..092931286 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/UsageFrame.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/UsageFrame.java @@ -79,7 +79,7 @@ public class UsageFrame extends JFrame implements ActionListener, MouseListener MultinameUsage usage = usageListModel.getUsage(usageList.getSelectedIndex()); if (usage instanceof InsideClassMultinameUsage) { InsideClassMultinameUsage icu = (InsideClassMultinameUsage) usage; - Main.abcMainFrame.classTree.selectClass(icu.classIndex); + Main.mainFrame.abcPanel.classTree.selectClass(icu.classIndex); try { Thread.sleep(100); } catch (InterruptedException ex) { @@ -101,7 +101,7 @@ public class UsageFrame extends JFrame implements ActionListener, MouseListener traitIndex = abc.class_info[mmu.classIndex].static_traits.traits.length + abc.instance_info[mmu.classIndex].instance_traits.traits.length + (mmu.isStatic ? 1 : 0); } } - Main.abcMainFrame.decompiledTextArea.gotoTrait(traitIndex); + Main.mainFrame.abcPanel.decompiledTextArea.gotoTrait(traitIndex); } } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DecimalTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DecimalTableModel.java index ce24b60ba..99484fff2 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DecimalTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DecimalTableModel.java @@ -40,6 +40,9 @@ public class DecimalTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_decimal.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DoubleTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DoubleTableModel.java index a5670ad20..d6d5421c3 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DoubleTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/DoubleTableModel.java @@ -40,6 +40,9 @@ public class DoubleTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_double.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/IntTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/IntTableModel.java index d24cfd31f..18e892bd8 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/IntTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/IntTableModel.java @@ -40,6 +40,9 @@ public class IntTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_int.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/MultinameTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/MultinameTableModel.java index 48547477d..d321f216a 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/MultinameTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/MultinameTableModel.java @@ -41,6 +41,9 @@ public class MultinameTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_multiname.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceSetTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceSetTableModel.java index a225b5ff6..e2475b96b 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceSetTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceSetTableModel.java @@ -40,6 +40,9 @@ public class NamespaceSetTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_namespace_set.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceTableModel.java index 45b9d237c..e74b4145a 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/NamespaceTableModel.java @@ -40,6 +40,9 @@ public class NamespaceTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_namespace.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/StringTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/StringTableModel.java index 71e41da79..6348897b5 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/StringTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/StringTableModel.java @@ -40,6 +40,9 @@ public class StringTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_string.length; } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/UIntTableModel.java b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/UIntTableModel.java index bc4c91860..2078be2ee 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/UIntTableModel.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/tablemodels/UIntTableModel.java @@ -40,6 +40,9 @@ public class UIntTableModel implements TableModel { * @see #getColumnCount */ public int getRowCount() { + if(abc==null){ + return 0; + } return abc.constants.constant_uint.length; } diff --git a/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java b/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java new file mode 100644 index 000000000..982a1600c --- /dev/null +++ b/trunk/src/com/jpexs/asdec/action/gui/ActionPanel.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2010-2011 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.asdec.action.gui; + +import com.jpexs.asdec.Configuration; +import com.jpexs.asdec.Main; +import com.jpexs.asdec.SWF; +import com.jpexs.asdec.action.TagNode; +import com.jpexs.asdec.action.parser.ASMParser; +import com.jpexs.asdec.action.parser.ParseException; +import com.jpexs.asdec.gui.LoadingPanel; +import com.jpexs.asdec.gui.View; +import com.jpexs.asdec.helpers.Highlighting; +import com.jpexs.asdec.tags.Tag; +import com.jpexs.asdec.tags.base.ASMSource; +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import javax.swing.*; +import javax.swing.border.BevelBorder; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultTreeCellRenderer; +import jsyntaxpane.DefaultSyntaxKit; + +public class ActionPanel extends JPanel implements TreeSelectionListener, ActionListener { + + public JTree tagTree; + public JEditorPane editor; + public JEditorPane decompiledEditor; + public List list; + public JSplitPane splitPane; + public JSplitPane splitPane2; + public JButton saveButton = new JButton("Save"); + public JButton saveHexButton = new JButton("Save hex"); + public JButton loadHexButton = new JButton("Load hex"); + public JLabel asmLabel = new JLabel("P-code source (editable)"); + public JLabel decLabel = new JLabel("ActionScript source"); + + + public ActionPanel(List list) { + this.list = list; + DefaultSyntaxKit.initKit(); + editor = new JEditorPane(); + decompiledEditor = new JEditorPane(); + tagTree = new JTree(new TagTreeModel(list)); + + DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer(); + ClassLoader cldr = this.getClass().getClassLoader(); + java.net.URL imageURL = cldr.getResource("com/jpexs/asdec/action/gui/graphics/class.png"); + ImageIcon leafIcon = new ImageIcon(imageURL); + treeRenderer.setLeafIcon(leafIcon); + tagTree.setCellRenderer(treeRenderer); + + JPanel panB = new JPanel(); + panB.setLayout(new BorderLayout()); + asmLabel.setHorizontalAlignment(SwingConstants.CENTER); + asmLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); + panB.add(asmLabel, BorderLayout.NORTH); + panB.add(new JScrollPane(editor), BorderLayout.CENTER); + + JPanel buttonsPan = new JPanel(); + buttonsPan.setLayout(new FlowLayout()); + buttonsPan.add(saveButton); + //buttonsPan.add(saveHexButton); + //buttonsPan.add(loadHexButton); + panB.add(buttonsPan, BorderLayout.SOUTH); + + saveHexButton.addActionListener(this); + saveHexButton.setActionCommand("SAVEHEXACTION"); + loadHexButton.addActionListener(this); + loadHexButton.setActionCommand("LOADHEXACTION"); + saveButton.addActionListener(this); + saveButton.setActionCommand("SAVEACTION"); + + JPanel panA = new JPanel(); + panA.setLayout(new BorderLayout()); + panA.add(new JScrollPane(decompiledEditor), BorderLayout.CENTER); + panA.add(decLabel, BorderLayout.NORTH); + decLabel.setHorizontalAlignment(SwingConstants.CENTER); + decLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); + + + + + + setLayout(new BorderLayout()); + add(splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tagTree), splitPane2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panA, panB)), BorderLayout.CENTER); + + editor.setContentType("text/flasm"); + decompiledEditor.setContentType("text/actionscript"); + tagTree.addTreeSelectionListener(this); + + } + + public void initSplits(){ + splitPane.setDividerLocation(getWidth()/3); + splitPane2.setDividerLocation(getWidth()/3); + } + + public void valueChanged(TreeSelectionEvent e) { + if (Main.isWorking()) { + return; + } + Object obj = tagTree.getLastSelectedPathComponent(); + if (obj instanceof TagNode) { + obj = ((TagNode) obj).tag; + if (obj instanceof ASMSource) { + Main.startWork("Decompiling..."); + final ASMSource asm = (ASMSource) obj; + (new Thread() { + @Override + public void run() { + editor.setText(asm.getASMSource(SWF.DEFAULT_VERSION)); + if (Main.DO_DECOMPILE) { + List as = asm.getActions(SWF.DEFAULT_VERSION); + com.jpexs.asdec.action.Action.setActionsAddresses(as, 0, SWF.DEFAULT_VERSION); + + decompiledEditor.setText(Highlighting.stripHilights(com.jpexs.asdec.action.Action.actionsToSource(as, SWF.DEFAULT_VERSION))); + } + Main.stopWork(); + } + }).start(); + } + } + } + + public void display() { + setVisible(true); + splitPane.setDividerLocation(0.5); + splitPane2.setDividerLocation(0.5); + } + + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("SAVEACTION")) { + TagNode ti = (TagNode) tagTree.getLastSelectedPathComponent(); + if (ti.tag instanceof ASMSource) { + ASMSource dat = (ASMSource) ti.tag; + try { + dat.setActions(ASMParser.parse(new ByteArrayInputStream(editor.getText().getBytes()), SWF.DEFAULT_VERSION), SWF.DEFAULT_VERSION); + valueChanged(null); + JOptionPane.showMessageDialog(this, "Code successfully saved"); + } catch (IOException ex) { + } catch (ParseException ex) { + JOptionPane.showMessageDialog(this, "" + ex.text + " on line " + ex.line, "Error", JOptionPane.ERROR_MESSAGE); + } + } + } + } + +} diff --git a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java deleted file mode 100644 index 9a9cc1ebc..000000000 --- a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Copyright (C) 2010-2011 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.asdec.action.gui; - -import com.jpexs.asdec.Configuration; -import com.jpexs.asdec.Main; -import com.jpexs.asdec.SWF; -import com.jpexs.asdec.action.TagNode; -import com.jpexs.asdec.action.parser.ASMParser; -import com.jpexs.asdec.action.parser.ParseException; -import com.jpexs.asdec.gui.LoadingPanel; -import com.jpexs.asdec.gui.View; -import com.jpexs.asdec.helpers.Highlighting; -import com.jpexs.asdec.tags.Tag; -import com.jpexs.asdec.tags.base.ASMSource; -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.ByteArrayInputStream; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.List; -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultTreeCellRenderer; -import jsyntaxpane.DefaultSyntaxKit; - -public class MainFrame extends JFrame implements TreeSelectionListener, ActionListener { - - public JTree tagTree; - public JEditorPane editor; - public JEditorPane decompiledEditor; - public List list; - public JSplitPane splitPane; - public JSplitPane splitPane2; - public JButton saveButton = new JButton("Save"); - public JButton saveHexButton = new JButton("Save hex"); - public JButton loadHexButton = new JButton("Load hex"); - public JLabel asmLabel = new JLabel("P-code source (editable)"); - public JLabel decLabel = new JLabel("ActionScript source"); - public JPanel statusPanel = new JPanel(); - public LoadingPanel loadingPanel = new LoadingPanel(20, 20); - public JLabel statusLabel = new JLabel(""); - - public MainFrame(List list) { - this.list = list; - DefaultSyntaxKit.initKit(); - editor = new JEditorPane(); - decompiledEditor = new JEditorPane(); - tagTree = new JTree(new TagTreeModel(list)); - - DefaultTreeCellRenderer treeRenderer = new DefaultTreeCellRenderer(); - ClassLoader cldr = this.getClass().getClassLoader(); - java.net.URL imageURL = cldr.getResource("com/jpexs/asdec/action/gui/graphics/class.png"); - ImageIcon leafIcon = new ImageIcon(imageURL); - treeRenderer.setLeafIcon(leafIcon); - tagTree.setCellRenderer(treeRenderer); - - JPanel panB = new JPanel(); - panB.setLayout(new BorderLayout()); - asmLabel.setHorizontalAlignment(SwingConstants.CENTER); - asmLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); - panB.add(asmLabel, BorderLayout.NORTH); - panB.add(new JScrollPane(editor), BorderLayout.CENTER); - - JPanel buttonsPan = new JPanel(); - buttonsPan.setLayout(new FlowLayout()); - buttonsPan.add(saveButton); - //buttonsPan.add(saveHexButton); - //buttonsPan.add(loadHexButton); - panB.add(buttonsPan, BorderLayout.SOUTH); - - saveHexButton.addActionListener(this); - saveHexButton.setActionCommand("SAVEHEXACTION"); - loadHexButton.addActionListener(this); - loadHexButton.setActionCommand("LOADHEXACTION"); - saveButton.addActionListener(this); - saveButton.setActionCommand("SAVEACTION"); - - JPanel panA = new JPanel(); - panA.setLayout(new BorderLayout()); - panA.add(new JScrollPane(decompiledEditor), BorderLayout.CENTER); - panA.add(decLabel, BorderLayout.NORTH); - decLabel.setHorizontalAlignment(SwingConstants.CENTER); - decLabel.setBorder(new BevelBorder(BevelBorder.RAISED)); - - - - loadingPanel.setPreferredSize(new Dimension(30, 30)); - statusPanel = new JPanel(); - statusPanel.setPreferredSize(new Dimension(1, 30)); - statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED)); - statusPanel.setLayout(new BorderLayout()); - statusPanel.add(loadingPanel, BorderLayout.WEST); - statusPanel.add(statusLabel, BorderLayout.CENTER); - loadingPanel.setVisible(false); - - - Container cont = getContentPane(); - cont.setLayout(new BorderLayout()); - cont.add(splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tagTree), splitPane2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panA, panB)), BorderLayout.CENTER); - cont.add(statusPanel, BorderLayout.SOUTH); - - editor.setContentType("text/flasm"); - decompiledEditor.setContentType("text/actionscript"); - setSize(640, 480); - tagTree.addTreeSelectionListener(this); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - if (Main.proxyFrame != null) { - if (Main.proxyFrame.isVisible()) { - return; - } - } - Main.exit(); - } - }); - View.setWindowIcon(this); - View.centerScreen(this); - - JMenuBar menuBar = new JMenuBar(); - - - JMenu menuFile = new JMenu("File"); - JMenuItem miOpen = new JMenuItem("Open..."); - miOpen.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/open16.png"))); - miOpen.setActionCommand("OPEN"); - miOpen.addActionListener(this); - JMenuItem miSave = new JMenuItem("Save"); - miSave.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); - miSave.setActionCommand("SAVE"); - miSave.addActionListener(this); - JMenuItem miSaveAs = new JMenuItem("Save as..."); - miSaveAs.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); - miSaveAs.setActionCommand("SAVEAS"); - miSaveAs.addActionListener(this); - JMenuItem miExport = new JMenuItem("Export as ActionScript..."); - miExport.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportas16.png"))); - miExport.setActionCommand("EXPORT"); - miExport.addActionListener(this); - - JMenuItem miExportPCode = new JMenuItem("Export as PCode..."); - miExportPCode.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportpc16.png"))); - miExportPCode.setActionCommand("EXPORTPCODE"); - miExportPCode.addActionListener(this); - menuFile.add(miOpen); - menuFile.add(miSave); - menuFile.add(miSaveAs); - menuFile.add(miExport); - menuFile.add(miExportPCode); - menuFile.addSeparator(); - JMenuItem miClose = new JMenuItem("Exit"); - miClose.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exit16.png"))); - miClose.setActionCommand("EXIT"); - miClose.addActionListener(this); - menuFile.add(miClose); - menuBar.add(menuFile); - - JMenu menuTools = new JMenu("Tools"); - JMenuItem miProxy = new JMenuItem("Proxy"); - miProxy.setActionCommand("SHOWPROXY"); - miProxy.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/proxy16.png"))); - miProxy.addActionListener(this); - menuTools.add(miProxy); - menuBar.add(menuTools); - - JMenu menuHelp = new JMenu("Help"); - JMenuItem miAbout = new JMenuItem("About..."); - miAbout.setActionCommand("ABOUT"); - miAbout.addActionListener(this); - - JMenuItem miCheckUpdates = new JMenuItem("Check for updates..."); - miCheckUpdates.setActionCommand("CHECKUPDATES"); - miCheckUpdates.addActionListener(this); - menuHelp.add(miAbout); - menuHelp.add(miCheckUpdates); - menuBar.add(menuHelp); - - setJMenuBar(menuBar); - - setTitle(Main.applicationName + " - " + Main.getFileTitle()); - Main.stopWork(); - } - - public void valueChanged(TreeSelectionEvent e) { - if (Main.isWorking()) { - return; - } - Object obj = tagTree.getLastSelectedPathComponent(); - if (obj instanceof TagNode) { - obj = ((TagNode) obj).tag; - if (obj instanceof ASMSource) { - Main.startWork("Decompiling..."); - final ASMSource asm = (ASMSource) obj; - (new Thread() { - @Override - public void run() { - editor.setText(asm.getASMSource(SWF.DEFAULT_VERSION)); - if (Main.DO_DECOMPILE) { - List as = asm.getActions(SWF.DEFAULT_VERSION); - com.jpexs.asdec.action.Action.setActionsAddresses(as, 0, SWF.DEFAULT_VERSION); - - decompiledEditor.setText(Highlighting.stripHilights(com.jpexs.asdec.action.Action.actionsToSource(as, SWF.DEFAULT_VERSION))); - } - Main.stopWork(); - } - }).start(); - } - } - } - - public void display() { - setVisible(true); - splitPane.setDividerLocation(0.5); - splitPane2.setDividerLocation(0.5); - } - - public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("EXIT")) { - System.exit(0); - } - if (e.getActionCommand().equals("ABOUT")) { - Main.about(); - } - if (e.getActionCommand().equals("SHOWPROXY")) { - Main.showProxy(); - } - if (Main.isWorking()) { - return; - } - - if (e.getActionCommand().equals("SAVEHEXACTION")) { - TagNode ti = (TagNode) tagTree.getLastSelectedPathComponent(); - if (ti.tag instanceof ASMSource) { - ASMSource dat = (ASMSource) ti.tag; - FileOutputStream fos; - try { - fos = new FileOutputStream("out.hex"); - fos.write(dat.getActionBytes()); - fos.close(); - } catch (IOException ex) { - } - - } - } - - if (e.getActionCommand().equals("LOADHEXACTION")) { - TagNode ti = (TagNode) tagTree.getLastSelectedPathComponent(); - if (ti.tag instanceof ASMSource) { - ASMSource dat = (ASMSource) ti.tag; - FileInputStream fis; - try { - fis = new FileInputStream("out.hex"); - byte data[] = new byte[fis.available()]; - dat.setActionBytes(data); - fis.read(data); - fis.close(); - editor.setText(dat.getASMSource(SWF.DEFAULT_VERSION)); - } catch (IOException ex) { - } - - } - } - - if (e.getActionCommand().equals("SAVEACTION")) { - TagNode ti = (TagNode) tagTree.getLastSelectedPathComponent(); - if (ti.tag instanceof ASMSource) { - ASMSource dat = (ASMSource) ti.tag; - try { - dat.setActions(ASMParser.parse(new ByteArrayInputStream(editor.getText().getBytes()), SWF.DEFAULT_VERSION), SWF.DEFAULT_VERSION); - valueChanged(null); - JOptionPane.showMessageDialog(this, "Code successfully saved"); - } catch (IOException ex) { - } catch (ParseException ex) { - JOptionPane.showMessageDialog(this, "" + ex.text + " on line " + ex.line, "Error", JOptionPane.ERROR_MESSAGE); - } - } - } - if (e.getActionCommand().equals("SAVE")) { - try { - Main.saveFile(Main.file); - } catch (IOException ex) { - } - } - if (e.getActionCommand().equals("SAVEAS")) { - if (Main.saveFileDialog()) { - setTitle(Main.applicationName + " - " + Main.getFileTitle()); - } - } - if (e.getActionCommand().equals("OPEN")) { - Main.openFileDialog(); - } - - if (e.getActionCommand().equals("CHECKUPDATES")) { - if (!Main.checkForUpdates()) { - JOptionPane.showMessageDialog(null, "No new version available."); - } - } - - if (e.getActionCommand().equals("EXPORT") || e.getActionCommand().equals("EXPORTPCODE")) { - JFileChooser chooser = new JFileChooser(); - chooser.setCurrentDirectory(new java.io.File((String) Configuration.getConfig("lastExportDir", "."))); - chooser.setDialogTitle("Select directory to export"); - chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - chooser.setAcceptAllFileFilterUsed(false); - if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - Main.startWork("Exporting..."); - final String selFile = chooser.getSelectedFile().getAbsolutePath(); - Configuration.setConfig("lastExportDir", chooser.getSelectedFile().getParentFile().getAbsolutePath()); - final boolean isPcode = e.getActionCommand().equals("EXPORTPCODE"); - (new Thread() { - @Override - public void run() { - try { - Main.swf.exportActionScript(selFile, isPcode); - } catch (Exception ignored) { - JOptionPane.showMessageDialog(null, "Cannot write to the file"); - } - Main.stopWork(); - } - }).start(); - - } - - } - } - - public void setStatus(String s) { - if (s.equals("")) { - loadingPanel.setVisible(false); - } else { - loadingPanel.setVisible(true); - } - statusLabel.setText(s); - } -} diff --git a/trunk/src/com/jpexs/asdec/gui/FlashPanel.java b/trunk/src/com/jpexs/asdec/gui/FlashPanel.java deleted file mode 100644 index 36602fb07..000000000 --- a/trunk/src/com/jpexs/asdec/gui/FlashPanel.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.jpexs.asdec.gui; - -import java.awt.Canvas; -import java.awt.Dimension; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.awt.SWT_AWT; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.ole.win32.OleAutomation; -import org.eclipse.swt.ole.win32.OleClientSite; -import org.eclipse.swt.ole.win32.OleFrame; -import org.eclipse.swt.ole.win32.Variant; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; - -public class FlashPanel extends Canvas { - - private Thread swtThread; - private OleFrame oleFrame; - private OleClientSite clientSite; - private Shell shell; - private int width; - private int height; - - public FlashPanel(int width, int height) { - setPreferredSize(new Dimension(width, height)); - this.width = width; - this.height = height; - } - - private void disposeClient() { - if (clientSite != null) { - clientSite.dispose(); - } - clientSite = null; - } - - public void dispose() { - - oleFrame.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - shell.dispose(); - } - }); - disconnect(); - } - - private void startDisplay() { - if (this.swtThread == null) { - final Canvas canvas = this; - this.swtThread = new Thread() { - @Override - public void run() { - try { - Display display = new Display(); - shell = SWT_AWT.new_Shell(display, canvas); - shell.setLayout(new FillLayout()); - - synchronized (this) { - oleFrame = new OleFrame(shell, SWT.NONE); - clientSite = new OleClientSite(oleFrame, SWT.NONE, "Shell.Explorer"); - - this.notifyAll(); - } - - shell.open(); - while (!isInterrupted() && !shell.isDisposed()) { - if (!display.readAndDispatch()) { - display.sleep(); - } - } - shell.dispose(); - display.dispose(); - } catch (Exception e) { - interrupt(); - } - } - }; - this.swtThread.start(); - } - - synchronized (this.swtThread) { - while (this.oleFrame == null) { - try { - this.swtThread.wait(100); - } catch (InterruptedException e) { - this.oleFrame = null; - this.swtThread = null; - break; - } - } - } - setSize(getWidth() - 1, getHeight() - 1); - setSize(getWidth() + 1, getHeight() + 1); - } - - - public void displaySWF(String swf) { - startDisplay(); - final String loadSWF = swf; - oleFrame.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - - OleAutomation explorer = new OleAutomation(clientSite); - int[] navigate = explorer.getIDsOfNames(new String[]{"Navigate"}); - if (navigate != null) { - Variant result = explorer.invoke(navigate[0], new Variant[]{new Variant(loadSWF)}); - if (result == null) { - disposeClient(); - } else { - result.dispose(); - } - } else { - disposeClient(); - } - } - }); - - - } - - /** - * Stops the swt background thread. - */ - private void disconnect() { - if (swtThread != null) { - oleFrame = null; - swtThread.interrupt(); - swtThread = null; - } - } -} \ No newline at end of file diff --git a/trunk/src/com/jpexs/asdec/gui/ImagePanel.java b/trunk/src/com/jpexs/asdec/gui/ImagePanel.java new file mode 100644 index 000000000..ea14c4b40 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/gui/ImagePanel.java @@ -0,0 +1,49 @@ +package com.jpexs.asdec.gui; + +import java.awt.BorderLayout; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; + +/* + * Copyright (C) 2010-2011 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +public class ImagePanel extends JPanel { + public JLabel label=new JLabel(); + + public ImagePanel() { + super(new BorderLayout()); + label.setHorizontalAlignment(JLabel.CENTER); + add(label,BorderLayout.CENTER); + } + + public void setImage(byte data[]){ + ImageIcon icon = new ImageIcon(data); + label.setIcon(icon); + } + + public void setImage(Image image){ + ImageIcon icon = new ImageIcon(image); + label.setIcon(icon); + } + +} diff --git a/trunk/src/com/jpexs/asdec/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/gui/MainFrame.java new file mode 100644 index 000000000..f79707586 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/gui/MainFrame.java @@ -0,0 +1,673 @@ +package com.jpexs.asdec.gui; + +import com.jpexs.flashplayer.FlashPanel; +import com.jpexs.asdec.Configuration; +import com.jpexs.asdec.Main; +import com.jpexs.asdec.SWF; +import com.jpexs.asdec.SWFInputStream; +import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.abc.gui.ABCPanel; +import com.jpexs.asdec.abc.gui.TreeLeafScript; +import com.jpexs.asdec.action.gui.ActionPanel; +import com.jpexs.asdec.tags.DefineBitsJPEG2Tag; +import com.jpexs.asdec.tags.DefineBitsJPEG3Tag; +import com.jpexs.asdec.tags.DefineBitsJPEG4Tag; +import com.jpexs.asdec.tags.DefineBitsLossless2Tag; +import com.jpexs.asdec.tags.DefineBitsLosslessTag; +import com.jpexs.asdec.tags.DefineBitsTag; +import com.jpexs.asdec.tags.DefineButton2Tag; +import com.jpexs.asdec.tags.DefineButtonTag; +import com.jpexs.asdec.tags.DefineEditTextTag; +import com.jpexs.asdec.tags.DefineFont2Tag; +import com.jpexs.asdec.tags.DefineFont3Tag; +import com.jpexs.asdec.tags.DefineFont4Tag; +import com.jpexs.asdec.tags.DefineFontTag; +import com.jpexs.asdec.tags.DefineMorphShape2Tag; +import com.jpexs.asdec.tags.DefineMorphShapeTag; +import com.jpexs.asdec.tags.DefineShape2Tag; +import com.jpexs.asdec.tags.DefineShape3Tag; +import com.jpexs.asdec.tags.DefineShape4Tag; +import com.jpexs.asdec.tags.DefineShapeTag; +import com.jpexs.asdec.tags.DefineSpriteTag; +import com.jpexs.asdec.tags.DefineText2Tag; +import com.jpexs.asdec.tags.DefineTextTag; +import com.jpexs.asdec.tags.DoABCTag; +import com.jpexs.asdec.tags.DoActionTag; +import com.jpexs.asdec.tags.DoInitActionTag; +import com.jpexs.asdec.tags.EndTag; +import com.jpexs.asdec.tags.ExportAssetsTag; +import com.jpexs.asdec.tags.PlaceObject2Tag; +import com.jpexs.asdec.tags.PlaceObject3Tag; +import com.jpexs.asdec.tags.PlaceObjectTag; +import com.jpexs.asdec.tags.RemoveObject2Tag; +import com.jpexs.asdec.tags.RemoveObjectTag; +import com.jpexs.asdec.tags.SetBackgroundColorTag; +import com.jpexs.asdec.tags.ShowFrameTag; +import com.jpexs.asdec.tags.Tag; +import com.jpexs.asdec.tags.base.ASMSource; +import com.jpexs.asdec.tags.base.BoundedTag; +import com.jpexs.asdec.tags.base.CharacterTag; +import com.jpexs.asdec.tags.base.Container; +import com.jpexs.asdec.tags.base.FontTag; +import com.jpexs.asdec.types.GLYPHENTRY; +import com.jpexs.asdec.types.MATRIX; +import com.jpexs.asdec.types.RECT; +import com.jpexs.asdec.types.RGB; +import com.jpexs.asdec.types.TEXTRECORD; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.ImageIcon; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTree; +import javax.swing.border.BevelBorder; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import com.jpexs.flashplayer.FlashPanel; +/** + * + * @author Jindra + */ +public class MainFrame extends JFrame implements ActionListener { + + FlashPanel fPanel; + private SWF swf; + public ABCPanel abcPanel; + public ActionPanel actionPanel; + private JTabbedPane tabPane; + public LoadingPanel loadingPanel = new LoadingPanel(20, 20); + public JLabel statusLabel = new JLabel(""); + public JPanel statusPanel = new JPanel(); + + public void setStatus(String s) { + if (s.equals("")) { + loadingPanel.setVisible(false); + } else { + loadingPanel.setVisible(true); + } + statusLabel.setText(s); + } + + public MainFrame(SWF swf) { + setSize(1024, 768); + tabPane = new JTabbedPane(); + View.setWindowIcon(this); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + if (Main.proxyFrame != null) { + if (Main.proxyFrame.isVisible()) { + return; + } + } + Main.exit(); + } + }); + setTitle(Main.applicationName + " - " + Main.getFileTitle()); + JMenuBar menuBar = new JMenuBar(); + + JMenu menuFile = new JMenu("File"); + JMenuItem miOpen = new JMenuItem("Open..."); + miOpen.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/open16.png"))); + miOpen.setActionCommand("OPEN"); + miOpen.addActionListener(this); + JMenuItem miSave = new JMenuItem("Save"); + miSave.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); + miSave.setActionCommand("SAVE"); + miSave.addActionListener(this); + JMenuItem miSaveAs = new JMenuItem("Save as..."); + miSaveAs.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/save16.png"))); + miSaveAs.setActionCommand("SAVEAS"); + miSaveAs.addActionListener(this); + JMenu menuExportAll = new JMenu("Export all"); + JMenuItem miExportAllAS = new JMenuItem("ActionScript..."); + miExportAllAS.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportas16.png"))); + miExportAllAS.setActionCommand("EXPORT"); + miExportAllAS.addActionListener(this); + + JMenuItem miExportAllPCode = new JMenuItem("PCode..."); + miExportAllPCode.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportpc16.png"))); + miExportAllPCode.setActionCommand("EXPORTPCODE"); + miExportAllPCode.addActionListener(this); + + menuExportAll.add(miExportAllAS); + menuExportAll.add(miExportAllPCode); + + + JMenu menuExportSel = new JMenu("Export selection"); + JMenuItem miExportSelAS = new JMenuItem("ActionScript..."); + miExportSelAS.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportas16.png"))); + miExportSelAS.setActionCommand("EXPORTSEL"); + miExportSelAS.addActionListener(this); + + JMenuItem miExportSelPCode = new JMenuItem("PCode..."); + miExportSelPCode.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exportpc16.png"))); + miExportSelPCode.setActionCommand("EXPORTPCODESEL"); + miExportSelPCode.addActionListener(this); + + menuExportSel.add(miExportSelAS); + menuExportSel.add(miExportSelPCode); + + + menuFile.add(miOpen); + menuFile.add(miSave); + menuFile.add(miSaveAs); + menuFile.add(menuExportAll); + menuFile.add(menuExportSel); + menuFile.addSeparator(); + JMenuItem miClose = new JMenuItem("Exit"); + miClose.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/exit16.png"))); + miClose.setActionCommand("EXIT"); + miClose.addActionListener(this); + menuFile.add(miClose); + menuBar.add(menuFile); + JMenu menuDeobfuscation = new JMenu("Deobfuscation"); + JCheckBoxMenuItem miSubLimiter = new JCheckBoxMenuItem("Enable sub limiter"); + miSubLimiter.setActionCommand("SUBLIMITER"); + miSubLimiter.addActionListener(this); + + JMenuItem miRenameIdentifiers = new JMenuItem("Rename identifiers"); + miRenameIdentifiers.setActionCommand("RENAMEIDENTIFIERS"); + miRenameIdentifiers.addActionListener(this); + + + menuDeobfuscation.add(miSubLimiter); + menuDeobfuscation.add(miRenameIdentifiers); + + + + JMenu menuTools = new JMenu("Tools"); + JMenuItem miProxy = new JMenuItem("Proxy"); + miProxy.setActionCommand("SHOWPROXY"); + miProxy.setIcon(new ImageIcon(View.loadImage("com/jpexs/asdec/gui/graphics/proxy16.png"))); + miProxy.addActionListener(this); + menuTools.add(miProxy); + + menuTools.add(menuDeobfuscation); + menuBar.add(menuTools); + + JMenu menuHelp = new JMenu("Help"); + JMenuItem miAbout = new JMenuItem("About..."); + miAbout.setActionCommand("ABOUT"); + miAbout.addActionListener(this); + + JMenuItem miCheckUpdates = new JMenuItem("Check for updates..."); + miCheckUpdates.setActionCommand("CHECKUPDATES"); + miCheckUpdates.addActionListener(this); + menuHelp.add(miAbout); + menuHelp.add(miCheckUpdates); + menuBar.add(menuHelp); + + setJMenuBar(menuBar); + setSize(800, 600); + List objs = new ArrayList(); + objs.addAll(swf.tags); + this.swf = swf; + getContentPane().setLayout(new BorderLayout()); + fPanel = new FlashPanel(400, 400); + List shapes = new ArrayList(); + List images = new ArrayList(); + List morphShapes = new ArrayList(); + List sprites = new ArrayList(); + List fonts = new ArrayList(); + List texts = new ArrayList(); + List buttons = new ArrayList(); + List abcList = new ArrayList(); + getShapes(objs, shapes); + getImages(objs, images); + getMorphShapes(objs, morphShapes); + getSprites(objs, sprites); + getFonts(objs, fonts); + getTexts(objs, texts); + getButtons(objs, buttons); + getActionScript3(objs, abcList); + + getContentPane().add(tabPane, BorderLayout.CENTER); + if (!shapes.isEmpty()) { + tabPane.addTab("Shapes", new TagPanel(shapes, swf)); + } + if (!morphShapes.isEmpty()) { + tabPane.addTab("MorphShapes", new TagPanel(morphShapes, swf)); + } + if (!images.isEmpty()) { + tabPane.addTab("Images", new TagPanel(images, swf)); + } + if (!sprites.isEmpty()) { + tabPane.addTab("Sprites", new TagPanel(sprites, swf)); + } + if (!fonts.isEmpty()) { + tabPane.addTab("Fonts", new TagPanel(fonts, swf)); + } + if (!texts.isEmpty()) { + tabPane.addTab("Texts", new TagPanel(texts, swf)); + } + if (!buttons.isEmpty()) { + tabPane.addTab("Buttons", new TagPanel(buttons, swf)); + } + /*tabPane.addTab("Tags", new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tagTree), new JScrollPane(fPanel)));*/ + + tabPane.setTabPlacement(JTabbedPane.LEFT); + if (!abcList.isEmpty()) { + tabPane.addTab("ActionScript3", abcPanel = new ABCPanel(abcList)); + } else { + actionPanel = new ActionPanel(swf.tags); + if(actionPanel.tagTree.getRowCount()>1){ + tabPane.addTab("ActionScript",actionPanel); + } + } + + + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + fPanel.dispose(); + } + }); + + + loadingPanel.setPreferredSize(new Dimension(30, 30)); + statusPanel = new JPanel(); + statusPanel.setPreferredSize(new Dimension(1, 30)); + statusPanel.setBorder(new BevelBorder(BevelBorder.LOWERED)); + statusPanel.setLayout(new BorderLayout()); + statusPanel.add(loadingPanel, BorderLayout.WEST); + statusPanel.add(statusLabel, BorderLayout.CENTER); + loadingPanel.setVisible(false); + add(statusPanel, BorderLayout.SOUTH); + View.centerScreen(this); + Main.stopWork(); + + } + + @Override + public void setVisible(boolean b) { + super.setVisible(b); + if (b) { + if (abcPanel != null) { + abcPanel.initSplits(); + } + if (actionPanel != null) { + actionPanel.initSplits(); + } + } + } + + public static void getShapes(List list, List shapes) { + for (Object t : list) { + if (t instanceof Container) { + getShapes(((Container) t).getSubItems(), shapes); + } + if ((t instanceof DefineShapeTag) + || (t instanceof DefineShape2Tag) + || (t instanceof DefineShape3Tag) + || (t instanceof DefineShape4Tag)) { + shapes.add((Tag) t); + } + } + } + + public static void getFonts(List list, List fonts) { + for (Object t : list) { + if (t instanceof Container) { + getFonts(((Container) t).getSubItems(), fonts); + } + if ((t instanceof DefineFontTag) + || (t instanceof DefineFont2Tag) + || (t instanceof DefineFont3Tag) + || (t instanceof DefineFont4Tag)) { + fonts.add((Tag) t); + } + } + } + + public static void getActionScript3(List list, List actionScripts) { + for (Object t : list) { + if (t instanceof Container) { + getActionScript3(((Container) t).getSubItems(), actionScripts); + } + if (t instanceof DoABCTag) { + actionScripts.add((DoABCTag) t); + } + } + } + + public static void getMorphShapes(List list, List morphShapes) { + for (Object t : list) { + if (t instanceof Container) { + getMorphShapes(((Container) t).getSubItems(), morphShapes); + } + if ((t instanceof DefineMorphShapeTag) || (t instanceof DefineMorphShape2Tag)) { + morphShapes.add((Tag) t); + } + } + } + + public static void getImages(List list, List images) { + for (Object t : list) { + if (t instanceof Container) { + getImages(((Container) t).getSubItems(), images); + } + if ((t instanceof DefineBitsTag) + || (t instanceof DefineBitsJPEG2Tag) + || (t instanceof DefineBitsJPEG3Tag) + || (t instanceof DefineBitsJPEG4Tag) + || (t instanceof DefineBitsLosslessTag) + || (t instanceof DefineBitsLossless2Tag)) { + images.add((Tag) t); + } + } + } + + public static void getTexts(List list, List texts) { + for (Object t : list) { + if (t instanceof Container) { + getTexts(((Container) t).getSubItems(), texts); + } + if ((t instanceof DefineTextTag) + || (t instanceof DefineText2Tag) + || (t instanceof DefineEditTextTag)) { + texts.add((Tag) t); + } + } + } + + public static void getSprites(List list, List sprites) { + for (Object t : list) { + if (t instanceof Container) { + getSprites(((Container) t).getSubItems(), sprites); + } + if (t instanceof DefineSpriteTag) { + sprites.add((Tag) t); + } + } + } + + public static void getButtons(List list, List buttons) { + for (Object t : list) { + if (t instanceof Container) { + getButtons(((Container) t).getSubItems(), buttons); + } + if ((t instanceof DefineButtonTag) || (t instanceof DefineButton2Tag)) { + buttons.add((Tag) t); + } + } + } + + public static List createTagList(List list) { + List ret = new ArrayList(); + int frame = 1; + List frames = new ArrayList(); + List shapes = new ArrayList(); + List morphShapes = new ArrayList(); + List sprites = new ArrayList(); + List buttons = new ArrayList(); + List images = new ArrayList(); + List fonts = new ArrayList(); + List texts = new ArrayList(); + + + List exportAssetsTags = new ArrayList(); + for (Object t : list) { + if (t instanceof ExportAssetsTag) { + exportAssetsTags.add((ExportAssetsTag) t); + } + if ((t instanceof DefineFontTag) + || (t instanceof DefineFont2Tag) + || (t instanceof DefineFont3Tag) + || (t instanceof DefineFont4Tag)) { + fonts.add(new TagNode(t)); + } + if ((t instanceof DefineTextTag) + || (t instanceof DefineText2Tag) + || (t instanceof DefineEditTextTag)) { + texts.add(new TagNode(t)); + } + + if ((t instanceof DefineBitsTag) + || (t instanceof DefineBitsJPEG2Tag) + || (t instanceof DefineBitsJPEG3Tag) + || (t instanceof DefineBitsJPEG4Tag) + || (t instanceof DefineBitsLosslessTag) + || (t instanceof DefineBitsLossless2Tag)) { + images.add(new TagNode(t)); + } + if ((t instanceof DefineShapeTag) + || (t instanceof DefineShape2Tag) + || (t instanceof DefineShape3Tag) + || (t instanceof DefineShape4Tag)) { + shapes.add(new TagNode(t)); + } + + if ((t instanceof DefineMorphShapeTag) || (t instanceof DefineMorphShape2Tag)) { + morphShapes.add(new TagNode(t)); + } + + if (t instanceof DefineSpriteTag) { + sprites.add(new TagNode(t)); + } + if ((t instanceof DefineButtonTag) || (t instanceof DefineButton2Tag)) { + buttons.add(new TagNode(t)); + } + if (t instanceof ShowFrameTag) { + TagNode tti = new TagNode("frame" + frame); + + /* for (int r = ret.size() - 1; r >= 0; r--) { + if (!(ret.get(r).tag instanceof DefineSpriteTag)) { + if (!(ret.get(r).tag instanceof DefineButtonTag)) { + if (!(ret.get(r).tag instanceof DefineButton2Tag)) { + if (!(ret.get(r).tag instanceof DoInitActionTag)) { + tti.subItems.add(ret.get(r)); + ret.remove(r); + } + } + } + } + }*/ + frame++; + frames.add(tti); + } /*if (t instanceof ASMSource) { + TagNode tti = new TagNode(t); + ret.add(tti); + } else */ + if (t instanceof Container) { + TagNode tti = new TagNode(t); + if (((Container) t).getItemCount() > 0) { + List subItems = ((Container) t).getSubItems(); + tti.subItems = createTagList(subItems); + } + //ret.add(tti); + } + } + + TagNode textsNode = new TagNode("texts"); + textsNode.subItems.addAll(texts); + + TagNode imagesNode = new TagNode("images"); + imagesNode.subItems.addAll(images); + + TagNode fontsNode = new TagNode("fonts"); + fontsNode.subItems.addAll(fonts); + + + TagNode spritesNode = new TagNode("sprites"); + spritesNode.subItems.addAll(sprites); + + TagNode shapesNode = new TagNode("shapes"); + shapesNode.subItems.addAll(shapes); + + TagNode morphShapesNode = new TagNode("morphshapes"); + morphShapesNode.subItems.addAll(morphShapes); + + TagNode buttonsNode = new TagNode("buttons"); + buttonsNode.subItems.addAll(buttons); + + TagNode framesNode = new TagNode("frames"); + framesNode.subItems.addAll(frames); + ret.add(shapesNode); + ret.add(morphShapesNode);; + ret.add(spritesNode); + ret.add(textsNode); + ret.add(imagesNode); + ret.add(buttonsNode); + ret.add(fontsNode); + ret.add(framesNode); + for (int i = ret.size() - 1; i >= 0; i--) { + if (ret.get(i).tag instanceof DefineSpriteTag) { + ((DefineSpriteTag) ret.get(i).tag).exportAssetsTags = exportAssetsTags; + } + if (ret.get(i).tag instanceof DefineButtonTag) { + ((DefineButtonTag) ret.get(i).tag).exportAssetsTags = exportAssetsTags; + } + if (ret.get(i).tag instanceof DefineButton2Tag) { + ((DefineButton2Tag) ret.get(i).tag).exportAssetsTags = exportAssetsTags; + } + if (ret.get(i).tag instanceof DoInitActionTag) { + ((DoInitActionTag) ret.get(i).tag).exportAssetsTags = exportAssetsTags; + } + if (ret.get(i).tag instanceof ASMSource) { + ASMSource ass = (ASMSource) ret.get(i).tag; + if (ass.containsSource()) { + continue; + } + } + if (ret.get(i).subItems.isEmpty()) { + //ret.remove(i); + } + } + return ret; + } + + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("EXIT")) { + setVisible(false); + if (Main.proxyFrame != null) { + if (Main.proxyFrame.isVisible()) { + return; + } + } + Main.exit(); + } + if (Main.isWorking()) { + return; + } + + if (e.getActionCommand().equals("ABOUT")) { + Main.about(); + } + + + if (e.getActionCommand().equals("SHOWPROXY")) { + Main.showProxy(); + } + + if (e.getActionCommand().equals("SUBLIMITER")) { + if (e.getSource() instanceof JCheckBoxMenuItem) { + Main.setSubLimiter(((JCheckBoxMenuItem) e.getSource()).getState()); + } + + } + + if (e.getActionCommand().equals("SAVE")) { + try { + Main.saveFile(Main.file); + } catch (IOException ex) { + Logger.getLogger(com.jpexs.asdec.abc.gui.ABCPanel.class.getName()).log(Level.SEVERE, null, ex); + JOptionPane.showMessageDialog(null, "Cannot save file", "Error", JOptionPane.ERROR_MESSAGE); + } + } + if (e.getActionCommand().equals("SAVEAS")) { + if (Main.saveFileDialog()) { + setTitle(Main.applicationName + " - " + Main.getFileTitle()); + } + } + if (e.getActionCommand().equals("OPEN")) { + Main.openFileDialog(); + + } + + if (e.getActionCommand().startsWith("EXPORT")) { + JFileChooser chooser = new JFileChooser(); + chooser.setCurrentDirectory(new java.io.File((String) Configuration.getConfig("lastExportDir", "."))); + chooser.setDialogTitle("Select directory to export"); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setAcceptAllFileFilterUsed(false); + if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + Main.startWork("Exporting..."); + final String selFile = chooser.getSelectedFile().getAbsolutePath(); + Configuration.setConfig("lastExportDir", chooser.getSelectedFile().getParentFile().getAbsolutePath()); + final boolean isPcode = e.getActionCommand().startsWith("EXPORTPCODE"); + final boolean onlySel = e.getActionCommand().endsWith("SEL"); + (new Thread() { + @Override + public void run() { + try { + if (onlySel) { + List tlsList = abcPanel.classTree.getSelectedScripts(); + if (tlsList.isEmpty()) { + JOptionPane.showMessageDialog(null, "No script selected!"); + } + for (int i = 0; i < tlsList.size(); i++) { + TreeLeafScript tls = tlsList.get(i); + Main.startWork("Exporting " + (i + 1) + "/" + tlsList.size() + " " + tls.abc.script_info[tls.scriptIndex].getPath(tls.abc) + " ..."); + tls.abc.script_info[tls.scriptIndex].export(tls.abc, abcPanel.list, selFile, isPcode); + } + } else { + Main.swf.exportActionScript(selFile, isPcode); + } + } catch (Exception ignored) { + JOptionPane.showMessageDialog(null, "Cannot write to the file"); + } + Main.stopWork(); + } + }).start(); + + } + + } + + if (e.getActionCommand().equals("CHECKUPDATES")) { + if (!Main.checkForUpdates()) { + JOptionPane.showMessageDialog(null, "No new version available."); + } + } + if (e.getActionCommand().equals("RENAMEIDENTIFIERS")) { + if (JOptionPane.showConfirmDialog(null, "Following procedure can damage SWF file which can be then unplayable.\r\nUSE IT ON YOUR OWN RISK. Do you want to continue?", "Warning", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.OK_OPTION) { + int pocet = 0; + Main.startWork("Renaming identifiers..."); + for (DoABCTag tag : abcPanel.list) { + pocet += tag.abc.deobfuscateIdentifiers(); + } + JOptionPane.showMessageDialog(null, "Identifiers renamed: " + pocet); + abcPanel.reload(); + Main.stopWork(); + } + } + + } +} diff --git a/trunk/src/com/jpexs/asdec/gui/TagBrowserFrame.java b/trunk/src/com/jpexs/asdec/gui/TagBrowserFrame.java deleted file mode 100644 index fb58fa4e6..000000000 --- a/trunk/src/com/jpexs/asdec/gui/TagBrowserFrame.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.jpexs.asdec.gui; - -import com.jpexs.asdec.Main; -import com.jpexs.asdec.SWF; -import com.jpexs.asdec.SWFInputStream; -import com.jpexs.asdec.SWFOutputStream; -import com.jpexs.asdec.tags.DefineFont2Tag; -import com.jpexs.asdec.tags.DefineFont3Tag; -import com.jpexs.asdec.tags.DefineFontTag; -import com.jpexs.asdec.tags.DefineMorphShape2Tag; -import com.jpexs.asdec.tags.DefineMorphShapeTag; -import com.jpexs.asdec.tags.DefineShapeTag; -import com.jpexs.asdec.tags.DefineSpriteTag; -import com.jpexs.asdec.tags.DefineTextTag; -import com.jpexs.asdec.tags.DoActionTag; -import com.jpexs.asdec.tags.EndTag; -import com.jpexs.asdec.tags.PlaceObject2Tag; -import com.jpexs.asdec.tags.PlaceObject3Tag; -import com.jpexs.asdec.tags.PlaceObjectTag; -import com.jpexs.asdec.tags.RemoveObject2Tag; -import com.jpexs.asdec.tags.RemoveObjectTag; -import com.jpexs.asdec.tags.SetBackgroundColorTag; -import com.jpexs.asdec.tags.ShowFrameTag; -import com.jpexs.asdec.tags.Tag; -import com.jpexs.asdec.tags.base.BoundedTag; -import com.jpexs.asdec.tags.base.CharacterTag; -import com.jpexs.asdec.tags.base.Container; -import com.jpexs.asdec.tags.base.FontTag; -import com.jpexs.asdec.types.GLYPHENTRY; -import com.jpexs.asdec.types.MATRIX; -import com.jpexs.asdec.types.RECT; -import com.jpexs.asdec.types.RGB; -import com.jpexs.asdec.types.TEXTRECORD; -import java.awt.BorderLayout; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import javax.swing.JFrame; -import javax.swing.JScrollPane; -import javax.swing.JSplitPane; -import javax.swing.JTree; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; - -/** - * - * @author Jindra - */ -public class TagBrowserFrame extends JFrame implements TreeSelectionListener { - - JTree tagTree; - FlashPanel fPanel; - private SWF swf; - - public TagBrowserFrame(SWF swf) { - setDefaultCloseOperation(EXIT_ON_CLOSE); - setSize(800, 600); - List objs = new ArrayList(); - objs.addAll(swf.tags); - this.swf=swf; - tagTree = new JTree(new TagTreeModel(swf.tags)); - getContentPane().setLayout(new BorderLayout()); - fPanel = new FlashPanel(400, 400); - getContentPane().add(new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tagTree), new JScrollPane(fPanel)), BorderLayout.CENTER); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - fPanel.dispose(); - } - }); - tagTree.addTreeSelectionListener(this); - } - - private File tempFile; - - public static void main(String[] args) throws IOException { - if(args.length<1){ - return; - } - View.setWinLookAndFeel(); - SWF swf = new SWF(new FileInputStream(args[0])); - TagBrowserFrame tbf = new TagBrowserFrame(swf); - tbf.setVisible(true); - tbf.fPanel.displaySWF(args[0]); - } - - @Override - public void valueChanged(TreeSelectionEvent e) { - Object obj = tagTree.getLastSelectedPathComponent(); - if (obj instanceof TagNode) { - Object tagObj = ((TagNode) obj).tag; - if (((tagObj instanceof CharacterTag)||(tagObj instanceof FontTag)) && (tagObj instanceof Tag)) { - try { - - if(tempFile!=null){ - tempFile.delete(); - } - tempFile=new File("D:\\temp.swf");//File.createTempFile("temp", ".swf"); - tempFile.deleteOnExit(); - - FileOutputStream fos = new FileOutputStream(tempFile); - SWFOutputStream sos = new SWFOutputStream(fos, 10); - sos.write("FWS".getBytes()); - sos.write(13); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - SWFOutputStream sos2 = new SWFOutputStream(baos, 10); - int width = 8000; - int height = 6000; - RECT rct = new RECT(); - rct.Ymax = height; - rct.Xmax = width; - sos2.writeRECT(rct); - sos2.writeUI8(0); - sos2.writeUI8(30); - sos2.writeUI16(1); //framecnt - sos2.writeTag(new SetBackgroundColorTag(new RGB(255, 0, 255))); - for(Tag tag:swf.tags){ - if((!(tag instanceof PlaceObjectTag)) - &&(!(tag instanceof PlaceObject2Tag)) - &&(!(tag instanceof PlaceObject3Tag)) - &&(!(tag instanceof RemoveObjectTag)) - &&(!(tag instanceof RemoveObject2Tag)) - &&(!(tag instanceof DoActionTag)) - &&(!(tag instanceof ShowFrameTag)) - ){ - sos2.writeTag(tag); - } - } - - - int chtId=0; - if(tagObj instanceof CharacterTag){ - chtId=((CharacterTag) tagObj).getCharacterID(); - } - - //sos2.writeTag((Tag) tagObj); - MATRIX mat = new MATRIX(); - mat.hasRotate = false; - mat.hasScale = false; - mat.translateX = 0; - mat.translateY = 0; - if (tagObj instanceof BoundedTag) { - RECT r = ((BoundedTag) tagObj).getRect(); - mat.translateX = -r.Xmin; - mat.translateY = -r.Ymin; - mat.translateX = mat.translateX + width / 2 - r.getWidth() / 2; - mat.translateY = mat.translateY + height / 2 - r.getHeight() / 2; - }else{ - mat.translateX=width/2; - mat.translateY=height/2; - } - if(tagObj instanceof FontTag){ - - int countGlyphs=0; - int fontId=0; - if(tagObj instanceof DefineFontTag){ - countGlyphs=((DefineFontTag)tagObj).glyphShapeTable.length; - fontId=((DefineFontTag)tagObj).fontId; - } - if(tagObj instanceof DefineFont2Tag){ - countGlyphs=((DefineFont2Tag)tagObj).glyphShapeTable.length; - fontId=((DefineFont2Tag)tagObj).fontId; - } - if(tagObj instanceof DefineFont3Tag){ - countGlyphs=((DefineFont3Tag)tagObj).glyphShapeTable.length; - fontId=((DefineFont3Tag)tagObj).fontId; - } - - List rec=new ArrayList(); - TEXTRECORD tr=new TEXTRECORD(); - tr.fontId=fontId; - tr.styleFlagsHasFont=true; - tr.textHeight=460; - tr.glyphEntries=new GLYPHENTRY[countGlyphs]; - tr.styleFlagsHasColor=true; - tr.textColor=new RGB(0,0,0); - int adv=300; - int maxadv=0; - for(int f=0;fmaxadv){ - maxadv=adv; - } - tr.glyphEntries[f].glyphIndex=f; - } - rec.add(tr); - System.out.println("countGlyphs="+countGlyphs); - sos2.writeTag(new DefineTextTag(999, new RECT(0,width,0,height), new MATRIX(), SWFOutputStream.getNeededBitsU(countGlyphs-1), SWFOutputStream.getNeededBitsU(maxadv), rec)); - sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, true, false, 1, 999, mat, null, 0, null, 0, null)); - sos2.writeTag(new ShowFrameTag()); - }else - if ((tagObj instanceof DefineMorphShapeTag) || (tagObj instanceof DefineMorphShape2Tag)) { - sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, true, false, 1, chtId, mat, null, 0, null, 0, null)); - sos2.writeTag(new ShowFrameTag()); - int numFrames = 100; - for (int ratio = 0; ratio < 65536; ratio += 65536 / numFrames) { - sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, false, true, 1, chtId, mat, null, ratio, null, 0, null)); - sos2.writeTag(new ShowFrameTag()); - } - } else { - sos2.writeTag(new PlaceObjectTag(chtId, 1, mat, null)); - sos2.writeTag(new ShowFrameTag()); - } - - sos2.writeTag(new EndTag()); - byte data[] = baos.toByteArray(); - - sos.writeUI32(sos.getPos() + data.length + 4); - sos.write(data); - fos.close(); - fPanel.displaySWF(tempFile.getAbsolutePath()); - (new Thread(){ - - @Override - public void run() { - while(!tagTree.requestFocusInWindow()) - ; - } - }).start(); - - } catch (Exception ex) { - ex.printStackTrace(); - } - } - } - } -} diff --git a/trunk/src/com/jpexs/asdec/gui/TagPanel.java b/trunk/src/com/jpexs/asdec/gui/TagPanel.java new file mode 100644 index 000000000..b21a1ba85 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/gui/TagPanel.java @@ -0,0 +1,279 @@ +/* + * Copyright (C) 2010-2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.asdec.gui; + +import com.jpexs.flashplayer.FlashPanel; +import com.jpexs.asdec.SWF; +import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.DefineBitsJPEG2Tag; +import com.jpexs.asdec.tags.DefineBitsJPEG3Tag; +import com.jpexs.asdec.tags.DefineBitsJPEG4Tag; +import com.jpexs.asdec.tags.DefineBitsLossless2Tag; +import com.jpexs.asdec.tags.DefineBitsLosslessTag; +import com.jpexs.asdec.tags.DefineBitsTag; +import com.jpexs.asdec.tags.DefineFont2Tag; +import com.jpexs.asdec.tags.DefineFont3Tag; +import com.jpexs.asdec.tags.DefineFontTag; +import com.jpexs.asdec.tags.DefineMorphShape2Tag; +import com.jpexs.asdec.tags.DefineMorphShapeTag; +import com.jpexs.asdec.tags.DefineTextTag; +import com.jpexs.asdec.tags.DoABCTag; +import com.jpexs.asdec.tags.DoActionTag; +import com.jpexs.asdec.tags.DoInitActionTag; +import com.jpexs.asdec.tags.EndTag; +import com.jpexs.asdec.tags.JPEGTablesTag; +import com.jpexs.asdec.tags.PlaceObject2Tag; +import com.jpexs.asdec.tags.PlaceObject3Tag; +import com.jpexs.asdec.tags.PlaceObjectTag; +import com.jpexs.asdec.tags.RemoveObject2Tag; +import com.jpexs.asdec.tags.RemoveObjectTag; +import com.jpexs.asdec.tags.ShowFrameTag; +import com.jpexs.asdec.tags.SymbolClassTag; +import com.jpexs.asdec.tags.Tag; +import com.jpexs.asdec.tags.base.BoundedTag; +import com.jpexs.asdec.tags.base.CharacterTag; +import com.jpexs.asdec.tags.base.FontTag; +import com.jpexs.asdec.types.GLYPHENTRY; +import com.jpexs.asdec.types.MATRIX; +import com.jpexs.asdec.types.RECT; +import com.jpexs.asdec.types.RGB; +import com.jpexs.asdec.types.TEXTRECORD; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +/** + * + * @author JPEXS + */ +public class TagPanel extends JPanel implements ListSelectionListener { + + public JList tagList; + public FlashPanel flashPanel; + public JPanel displayPanel; + public ImagePanel imagePanel; + private SWF swf; + final static String CARDFLASHPANEL = "Flash card"; + final static String CARDIMAGEPANEL = "Image card"; + final static String CARDEMPTYPANEL = "Empty card"; + private JPEGTablesTag jtt; + + public TagPanel(List list, SWF swf) { + this.swf = swf; + for(Tag t:swf.tags){ + if(t instanceof JPEGTablesTag){ + jtt=(JPEGTablesTag)t; + } + } + tagList = new JList(list.toArray(new Tag[list.size()])); + tagList.addListSelectionListener(this); + setLayout(new BorderLayout()); + flashPanel = new FlashPanel(400, 400); + displayPanel = new JPanel(new CardLayout()); + displayPanel.add(flashPanel, CARDFLASHPANEL); + imagePanel = new ImagePanel(); + CardLayout cl = (CardLayout) (displayPanel.getLayout()); + cl.show(displayPanel, CARDEMPTYPANEL); + displayPanel.add(imagePanel, CARDIMAGEPANEL); + displayPanel.add(new JPanel(), CARDEMPTYPANEL); + + JSplitPane sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tagList), new JScrollPane(displayPanel)); + sp.setDividerLocation(200); + add(sp, BorderLayout.CENTER); + } + private File tempFile; + + public void showCard(String card){ + CardLayout cl = (CardLayout) (displayPanel.getLayout()); + cl.show(displayPanel, card); + } + + @Override + public void valueChanged(ListSelectionEvent e) { + Tag tagObj = (Tag) tagList.getSelectedValue(); + if(tagObj instanceof DefineBitsTag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsTag)tagObj).getFullImageData(jtt)); + }else + if(tagObj instanceof DefineBitsJPEG2Tag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsJPEG2Tag)tagObj).imageData); + }else + if(tagObj instanceof DefineBitsJPEG3Tag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsJPEG3Tag)tagObj).imageData); + }else + if(tagObj instanceof DefineBitsJPEG4Tag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsJPEG4Tag)tagObj).imageData); + }else + if(tagObj instanceof DefineBitsLosslessTag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsLosslessTag)tagObj).getImage()); + }else + if(tagObj instanceof DefineBitsLossless2Tag){ + showCard(CARDIMAGEPANEL); + imagePanel.setImage(((DefineBitsLossless2Tag)tagObj).getImage()); + } else + if (((tagObj instanceof CharacterTag) || (tagObj instanceof FontTag)) && (tagObj instanceof Tag)) { + try { + + if (tempFile != null) { + tempFile.delete(); + } + tempFile = File.createTempFile("temp", ".swf"); + tempFile.deleteOnExit(); + + FileOutputStream fos = new FileOutputStream(tempFile); + SWFOutputStream sos = new SWFOutputStream(fos, 10); + sos.write("FWS".getBytes()); + sos.write(13); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + SWFOutputStream sos2 = new SWFOutputStream(baos, 10); + int width = 8000; + int height = 6000; + RECT rct = new RECT(); + rct.Ymax = height; + rct.Xmax = width; + sos2.writeRECT(rct); + sos2.writeUI8(0); + sos2.writeUI8(30); + sos2.writeUI16(1); //framecnt + //sos2.writeTag(new SetBackgroundColorTag(new RGB(255, 0, 255))); + for (Tag tag : swf.tags) { + if ((!(tag instanceof PlaceObjectTag)) + && (!(tag instanceof PlaceObject2Tag)) + && (!(tag instanceof PlaceObject3Tag)) + && (!(tag instanceof RemoveObjectTag)) + && (!(tag instanceof RemoveObject2Tag)) + && (!(tag instanceof DoActionTag)) + && (!(tag instanceof DoInitActionTag)) + && (!(tag instanceof DoABCTag)) + && (!(tag instanceof SymbolClassTag)) + && (!(tag instanceof ShowFrameTag))) { + sos2.writeTag(tag); + } + } + + + int chtId = 0; + if (tagObj instanceof CharacterTag) { + chtId = ((CharacterTag) tagObj).getCharacterID(); + } + + //sos2.writeTag((Tag) tagObj); + MATRIX mat = new MATRIX(); + mat.hasRotate = false; + mat.hasScale = false; + mat.translateX = 0; + mat.translateY = 0; + if (tagObj instanceof BoundedTag) { + RECT r = ((BoundedTag) tagObj).getRect(); + mat.translateX = -r.Xmin; + mat.translateY = -r.Ymin; + mat.translateX = mat.translateX + width / 2 - r.getWidth() / 2; + mat.translateY = mat.translateY + height / 2 - r.getHeight() / 2; + } else { + mat.translateX = width / 2; + mat.translateY = height / 2; + } + if (tagObj instanceof FontTag) { + + int countGlyphs = 0; + int fontId = 0; + if (tagObj instanceof DefineFontTag) { + countGlyphs = ((DefineFontTag) tagObj).glyphShapeTable.length; + fontId = ((DefineFontTag) tagObj).fontId; + } + if (tagObj instanceof DefineFont2Tag) { + countGlyphs = ((DefineFont2Tag) tagObj).glyphShapeTable.length; + fontId = ((DefineFont2Tag) tagObj).fontId; + } + if (tagObj instanceof DefineFont3Tag) { + countGlyphs = ((DefineFont3Tag) tagObj).glyphShapeTable.length; + fontId = ((DefineFont3Tag) tagObj).fontId; + } + + List rec = new ArrayList(); + TEXTRECORD tr = new TEXTRECORD(); + tr.fontId = fontId; + tr.styleFlagsHasFont = true; + tr.textHeight = 460; + tr.glyphEntries = new GLYPHENTRY[countGlyphs]; + tr.styleFlagsHasColor = true; + tr.textColor = new RGB(0, 0, 0); + int adv = 300; + int maxadv = 0; + for (int f = 0; f < countGlyphs; f++) { + tr.glyphEntries[f] = new GLYPHENTRY(); + tr.glyphEntries[f].glyphAdvance = adv; + adv += 300; + if (adv > maxadv) { + maxadv = adv; + } + tr.glyphEntries[f].glyphIndex = f; + } + rec.add(tr); + sos2.writeTag(new DefineTextTag(999, new RECT(0, width, 0, height), new MATRIX(), SWFOutputStream.getNeededBitsU(countGlyphs - 1), SWFOutputStream.getNeededBitsU(maxadv), rec)); + sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, true, false, 1, 999, mat, null, 0, null, 0, null)); + sos2.writeTag(new ShowFrameTag()); + } else if ((tagObj instanceof DefineMorphShapeTag) || (tagObj instanceof DefineMorphShape2Tag)) { + sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, true, false, 1, chtId, mat, null, 0, null, 0, null)); + sos2.writeTag(new ShowFrameTag()); + int numFrames = 100; + for (int ratio = 0; ratio < 65536; ratio += 65536 / numFrames) { + sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, false, true, 1, chtId, mat, null, ratio, null, 0, null)); + sos2.writeTag(new ShowFrameTag()); + } + } else { + sos2.writeTag(new PlaceObject2Tag(false, false, false, true, false, true, true, false, 1, chtId, mat, null, 0, null, 0, null)); + sos2.writeTag(new ShowFrameTag()); + } + + sos2.writeTag(new EndTag()); + byte data[] = baos.toByteArray(); + + sos.writeUI32(sos.getPos() + data.length + 4); + sos.write(data); + fos.close(); + flashPanel.displaySWF(tempFile.getAbsolutePath()); + + (new Thread() { + @Override + public void run() { + while (!tagList.requestFocusInWindow()) + ; + } + }).start(); + + } catch (Exception ex) { + } + showCard(CARDFLASHPANEL); + } + } +} diff --git a/trunk/src/com/jpexs/asdec/gui/proxy/ProxyFrame.java b/trunk/src/com/jpexs/asdec/gui/proxy/ProxyFrame.java index f960cd8fb..d69cf6281 100644 --- a/trunk/src/com/jpexs/asdec/gui/proxy/ProxyFrame.java +++ b/trunk/src/com/jpexs/asdec/gui/proxy/ProxyFrame.java @@ -137,13 +137,8 @@ public class ProxyFrame extends JFrame implements ActionListener, CatchedListene public void windowClosing(WindowEvent e) { setVisible(false); Main.removeTrayIcon(); - if (Main.abcMainFrame != null) { - if (Main.abcMainFrame.isVisible()) { - return; - } - } - if (Main.actionMainFrame != null) { - if (Main.actionMainFrame.isVisible()) { + if (Main.mainFrame != null) { + if (Main.mainFrame.isVisible()) { return; } } diff --git a/trunk/src/com/jpexs/asdec/tags/CSMTextSettingsTag.java b/trunk/src/com/jpexs/asdec/tags/CSMTextSettingsTag.java index 0d709964b..3c80508a5 100644 --- a/trunk/src/com/jpexs/asdec/tags/CSMTextSettingsTag.java +++ b/trunk/src/com/jpexs/asdec/tags/CSMTextSettingsTag.java @@ -67,7 +67,7 @@ public class CSMTextSettingsTag extends Tag { * @throws IOException */ public CSMTextSettingsTag(byte data[], int version, long pos) throws IOException { - super(74, data, pos); + super(74, "CSMTextSettings", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); textID = sis.readUI16(); useFlashType = (int) sis.readUB(2); diff --git a/trunk/src/com/jpexs/asdec/tags/DebugIDTag.java b/trunk/src/com/jpexs/asdec/tags/DebugIDTag.java index 04bb760d1..ec60447e5 100644 --- a/trunk/src/com/jpexs/asdec/tags/DebugIDTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DebugIDTag.java @@ -58,18 +58,8 @@ public class DebugIDTag extends Tag { * @throws IOException */ public DebugIDTag(byte data[], int version, long pos) throws IOException { - super(63, data, pos); + super(63,"DebugID", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); debugId = sis.readBytes(16); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DebugID"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBinaryDataTag.java b/trunk/src/com/jpexs/asdec/tags/DefineBinaryDataTag.java index fe6e1f6db..48530dc23 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBinaryDataTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBinaryDataTag.java @@ -48,14 +48,9 @@ public class DefineBinaryDataTag extends Tag { } public DefineBinaryDataTag(byte[] data, int version, long pos) throws IOException { - super(87, data, pos); + super(87,"DefineBinaryData", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); tag = sis.readUI16(); binaryData = sis.readBytes(sis.available()); } - - @Override - public String toString() { - return "DefineBinaryData"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG2Tag.java index 3a7950c97..2077b97bf 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG2Tag.java @@ -17,23 +17,25 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import java.io.ByteArrayInputStream; import java.io.IOException; -public class DefineBitsJPEG2Tag extends Tag { +public class DefineBitsJPEG2Tag extends CharacterTag{ public int characterID; public byte[] imageData; + + + @Override + public int getCharacterID() { + return characterID; + } public DefineBitsJPEG2Tag(byte[] data, int version, long pos) throws IOException { - super(21, data, pos); + super(21,"DefineBitsJPEG2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); imageData = sis.readBytes(sis.available()); } - - @Override - public String toString() { - return "DefineBitsJPEG2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG3Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG3Tag.java index 80b6c5145..371458718 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG3Tag.java @@ -18,19 +18,26 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; -public class DefineBitsJPEG3Tag extends Tag { +public class DefineBitsJPEG3Tag extends CharacterTag { public int characterID; public byte imageData[]; public byte bitmapAlphaData[]; + + + @Override + public int getCharacterID() { + return characterID; + } public DefineBitsJPEG3Tag(byte[] data, int version, long pos) throws IOException { - super(35, data, pos); + super(35,"DefineBitsJPEG3", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); long alphaDataOffset = sis.readUI32(); @@ -58,9 +65,4 @@ public class DefineBitsJPEG3Tag extends Tag { } return baos.toByteArray(); } - - @Override - public String toString() { - return "DefineBitsJPEG3"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG4Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG4Tag.java index e29360ed8..251d5974e 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG4Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsJPEG4Tag.java @@ -18,6 +18,7 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -28,13 +29,19 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineBitsJPEG4Tag extends Tag { +public class DefineBitsJPEG4Tag extends CharacterTag { public int characterID; public int deblockParam; public byte imageData[]; public byte bitmapAlphaData[]; + + @Override + public int getCharacterID() { + return characterID; + } + /** * Gets data bytes * @@ -65,7 +72,7 @@ public class DefineBitsJPEG4Tag extends Tag { * @throws IOException */ public DefineBitsJPEG4Tag(byte data[], int version, long pos) throws IOException { - super(90, data, pos); + super(90, "DefineBitsJPEG4",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); long alphaDataOffset = sis.readUI32(); @@ -73,14 +80,4 @@ public class DefineBitsJPEG4Tag extends Tag { imageData = sis.readBytes(alphaDataOffset); bitmapAlphaData = sis.readBytes(sis.available()); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineBitsJPEG4"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsLossless2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsLossless2Tag.java index fde832bc3..409f74077 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsLossless2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsLossless2Tag.java @@ -18,15 +18,20 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.types.ALPHABITMAPDATA; import com.jpexs.asdec.types.ALPHACOLORMAPDATA; +import com.jpexs.asdec.types.RGBA; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.InflaterInputStream; -public class DefineBitsLossless2Tag extends Tag { +public class DefineBitsLossless2Tag extends CharacterTag { public int characterID; public int bitmapFormat; @@ -38,8 +43,15 @@ public class DefineBitsLossless2Tag extends Tag { public static final int FORMAT_15BIT_RGB = 4; public static final int FORMAT_24BIT_RGB = 5; + + + @Override + public int getCharacterID() { + return characterID; + } + public DefineBitsLossless2Tag(byte[] data, int version, long pos) throws IOException { - super(36, data, pos); + super(36,"DefineBitsLossless2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); bitmapFormat = sis.readUI8(); @@ -107,8 +119,36 @@ public class DefineBitsLossless2Tag extends Tag { return baos.toByteArray(); } - @Override - public String toString() { - return "DefineBitsLossless2"; + public BufferedImage getImage() { + BufferedImage bi = new BufferedImage(bitmapWidth, bitmapHeight, BufferedImage.TYPE_INT_ARGB); + Graphics g = bi.getGraphics(); + ALPHACOLORMAPDATA colorMapData = null; + ALPHABITMAPDATA bitmapData = null; + if (bitmapFormat == DefineBitsLossless2Tag.FORMAT_8BIT_COLORMAPPED) { + colorMapData = getColorMapData(); + } + if ((bitmapFormat == DefineBitsLossless2Tag.FORMAT_15BIT_RGB) || (bitmapFormat == DefineBitsLossless2Tag.FORMAT_24BIT_RGB)) { + bitmapData = getBitmapData(); + } + int pos32aligned = 0; + int pos = 0; + for (int y = 0; y < bitmapHeight; y++) { + for (int x = 0; x < bitmapWidth; x++) { + if ((bitmapFormat == DefineBitsLossless2Tag.FORMAT_8BIT_COLORMAPPED)) { + RGBA color = colorMapData.colorTableRGB[colorMapData.colorMapPixelData[pos32aligned]]; + g.setColor(new Color(color.red, color.green, color.blue, color.alpha)); + } + if ((bitmapFormat == DefineBitsLossless2Tag.FORMAT_15BIT_RGB) || (bitmapFormat == DefineBitsLossless2Tag.FORMAT_24BIT_RGB)) { + g.setColor(new Color(bitmapData.bitmapPixelData[pos].red, bitmapData.bitmapPixelData[pos].green, bitmapData.bitmapPixelData[pos].blue, bitmapData.bitmapPixelData[pos].alpha)); + } + g.fillRect(x, y, 1, 1); + pos32aligned++; + pos++; + } + while ((pos32aligned % 4 != 0)) { + pos32aligned++; + } + } + return bi; } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsLosslessTag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsLosslessTag.java index fcc07626d..3048ea1b9 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsLosslessTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsLosslessTag.java @@ -18,15 +18,21 @@ package com.jpexs.asdec.tags; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.types.BITMAPDATA; import com.jpexs.asdec.types.COLORMAPDATA; +import com.jpexs.asdec.types.RGB; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.InflaterInputStream; -public class DefineBitsLosslessTag extends Tag { +public class DefineBitsLosslessTag extends CharacterTag { public int characterID; public int bitmapFormat; @@ -41,6 +47,49 @@ public class DefineBitsLosslessTag extends Tag { private BITMAPDATA bitmapData; private boolean decompressed = false; + + + public BufferedImage getImage() { + BufferedImage bi = new BufferedImage(bitmapWidth, bitmapHeight, BufferedImage.TYPE_INT_RGB); + Graphics g = bi.getGraphics(); + COLORMAPDATA colorMapData = null; + BITMAPDATA bitmapData = null; + if (bitmapFormat == DefineBitsLosslessTag.FORMAT_8BIT_COLORMAPPED) { + colorMapData = getColorMapData(); + } + if ((bitmapFormat == DefineBitsLosslessTag.FORMAT_15BIT_RGB) || (bitmapFormat == DefineBitsLosslessTag.FORMAT_24BIT_RGB)) { + bitmapData = getBitmapData(); + } + int pos32aligned = 0; + int pos = 0; + for (int y = 0; y < bitmapHeight; y++) { + for (int x = 0; x < bitmapWidth; x++) { + if (bitmapFormat == DefineBitsLosslessTag.FORMAT_8BIT_COLORMAPPED) { + RGB color = colorMapData.colorTableRGB[colorMapData.colorMapPixelData[pos32aligned]]; + g.setColor(new Color(color.red, color.green, color.blue)); + } + if (bitmapFormat == DefineBitsLosslessTag.FORMAT_15BIT_RGB) { + g.setColor(new Color(bitmapData.bitmapPixelDataPix15[pos].red * 8, bitmapData.bitmapPixelDataPix15[pos].green * 8, bitmapData.bitmapPixelDataPix15[pos].blue * 8)); + } + if (bitmapFormat == DefineBitsLosslessTag.FORMAT_24BIT_RGB) { + g.setColor(new Color(bitmapData.bitmapPixelDataPix24[pos].red, bitmapData.bitmapPixelDataPix24[pos].green, bitmapData.bitmapPixelDataPix24[pos].blue)); + } + g.fillRect(x, y, 1, 1); + pos32aligned++; + pos++; + } + while ((pos32aligned % 4 != 0)) { + pos32aligned++; + } + } + return bi; + } + + @Override + public int getCharacterID() { + return characterID; + } + public COLORMAPDATA getColorMapData() { if (!decompressed) { uncompressData(); @@ -70,7 +119,7 @@ public class DefineBitsLosslessTag extends Tag { } public DefineBitsLosslessTag(byte[] data, int version, long pos) throws IOException { - super(20, data, pos); + super(20, "DefineBitsLossless", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); bitmapFormat = sis.readUI8(); @@ -106,9 +155,4 @@ public class DefineBitsLosslessTag extends Tag { } return baos.toByteArray(); } - - @Override - public String toString() { - return "DefineBitsLossless"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineBitsTag.java b/trunk/src/com/jpexs/asdec/tags/DefineBitsTag.java index 165dc6bf3..da39b5e5c 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineBitsTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineBitsTag.java @@ -16,25 +16,57 @@ */ package com.jpexs.asdec.tags; +import com.jpexs.asdec.SWF; import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; +import com.jpexs.asdec.tags.base.CharacterTag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -public class DefineBitsTag extends Tag { +public class DefineBitsTag extends CharacterTag { public int characterID; public byte jpegData[]; public DefineBitsTag(byte[] data, int version, long pos) throws IOException { - super(6, data, pos); + super(6, "DefineBits", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); jpegData = sis.readBytes(sis.available()); } + public byte[] getFullImageData(JPEGTablesTag jtt) { + if ((jtt != null)) { + ByteArrayOutputStream baos = null; + + try { + baos = new ByteArrayOutputStream(); + byte jttdata[] = jtt.getData(10); + if(jttdata.length!=0){ + baos.write(jttdata, SWF.hasErrorHeader(jttdata) ? 4 : 0, jttdata.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2)); + baos.write(jpegData, SWF.hasErrorHeader(jpegData) ? 6 : 2, jpegData.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2)); + }else{ + baos.write(jpegData,0,jpegData.length); + } + + } finally { + if (baos != null) { + try { + baos.close(); + } catch (Exception ex) { + //ignore + } + } + } + return baos.toByteArray(); + } + return null; + } + /** * Gets data bytes * @@ -55,7 +87,7 @@ public class DefineBitsTag extends Tag { } @Override - public String toString() { - return "DefineBits"; + public int getCharacterID() { + return characterID; } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineButton2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineButton2Tag.java index f22d60d4a..f8840acc4 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineButton2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineButton2Tag.java @@ -22,7 +22,6 @@ import com.jpexs.asdec.SWFOutputStream; import com.jpexs.asdec.abc.CopyOutputStream; import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.tags.base.Container; -import com.jpexs.asdec.tags.base.TagName; import com.jpexs.asdec.types.BUTTONCONDACTION; import com.jpexs.asdec.types.BUTTONRECORD; import java.io.ByteArrayInputStream; @@ -40,7 +39,7 @@ import java.util.logging.Logger; * * @author JPEXS */ -public class DefineButton2Tag extends Tag implements Container, TagName,CharacterTag { +public class DefineButton2Tag extends CharacterTag implements Container { /** * ID for this character @@ -58,10 +57,6 @@ public class DefineButton2Tag extends Tag implements Container, TagName,Characte * Actions to execute at particular button events */ public List actions = new ArrayList(); - /** - * List of ExportAssetsTag used for converting to String - */ - public List exportAssetsTags = new ArrayList(); @Override public int getCharacterID() { @@ -76,7 +71,7 @@ public class DefineButton2Tag extends Tag implements Container, TagName,Characte * @throws IOException */ public DefineButton2Tag(byte data[], int version, long pos) throws IOException { - super(34, data, pos); + super(34,"DefineButton2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); buttonId = sis.readUI16(); sis.readUB(7); //reserved @@ -174,20 +169,4 @@ public class DefineButton2Tag extends Tag implements Container, TagName,Characte public int getItemCount() { return actions.size(); } - - public String getName() { - return "DefineButton2Tag" + buttonId; - } - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(buttonId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineButton2 (" + buttonId + name + ")"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineButtonCxformTag.java b/trunk/src/com/jpexs/asdec/tags/DefineButtonCxformTag.java index 3968ea787..c0bb4eb06 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineButtonCxformTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineButtonCxformTag.java @@ -61,19 +61,9 @@ public class DefineButtonCxformTag extends Tag { * @throws IOException */ public DefineButtonCxformTag(byte data[], int version, long pos) throws IOException { - super(23, data, pos); + super(23, "DefineButtonCxform",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); buttonId = sis.readUI16(); buttonColorTransform = sis.readCXFORM(); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineButtonCxform"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineButtonSoundTag.java b/trunk/src/com/jpexs/asdec/tags/DefineButtonSoundTag.java index aee2004fb..4bcbcbecb 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineButtonSoundTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineButtonSoundTag.java @@ -30,7 +30,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineButtonSoundTag extends Tag implements CharacterTag{ +public class DefineButtonSoundTag extends CharacterTag{ public int buttonId; public int buttonSoundChar0; @@ -90,7 +90,7 @@ public class DefineButtonSoundTag extends Tag implements CharacterTag{ * @throws IOException */ public DefineButtonSoundTag(byte data[], int version, long pos) throws IOException { - super(17, data, pos); + super(17, "DefineButtonSound",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); buttonId = sis.readUI16(); buttonSoundChar0 = sis.readUI16(); @@ -111,13 +111,4 @@ public class DefineButtonSoundTag extends Tag implements CharacterTag{ } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineButtonSound"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineButtonTag.java b/trunk/src/com/jpexs/asdec/tags/DefineButtonTag.java index b4e45a27a..5583495b4 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineButtonTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineButtonTag.java @@ -23,7 +23,6 @@ import com.jpexs.asdec.abc.CopyOutputStream; import com.jpexs.asdec.action.Action; import com.jpexs.asdec.tags.base.ASMSource; import com.jpexs.asdec.tags.base.CharacterTag; -import com.jpexs.asdec.tags.base.TagName; import com.jpexs.asdec.types.BUTTONRECORD; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -39,7 +38,7 @@ import java.util.logging.Logger; * * @author JPEXS */ -public class DefineButtonTag extends Tag implements ASMSource, TagName, CharacterTag { +public class DefineButtonTag extends CharacterTag implements ASMSource { /** * ID for this character @@ -54,11 +53,6 @@ public class DefineButtonTag extends Tag implements ASMSource, TagName, Characte */ //public List actions; public byte[] actionBytes; - /** - * List of ExportAssetsTag used for converting to String - */ - public List exportAssetsTags = new ArrayList(); - @Override public int getCharacterID() { @@ -73,7 +67,7 @@ public class DefineButtonTag extends Tag implements ASMSource, TagName, Characte * @throws IOException */ public DefineButtonTag(byte[] data, int version, long pos) throws IOException { - super(7, data, pos); + super(7, "DefineButton",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); buttonId = sis.readUI16(); characters = sis.readBUTTONRECORDList(false); @@ -109,22 +103,6 @@ public class DefineButtonTag extends Tag implements ASMSource, TagName, Characte return baos.toByteArray(); } - public String getName() { - return "DefineButtonTag" + buttonId; - } - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(buttonId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineButton (" + buttonId + name + ")"; - } - /** * Converts actions to ASM source * diff --git a/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java b/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java index 1d558f2b0..9535bda80 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineEditTextTag.java @@ -31,7 +31,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineEditTextTag extends Tag implements CharacterTag { +public class DefineEditTextTag extends CharacterTag { public int characterID; public RECT bounds; @@ -139,7 +139,7 @@ public class DefineEditTextTag extends Tag implements CharacterTag { * @throws IOException */ public DefineEditTextTag(byte data[], int version, long pos) throws IOException { - super(37, data, pos); + super(37, "DefineEditText", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); bounds = sis.readRECT(); @@ -188,13 +188,4 @@ public class DefineEditTextTag extends Tag implements CharacterTag { } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineEditText"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java index 9861907ee..2f39430c7 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFont2Tag.java @@ -146,7 +146,7 @@ public class DefineFont2Tag extends Tag implements FontTag { * @throws IOException */ public DefineFont2Tag(byte data[], int version, long pos) throws IOException { - super(48, data, pos); + super(48,"DefineFont2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontId = sis.readUI16(); fontFlagsHasLayout = sis.readUB(1) == 1; @@ -209,13 +209,4 @@ public class DefineFont2Tag extends Tag implements FontTag { } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineFont2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java index 5c44c2d89..78612da07 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFont3Tag.java @@ -55,7 +55,7 @@ public class DefineFont3Tag extends Tag implements FontTag { public KERNINGRECORD fontKerningTable[]; public DefineFont3Tag(byte[] data, int version, long pos) throws IOException { - super(75, data, pos); + super(75, "DefineFont3",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontId = sis.readUI16(); fontFlagsHasLayout = sis.readUB(1) == 1; @@ -200,8 +200,4 @@ public class DefineFont3Tag extends Tag implements FontTag { return baos.toByteArray(); } - @Override - public String toString() { - return "DefineFont3"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFont4Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFont4Tag.java index ae170762e..87a551e75 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFont4Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFont4Tag.java @@ -24,7 +24,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; -public class DefineFont4Tag extends Tag implements CharacterTag{ +public class DefineFont4Tag extends CharacterTag{ public int fontID; public boolean fontFlagsHasFontData; @@ -39,7 +39,7 @@ public class DefineFont4Tag extends Tag implements CharacterTag{ } public DefineFont4Tag(byte[] data, int version, long pos) throws IOException { - super(91, data, pos); + super(91,"DefineFont4", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontID = sis.readUI16(); sis.readUB(5); @@ -74,8 +74,4 @@ public class DefineFont4Tag extends Tag implements CharacterTag{ return baos.toByteArray(); } - @Override - public String toString() { - return "DefineFont4"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontAlignZonesTag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontAlignZonesTag.java index 58b33e6a0..caa1533bf 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontAlignZonesTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontAlignZonesTag.java @@ -33,7 +33,7 @@ public class DefineFontAlignZonesTag extends Tag { public List zoneTable; public DefineFontAlignZonesTag(byte[] data, int version, long pos) throws IOException { - super(73, data, pos); + super(73, "DefineFontAlignZones",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontID = sis.readUI16(); CSMTableHint = (int) sis.readUB(2); @@ -68,8 +68,4 @@ public class DefineFontAlignZonesTag extends Tag { return baos.toByteArray(); } - @Override - public String toString() { - return "DefineFontAlignZones"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontInfo2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontInfo2Tag.java index 7356aec17..0c4d6d8aa 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontInfo2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontInfo2Tag.java @@ -81,7 +81,7 @@ public class DefineFontInfo2Tag extends Tag { * @throws IOException */ public DefineFontInfo2Tag(byte data[], int version, long pos) throws IOException { - super(62, data, pos); + super(62,"DefineFontInfo2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontID = sis.readUI16(); int fontNameLen = sis.readUI8(); @@ -99,14 +99,4 @@ public class DefineFontInfo2Tag extends Tag { codeTable[i] = sis.readUI16(); } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineFontInfo2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontInfoTag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontInfoTag.java index 8e048c80a..599845e23 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontInfoTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontInfoTag.java @@ -84,7 +84,7 @@ public class DefineFontInfoTag extends Tag { * @throws IOException */ public DefineFontInfoTag(byte data[], int version, long pos) throws IOException { - super(13, data, pos); + super(13,"DefineFontInfo", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontId = sis.readUI16(); int fontNameLen = sis.readUI8(); @@ -105,14 +105,4 @@ public class DefineFontInfoTag extends Tag { } } while (sis.available() > 0); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineFontInfo"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontNameTag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontNameTag.java index 6ed954e0b..3ef329a36 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontNameTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontNameTag.java @@ -27,15 +27,10 @@ public class DefineFontNameTag extends Tag { public String fontCopyright; public DefineFontNameTag(byte[] data, int version, long pos) throws IOException { - super(88, data, pos); + super(88,"DefineFontName", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontId = sis.readUI16(); fontName = sis.readString(); fontCopyright = sis.readString(); } - - @Override - public String toString() { - return "DefineFontName"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java b/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java index 55fa34dae..5190e512f 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineFontTag.java @@ -69,7 +69,7 @@ public class DefineFontTag extends Tag implements FontTag{ * @throws IOException */ public DefineFontTag(byte data[], int version, long pos) throws IOException { - super(10, data, pos); + super(10,"DefineFont", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); fontId = sis.readUI16(); int firstOffset = sis.readUI16(); @@ -85,13 +85,4 @@ public class DefineFontTag extends Tag implements FontTag{ } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineFont"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java index dc1ea9ad0..bebe377f3 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineMorphShape2Tag.java @@ -34,7 +34,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineMorphShape2Tag extends Tag implements CharacterTag, BoundedTag { +public class DefineMorphShape2Tag extends CharacterTag implements BoundedTag { public int characterId; public RECT startBounds; @@ -105,7 +105,7 @@ public class DefineMorphShape2Tag extends Tag implements CharacterTag, BoundedTa * @throws IOException */ public DefineMorphShape2Tag(byte data[], int version, long pos) throws IOException { - super(84, data, pos); + super(84, "DefineMorphShape2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterId = sis.readUI16(); startBounds = sis.readRECT(); @@ -122,13 +122,4 @@ public class DefineMorphShape2Tag extends Tag implements CharacterTag, BoundedTa endEdges = sis.readSHAPE(1); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineMorphShape2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java b/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java index 7914064bc..181d62ab8 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineMorphShapeTag.java @@ -34,7 +34,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineMorphShapeTag extends Tag implements CharacterTag, BoundedTag{ +public class DefineMorphShapeTag extends CharacterTag implements BoundedTag{ public int characterId; public RECT startBounds; @@ -88,7 +88,7 @@ public class DefineMorphShapeTag extends Tag implements CharacterTag, BoundedTag * @throws IOException */ public DefineMorphShapeTag(byte data[], int version, long pos) throws IOException { - super(46, data, pos); + super(46,"DefineMorphShape", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterId = sis.readUI16(); startBounds = sis.readRECT(); @@ -100,15 +100,6 @@ public class DefineMorphShapeTag extends Tag implements CharacterTag, BoundedTag endEdges = sis.readSHAPE(1); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineMorphShape"; - } @Override public RECT getRect() { diff --git a/trunk/src/com/jpexs/asdec/tags/DefineScalingGridTag.java b/trunk/src/com/jpexs/asdec/tags/DefineScalingGridTag.java index 670f38a5c..0d2b400b9 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineScalingGridTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineScalingGridTag.java @@ -33,7 +33,7 @@ public class DefineScalingGridTag extends Tag { private RECT splitter; public DefineScalingGridTag(byte[] data, int version, long pos) throws IOException { - super(78, data, pos); + super(78, "DefineScalingGrid",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterId = sis.readUI16(); splitter = sis.readRECT(); @@ -57,9 +57,4 @@ public class DefineScalingGridTag extends Tag { } return baos.toByteArray(); } - - @Override - public String toString() { - return "DefineScalingGrid"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineSceneAndFrameLabelDataTag.java b/trunk/src/com/jpexs/asdec/tags/DefineSceneAndFrameLabelDataTag.java index b2c1d7eec..720c9a5ec 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineSceneAndFrameLabelDataTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineSceneAndFrameLabelDataTag.java @@ -72,7 +72,7 @@ public class DefineSceneAndFrameLabelDataTag extends Tag { * @throws IOException */ public DefineSceneAndFrameLabelDataTag(byte data[], int version, long pos) throws IOException { - super(86, data, pos); + super(86, "DefineSceneAndFrameLabelData",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); int sceneCount = (int) sis.readEncodedU32(); sceneOffsets = new long[sceneCount]; @@ -88,14 +88,4 @@ public class DefineSceneAndFrameLabelDataTag extends Tag { } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineSceneAndFrameLabelData"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java index 1aec2f7cc..d8758249c 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape2Tag.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class DefineShape2Tag extends Tag implements CharacterTag, BoundedTag{ +public class DefineShape2Tag extends CharacterTag implements BoundedTag{ public int shapeId; public RECT shapeBounds; @@ -44,24 +44,11 @@ public class DefineShape2Tag extends Tag implements CharacterTag, BoundedTag{ } public DefineShape2Tag(byte[] data, int version, long pos) throws IOException { - super(22, data, pos); + super(22, "DefineShape2",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); shapeId = sis.readUI16(); shapeBounds = sis.readRECT(); shapes = sis.readSHAPEWITHSTYLE(2); } - public List exportAssetsTags = new ArrayList(); - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(shapeId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineShape2 (" + shapeId + name + ")"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java index 672b833c7..1e3ddb691 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape3Tag.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class DefineShape3Tag extends Tag implements CharacterTag,BoundedTag{ +public class DefineShape3Tag extends CharacterTag implements BoundedTag{ public int shapeId; public RECT shapeBounds; @@ -42,24 +42,10 @@ public class DefineShape3Tag extends Tag implements CharacterTag,BoundedTag{ } public DefineShape3Tag(byte[] data, int version, long pos) throws IOException { - super(32, data, pos); + super(32,"DefineShape3", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); shapeId = sis.readUI16(); shapeBounds = sis.readRECT(); shapes = sis.readSHAPEWITHSTYLE(3); } - - public List exportAssetsTags = new ArrayList(); - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(shapeId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineShape3 (" + shapeId + name + ")"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java index f0a5d3dab..7fd2da444 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShape4Tag.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class DefineShape4Tag extends Tag implements CharacterTag,BoundedTag{ +public class DefineShape4Tag extends CharacterTag implements BoundedTag{ public int shapeId; public RECT shapeBounds; @@ -47,7 +47,7 @@ public class DefineShape4Tag extends Tag implements CharacterTag,BoundedTag{ } public DefineShape4Tag(byte[] data, int version, long pos) throws IOException { - super(83, data, pos); + super(83, "DefineShape4", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); shapeId = sis.readUI16(); shapeBounds = sis.readRECT(); @@ -58,18 +58,4 @@ public class DefineShape4Tag extends Tag implements CharacterTag,BoundedTag{ usesScalingStrokes = sis.readUB(1) == 1; shapes = sis.readSHAPEWITHSTYLE(4); } - - public List exportAssetsTags = new ArrayList(); - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(shapeId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineShape4 (" + shapeId + name + ")"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java b/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java index 4babc3a5d..e3331a499 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineShapeTag.java @@ -26,7 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class DefineShapeTag extends Tag implements CharacterTag, BoundedTag { +public class DefineShapeTag extends CharacterTag implements BoundedTag { public int shapeId; public RECT shapeBounds; @@ -40,29 +40,13 @@ public class DefineShapeTag extends Tag implements CharacterTag, BoundedTag { public DefineShapeTag(byte[] data, int version, long pos) throws IOException { - super(2, data, pos); + super(2,"DefineShape", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); shapeId = sis.readUI16(); shapeBounds = sis.readRECT(); shapes = sis.readSHAPEWITHSTYLE(1); } - - public List exportAssetsTags = new ArrayList(); - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(shapeId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineShape (" + shapeId + name + ")"; - } - - @Override public int getCharacterID() { return shapeId; diff --git a/trunk/src/com/jpexs/asdec/tags/DefineSoundTag.java b/trunk/src/com/jpexs/asdec/tags/DefineSoundTag.java index 20716fdeb..45aa5a467 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineSoundTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineSoundTag.java @@ -29,7 +29,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineSoundTag extends Tag implements CharacterTag { +public class DefineSoundTag extends CharacterTag { public int soundId; public int soundFormat; @@ -82,7 +82,7 @@ public class DefineSoundTag extends Tag implements CharacterTag { * @throws IOException */ public DefineSoundTag(byte data[], int version, long pos) throws IOException { - super(14, data, pos); + super(14,"DefineSound", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); soundId = sis.readUI16(); soundFormat = (int) sis.readUB(4); @@ -91,14 +91,4 @@ public class DefineSoundTag extends Tag implements CharacterTag { soundSampleCount = sis.readUI32(); soundData = sis.readBytes(sis.available()); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineSound"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java index 6232b332a..88a16b6a1 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineSpriteTag.java @@ -22,7 +22,6 @@ import com.jpexs.asdec.SWFOutputStream; import com.jpexs.asdec.abc.CopyOutputStream; import com.jpexs.asdec.tags.base.CharacterTag; import com.jpexs.asdec.tags.base.Container; -import com.jpexs.asdec.tags.base.TagName; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -33,7 +32,7 @@ import java.util.List; /** * Defines a sprite character */ -public class DefineSpriteTag extends Tag implements Container, TagName, CharacterTag { +public class DefineSpriteTag extends CharacterTag implements Container { /** * Character ID of sprite @@ -47,11 +46,7 @@ public class DefineSpriteTag extends Tag implements Container, TagName, Characte * A series of tags */ public List subTags; - /** - * List of ExportAssetsTag used for converting to String - */ - public List exportAssetsTags = new ArrayList(); - private int level; + private int level; @Override public int getCharacterID() { @@ -69,7 +64,7 @@ public class DefineSpriteTag extends Tag implements Container, TagName, Characte * @throws IOException */ public DefineSpriteTag(byte[] data, int version, int level, long pos) throws IOException { - super(39, data, pos); + super(39,"DefineSprite", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version, pos); spriteId = sis.readUI16(); frameCount = sis.readUI16(); @@ -105,22 +100,7 @@ public class DefineSpriteTag extends Tag implements Container, TagName, Characte return baos.toByteArray(); } - @Override - public String getName() { - return "DefineSpriteTag" + spriteId; - } - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(spriteId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DefineSpriteTag (" + spriteId + name + ")"; - } /** * Returns all sub-items diff --git a/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java b/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java index 31d4c9fc7..106b0f1d4 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineText2Tag.java @@ -34,7 +34,7 @@ import java.util.List; * * @author JPEXS */ -public class DefineText2Tag extends Tag implements CharacterTag { +public class DefineText2Tag extends CharacterTag { public int characterID; public RECT textBounds; @@ -82,7 +82,7 @@ public class DefineText2Tag extends Tag implements CharacterTag { * @throws IOException */ public DefineText2Tag(byte data[], int version, long pos) throws IOException { - super(33, data, pos); + super(33,"DefineText2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); textBounds = sis.readRECT(); @@ -96,13 +96,4 @@ public class DefineText2Tag extends Tag implements CharacterTag { } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineText2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java b/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java index 8f2d32ba2..97031ac4c 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineTextTag.java @@ -34,7 +34,7 @@ import java.util.List; * * @author JPEXS */ -public class DefineTextTag extends Tag implements CharacterTag{ +public class DefineTextTag extends CharacterTag{ public int characterID; public RECT textBounds; @@ -49,7 +49,7 @@ public class DefineTextTag extends Tag implements CharacterTag{ } public DefineTextTag(int characterID, RECT textBounds, MATRIX textMatrix, int glyphBits, int advanceBits, List textRecords) { - super(11, new byte[0], 0); + super(11,"DefineText", new byte[0], 0); this.characterID = characterID; this.textBounds = textBounds; this.textMatrix = textMatrix; @@ -94,7 +94,7 @@ public class DefineTextTag extends Tag implements CharacterTag{ * @throws IOException */ public DefineTextTag(byte data[], int version, long pos) throws IOException { - super(11, data, pos); + super(11,"DefineText", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); textBounds = sis.readRECT(); @@ -107,14 +107,4 @@ public class DefineTextTag extends Tag implements CharacterTag{ textRecords.add(tr); } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineText"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DefineVideoStreamTag.java b/trunk/src/com/jpexs/asdec/tags/DefineVideoStreamTag.java index 35783263e..42b2132fc 100644 --- a/trunk/src/com/jpexs/asdec/tags/DefineVideoStreamTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DefineVideoStreamTag.java @@ -29,7 +29,7 @@ import java.io.OutputStream; * * @author JPEXS */ -public class DefineVideoStreamTag extends Tag implements CharacterTag { +public class DefineVideoStreamTag extends CharacterTag { public int characterID; public int numFrames; @@ -77,7 +77,7 @@ public class DefineVideoStreamTag extends Tag implements CharacterTag { * @throws IOException */ public DefineVideoStreamTag(byte data[], int version, long pos) throws IOException { - super(60, data, pos); + super(60, "DefineVideoStream",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterID = sis.readUI16(); numFrames = sis.readUI16(); @@ -89,13 +89,4 @@ public class DefineVideoStreamTag extends Tag implements CharacterTag { codecID = sis.readUI8(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "DefineVideoStream"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/DoABCTag.java b/trunk/src/com/jpexs/asdec/tags/DoABCTag.java index bbb1b9aba..e5fefe980 100644 --- a/trunk/src/com/jpexs/asdec/tags/DoABCTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DoABCTag.java @@ -44,15 +44,13 @@ public class DoABCTag extends Tag implements Comparable { */ public String name; - /** - * Returns string representation of the object - * - * @return String representation of the object - */ + @Override - public String toString() { + public String getName() { return "DoABC (" + name + ")"; } + + /** * Constructor @@ -62,7 +60,7 @@ public class DoABCTag extends Tag implements Comparable { * @throws IOException */ public DoABCTag(byte[] data, int version, long pos) throws IOException { - super(82, data, pos); + super(82,"DoABC",data, pos); InputStream is = new ByteArrayInputStream(data); SWFInputStream sis = new SWFInputStream(is, version); flags = sis.readUI32(); diff --git a/trunk/src/com/jpexs/asdec/tags/DoActionTag.java b/trunk/src/com/jpexs/asdec/tags/DoActionTag.java index 677551ba7..6cbcdd759 100644 --- a/trunk/src/com/jpexs/asdec/tags/DoActionTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DoActionTag.java @@ -46,7 +46,7 @@ public class DoActionTag extends Tag implements ASMSource { * @throws IOException */ public DoActionTag(byte[] data, int version, long pos) { - super(12, data, pos); + super(12, "DoAction",data, pos); try { ByteArrayInputStream bais = new ByteArrayInputStream(data); SWFInputStream sis = new SWFInputStream(bais, version); diff --git a/trunk/src/com/jpexs/asdec/tags/DoInitActionTag.java b/trunk/src/com/jpexs/asdec/tags/DoInitActionTag.java index 19d79d689..dabc70612 100644 --- a/trunk/src/com/jpexs/asdec/tags/DoInitActionTag.java +++ b/trunk/src/com/jpexs/asdec/tags/DoInitActionTag.java @@ -20,7 +20,7 @@ import com.jpexs.asdec.SWFInputStream; import com.jpexs.asdec.SWFOutputStream; import com.jpexs.asdec.action.Action; import com.jpexs.asdec.tags.base.ASMSource; -import com.jpexs.asdec.tags.base.TagName; +import com.jpexs.asdec.tags.base.CharacterTag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -29,7 +29,7 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; -public class DoInitActionTag extends Tag implements ASMSource, TagName { +public class DoInitActionTag extends CharacterTag implements ASMSource { /** * Identifier of Sprite @@ -39,11 +39,7 @@ public class DoInitActionTag extends Tag implements ASMSource, TagName { * List of actions to perform */ //public List actions = new ArrayList(); - public byte[] actionBytes; - /** - * List of ExportAssetsTag used for converting to String - */ - public List exportAssetsTags = new ArrayList(); + public byte[] actionBytes; /** * Constructor @@ -53,7 +49,7 @@ public class DoInitActionTag extends Tag implements ASMSource, TagName { * @throws IOException */ public DoInitActionTag(byte[] data, int version, long pos) throws IOException { - super(59, data, pos); + super(59, "DoInitAction",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); spriteId = sis.readUI16(); //actions = sis.readActionList(); @@ -78,23 +74,7 @@ public class DoInitActionTag extends Tag implements ASMSource, TagName { } catch (IOException e) { } return baos.toByteArray(); - } - - @Override - public String toString() { - String name = ""; - for (ExportAssetsTag eat : exportAssetsTags) { - int pos = eat.tags.indexOf(spriteId); - if (pos > -1) { - name = ": " + eat.names.get(pos); - } - } - return "DoInitAction (" + spriteId + name + ")"; - } - - public String getName() { - return "DoInitAction" + spriteId; - } + } /** * Whether or not this object contains ASM source @@ -141,4 +121,9 @@ public class DoInitActionTag extends Tag implements ASMSource, TagName { public void setActionBytes(byte[] actionBytes) { this.actionBytes = actionBytes; } + + @Override + public int getCharacterID() { + return spriteId; + } } diff --git a/trunk/src/com/jpexs/asdec/tags/EnableDebugger2Tag.java b/trunk/src/com/jpexs/asdec/tags/EnableDebugger2Tag.java index 4ff1e26c2..56bce07c0 100644 --- a/trunk/src/com/jpexs/asdec/tags/EnableDebugger2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/EnableDebugger2Tag.java @@ -64,19 +64,10 @@ public class EnableDebugger2Tag extends Tag { * @throws IOException */ public EnableDebugger2Tag(byte data[], int version, long pos) throws IOException { - super(64, data, pos); + super(64,"EnableDebugger2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); reserved = sis.readUI16(); passwordHash = sis.readString(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "EnableDebugger2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/EnableDebuggerTag.java b/trunk/src/com/jpexs/asdec/tags/EnableDebuggerTag.java index 5aad4e919..626ab210a 100644 --- a/trunk/src/com/jpexs/asdec/tags/EnableDebuggerTag.java +++ b/trunk/src/com/jpexs/asdec/tags/EnableDebuggerTag.java @@ -63,18 +63,8 @@ public class EnableDebuggerTag extends Tag { * @throws IOException */ public EnableDebuggerTag(byte data[], int version, long pos) throws IOException { - super(58, data, pos); + super(58,"EnableDebugger", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); passwordHash = sis.readString(); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "EnableDebugger"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/EndTag.java b/trunk/src/com/jpexs/asdec/tags/EndTag.java index c7b779af2..0d648658b 100644 --- a/trunk/src/com/jpexs/asdec/tags/EndTag.java +++ b/trunk/src/com/jpexs/asdec/tags/EndTag.java @@ -44,23 +44,13 @@ public class EndTag extends Tag { * @throws IOException */ public EndTag(byte data[], int version, long pos) throws IOException { - super(0, data, pos); + super(0,"End", data, pos); } public EndTag() { - super(0, new byte[0], 0); + super(0,"End", new byte[0], 0); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "End"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/ExportAssetsTag.java b/trunk/src/com/jpexs/asdec/tags/ExportAssetsTag.java index d40a74b3f..267439568 100644 --- a/trunk/src/com/jpexs/asdec/tags/ExportAssetsTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ExportAssetsTag.java @@ -46,7 +46,7 @@ public class ExportAssetsTag extends Tag { * @throws IOException */ public ExportAssetsTag(byte[] data, int version, long pos) throws IOException { - super(56, data, pos); + super(56, "ExportAssets",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); int count = sis.readUI16(); tags = new ArrayList(); @@ -81,13 +81,4 @@ public class ExportAssetsTag extends Tag { return baos.toByteArray(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "ExportAssets"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/FileAttributesTag.java b/trunk/src/com/jpexs/asdec/tags/FileAttributesTag.java index e00ac32e7..8fc8174a1 100644 --- a/trunk/src/com/jpexs/asdec/tags/FileAttributesTag.java +++ b/trunk/src/com/jpexs/asdec/tags/FileAttributesTag.java @@ -35,7 +35,7 @@ public class FileAttributesTag extends Tag { private int reserved3; public FileAttributesTag(byte[] data, int version, long pos) throws IOException { - super(69, data, pos); + super(69,"FileAttributes", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); reserved1 = (int) sis.readUB(1); // reserved // UB[1] == 0 (reserved) @@ -74,8 +74,4 @@ public class FileAttributesTag extends Tag { return baos.toByteArray(); } - @Override - public String toString() { - return "FileAttributes"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/FrameLabelTag.java b/trunk/src/com/jpexs/asdec/tags/FrameLabelTag.java index 05741a8b2..60fb3f747 100644 --- a/trunk/src/com/jpexs/asdec/tags/FrameLabelTag.java +++ b/trunk/src/com/jpexs/asdec/tags/FrameLabelTag.java @@ -29,7 +29,7 @@ public class FrameLabelTag extends Tag { private boolean namedAnchor = false; public FrameLabelTag(byte[] data, int version, long pos) throws IOException { - super(43, data, pos); + super(43,"FrameLabel", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); name = sis.readString(); if (sis.available() > 0) { @@ -39,10 +39,6 @@ public class FrameLabelTag extends Tag { } } - @Override - public String toString() { - return "FrameLabel"; - } /** * Gets data bytes diff --git a/trunk/src/com/jpexs/asdec/tags/ImportAssets2Tag.java b/trunk/src/com/jpexs/asdec/tags/ImportAssets2Tag.java index bc2398ecb..7aa3b0377 100644 --- a/trunk/src/com/jpexs/asdec/tags/ImportAssets2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/ImportAssets2Tag.java @@ -45,7 +45,7 @@ public class ImportAssets2Tag extends Tag { * @throws IOException */ public ImportAssets2Tag(byte data[], int version, long pos) throws IOException { - super(57, data, pos); + super(57, "ImportAssets2",data, pos); assets = new HashMap(); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); url = sis.readString(); @@ -84,13 +84,4 @@ public class ImportAssets2Tag extends Tag { return baos.toByteArray(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "ImportAssets2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/ImportAssetsTag.java b/trunk/src/com/jpexs/asdec/tags/ImportAssetsTag.java index d4fed7eec..c6bafca31 100644 --- a/trunk/src/com/jpexs/asdec/tags/ImportAssetsTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ImportAssetsTag.java @@ -45,7 +45,7 @@ public class ImportAssetsTag extends Tag { * @throws IOException */ public ImportAssetsTag(byte data[], int version, long pos) throws IOException { - super(57, data, pos); + super(57,"ImportAssets", data, pos); assets = new HashMap(); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); url = sis.readString(); @@ -79,14 +79,4 @@ public class ImportAssetsTag extends Tag { } return baos.toByteArray(); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "ImportAssets"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/JPEGTablesTag.java b/trunk/src/com/jpexs/asdec/tags/JPEGTablesTag.java index 193ecc8be..fb6fa844e 100644 --- a/trunk/src/com/jpexs/asdec/tags/JPEGTablesTag.java +++ b/trunk/src/com/jpexs/asdec/tags/JPEGTablesTag.java @@ -21,11 +21,7 @@ import java.io.IOException; public class JPEGTablesTag extends Tag { public JPEGTablesTag(byte[] data, long pos) throws IOException { - super(8, data, pos); //data is JPEG data + super(8, "JPEGTables",data, pos); //data is JPEG data } - @Override - public String toString() { - return "JPEGTables"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/MetadataTag.java b/trunk/src/com/jpexs/asdec/tags/MetadataTag.java index cf9e7736a..7898fcaa5 100644 --- a/trunk/src/com/jpexs/asdec/tags/MetadataTag.java +++ b/trunk/src/com/jpexs/asdec/tags/MetadataTag.java @@ -28,7 +28,7 @@ public class MetadataTag extends Tag { public String xmlMetadata; public MetadataTag(byte[] data, int version, long pos) { - super(77, data, pos); + super(77,"Metadata", data, pos); try { SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); xmlMetadata = sis.readString(); @@ -54,8 +54,4 @@ public class MetadataTag extends Tag { return baos.toByteArray(); } - @Override - public String toString() { - return "Metadata"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/NotDefinedTag.java b/trunk/src/com/jpexs/asdec/tags/NotDefinedTag.java deleted file mode 100644 index 11aca18b4..000000000 --- a/trunk/src/com/jpexs/asdec/tags/NotDefinedTag.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2010-2011 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.asdec.tags; - -/** - * - * @author JPEXS - */ -public class NotDefinedTag extends Tag { - - private String name; - - public NotDefinedTag(String name, int id, byte[] data, long pos) { - super(id, data, pos); - this.name = name; - } - - @Override - public String toString() { - return name; - } -} diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java index 182a8774e..c786ab1ba 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObject2Tag.java @@ -158,7 +158,7 @@ public class PlaceObject2Tag extends Tag implements Container { } public PlaceObject2Tag(boolean placeFlagHasClipActions, boolean placeFlagHasClipDepth, boolean placeFlagHasName, boolean placeFlagHasRatio, boolean placeFlagHasColorTransform, boolean placeFlagHasMatrix, boolean placeFlagHasCharacter, boolean placeFlagMove, int depth, int characterId, MATRIX matrix, CXFORMWITHALPHA colorTransform, int ratio, String name, int clipDepth, CLIPACTIONS clipActions) { - super(26, new byte[0], 0); + super(26,"PlaceObject2", new byte[0], 0); this.placeFlagHasClipActions = placeFlagHasClipActions; this.placeFlagHasClipDepth = placeFlagHasClipDepth; this.placeFlagHasName = placeFlagHasName; @@ -187,7 +187,7 @@ public class PlaceObject2Tag extends Tag implements Container { * @throws IOException */ public PlaceObject2Tag(byte data[], int version, long pos) throws IOException { - super(26, data, pos); + super(26,"PlaceObject2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); placeFlagHasClipActions = sis.readUB(1) == 1; placeFlagHasClipDepth = sis.readUB(1) == 1; @@ -221,16 +221,6 @@ public class PlaceObject2Tag extends Tag implements Container { } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "PlaceObject2"; - } - /** * Returns all sub-items * diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java index 931c720fb..5ca8f513c 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObject3Tag.java @@ -228,7 +228,7 @@ public class PlaceObject3Tag extends Tag implements Container { * @throws IOException */ public PlaceObject3Tag(byte data[], int version, long pos) throws IOException { - super(70, data, pos); + super(70,"PlaceObject3", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); placeFlagHasClipActions = sis.readUB(1) == 1; placeFlagHasClipDepth = sis.readUB(1) == 1; @@ -287,16 +287,6 @@ public class PlaceObject3Tag extends Tag implements Container { } } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "PlaceObject3"; - } - /** * Returns all sub-items * diff --git a/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java b/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java index 71d6f95f4..385708505 100644 --- a/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java +++ b/trunk/src/com/jpexs/asdec/tags/PlaceObjectTag.java @@ -80,7 +80,7 @@ public class PlaceObjectTag extends Tag { * @throws IOException */ public PlaceObjectTag(byte data[], int version, long pos) throws IOException { - super(4, data, pos); + super(4,"PlaceObject", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterId = sis.readUI16(); depth = sis.readUI16(); @@ -91,7 +91,7 @@ public class PlaceObjectTag extends Tag { } public PlaceObjectTag(int characterId, int depth, MATRIX matrix, CXFORM colorTransform) { - super(4, new byte[0], 0); + super(4,"PlaceObject", new byte[0], 0); this.characterId = characterId; this.depth = depth; this.matrix = matrix; @@ -99,14 +99,5 @@ public class PlaceObjectTag extends Tag { } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "PlaceObject"; - } + } diff --git a/trunk/src/com/jpexs/asdec/tags/ProductInfoTag.java b/trunk/src/com/jpexs/asdec/tags/ProductInfoTag.java index b22db8e8a..c92364b9c 100644 --- a/trunk/src/com/jpexs/asdec/tags/ProductInfoTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ProductInfoTag.java @@ -31,7 +31,7 @@ public class ProductInfoTag extends Tag { public long compilationDate; public ProductInfoTag(byte[] data, int version, long pos) throws IOException { - super(41, data, pos); + super(41, "ProductInfo",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); /* * 0: Unknown @@ -59,8 +59,4 @@ public class ProductInfoTag extends Tag { compilationDate |= sis.readUI32() << 32; } - @Override - public String toString() { - return "ProductInfo"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/ProtectTag.java b/trunk/src/com/jpexs/asdec/tags/ProtectTag.java index 2187c9121..323576690 100644 --- a/trunk/src/com/jpexs/asdec/tags/ProtectTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ProtectTag.java @@ -63,20 +63,10 @@ public class ProtectTag extends Tag { * @throws IOException */ public ProtectTag(byte data[], int version, long pos) throws IOException { - super(24, data, pos); + super(24,"Protect", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); if (sis.available() > 0) { passwordHash = sis.readString(); } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "Protect"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/RemoveObject2Tag.java b/trunk/src/com/jpexs/asdec/tags/RemoveObject2Tag.java index 9eaba8667..5f0adaacd 100644 --- a/trunk/src/com/jpexs/asdec/tags/RemoveObject2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/RemoveObject2Tag.java @@ -25,13 +25,8 @@ public class RemoveObject2Tag extends Tag { public int depth; public RemoveObject2Tag(byte[] data, int version, long pos) throws IOException { - super(28, data, pos); + super(28,"RemoveObject2",data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); depth = sis.readUI16(); } - - @Override - public String toString() { - return "RemoveObject2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/RemoveObjectTag.java b/trunk/src/com/jpexs/asdec/tags/RemoveObjectTag.java index 40b8a5476..b12e4f5f7 100644 --- a/trunk/src/com/jpexs/asdec/tags/RemoveObjectTag.java +++ b/trunk/src/com/jpexs/asdec/tags/RemoveObjectTag.java @@ -66,19 +66,10 @@ public class RemoveObjectTag extends Tag { * @throws IOException */ public RemoveObjectTag(byte data[], int version, long pos) throws IOException { - super(5, data, pos); + super(5,"RemoveObject", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); characterId = sis.readUI16(); depth = sis.readUI16(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "RemoveObject"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/ScriptLimitsTag.java b/trunk/src/com/jpexs/asdec/tags/ScriptLimitsTag.java index d1fa3fee0..179c33fc6 100644 --- a/trunk/src/com/jpexs/asdec/tags/ScriptLimitsTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ScriptLimitsTag.java @@ -29,7 +29,7 @@ public class ScriptLimitsTag extends Tag { public int scriptTimeoutSeconds; public ScriptLimitsTag(byte[] data, int version, long pos) throws IOException { - super(65, data, pos); + super(65,"ScriptLimits", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); maxRecursionDepth = sis.readUI16(); scriptTimeoutSeconds = sis.readUI16(); @@ -53,9 +53,4 @@ public class ScriptLimitsTag extends Tag { } return baos.toByteArray(); } - - @Override - public String toString() { - return "ScriptLimits"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/SetBackgroundColorTag.java b/trunk/src/com/jpexs/asdec/tags/SetBackgroundColorTag.java index d822b6b22..6875ba5b8 100644 --- a/trunk/src/com/jpexs/asdec/tags/SetBackgroundColorTag.java +++ b/trunk/src/com/jpexs/asdec/tags/SetBackgroundColorTag.java @@ -29,13 +29,13 @@ public class SetBackgroundColorTag extends Tag { public RGB backgroundColor; public SetBackgroundColorTag(byte[] data, int version, long pos) throws IOException { - super(9, data, pos); + super(9,"SetBackgroundColor", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); backgroundColor = sis.readRGB(); } public SetBackgroundColorTag(RGB backgroundColor) { - super(9, new byte[0], 0); + super(9,"SetBackgroundColor", new byte[0], 0); this.backgroundColor = backgroundColor; } @@ -51,9 +51,5 @@ public class SetBackgroundColorTag extends Tag { } - - @Override - public String toString() { - return "SetBackgroundColor"; - } + } diff --git a/trunk/src/com/jpexs/asdec/tags/SetTabIndexTag.java b/trunk/src/com/jpexs/asdec/tags/SetTabIndexTag.java index 0a86b31d5..3f9397253 100644 --- a/trunk/src/com/jpexs/asdec/tags/SetTabIndexTag.java +++ b/trunk/src/com/jpexs/asdec/tags/SetTabIndexTag.java @@ -66,19 +66,10 @@ public class SetTabIndexTag extends Tag { * @throws IOException */ public SetTabIndexTag(byte data[], int version, long pos) throws IOException { - super(66, data, pos); + super(66,"SetTabIndex", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); depth = sis.readUI16(); tabIndex = sis.readUI16(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "SetTabIndex"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/ShowFrameTag.java b/trunk/src/com/jpexs/asdec/tags/ShowFrameTag.java index 1c9bd49ae..eabe8e9fb 100644 --- a/trunk/src/com/jpexs/asdec/tags/ShowFrameTag.java +++ b/trunk/src/com/jpexs/asdec/tags/ShowFrameTag.java @@ -27,11 +27,11 @@ public class ShowFrameTag extends Tag { * Constructor */ public ShowFrameTag(long pos) { - super(1, new byte[0], pos); + super(1,"ShowFrame", new byte[0], pos); } public ShowFrameTag(){ - super(1, new byte[0], 0); + super(1,"ShowFrame", new byte[0], 0); } /** @@ -45,13 +45,4 @@ public class ShowFrameTag extends Tag { return super.getData(version); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "ShowFrame"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/SoundStreamBlockTag.java b/trunk/src/com/jpexs/asdec/tags/SoundStreamBlockTag.java index 621490407..4f3a2b04b 100644 --- a/trunk/src/com/jpexs/asdec/tags/SoundStreamBlockTag.java +++ b/trunk/src/com/jpexs/asdec/tags/SoundStreamBlockTag.java @@ -33,16 +33,6 @@ public class SoundStreamBlockTag extends Tag { * @throws IOException */ public SoundStreamBlockTag(byte data[], int version, long pos) throws IOException { - super(19, data, pos); //all data is streamSoundData - } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "SoundStreamBlock"; + super(19,"SoundStreamBlock", data, pos); //all data is streamSoundData } } diff --git a/trunk/src/com/jpexs/asdec/tags/SoundStreamHead2Tag.java b/trunk/src/com/jpexs/asdec/tags/SoundStreamHead2Tag.java index b079cc7f8..7a4ef807f 100644 --- a/trunk/src/com/jpexs/asdec/tags/SoundStreamHead2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/SoundStreamHead2Tag.java @@ -77,7 +77,7 @@ public class SoundStreamHead2Tag extends Tag { * @throws IOException */ public SoundStreamHead2Tag(byte data[], int version, long pos) throws IOException { - super(45, data, pos); + super(45,"SoundStreamHead2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); sis.readUB(4);//reserved playBackSoundRate = (int) sis.readUB(2); @@ -92,14 +92,4 @@ public class SoundStreamHead2Tag extends Tag { latencySeek = sis.readSI16(); } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "SoundStreamHead2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/SoundStreamHeadTag.java b/trunk/src/com/jpexs/asdec/tags/SoundStreamHeadTag.java index 5b3991f72..24d3847bf 100644 --- a/trunk/src/com/jpexs/asdec/tags/SoundStreamHeadTag.java +++ b/trunk/src/com/jpexs/asdec/tags/SoundStreamHeadTag.java @@ -77,7 +77,7 @@ public class SoundStreamHeadTag extends Tag { * @throws IOException */ public SoundStreamHeadTag(byte data[], int version, long pos) throws IOException { - super(18, data, pos); + super(18,"SoundStreamHead", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); sis.readUB(4);//reserved playBackSoundRate = (int) sis.readUB(2); @@ -92,14 +92,4 @@ public class SoundStreamHeadTag extends Tag { latencySeek = sis.readSI16(); } } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "SoundStreamHead"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/StartSound2Tag.java b/trunk/src/com/jpexs/asdec/tags/StartSound2Tag.java index 3ab57caba..4fe7791e2 100644 --- a/trunk/src/com/jpexs/asdec/tags/StartSound2Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/StartSound2Tag.java @@ -60,19 +60,10 @@ public class StartSound2Tag extends Tag { * @throws IOException */ public StartSound2Tag(byte data[], int version, long pos) throws IOException { - super(89, data, pos); + super(89,"StartSound2", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); soundClassName = sis.readString(); soundInfo = sis.readSOUNDINFO(); } - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "StartSound2"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/StartSoundTag.java b/trunk/src/com/jpexs/asdec/tags/StartSoundTag.java index a75a2113b..76acd73bf 100644 --- a/trunk/src/com/jpexs/asdec/tags/StartSoundTag.java +++ b/trunk/src/com/jpexs/asdec/tags/StartSoundTag.java @@ -61,19 +61,9 @@ public class StartSoundTag extends Tag { * @throws IOException */ public StartSoundTag(byte data[], int version, long pos) throws IOException { - super(15, data, pos); + super(15,"StartSound", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); soundId = sis.readUI16(); soundInfo = sis.readSOUNDINFO(); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "StartSound"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/SymbolClassTag.java b/trunk/src/com/jpexs/asdec/tags/SymbolClassTag.java index 5acf1d71c..468572c44 100644 --- a/trunk/src/com/jpexs/asdec/tags/SymbolClassTag.java +++ b/trunk/src/com/jpexs/asdec/tags/SymbolClassTag.java @@ -29,7 +29,7 @@ public class SymbolClassTag extends Tag { public String classNames[]; public SymbolClassTag(byte[] data, int version, long pos) throws IOException { - super(76, data, pos); + super(76,"SymbolClass", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); int numSymbols = sis.readUI16(); tagIDs = new int[numSymbols]; @@ -64,9 +64,4 @@ public class SymbolClassTag extends Tag { } return baos.toByteArray(); } - - @Override - public String toString() { - return "SymbolClass"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/Tag.java b/trunk/src/com/jpexs/asdec/tags/Tag.java index 3ad73ccdc..5a263a1c8 100644 --- a/trunk/src/com/jpexs/asdec/tags/Tag.java +++ b/trunk/src/com/jpexs/asdec/tags/Tag.java @@ -37,7 +37,18 @@ public class Tag { */ public boolean forceWriteAsLong = false; private final long pos; + + protected String name; + public String getName() { + return name; + } + + public String getExportName(){ + return getName(); + } + + /** * Returns identifier of tag type * @@ -51,10 +62,12 @@ public class Tag { * Constructor * * @param id Tag type identifier + * @param name Tag name * @param data Bytes of data */ - public Tag(int id, byte[] data, long pos) { + public Tag(int id, String name, byte[] data, long pos) { this.id = id; + this.name = name; this.data = data; this.pos = pos; } @@ -85,7 +98,7 @@ public class Tag { */ @Override public String toString() { - return "Tag id:" + id; + return getName(); } public final long getOrigDataLength() { diff --git a/trunk/src/com/jpexs/asdec/tags/TagStub.java b/trunk/src/com/jpexs/asdec/tags/TagStub.java index 4c8316768..43bab2541 100644 --- a/trunk/src/com/jpexs/asdec/tags/TagStub.java +++ b/trunk/src/com/jpexs/asdec/tags/TagStub.java @@ -56,18 +56,8 @@ public class TagStub extends Tag { * @throws IOException */ public TagStub(byte data[], int version, long pos) throws IOException { - super(0, data, pos); + super(0,"", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return ""; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/VideoFrameTag.java b/trunk/src/com/jpexs/asdec/tags/VideoFrameTag.java index a8c2508cd..731def2a9 100644 --- a/trunk/src/com/jpexs/asdec/tags/VideoFrameTag.java +++ b/trunk/src/com/jpexs/asdec/tags/VideoFrameTag.java @@ -62,20 +62,10 @@ public class VideoFrameTag extends Tag { * @throws IOException */ public VideoFrameTag(byte data[], int version, long pos) throws IOException { - super(61, data, pos); + super(61,"VideoFrame", data, pos); SWFInputStream sis = new SWFInputStream(new ByteArrayInputStream(data), version); streamID = sis.readUI16(); frameNum = sis.readUI16(); videoData = sis.readBytes(sis.available()); //TODO: Parse video packets } - - /** - * Returns string representation of the object - * - * @return String representation of the object - */ - @Override - public String toString() { - return "VideoFrame"; - } } diff --git a/trunk/src/com/jpexs/asdec/tags/base/CharacterTag.java b/trunk/src/com/jpexs/asdec/tags/base/CharacterTag.java index a176fdd0f..4558810cd 100644 --- a/trunk/src/com/jpexs/asdec/tags/base/CharacterTag.java +++ b/trunk/src/com/jpexs/asdec/tags/base/CharacterTag.java @@ -1,9 +1,46 @@ package com.jpexs.asdec.tags.base; +import com.jpexs.asdec.tags.ExportAssetsTag; +import com.jpexs.asdec.tags.Tag; +import java.util.ArrayList; +import java.util.List; + /** * * @author JPEXS */ -public interface CharacterTag { - public int getCharacterID(); +public abstract class CharacterTag extends Tag { + + public CharacterTag(int id, String name, byte[] data, long pos) { + super(id, name, data, pos); + } + + public abstract int getCharacterID(); + + /** + * List of ExportAssetsTag used for converting to String + */ + public List exportAssetsTags = new ArrayList(); + + @Override + public String getName() { + String nameAppend = ""; + for (ExportAssetsTag eat : exportAssetsTags) { + int pos = eat.tags.indexOf(getCharacterID()); + if (pos > -1) { + nameAppend = ": " + eat.names.get(pos); + } + } + return super.getName()+" (" + getCharacterID() + nameAppend + ")"; + } + + @Override + public String getExportName() { + return super.getName()+"_"+getCharacterID(); + } + + + + + } diff --git a/trunk/src/com/jpexs/asdec/tags/base/TagName.java b/trunk/src/com/jpexs/asdec/tags/base/TagName.java deleted file mode 100644 index b5d8d68ce..000000000 --- a/trunk/src/com/jpexs/asdec/tags/base/TagName.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2010-2012 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.asdec.tags.base; - -/** - * - * @author JPEXS - */ -public interface TagName { - - public String getName(); -} diff --git a/trunk/src/com/jpexs/asdec/types/MATRIX.java b/trunk/src/com/jpexs/asdec/types/MATRIX.java index ed5d4022c..8224219a8 100644 --- a/trunk/src/com/jpexs/asdec/types/MATRIX.java +++ b/trunk/src/com/jpexs/asdec/types/MATRIX.java @@ -57,6 +57,9 @@ public class MATRIX { */ public int translateY; + public int bitsTranslate; + public int bitsRotate; + public int bitsScale; @Override public String toString() { return "[MATRIX scale:"+scaleX+","+scaleY+", rotate:"+rotateSkew0+","+rotateSkew1+", translate:"+translateX+","+translateY+"]"; diff --git a/trunk/src/com/jpexs/asdec/types/PIX24.java b/trunk/src/com/jpexs/asdec/types/PIX24.java index c0cfc910a..04035c109 100644 --- a/trunk/src/com/jpexs/asdec/types/PIX24.java +++ b/trunk/src/com/jpexs/asdec/types/PIX24.java @@ -35,4 +35,11 @@ public class PIX24 { * Blue color value */ public int blue; + + @Override + public String toString() { + return "[PIX24 red:"+red+", green:"+green+", blue:"+blue+"]"; + } + + } diff --git a/trunk/src/com/jpexs/asdec/types/RECT.java b/trunk/src/com/jpexs/asdec/types/RECT.java index d8348c0c1..3c8985c39 100644 --- a/trunk/src/com/jpexs/asdec/types/RECT.java +++ b/trunk/src/com/jpexs/asdec/types/RECT.java @@ -40,6 +40,7 @@ public class RECT { */ public int Ymax; + public int nbits; public RECT(int Xmin, int Xmax, int Ymin, int Ymax) { this.Xmin = Xmin;