mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-12 21:01:57 +00:00
Integrate Easy GUI into main program as Timeline mode
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.easygui;
|
||||
|
||||
import com.jpexs.decompiler.flash.gui.AppStrings;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
|
||||
import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
|
||||
import com.jpexs.decompiler.flash.tags.Tag;
|
||||
import com.jpexs.decompiler.flash.tags.base.ButtonTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.FontTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.ImageTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.MorphShapeTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.ShapeTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.SoundTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.TextTag;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.UnsupportedLookAndFeelException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class EasyGuiMain {
|
||||
public static MainFrame mainFrame;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
if (GraphicsEnvironment.isHeadless()) {
|
||||
System.err.println("Error: Your system does not support Graphic User Interface");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
System.setProperty("sun.java2d.d3d", "false");
|
||||
System.setProperty("sun.java2d.noddraw", "true");
|
||||
|
||||
System.setProperty("sun.java2d.uiScale", "1.0");
|
||||
|
||||
System.setProperty("sun.java2d.opengl", "false");
|
||||
|
||||
try {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
} catch (UnsupportedLookAndFeelException | ClassNotFoundException | InstantiationException
|
||||
| IllegalAccessException ignored) {
|
||||
//ignored
|
||||
}
|
||||
|
||||
UIManager.put("Tree.expandedIcon", View.getIcon("expand16"));
|
||||
UIManager.put("Tree.collapsedIcon", View.getIcon("collapse16"));
|
||||
|
||||
AppStrings.setResourceClass(com.jpexs.decompiler.flash.gui.MainFrame.class);
|
||||
|
||||
|
||||
mainFrame = new MainFrame();
|
||||
mainFrame.setVisible(true);
|
||||
|
||||
try {
|
||||
mainFrame.open(new File(args[1]));
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(EasyGuiMain.class.getName()).log(Level.SEVERE, null, ex);
|
||||
} catch (InterruptedException ex) {
|
||||
Logger.getLogger(EasyGuiMain.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,10 +19,12 @@ package com.jpexs.decompiler.flash.easygui;
|
||||
import com.jpexs.decompiler.flash.DefineBeforeUsageFixer;
|
||||
import com.jpexs.decompiler.flash.ReadOnlyTagList;
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.gui.FasterScrollPane;
|
||||
import com.jpexs.decompiler.flash.gui.ImagePanel;
|
||||
import com.jpexs.decompiler.flash.gui.RegistrationPointPosition;
|
||||
import com.jpexs.decompiler.flash.gui.TimelinedMaker;
|
||||
import com.jpexs.decompiler.flash.gui.TransformPanel;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
|
||||
import com.jpexs.decompiler.flash.tags.PlaceObject2Tag;
|
||||
import com.jpexs.decompiler.flash.tags.RemoveObject2Tag;
|
||||
@@ -34,9 +36,11 @@ import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.ShapeTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.TextTag;
|
||||
import com.jpexs.decompiler.flash.timeline.DepthState;
|
||||
import com.jpexs.decompiler.flash.timeline.Frame;
|
||||
import com.jpexs.decompiler.flash.timeline.Timelined;
|
||||
import com.jpexs.decompiler.flash.types.MATRIX;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.FlowLayout;
|
||||
@@ -68,9 +72,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class MainFrame extends JFrame {
|
||||
public class EasyPanel extends JPanel {
|
||||
|
||||
private SWF swf;
|
||||
private LibraryTreeTable libraryTreeTable;
|
||||
private JSplitPane verticalSplitPane;
|
||||
private JSplitPane horizontalSplitPane;
|
||||
@@ -83,13 +86,9 @@ public class MainFrame extends JFrame {
|
||||
private JTabbedPane rightTabbedPane;
|
||||
private TransformPanel transformPanel;
|
||||
|
||||
public MainFrame() {
|
||||
setTitle("JPEXS FFDec Easy GUI");
|
||||
public EasyPanel() {
|
||||
setSize(1024, 768);
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
|
||||
Container cnt = getContentPane();
|
||||
cnt.setLayout(new BorderLayout());
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
stagePanel = new ImagePanel();
|
||||
stagePanel.setTagNameResolver(new EasyTagNameResolver());
|
||||
@@ -292,7 +291,7 @@ public class MainFrame extends JFrame {
|
||||
JPanel toolbarPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
||||
|
||||
undoButton = new JButton(View.getIcon("rotateanticlockwise16"));
|
||||
undoButton.setToolTipText("Undo");
|
||||
//undoButton.setToolTipText("Undo");
|
||||
undoButton.setMargin(new Insets(5, 5, 5, 5));
|
||||
undoButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -302,7 +301,7 @@ public class MainFrame extends JFrame {
|
||||
});
|
||||
|
||||
redoButton = new JButton(View.getIcon("rotateclockwise16"));
|
||||
redoButton.setToolTipText("Redo");
|
||||
//redoButton.setToolTipText("Redo");
|
||||
redoButton.setMargin(new Insets(5, 5, 5, 5));
|
||||
redoButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
@@ -317,14 +316,14 @@ public class MainFrame extends JFrame {
|
||||
undoButton.setEnabled(undoManager.canUndo());
|
||||
redoButton.setEnabled(undoManager.canRedo());
|
||||
if (undoManager.canUndo()) {
|
||||
undoButton.setToolTipText("Undo " + undoManager.getUndoName());
|
||||
undoButton.setToolTipText(EasyStrings.translate("undo").replace("%action%",undoManager.getUndoName()));
|
||||
} else {
|
||||
undoButton.setToolTipText("Cannot undo");
|
||||
undoButton.setToolTipText(EasyStrings.translate("undo.cannot"));
|
||||
}
|
||||
if (undoManager.canRedo()) {
|
||||
redoButton.setToolTipText("Redo " + undoManager.getRedoName());
|
||||
redoButton.setToolTipText(EasyStrings.translate("redo").replace("%action%", undoManager.getRedoName()));
|
||||
} else {
|
||||
redoButton.setToolTipText("Cannot redo");
|
||||
redoButton.setToolTipText(EasyStrings.translate("redo.cannot"));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -369,7 +368,7 @@ public class MainFrame extends JFrame {
|
||||
verticalSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topPanel, timelinePanel);
|
||||
|
||||
libraryTreeTable = new LibraryTreeTable();
|
||||
JScrollPane libraryScrollPane = new JScrollPane(libraryTreeTable);
|
||||
JScrollPane libraryScrollPane = new FasterScrollPane(libraryTreeTable);
|
||||
|
||||
JPanel libraryPanel = new JPanel(new BorderLayout());
|
||||
libraryPanel.add(libraryScrollPane, BorderLayout.CENTER);
|
||||
@@ -382,21 +381,29 @@ public class MainFrame extends JFrame {
|
||||
libraryPreviewPanel.setPreferredSize(new Dimension(200, 200));
|
||||
|
||||
rightTabbedPane = new JTabbedPane();
|
||||
rightTabbedPane.addTab("Library", libraryPanel);
|
||||
rightTabbedPane.addTab(EasyStrings.translate("library"), libraryPanel);
|
||||
|
||||
JPanel transformTab = new JPanel(new BorderLayout());
|
||||
transformPanel = new TransformPanel(stagePanel, false);
|
||||
transformTab.add(new JScrollPane(transformPanel), BorderLayout.CENTER);
|
||||
transformTab.add(new FasterScrollPane(transformPanel), BorderLayout.CENTER);
|
||||
|
||||
rightTabbedPane.addTab("Transform", transformTab);
|
||||
rightTabbedPane.addTab(EasyStrings.translate("transform"), transformTab);
|
||||
rightTabbedPane.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
int depth = stagePanel.getSelectedDepth();
|
||||
if (depth != -1) {
|
||||
DepthState ds = stagePanel.getTimelined().getTimeline().getFrame(stagePanel.getFrame()).layers.get(depth);
|
||||
if (ds == null) {
|
||||
if (stagePanel.getFrame() >= stagePanel.getTimelined().getFrameCount()) {
|
||||
depth = -1;
|
||||
}
|
||||
if (depth != -1) {
|
||||
Frame frame = stagePanel.getTimelined().getTimeline().getFrame(stagePanel.getFrame());
|
||||
if (frame == null) {
|
||||
depth = -1;
|
||||
} else {
|
||||
DepthState ds = frame.layers.get(depth);
|
||||
if (ds == null) {
|
||||
depth = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
transformPanel.setVisible(depth != -1);
|
||||
@@ -412,8 +419,13 @@ public class MainFrame extends JFrame {
|
||||
});
|
||||
|
||||
horizontalSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, verticalSplitPane, rightTabbedPane);
|
||||
libraryScrollPane.getViewport().setBackground(UIManager.getColor("Tree.background"));
|
||||
cnt.add(horizontalSplitPane, BorderLayout.CENTER);
|
||||
|
||||
if (View.isOceanic()) {
|
||||
libraryScrollPane.getViewport().setBackground(Color.white);
|
||||
} else {
|
||||
libraryScrollPane.getViewport().setBackground(UIManager.getColor("Tree.background"));
|
||||
}
|
||||
add(horizontalSplitPane, BorderLayout.CENTER);
|
||||
|
||||
libraryTreeTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
@@ -438,18 +450,15 @@ public class MainFrame extends JFrame {
|
||||
|
||||
private boolean transformEnabled() {
|
||||
return rightTabbedPane.getSelectedIndex() == 1;
|
||||
}
|
||||
|
||||
public void open(File file) throws IOException, InterruptedException {
|
||||
try (FileInputStream fis = new FileInputStream(file)) {
|
||||
swf = new SWF(fis, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setTimelined(Timelined timelined) {
|
||||
SWF swf = timelined.getSwf();
|
||||
libraryTreeTable.setSwf(swf);
|
||||
stagePanel.setTimelined(swf, swf, 0, true, true, true, true, true, false, true);
|
||||
stagePanel.pause();
|
||||
stagePanel.gotoFrame(0);
|
||||
timelinePanel.setTimelined(swf);
|
||||
timelinePanel.setTimelined(swf);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -16,15 +16,20 @@
|
||||
*/
|
||||
package com.jpexs.decompiler.flash.easygui;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class View {
|
||||
public static Icon getIcon(String name) {
|
||||
return new ImageIcon(com.jpexs.decompiler.flash.gui.View.class.getClassLoader().getResource("com/jpexs/decompiler/flash/gui/graphics/" + name + ".png"));
|
||||
}
|
||||
public class EasyStrings {
|
||||
private static Class resourceClass;
|
||||
|
||||
private static ResourceBundle resourceBundle;
|
||||
|
||||
public static String translate(String key) {
|
||||
ResourceBundle b = ResourceBundle.getBundle("com.jpexs.decompiler.flash.gui.locales.EasyPanel");
|
||||
return b.getString(key);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,40 +38,40 @@ public class EasyTagNameResolver implements TagNameResolverInterface {
|
||||
public String getTagName(Tag tag) {
|
||||
if (tag instanceof ImageTag) {
|
||||
ImageTag it = (ImageTag) tag;
|
||||
return "image " + it.getCharacterId() + it.getImageFormat().getExtension();
|
||||
return EasyStrings.translate("item.image") + " " + it.getCharacterId() + it.getImageFormat().getExtension();
|
||||
}
|
||||
if (tag instanceof ShapeTag) {
|
||||
ShapeTag st = (ShapeTag) tag;
|
||||
return "graphic " + st.getCharacterId();
|
||||
return EasyStrings.translate("item.graphic") + " " + st.getCharacterId();
|
||||
}
|
||||
if (tag instanceof MorphShapeTag) {
|
||||
MorphShapeTag mst = (MorphShapeTag) tag;
|
||||
return "shapeTween " + mst.getCharacterId();
|
||||
return EasyStrings.translate("item.shapeTween") + " " + mst.getCharacterId();
|
||||
}
|
||||
if (tag instanceof TextTag) {
|
||||
TextTag t = (TextTag) tag;
|
||||
return "text " + t.getCharacterId();
|
||||
return EasyStrings.translate("item.text") + " " + t.getCharacterId();
|
||||
}
|
||||
if (tag instanceof FontTag) {
|
||||
FontTag f = (FontTag) tag;
|
||||
return "font " + f.getCharacterId();
|
||||
return EasyStrings.translate("item.font") + " " + f.getCharacterId();
|
||||
}
|
||||
if (tag instanceof DefineSpriteTag) {
|
||||
DefineSpriteTag st = (DefineSpriteTag) tag;
|
||||
return "movieClip " + st.getCharacterId();
|
||||
return EasyStrings.translate("item.movieClip") + " " + st.getCharacterId();
|
||||
}
|
||||
if (tag instanceof ButtonTag) {
|
||||
ButtonTag bt = (ButtonTag) tag;
|
||||
return "button " + bt.getCharacterId();
|
||||
return EasyStrings.translate("item.button") + " " + bt.getCharacterId();
|
||||
}
|
||||
if (tag instanceof SoundTag) {
|
||||
SoundTag st = (SoundTag) tag;
|
||||
return "sound" + (st.getCharacterId() == -1 ? "" : " " + st.getCharacterId());
|
||||
return EasyStrings.translate("item.sound") + (st.getCharacterId() == -1 ? "" : " " + st.getCharacterId());
|
||||
}
|
||||
if (tag instanceof DefineVideoStreamTag) {
|
||||
DefineVideoStreamTag vt = (DefineVideoStreamTag) tag;
|
||||
return "video " + vt.getCharacterId();
|
||||
return EasyStrings.translate("item.video") + " " + vt.getCharacterId();
|
||||
}
|
||||
return "unknown";
|
||||
return EasyStrings.translate("item.uknown");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.jpexs.decompiler.flash.easygui;
|
||||
|
||||
import com.jpexs.decompiler.flash.SWF;
|
||||
import com.jpexs.decompiler.flash.gui.View;
|
||||
import com.jpexs.decompiler.flash.tags.DefineSpriteTag;
|
||||
import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag;
|
||||
import com.jpexs.decompiler.flash.tags.Tag;
|
||||
@@ -30,6 +31,7 @@ import com.jpexs.decompiler.flash.tags.base.SoundTag;
|
||||
import com.jpexs.decompiler.flash.tags.base.TextTag;
|
||||
import de.javagl.treetable.JTreeTable;
|
||||
import de.javagl.treetable.TreeTableModel;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
@@ -37,6 +39,7 @@ import javax.swing.JLabel;
|
||||
import javax.swing.JTree;
|
||||
import javax.swing.ListSelectionModel;
|
||||
import javax.swing.event.TreeModelListener;
|
||||
import javax.swing.plaf.basic.BasicTableUI;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeCellRenderer;
|
||||
import javax.swing.tree.TreePath;
|
||||
@@ -46,10 +49,7 @@ import javax.swing.tree.TreePath;
|
||||
* @author JPEXS
|
||||
*/
|
||||
public class LibraryTreeTable extends JTreeTable {
|
||||
|
||||
private SWF swf;
|
||||
private LibraryTreeTableModel model;
|
||||
|
||||
|
||||
public LibraryTreeTable() {
|
||||
super(new LibraryTreeTableModel(null));
|
||||
getTree().setCellRenderer(new LibraryTreeCellRenderer());
|
||||
@@ -98,10 +98,18 @@ public class LibraryTreeTable extends JTreeTable {
|
||||
setTransferHandler(new CharacterTagTransferHandler());
|
||||
setDragEnabled(true);
|
||||
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
setUI(new BasicTableUI());
|
||||
|
||||
setRowHeight(18);
|
||||
getTree().setRowHeight(18);
|
||||
|
||||
if (View.isOceanic()) {
|
||||
setBackground(Color.WHITE);
|
||||
getTree().setBackground(Color.WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSwf(SWF swf) {
|
||||
this.swf = swf;
|
||||
setTreeTableModel(new LibraryTreeTableModel(swf));
|
||||
}
|
||||
|
||||
@@ -162,6 +170,14 @@ public class LibraryTreeTable extends JTreeTable {
|
||||
label.setText(tagNameResolver.getTagName((Tag) object));
|
||||
}
|
||||
}
|
||||
if (View.isOceanic()) {
|
||||
if (selected) {
|
||||
label.setBackground(getBackgroundSelectionColor());
|
||||
} else {
|
||||
label.setBackground(Color.white);
|
||||
}
|
||||
label.setOpaque(true);
|
||||
}
|
||||
return label;
|
||||
}
|
||||
}
|
||||
@@ -173,15 +189,15 @@ public class LibraryTreeTable extends JTreeTable {
|
||||
public LibraryTreeTableModel(SWF swf) {
|
||||
DefaultMutableTreeNode root = new DefaultMutableTreeNode("SWF");
|
||||
|
||||
DefaultMutableTreeNode imagesNode = new DefaultMutableTreeNode("images");
|
||||
DefaultMutableTreeNode graphicsNode = new DefaultMutableTreeNode("graphics");
|
||||
DefaultMutableTreeNode shapeTweensNode = new DefaultMutableTreeNode("shapeTweens");
|
||||
DefaultMutableTreeNode textsNode = new DefaultMutableTreeNode("texts");
|
||||
DefaultMutableTreeNode fontsNode = new DefaultMutableTreeNode("fonts");
|
||||
DefaultMutableTreeNode movieClipsNode = new DefaultMutableTreeNode("movieClips");
|
||||
DefaultMutableTreeNode buttonsNode = new DefaultMutableTreeNode("buttons");
|
||||
DefaultMutableTreeNode soundsNode = new DefaultMutableTreeNode("sounds");
|
||||
DefaultMutableTreeNode videosNode = new DefaultMutableTreeNode("videos");
|
||||
DefaultMutableTreeNode imagesNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.images"));
|
||||
DefaultMutableTreeNode graphicsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.graphics"));
|
||||
DefaultMutableTreeNode shapeTweensNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.shapeTweens"));
|
||||
DefaultMutableTreeNode textsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.texts"));
|
||||
DefaultMutableTreeNode fontsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.fonts"));
|
||||
DefaultMutableTreeNode movieClipsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.movieClips"));
|
||||
DefaultMutableTreeNode buttonsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.buttons"));
|
||||
DefaultMutableTreeNode soundsNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.sounds"));
|
||||
DefaultMutableTreeNode videosNode = new DefaultMutableTreeNode(EasyStrings.translate("library.folder.videos"));
|
||||
|
||||
|
||||
this.root = root;
|
||||
@@ -260,9 +276,9 @@ public class LibraryTreeTable extends JTreeTable {
|
||||
public String getColumnName(int column) {
|
||||
switch (column) {
|
||||
case 0:
|
||||
return "Name";
|
||||
return EasyStrings.translate("library.header.name");
|
||||
case 1:
|
||||
return "AS Linkage";
|
||||
return EasyStrings.translate("library.header.asLinkage");
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -48,8 +48,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
|
||||
@@ -3056,7 +3056,11 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
}
|
||||
}
|
||||
|
||||
RGB backgroundColor = timeline.getFrame(frame).backgroundColor;
|
||||
Frame fr = timeline.getFrame(frame);
|
||||
if (fr == null) {
|
||||
return image;
|
||||
}
|
||||
RGB backgroundColor = fr.backgroundColor;
|
||||
if (backgroundColor != null) {
|
||||
Graphics2D g = (Graphics2D) image.getBufferedImage().getGraphics();
|
||||
g.setPaint(backgroundColor.toColor());
|
||||
@@ -3070,8 +3074,8 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
|
||||
gg.setPaint(Color.green);
|
||||
gg.setTransform(AffineTransform.getTranslateInstance(0, 0));
|
||||
DepthState ds = null;
|
||||
if (selectedDepth > -1 && timeline.getFrameCount() > frame) {
|
||||
ds = timeline.getFrame(frame).layers.get(selectedDepth);
|
||||
if (selectedDepth > -1 && timeline.getFrameCount() > frame && fr != null) {
|
||||
ds = fr.layers.get(selectedDepth);
|
||||
}
|
||||
|
||||
if (ds != null && freeTransformDepth == -1) {
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration;
|
||||
import com.jpexs.decompiler.flash.configuration.SwfSpecificCustomConfiguration;
|
||||
import com.jpexs.decompiler.flash.console.CommandLineArgumentParser;
|
||||
import com.jpexs.decompiler.flash.console.ContextMenuTools;
|
||||
import com.jpexs.decompiler.flash.easygui.EasyGuiMain;
|
||||
import com.jpexs.decompiler.flash.exporters.modes.ExeExportMode;
|
||||
import com.jpexs.decompiler.flash.gfx.GfxConvertor;
|
||||
import com.jpexs.decompiler.flash.gui.debugger.DebugAdapter;
|
||||
@@ -2918,11 +2917,7 @@ public class Main {
|
||||
* @throws IOException On error
|
||||
*/
|
||||
public static void main(String[] args) throws IOException {
|
||||
decodeLaunch5jArgs(args);
|
||||
if (args.length > 0 && args[0].equals("-easy")) {
|
||||
EasyGuiMain.main(args);
|
||||
return;
|
||||
}
|
||||
decodeLaunch5jArgs(args);
|
||||
setSessionLoaded(false);
|
||||
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.jpexs.decompiler.flash.configuration.CustomConfigurationKeys;
|
||||
import com.jpexs.decompiler.flash.configuration.SwfSpecificCustomConfiguration;
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfo;
|
||||
import com.jpexs.decompiler.flash.dumpview.DumpInfoSwfNode;
|
||||
import com.jpexs.decompiler.flash.easygui.EasyPanel;
|
||||
import com.jpexs.decompiler.flash.exporters.BinaryDataExporter;
|
||||
import com.jpexs.decompiler.flash.exporters.Font4Exporter;
|
||||
import com.jpexs.decompiler.flash.exporters.FontExporter;
|
||||
@@ -321,7 +322,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
|
||||
private final JPanel welcomePanel;
|
||||
|
||||
private final TimelineViewPanel timelineViewPanel;
|
||||
private final EasyPanel easyPanel;
|
||||
|
||||
private final MainFrameStatusPanel statusPanel;
|
||||
|
||||
@@ -1300,12 +1301,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
welcomePanel = createWelcomePanel();
|
||||
add(welcomePanel, BorderLayout.CENTER);
|
||||
|
||||
timelineViewPanel = new TimelineViewPanel();
|
||||
easyPanel = new EasyPanel();
|
||||
|
||||
contentPanel = new JPanel(new CardLayout());
|
||||
contentPanel.add(welcomePanel, WELCOME_PANEL);
|
||||
contentPanel.add(splitPane1, SPLIT_PANE1);
|
||||
contentPanel.add(timelineViewPanel, TIMELINE_PANEL);
|
||||
contentPanel.add(easyPanel, TIMELINE_PANEL);
|
||||
add(contentPanel);
|
||||
showContentPanelCard(WELCOME_PANEL);
|
||||
|
||||
@@ -5701,11 +5702,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
item = ((TagScript) item).getTag();
|
||||
}
|
||||
if (item instanceof Timelined) {
|
||||
timelineViewPanel.setTimelined((Timelined) item);
|
||||
easyPanel.setTimelined((Timelined) item);
|
||||
} else if (item instanceof Frame) {
|
||||
timelineViewPanel.setTimelined(((Frame) item).timeline.timelined);
|
||||
easyPanel.setTimelined(((Frame) item).timeline.timelined);
|
||||
} else {
|
||||
timelineViewPanel.setTimelined(swf);
|
||||
easyPanel.setTimelined(swf);
|
||||
}
|
||||
showContentPanelCard(TIMELINE_PANEL);
|
||||
return true;
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
# Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
library = Library
|
||||
|
||||
library.folder.images = images
|
||||
library.folder.graphics = graphics
|
||||
library.folder.shapeTweens = shapeTweens
|
||||
library.folder.texts = texts
|
||||
library.folder.fonts = fonts
|
||||
library.folder.movieClips = movieClips
|
||||
library.folder.buttons = buttons
|
||||
library.folder.sounds = sounds
|
||||
library.folder.videos = videos
|
||||
|
||||
library.header.name = Name
|
||||
library.header.asLinkage = AS Linkage
|
||||
|
||||
item.image = image
|
||||
item.graphic = graphic
|
||||
item.shapeTween = shapeTween
|
||||
item.text = text
|
||||
item.font = font
|
||||
item.movieClip = movieClip
|
||||
item.button = button
|
||||
item.sound = sound
|
||||
item.video = video
|
||||
item.uknown = unknown
|
||||
|
||||
undo = Undo %action%
|
||||
undo.cannot = Cannot undo
|
||||
redo = Redo %action%
|
||||
redo.cannot = Cannot redo
|
||||
|
||||
transform = Transform
|
||||
|
||||
|
||||
Reference in New Issue
Block a user