mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-11 23:54:28 +00:00
Tag preview in dump view
This commit is contained in:
@@ -305,6 +305,10 @@ public class Configuration {
|
||||
@ConfigurationName("gui.timeLineSplitPane.dividerLocationPercent")
|
||||
public static final ConfigurationItem<Double> guiTimeLineSplitPaneDividerLocationPercent = null;
|
||||
|
||||
@ConfigurationDefaultDouble(0.6)
|
||||
@ConfigurationName("gui.dump.splitPane.dividerLocationPercent")
|
||||
public static final ConfigurationItem<Double> guiDumpSplitPaneDividerLocationPercent = null;
|
||||
|
||||
@ConfigurationDefaultString("com.jpexs.decompiler.flash.gui.OceanicSkin")
|
||||
@ConfigurationName("gui.skin")
|
||||
@ConfigurationCategory("ui")
|
||||
|
||||
@@ -16,11 +16,16 @@
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.dumpview;
|
||||
|
||||
import com.jpexs.decompiler.flash.SWFInputStream;
|
||||
import com.jpexs.decompiler.flash.tags.Tag;
|
||||
import com.jpexs.decompiler.flash.tags.TagStub;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -34,6 +39,8 @@ public class DumpInfo {
|
||||
|
||||
public TagStub tagToResolve = null;
|
||||
|
||||
public Tag resolvedTag = null;
|
||||
|
||||
public Object previewValue;
|
||||
|
||||
public long startByte;
|
||||
@@ -117,4 +124,25 @@ public class DumpInfo {
|
||||
String value = previewValue == null ? "" : previewValue.toString();
|
||||
return name + " (" + type + ")" + (value.isEmpty() ? "" : " = " + value);
|
||||
}
|
||||
|
||||
public void resolveTag() {
|
||||
if (tagToResolve != null) {
|
||||
TagStub tagStub = tagToResolve;
|
||||
try {
|
||||
SWFInputStream sis = tagStub.getDataStream();
|
||||
sis.seek(tagStub.getDataPos());
|
||||
sis.dumpInfo = this;
|
||||
resolvedTag = SWFInputStream.resolveTag(tagStub, 0, false, true, false);
|
||||
} catch (InterruptedException | IOException ex) {
|
||||
Logger.getLogger(DumpInfo.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
tagToResolve = null;
|
||||
}
|
||||
}
|
||||
|
||||
public Tag getTag() {
|
||||
resolveTag();
|
||||
return resolvedTag;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -44,8 +44,11 @@ public final class MainFrameClassic extends AppFrame implements MainFrame {
|
||||
super();
|
||||
|
||||
FlashPlayerPanel flashPanel = null;
|
||||
FlashPlayerPanel flashPanel2 = null;
|
||||
|
||||
try {
|
||||
flashPanel = new FlashPlayerPanel(this);
|
||||
flashPanel2 = new FlashPlayerPanel(this);
|
||||
} catch (FlashUnsupportedException fue) {
|
||||
}
|
||||
|
||||
@@ -53,7 +56,7 @@ public final class MainFrameClassic extends AppFrame implements MainFrame {
|
||||
mainMenu = new MainFrameClassicMenu(this, externalFlashPlayerUnavailable);
|
||||
mainMenu.createMenuBar();
|
||||
|
||||
panel = new MainPanel(this, mainMenu, flashPanel);
|
||||
panel = new MainPanel(this, mainMenu, flashPanel, flashPanel2);
|
||||
|
||||
int w = Configuration.guiWindowWidth.get();
|
||||
int h = Configuration.guiWindowHeight.get();
|
||||
|
||||
@@ -51,8 +51,11 @@ public final class MainFrameRibbon extends AppRibbonFrame {
|
||||
super();
|
||||
|
||||
FlashPlayerPanel flashPanel = null;
|
||||
FlashPlayerPanel flashPanel2 = null;
|
||||
|
||||
try {
|
||||
flashPanel = new FlashPlayerPanel(this);
|
||||
flashPanel2 = new FlashPlayerPanel(this);
|
||||
} catch (FlashUnsupportedException fue) {
|
||||
}
|
||||
|
||||
@@ -65,7 +68,7 @@ public final class MainFrameRibbon extends AppRibbonFrame {
|
||||
mainMenu = new MainFrameRibbonMenu(this, ribbon, externalFlashPlayerUnavailable);
|
||||
mainMenu.createMenuBar();
|
||||
|
||||
panel = new MainPanel(this, mainMenu, flashPanel);
|
||||
panel = new MainPanel(this, mainMenu, flashPanel, flashPanel2);
|
||||
panel.setBackground(Color.yellow);
|
||||
cnt.add(panel, BorderLayout.CENTER);
|
||||
|
||||
|
||||
@@ -200,6 +200,7 @@ import javax.sound.sampled.UnsupportedAudioFileException;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JColorChooser;
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.JFrame;
|
||||
@@ -248,6 +249,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
public DumpTree dumpTree;
|
||||
|
||||
private final FlashPlayerPanel flashPanel;
|
||||
private final FlashPlayerPanel flashPanel2;
|
||||
|
||||
private final JPanel contentPanel;
|
||||
|
||||
@@ -283,6 +285,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
|
||||
private static final String TIMELINE_PANEL = "TIMELINEPANEL";
|
||||
|
||||
private static final String RESOURCES_VIEW = "RESOURCES";
|
||||
private static final String DUMP_VIEW = "DUMP";
|
||||
private static final String TIMELINE_VIEW = "TIMELINE";
|
||||
|
||||
private final JPersistentSplitPane splitPane1;
|
||||
|
||||
private final JPersistentSplitPane splitPane2;
|
||||
@@ -304,6 +310,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
private DumpViewPanel dumpViewPanel;
|
||||
|
||||
private final JPanel treePanel;
|
||||
private final PreviewPanel dumpPreviewPanel;
|
||||
|
||||
private final TagInfoPanel tagInfoPanel;
|
||||
|
||||
@@ -425,12 +432,13 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
return mainFrame.translate(key);
|
||||
}
|
||||
|
||||
public MainPanel(MainFrame mainFrame, MainFrameMenu mainMenu, FlashPlayerPanel flashPanel) {
|
||||
public MainPanel(MainFrame mainFrame, MainFrameMenu mainMenu, FlashPlayerPanel flashPanel, FlashPlayerPanel previewFlashPanel) {
|
||||
super();
|
||||
|
||||
this.mainFrame = mainFrame;
|
||||
this.mainMenu = mainMenu;
|
||||
this.flashPanel = flashPanel;
|
||||
this.flashPanel2 = previewFlashPanel;
|
||||
|
||||
mainFrame.setTitle(ApplicationInfo.applicationVerName);
|
||||
|
||||
@@ -638,6 +646,10 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
|
||||
DefaultSyntaxKit.initKit();
|
||||
previewPanel = new PreviewPanel(this, flashPanel);
|
||||
|
||||
dumpPreviewPanel = new PreviewPanel(this, previewFlashPanel);
|
||||
dumpPreviewPanel.setReadOnly(true);
|
||||
|
||||
displayPanel.add(previewPanel, CARDPREVIEWPANEL);
|
||||
displayPanel.add(createFolderPreviewCard(), CARDFOLDERPREVIEWPANEL);
|
||||
displayPanel.add(createDumpPreviewCard(), CARDDUMPVIEW);
|
||||
@@ -660,11 +672,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
}
|
||||
});
|
||||
searchPanel.add(closeSearchButton, BorderLayout.EAST);
|
||||
treePanel = new JPanel(new BorderLayout());
|
||||
treePanel.add(searchPanel, BorderLayout.SOUTH);
|
||||
|
||||
searchPanel.setVisible(false);
|
||||
|
||||
treePanel = new JPanel(new CardLayout());
|
||||
treePanel.add(createResourcesViewCard(), RESOURCES_VIEW);
|
||||
treePanel.add(createDumpViewCard(), DUMP_VIEW);
|
||||
//treePanel.add(searchPanel, BorderLayout.SOUTH);
|
||||
//searchPanel.setVisible(false);
|
||||
filterField.getDocument().addDocumentListener(new DocumentListener() {
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
@@ -2829,10 +2841,23 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
Object source = e.getSource();
|
||||
if (source == dumpTree) {
|
||||
reload(false);
|
||||
Object sel = e.getPath().getLastPathComponent();
|
||||
if (sel instanceof DumpInfo) {
|
||||
DumpInfo di = (DumpInfo) sel;
|
||||
Tag t = di.getTag();
|
||||
if (t != null) {
|
||||
showPreview(t, dumpPreviewPanel);
|
||||
} else {
|
||||
showPreview(null, dumpPreviewPanel);
|
||||
}
|
||||
} else {
|
||||
showPreview(null, dumpPreviewPanel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
TreeItem treeItem = (TreeItem) e.getPath().getLastPathComponent();
|
||||
|
||||
if (!(treeItem instanceof SWFList)) {
|
||||
SWF swf = treeItem.getSwf();
|
||||
if (swfs.isEmpty()) {
|
||||
@@ -2860,6 +2885,13 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
if (flashPanel2 != null) {
|
||||
try {
|
||||
flashPanel2.close();
|
||||
} catch (IOException ex) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void clearDebuggerColors() {
|
||||
@@ -2879,6 +2911,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
flashPanel.stopSWF();
|
||||
}
|
||||
}
|
||||
if (flashPanel2 != null) {
|
||||
if (!flashPanel2.isStopped()) {
|
||||
flashPanel2.stopSWF();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isInternalFlashViewerSelected() {
|
||||
@@ -2914,29 +2951,41 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
}
|
||||
}
|
||||
|
||||
private JPanel createDumpViewCard() {
|
||||
JPanel r = new JPanel(new BorderLayout());
|
||||
r.add(new JPersistentSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(dumpTree), dumpPreviewPanel, Configuration.guiDumpSplitPaneDividerLocationPercent), BorderLayout.CENTER);
|
||||
return r;
|
||||
}
|
||||
|
||||
private JPanel createResourcesViewCard() {
|
||||
JPanel r = new JPanel(new BorderLayout());
|
||||
r.add(new JScrollPane(tagTree), BorderLayout.CENTER);
|
||||
r.add(searchPanel, BorderLayout.SOUTH);
|
||||
return r;
|
||||
}
|
||||
|
||||
public boolean showView(int view) {
|
||||
|
||||
CardLayout cl = (CardLayout) (contentPanel.getLayout());
|
||||
CardLayout cl2 = (CardLayout) (treePanel.getLayout());
|
||||
|
||||
setTreeModel(view);
|
||||
switch (view) {
|
||||
case VIEW_DUMP:
|
||||
if (!isWelcomeScreen) {
|
||||
cl.show(contentPanel, SPLIT_PANE1);
|
||||
}
|
||||
treePanel.removeAll();
|
||||
treePanel.add(new JScrollPane(dumpTree), BorderLayout.CENTER);
|
||||
cl2.show(treePanel, DUMP_VIEW);
|
||||
treePanelMode = TreePanelMode.DUMP_TREE;
|
||||
showDetail(DETAILCARDEMPTYPANEL);
|
||||
reload(true);
|
||||
treePanel.revalidate();
|
||||
return true;
|
||||
case VIEW_RESOURCES:
|
||||
if (!isWelcomeScreen) {
|
||||
cl.show(contentPanel, SPLIT_PANE1);
|
||||
}
|
||||
treePanel.removeAll();
|
||||
treePanel.add(new JScrollPane(tagTree), BorderLayout.CENTER);
|
||||
treePanel.add(searchPanel, BorderLayout.SOUTH);
|
||||
cl2.show(treePanel, RESOURCES_VIEW);
|
||||
|
||||
treePanelMode = TreePanelMode.TAG_TREE;
|
||||
|
||||
treePanel.addComponentListener(new ComponentAdapter() {
|
||||
@@ -2949,7 +2998,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
});
|
||||
|
||||
reload(true);
|
||||
treePanel.revalidate();
|
||||
return true;
|
||||
case VIEW_TIMELINE:
|
||||
final SWF swf = getCurrentSwf();
|
||||
@@ -3040,6 +3088,85 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
previewPanel.closeTag();
|
||||
}
|
||||
|
||||
public void showPreview(TreeItem treeItem, PreviewPanel previewPanel) {
|
||||
if (treeItem == null) {
|
||||
previewPanel.showEmpty();
|
||||
return;
|
||||
}
|
||||
boolean internalViewer = isInternalFlashViewerSelected();
|
||||
if (treeItem instanceof SWF) {
|
||||
SWF swf = (SWF) treeItem;
|
||||
if (internalViewer) {
|
||||
previewPanel.showImagePanel(swf, swf, -1);
|
||||
} else {
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
if (flashPanel != null) { //same for flashPanel2
|
||||
previewPanel.showFlashViewerPanel();
|
||||
previewPanel.showSwf(swf);
|
||||
}
|
||||
}
|
||||
} else if (treeItem instanceof MetadataTag) {
|
||||
MetadataTag metadataTag = (MetadataTag) treeItem;
|
||||
previewPanel.showMetaDataPanel(metadataTag);
|
||||
} else if (treeItem instanceof DefineBinaryDataTag) {
|
||||
DefineBinaryDataTag binaryTag = (DefineBinaryDataTag) treeItem;
|
||||
previewPanel.showBinaryPanel(binaryTag);
|
||||
} else if (treeItem instanceof ImageTag) {
|
||||
ImageTag imageTag = (ImageTag) treeItem;
|
||||
previewPanel.setImageReplaceButtonVisible(!((Tag) imageTag).isReadOnly() && imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag);
|
||||
previewPanel.showImagePanel(imageTag.getImage());
|
||||
|
||||
} else if ((treeItem instanceof DrawableTag) && (!(treeItem instanceof TextTag)) && (!(treeItem instanceof FontTag)) && internalViewer) {
|
||||
final Tag tag = (Tag) treeItem;
|
||||
DrawableTag d = (DrawableTag) tag;
|
||||
Timelined timelined;
|
||||
if (treeItem instanceof Timelined && !(treeItem instanceof ButtonTag)) {
|
||||
timelined = (Timelined) tag;
|
||||
} else {
|
||||
timelined = makeTimelined(tag);
|
||||
}
|
||||
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
previewPanel.showImagePanel(timelined, tag.getSwf(), -1);
|
||||
} else if (treeItem instanceof Frame && internalViewer) {
|
||||
Frame fn = (Frame) treeItem;
|
||||
SWF swf = fn.getSwf();
|
||||
Timelined timelined = swf;
|
||||
if (fn.timeline.timelined instanceof DefineSpriteTag) {
|
||||
DefineSpriteTag parentSprite = (DefineSpriteTag) fn.timeline.timelined;
|
||||
timelined = parentSprite;
|
||||
}
|
||||
|
||||
previewPanel.showImagePanel(timelined, swf, fn.frame);
|
||||
} else if ((treeItem instanceof SoundTag)) { //&& isInternalFlashViewerSelected() && (Arrays.asList("mp3", "wav").contains(((SoundTag) tagObj).getExportFormat())))) {
|
||||
previewPanel.showImagePanel(new SerializableImage(View.loadImage("sound32")));
|
||||
previewPanel.setImageReplaceButtonVisible(((Tag) treeItem).isReadOnly() && (treeItem instanceof DefineSoundTag), false);
|
||||
try {
|
||||
SoundTagPlayer soundThread = new SoundTagPlayer((SoundTag) treeItem, Configuration.loopMedia.get() ? Integer.MAX_VALUE : 1, true);
|
||||
previewPanel.setMedia(soundThread);
|
||||
} catch (LineUnavailableException | IOException | UnsupportedAudioFileException ex) {
|
||||
logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
} else if ((treeItem instanceof FontTag) && internalViewer) {
|
||||
previewPanel.showFontPanel((FontTag) treeItem);
|
||||
} else if ((treeItem instanceof TextTag) && internalViewer) {
|
||||
previewPanel.showTextPanel((TextTag) treeItem);
|
||||
} else if ((treeItem instanceof Frame) || (treeItem instanceof CharacterTag) || (treeItem instanceof FontTag) || (treeItem instanceof SoundStreamHeadTypeTag)) {
|
||||
previewPanel.createAndShowTempSwf(treeItem);
|
||||
|
||||
if (treeItem instanceof TextTag) {
|
||||
previewPanel.showTextPanel((TextTag) treeItem);
|
||||
} else if (treeItem instanceof FontTag) {
|
||||
previewPanel.showFontPanel((FontTag) treeItem);
|
||||
} else {
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
}
|
||||
} else {
|
||||
previewPanel.showEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
public void reload(boolean forceReload) {
|
||||
tagTree.scrollPathToVisible(tagTree.getSelectionPath());
|
||||
if (Configuration.dumpView.get()) {
|
||||
@@ -3163,83 +3290,37 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
} else if (treeItem instanceof FolderItem) {
|
||||
showFolderPreview((FolderItem) treeItem);
|
||||
} else if (treeItem instanceof SWF) {
|
||||
SWF swf = (SWF) treeItem;
|
||||
if (internalViewer) {
|
||||
previewPanel.showImagePanel(swf, swf, -1);
|
||||
} else {
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
if (flashPanel != null) {
|
||||
previewPanel.showFlashViewerPanel();
|
||||
previewPanel.showSwf(swf);
|
||||
}
|
||||
}
|
||||
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if (treeItem instanceof MetadataTag) {
|
||||
MetadataTag metadataTag = (MetadataTag) treeItem;
|
||||
previewPanel.showMetaDataPanel(metadataTag);
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if (treeItem instanceof DefineBinaryDataTag) {
|
||||
DefineBinaryDataTag binaryTag = (DefineBinaryDataTag) treeItem;
|
||||
previewPanel.showBinaryPanel(binaryTag);
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if (treeItem instanceof ASMSource && (!(treeItem instanceof DrawableTag) || preferScript)) {
|
||||
getActionPanel().setSource((ASMSource) treeItem, !forceReload);
|
||||
showCard(CARDACTIONSCRIPTPANEL);
|
||||
} else if (treeItem instanceof ImageTag) {
|
||||
ImageTag imageTag = (ImageTag) treeItem;
|
||||
previewPanel.setImageReplaceButtonVisible(!((Tag) imageTag).isReadOnly() && imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag);
|
||||
previewPanel.showImagePanel(imageTag.getImage());
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if ((treeItem instanceof DrawableTag) && (!(treeItem instanceof TextTag)) && (!(treeItem instanceof FontTag)) && internalViewer) {
|
||||
final Tag tag = (Tag) treeItem;
|
||||
DrawableTag d = (DrawableTag) tag;
|
||||
Timelined timelined;
|
||||
if (treeItem instanceof Timelined && !(treeItem instanceof ButtonTag)) {
|
||||
timelined = (Timelined) tag;
|
||||
} else {
|
||||
timelined = makeTimelined(tag);
|
||||
}
|
||||
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
previewPanel.showImagePanel(timelined, tag.getSwf(), -1);
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if ((treeItem instanceof FontTag) && internalViewer) {
|
||||
showFontTag((FontTag) treeItem);
|
||||
} else if ((treeItem instanceof TextTag) && internalViewer) {
|
||||
showTextTag((TextTag) treeItem);
|
||||
} else if (treeItem instanceof Frame && internalViewer) {
|
||||
Frame fn = (Frame) treeItem;
|
||||
SWF swf = fn.getSwf();
|
||||
Timelined timelined = swf;
|
||||
if (fn.timeline.timelined instanceof DefineSpriteTag) {
|
||||
DefineSpriteTag parentSprite = (DefineSpriteTag) fn.timeline.timelined;
|
||||
timelined = parentSprite;
|
||||
}
|
||||
|
||||
previewPanel.showImagePanel(timelined, swf, fn.frame);
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if ((treeItem instanceof SoundTag)) { //&& isInternalFlashViewerSelected() && (Arrays.asList("mp3", "wav").contains(((SoundTag) tagObj).getExportFormat())))) {
|
||||
previewPanel.showImagePanel(new SerializableImage(View.loadImage("sound32")));
|
||||
previewPanel.setImageReplaceButtonVisible(((Tag) treeItem).isReadOnly() && (treeItem instanceof DefineSoundTag), false);
|
||||
try {
|
||||
SoundTagPlayer soundThread = new SoundTagPlayer((SoundTag) treeItem, Configuration.loopMedia.get() ? Integer.MAX_VALUE : 1, true);
|
||||
previewPanel.setMedia(soundThread);
|
||||
} catch (LineUnavailableException | IOException | UnsupportedAudioFileException ex) {
|
||||
logger.log(Level.SEVERE, null, ex);
|
||||
}
|
||||
|
||||
} else if ((treeItem instanceof TextTag) && internalViewer) {
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if (treeItem instanceof Frame && internalViewer) {
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if ((treeItem instanceof SoundTag)) { //&& isInternalFlashViewerSelected() && (Arrays.asList("mp3", "wav").contains(((SoundTag) tagObj).getExportFormat())))) {
|
||||
showPreview(treeItem, previewPanel);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if ((treeItem instanceof Frame) || (treeItem instanceof CharacterTag) || (treeItem instanceof FontTag) || (treeItem instanceof SoundStreamHeadTypeTag)) {
|
||||
previewPanel.createAndShowTempSwf(treeItem);
|
||||
|
||||
if (treeItem instanceof TextTag) {
|
||||
showTextTag((TextTag) treeItem);
|
||||
} else if (treeItem instanceof FontTag) {
|
||||
showFontTag((FontTag) treeItem);
|
||||
} else {
|
||||
previewPanel.setParametersPanelVisible(false);
|
||||
}
|
||||
showPreview(treeItem, previewPanel);
|
||||
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
} else if (treeItem instanceof Tag) {
|
||||
@@ -3259,18 +3340,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
}
|
||||
|
||||
private void showFontTag(FontTag ft) {
|
||||
|
||||
previewPanel.showFontPanel(ft);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
}
|
||||
|
||||
private void showTextTag(TextTag textTag) {
|
||||
|
||||
previewPanel.showTextPanel(textTag);
|
||||
showCard(CARDPREVIEWPANEL);
|
||||
}
|
||||
|
||||
public void showTextTagWithNewValue(TextTag textTag, TextTag newTextTag) {
|
||||
|
||||
previewPanel.showTextComparePanel(textTag, newTextTag);
|
||||
|
||||
@@ -128,6 +128,8 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
|
||||
private static final String METADATA_TAG_CARD = "METADATATAG";
|
||||
|
||||
private static final String EMPTY_CARD = "EMPTY";
|
||||
|
||||
private static final String CARDTEXTPANEL = "Text card";
|
||||
|
||||
private static final String CARDFONTPANEL = "Font card";
|
||||
@@ -190,6 +192,15 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
|
||||
private MetadataTag metadataTag;
|
||||
|
||||
private boolean readOnly = false;
|
||||
|
||||
public void setReadOnly(boolean readOnly) {
|
||||
this.readOnly = readOnly;
|
||||
if (readOnly) {
|
||||
parametersPanel.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
public PreviewPanel(MainPanel mainPanel, FlashPlayerPanel flashPanel) {
|
||||
super(JSplitPane.HORIZONTAL_SPLIT, Configuration.guiPreviewSplitPaneDividerLocationPercent);
|
||||
this.mainPanel = mainPanel;
|
||||
@@ -203,6 +214,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
viewerCards.add(createBinaryCard(), BINARY_TAG_CARD);
|
||||
viewerCards.add(createMetadataCard(), METADATA_TAG_CARD);
|
||||
viewerCards.add(createGenericTagCard(), GENERIC_TAG_CARD);
|
||||
viewerCards.add(createEmptyCard(), EMPTY_CARD);
|
||||
setLeftComponent(viewerCards);
|
||||
|
||||
createParametersPanel();
|
||||
@@ -210,6 +222,12 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
showCardLeft(FLASH_VIEWER_CARD);
|
||||
}
|
||||
|
||||
private JPanel createEmptyCard() {
|
||||
JPanel ret = new JPanel();
|
||||
ret.add(new JLabel("-"));
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void createParametersPanel() {
|
||||
displayWithPreview = new JPanel(new CardLayout());
|
||||
|
||||
@@ -398,10 +416,10 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
private void updateMetadataButtonsVisibility() {
|
||||
boolean edit = metadataEditor.isEditable();
|
||||
boolean editorMode = Configuration.editorMode.get();
|
||||
metadataEditButton.setVisible(!edit);
|
||||
metadataSaveButton.setVisible(edit);
|
||||
metadataEditButton.setVisible(!readOnly && !edit);
|
||||
metadataSaveButton.setVisible(!readOnly && edit);
|
||||
boolean metadataModified = isMetadataModified();
|
||||
metadataCancelButton.setVisible(edit);
|
||||
metadataCancelButton.setVisible(!readOnly && edit);
|
||||
metadataCancelButton.setEnabled(metadataModified || !editorMode);
|
||||
}
|
||||
|
||||
@@ -472,7 +490,9 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
showFontPage(fontTag);
|
||||
|
||||
showCardRight(CARDFONTPANEL);
|
||||
parametersPanel.setVisible(true);
|
||||
if (!readOnly) {
|
||||
parametersPanel.setVisible(true);
|
||||
}
|
||||
fontPanel.showFontTag(fontTag);
|
||||
|
||||
int pageCount = getFontPageCount(fontTag);
|
||||
@@ -496,13 +516,19 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
return pageCount;
|
||||
}
|
||||
|
||||
public void showEmpty() {
|
||||
showCardLeft(EMPTY_CARD);
|
||||
}
|
||||
|
||||
public void showTextPanel(TextTag textTag) {
|
||||
if (mainPanel.isInternalFlashViewerSelected() /*|| ft instanceof GFxDefineCompactedFont*/) {
|
||||
showImagePanel(MainPanel.makeTimelined(textTag), textTag.getSwf(), 0);
|
||||
}
|
||||
|
||||
showCardRight(CARDTEXTPANEL);
|
||||
parametersPanel.setVisible(true);
|
||||
if (!readOnly) {
|
||||
parametersPanel.setVisible(true);
|
||||
}
|
||||
textPanel.setText(textTag);
|
||||
}
|
||||
|
||||
@@ -554,7 +580,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
public void showMetaDataPanel(MetadataTag metadataTag) {
|
||||
showCardLeft(METADATA_TAG_CARD);
|
||||
this.metadataTag = metadataTag;
|
||||
metadataEditor.setEditable(Configuration.editorMode.get());
|
||||
metadataEditor.setEditable(!readOnly && !metadataTag.isReadOnly() && Configuration.editorMode.get());
|
||||
metadataEditor.setText(formatMetadata(metadataTag.xmlMetadata, 4));
|
||||
setMetadataModified(false);
|
||||
updateMetadataButtonsVisibility();
|
||||
@@ -577,6 +603,10 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
}
|
||||
|
||||
public void setImageReplaceButtonVisible(boolean show, boolean showAlpha) {
|
||||
if (readOnly) {
|
||||
show = false;
|
||||
showAlpha = false;
|
||||
}
|
||||
replaceImageButton.setVisible(show);
|
||||
replaceImageAlphaButton.setVisible(showAlpha);
|
||||
prevFontsButton.setVisible(false);
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.gui.dumpview;
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.SWFInputStream;
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfo;
|
||||
import com.jpexs.decompiler.flash.tags.Tag;
|
||||
import com.jpexs.decompiler.flash.tags.TagStub;
|
||||
import com.jpexs.decompiler.flash.treeitems.SWFList;
|
||||
import java.io.IOException;
|
||||
@@ -112,18 +113,7 @@ public final class DumpTreeModel implements TreeModel {
|
||||
@Override
|
||||
public int getChildCount(Object o) {
|
||||
DumpInfo di = (DumpInfo) o;
|
||||
if (di.tagToResolve != null) {
|
||||
TagStub tagStub = di.tagToResolve;
|
||||
try {
|
||||
SWFInputStream sis = tagStub.getDataStream();
|
||||
sis.seek(tagStub.getDataPos());
|
||||
sis.dumpInfo = di;
|
||||
SWFInputStream.resolveTag(tagStub, 0, false, true, false);
|
||||
} catch (InterruptedException | IOException ex) {
|
||||
Logger.getLogger(DumpTreeModel.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
di.tagToResolve = null;
|
||||
}
|
||||
di.resolveTag();
|
||||
return di.getChildCount();
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.gui.dumpview;
|
||||
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfo;
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfoSwfNode;
|
||||
import com.jpexs.decompiler.flash.gui.Main;
|
||||
import com.jpexs.decompiler.flash.gui.PreviewPanel;
|
||||
import com.jpexs.decompiler.flash.gui.hexview.HexView;
|
||||
import com.jpexs.decompiler.flash.gui.hexview.HexViewListener;
|
||||
import com.jpexs.helpers.Helper;
|
||||
|
||||
@@ -57,6 +57,8 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis
|
||||
|
||||
private boolean stopped = true;
|
||||
|
||||
private boolean closed = false;
|
||||
|
||||
private float frameRate;
|
||||
|
||||
@Override
|
||||
@@ -197,7 +199,9 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
if (closed) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
ShockwaveFlash flash1 = flash;
|
||||
|
||||
@@ -308,8 +312,9 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
public synchronized void close() throws IOException {
|
||||
timer.cancel();
|
||||
closed = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user