From a8d16627f4b9e1cbd05ed7c91d7240ca456d7b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 7 Oct 2024 19:32:04 +0200 Subject: [PATCH] Removed old timeline package --- .../jpexs/decompiler/flash/gui/MainPanel.java | 1 - .../gui/timeline/FrameSelectionListener.java | 26 -- .../flash/gui/timeline/TimelineBodyPanel.java | 401 ------------------ .../gui/timeline/TimelineDepthPanel.java | 75 ---- .../flash/gui/timeline/TimelinePanel.java | 142 ------- .../flash/gui/timeline/TimelineTimePanel.java | 131 ------ .../flash/gui/timeline/TimelineViewPanel.java | 66 --- 7 files changed, 842 deletions(-) delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/FrameSelectionListener.java delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/TimelineBodyPanel.java delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/TimelineDepthPanel.java delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/TimelinePanel.java delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/TimelineTimePanel.java delete mode 100644 src/com/jpexs/decompiler/flash/gui/timeline/TimelineViewPanel.java diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 2ac0e2b53..ebc20bb74 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -118,7 +118,6 @@ import com.jpexs.decompiler.flash.gui.tagtree.TagTree; import com.jpexs.decompiler.flash.gui.tagtree.TagTreeContextMenu; import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; import com.jpexs.decompiler.flash.gui.tagtree.TreeRoot; -import com.jpexs.decompiler.flash.gui.timeline.TimelineViewPanel; import com.jpexs.decompiler.flash.helpers.FileTextWriter; import com.jpexs.decompiler.flash.helpers.Freed; import com.jpexs.decompiler.flash.importers.AS2ScriptImporter; diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/FrameSelectionListener.java b/src/com/jpexs/decompiler/flash/gui/timeline/FrameSelectionListener.java deleted file mode 100644 index c1076d14d..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/FrameSelectionListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -/** - * @author JPEXS - */ -@FunctionalInterface -public interface FrameSelectionListener { - - public void frameSelected(int frame, int depth); -} diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineBodyPanel.java b/src/com/jpexs/decompiler/flash/gui/timeline/TimelineBodyPanel.java deleted file mode 100644 index 367e6fcd8..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineBodyPanel.java +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.tags.base.CharacterTag; -import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; -import com.jpexs.decompiler.flash.timeline.DepthState; -import com.jpexs.decompiler.flash.timeline.Timeline; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.RenderingHints; -import java.awt.SystemColor; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import javax.swing.JPanel; -import org.pushingpixels.substance.api.ColorSchemeAssociationKind; -import org.pushingpixels.substance.api.ComponentState; -import org.pushingpixels.substance.api.DecorationAreaType; -import org.pushingpixels.substance.api.SubstanceLookAndFeel; -import org.pushingpixels.substance.internal.utils.SubstanceColorUtilities; - -/** - * @author JPEXS - */ -public class TimelineBodyPanel extends JPanel implements MouseListener, KeyListener { - - private final Timeline timeline; - - public static final Color shapeTweenColor = new Color(0x59, 0xfe, 0x7c); - - public static final Color motionTweenColor = new Color(0xd1, 0xac, 0xf1); - - //public static final Color frameColor = new Color(0xbd, 0xd8, 0xfc); - public static final Color borderColor = Color.black; - - public static final Color emptyBorderColor = new Color(0xbd, 0xd8, 0xfc); - - public static final Color keyColor = Color.black; - - public static final Color aColor = Color.black; - - public static final Color stopColor = Color.white; - - public static final Color stopBorderColor = Color.black; - - public static final Color borderLinesColor = new Color(0xde, 0xde, 0xde); - - //public static final Color selectedColor = new Color(113, 174, 235); - public static final int borderLinesLength = 2; - - public static final float fontSize = 10.0f; - - private final List listeners = new ArrayList<>(); - - public Point cursor = null; - - private enum BlockType { - - EMPTY, NORMAL, MOTION_TWEEN, SHAPE_TWEEN - } - - public static Color getEmptyFrameColor() { - return SubstanceColorUtilities.getLighterColor(getControlColor(), 0.7); - } - - public static Color getEmptyFrameSecondColor() { - return SubstanceColorUtilities.getLighterColor(getControlColor(), 0.9); - } - - public static Color getSelectedColor() { - if (Configuration.useRibbonInterface.get()) { - return SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getBackgroundFillColor(); - } else { - return SystemColor.textHighlight; - } - } - - private static Color getControlColor() { - if (Configuration.useRibbonInterface.get()) { - return SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getBackgroundFillColor(); - } else { - return SystemColor.control; - } - } - - public static Color getFrameColor() { - return SubstanceColorUtilities.getDarkerColor(getControlColor(), 0.1); - } - - public void addFrameSelectionListener(FrameSelectionListener l) { - listeners.add(l); - } - - public void removeFrameSelectionListener(FrameSelectionListener l) { - listeners.remove(l); - } - - public TimelineBodyPanel(Timeline timeline) { - - this.timeline = timeline; - Dimension dim = new Dimension(TimelinePanel.FRAME_WIDTH * timeline.getFrameCount() + 1, TimelinePanel.FRAME_HEIGHT * timeline.getMaxDepth()); - setSize(dim); - setPreferredSize(dim); - addMouseListener(this); - addKeyListener(this); - setFocusable(true); - } - - @Override - protected void paintComponent(Graphics g1) { - Graphics2D g = (Graphics2D) g1; - g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); - g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - - g.setColor(TimelinePanel.getBackgroundColor()); - g.fillRect(0, 0, getWidth(), getHeight()); - Rectangle clip = g.getClipBounds(); - int frameWidth = TimelinePanel.FRAME_WIDTH; - int frameHeight = TimelinePanel.FRAME_HEIGHT; - int start_f = clip.x / frameWidth; - int start_d = clip.y / frameHeight; - int end_f = (clip.x + clip.width) / frameWidth; - int end_d = (clip.y + clip.height) / frameHeight; - - int max_d = timeline.getMaxDepth(); - if (max_d < end_d) { - end_d = max_d; - } - int max_f = timeline.getFrameCount() - 1; - if (max_f < end_f) { - end_f = max_f; - } - - if (end_d - start_d + 1 < 0) { - return; - } - - // draw background - for (int f = start_f; f <= end_f; f++) { - g.setColor((f + 1) % 5 == 0 ? getEmptyFrameSecondColor() : getEmptyFrameColor()); - g.fillRect(f * frameWidth, start_d * frameHeight, frameWidth, (end_d - start_d + 1) * frameHeight); - g.setColor(emptyBorderColor); - for (int d = start_d; d <= end_d; d++) { - g.drawRect(f * frameWidth, d * frameHeight, frameWidth, frameHeight); - } - } - - // draw selected cell - if (cursor != null) { - g.setColor(getSelectedColor()); - g.fillRect(cursor.x * frameWidth + 1, cursor.y * frameHeight + 1, frameWidth - 1, frameHeight - 1); - } - - g.setColor(aColor); - g.setFont(getFont().deriveFont(fontSize)); - int awidth = g.getFontMetrics().stringWidth("a"); - for (int f = start_f; f <= end_f; f++) { - if (!timeline.getFrame(f).actions.isEmpty()) { - g.drawString("a", f * frameWidth + frameWidth / 2 - awidth / 2, frameHeight / 2 + fontSize / 2); - } - } - - Map depthMaxFrames = timeline.getDepthMaxFrame(); - for (int d = start_d; d <= end_d; d++) { - int maxFrame = depthMaxFrames.containsKey(d) ? depthMaxFrames.get(d) : -1; - if (maxFrame < 0) { - continue; - } - - int end_f2 = Math.min(end_f, maxFrame); - int start_f2 = Math.min(start_f, end_f2); - - // find the start frame number of the current block - DepthState dsStart = timeline.getFrame(start_f2).layers.get(d); - for (; start_f2 >= 1; start_f2--) { - DepthState ds = timeline.getFrame(start_f2 - 1).layers.get(d); - if (((dsStart == null) != (ds == null)) - || (ds != null && (dsStart.characterId != ds.characterId || !Objects.equals(dsStart.className, ds.className)))) { - break; - } - } - - for (int f = start_f2; f <= end_f2; f++) { - DepthState fl = timeline.getFrame(f).layers.get(d); - boolean motionTween = fl == null ? false : fl.motionTween; - - DepthState flNext = f < max_f ? timeline.getFrame(f + 1).layers.get(d) : null; - DepthState flPrev = f > 0 ? timeline.getFrame(f - 1).layers.get(d) : null; - - CharacterTag cht = fl == null ? null : fl.getCharacter(); - boolean shapeTween = cht != null && (cht instanceof MorphShapeTag); - boolean motionTweenStart = !motionTween && (flNext != null && flNext.motionTween); - boolean motionTweenEnd = !motionTween && (flPrev != null && flPrev.motionTween); - //boolean shapeTweenStart = shapeTween && (flPrev == null || flPrev.characterId != fl.characterId); - //boolean shapeTweenEnd = shapeTween && (flNext == null || flNext.characterId != fl.characterId); - - /*if (motionTweenStart || motionTweenEnd) { - motionTween = true; - }*/ - int draw_f = f; - int num_frames = 1; - Color backColor; - BlockType blockType; - if (fl == null) { - for (; f + 1 < timeline.getFrameCount(); f++) { - fl = timeline.getFrame(f + 1).layers.get(d); - if (fl != null && fl.getCharacter() != null) { - break; - } - - num_frames++; - } - - backColor = getEmptyFrameColor(); - blockType = BlockType.EMPTY; - } else { - for (; f + 1 < timeline.getFrameCount(); f++) { - fl = timeline.getFrame(f + 1).layers.get(d); - if (fl == null || fl.key) { - break; - } - - num_frames++; - } - - backColor = shapeTween ? shapeTweenColor : motionTween ? motionTweenColor : getFrameColor(); - blockType = shapeTween ? BlockType.SHAPE_TWEEN : motionTween ? BlockType.MOTION_TWEEN : BlockType.NORMAL; - } - - drawBlock(g, backColor, d, draw_f, num_frames, blockType); - } - } - - if (cursor != null && cursor.x >= start_f && cursor.x <= end_f) { - g.setColor(TimelinePanel.selectedBorderColor); - g.drawLine(cursor.x * frameWidth + frameWidth / 2, 0, cursor.x * frameWidth + frameWidth / 2, getHeight()); - } - } - - private void drawBlock(Graphics2D g, Color backColor, int depth, int frame, int num_frames, BlockType blockType) { - int frameWidth = TimelinePanel.FRAME_WIDTH; - int frameHeight = TimelinePanel.FRAME_HEIGHT; - - g.setColor(backColor); - g.fillRect(frame * frameWidth, depth * frameHeight, num_frames * frameWidth, frameHeight); - g.setColor(borderColor); - g.drawRect(frame * frameWidth, depth * frameHeight, num_frames * frameWidth, frameHeight); - - boolean selected = false; - if (cursor != null && frame <= cursor.x && (frame + num_frames) > cursor.x && depth == cursor.y) { - selected = true; - } - - if (selected) { - g.setColor(getSelectedColor()); - g.fillRect(cursor.x * frameWidth + 1, depth * frameHeight + 1, frameWidth - 1, frameHeight - 1); - } - - boolean isTween = blockType == BlockType.MOTION_TWEEN || blockType == BlockType.SHAPE_TWEEN; - - g.setColor(keyColor); - if (isTween) { - g.drawLine(frame * frameWidth, depth * frameHeight + frameHeight * 3 / 4, - frame * frameWidth + num_frames * frameWidth - frameWidth / 2, depth * frameHeight + frameHeight * 3 / 4 - ); - } - - if (blockType == BlockType.EMPTY) { - g.drawOval(frame * frameWidth + frameWidth / 4, depth * frameHeight + frameHeight * 3 / 4 - frameWidth / 2 / 2, frameWidth / 2, frameWidth / 2); - } else { - g.fillOval(frame * frameWidth + frameWidth / 4, depth * frameHeight + frameHeight * 3 / 4 - frameWidth / 2 / 2, frameWidth / 2, frameWidth / 2); - } - - if (num_frames > 1) { - int endFrame = frame + num_frames - 1; - if (isTween) { - g.fillOval(endFrame * frameWidth + frameWidth / 4, depth * frameHeight + frameHeight * 3 / 4 - frameWidth / 2 / 2, frameWidth / 2, frameWidth / 2); - } else { - g.setColor(stopColor); - g.fillRect(endFrame * frameWidth + frameWidth / 4, depth * frameHeight + frameHeight / 2 - 2, frameWidth / 2, frameHeight / 2); - g.setColor(stopBorderColor); - g.drawRect(endFrame * frameWidth + frameWidth / 4, depth * frameHeight + frameHeight / 2 - 2, frameWidth / 2, frameHeight / 2); - } - - g.setColor(borderLinesColor); - for (int n = frame + 1; n < frame + num_frames; n++) { - g.drawLine(n * frameWidth, depth * frameHeight + 1, n * frameWidth, depth * frameHeight + borderLinesLength); - g.drawLine(n * frameWidth, depth * frameHeight + frameHeight - 1, n * frameWidth, depth * frameHeight + frameHeight - borderLinesLength); - } - } - } - - @Override - public void mouseClicked(MouseEvent e) { - - } - - public void frameSelect(int frame, int depth) { - if (cursor != null && cursor.x == frame && (cursor.y == depth || depth == -1)) { - return; - } - if (depth == -1 && cursor != null) { - depth = cursor.y; - } - cursor = new Point(frame, depth); - for (FrameSelectionListener l : listeners) { - l.frameSelected(frame, depth); - } - repaint(); - } - - @Override - public void mousePressed(MouseEvent e) { - Point p = e.getPoint(); - p.x = p.x / TimelinePanel.FRAME_WIDTH; - p.y = p.y / TimelinePanel.FRAME_HEIGHT; - if (p.x >= timeline.getFrameCount()) { - p.x = timeline.getFrameCount() - 1; - } - int maxDepth = timeline.getMaxDepth(); - if (p.y > maxDepth) { - p.y = maxDepth; - } - frameSelect(p.x, p.y); - } - - @Override - public void mouseReleased(MouseEvent e) { - - } - - @Override - public void mouseEntered(MouseEvent e) { - - } - - @Override - public void mouseExited(MouseEvent e) { - - } - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - switch (e.getKeyCode()) { - case 37: //left - if (cursor.x > 0) { - frameSelect(cursor.x - 1, cursor.y); - } - break; - case 39: //right - if (cursor.x < timeline.getFrameCount() - 1) { - frameSelect(cursor.x + 1, cursor.y); - } - break; - case 38: //up - if (cursor.y > 0) { - frameSelect(cursor.x, cursor.y - 1); - } - break; - case 40: //down - if (cursor.y < timeline.getMaxDepth()) { - frameSelect(cursor.x, cursor.y + 1); - } - break; - } - } - - @Override - public void keyReleased(KeyEvent e) { - } -} diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineDepthPanel.java b/src/com/jpexs/decompiler/flash/gui/timeline/TimelineDepthPanel.java deleted file mode 100644 index bda231a31..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineDepthPanel.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -import com.jpexs.decompiler.flash.timeline.Timeline; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import javax.swing.JPanel; - -/** - * @author JPEXS - */ -public class TimelineDepthPanel extends JPanel { - - private final int maxDepth; - - public static final int padding = 5; - - public static final float fontSize = 10.0f; - - private int scrollOffset = 0; - - public static final Color borderColor = Color.lightGray; - - public static final Color fontColor = Color.black; - - public TimelineDepthPanel(Timeline timeline) { - maxDepth = timeline.getMaxDepth(); - String maxDepthStr = Integer.toString(maxDepth); - setFont(getFont().deriveFont(fontSize)); - int maxDepthW = getFontMetrics(getFont()).stringWidth(maxDepthStr); - Dimension dim = new Dimension(maxDepthW + 2 * padding, Integer.MAX_VALUE); - setSize(dim); - setPreferredSize(dim); - } - - public void scroll(int offset) { - this.scrollOffset = offset; - repaint(); - } - - @Override - protected void paintComponent(Graphics g) { - Rectangle clip = g.getClipBounds(); - int yofs = TimelinePanel.FRAME_HEIGHT - (scrollOffset % TimelinePanel.FRAME_HEIGHT); - int start_d = (scrollOffset + clip.y) / TimelinePanel.FRAME_HEIGHT; - int end_d = (scrollOffset + clip.y + clip.height) / TimelinePanel.FRAME_HEIGHT; - int d_count = end_d - start_d; - g.setColor(TimelinePanel.getBackgroundColor()); - g.fillRect(0, 0, getWidth(), getHeight()); - for (int d = 0; d < d_count; d++) { - g.setColor(borderColor); - g.drawLine(0, yofs + d * TimelinePanel.FRAME_HEIGHT + 1, getWidth(), yofs + d * TimelinePanel.FRAME_HEIGHT + 1); - int curr_d = start_d + d; - g.setColor(fontColor); - g.drawString(start_d + d == 0 ? "a" : Integer.toString(curr_d), padding, yofs + d * TimelinePanel.FRAME_HEIGHT - padding); - } - } -} diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/TimelinePanel.java b/src/com/jpexs/decompiler/flash/gui/timeline/TimelinePanel.java deleted file mode 100644 index 848c81933..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/TimelinePanel.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.FasterScrollPane; -import com.jpexs.decompiler.flash.timeline.Timeline; -import com.jpexs.decompiler.flash.timeline.Timelined; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.SystemColor; -import java.awt.event.AdjustmentEvent; -import java.awt.event.AdjustmentListener; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import org.pushingpixels.substance.api.ColorSchemeAssociationKind; -import org.pushingpixels.substance.api.ComponentState; -import org.pushingpixels.substance.api.DecorationAreaType; -import org.pushingpixels.substance.api.SubstanceLookAndFeel; - -/** - * @author JPEXS - */ -public class TimelinePanel extends JPanel { - - private TimelineBodyPanel timelineBodyPanel; - - private TimelineTimePanel timePanel; - - private TimelineDepthPanel depthPanel; - - private Timeline timeline; - - public static final int FRAME_WIDTH = 8; - - public static final int FRAME_HEIGHT = 18; - - public static final Color selectedColor = new Color(0xff, 0x99, 0x99); - - public static final Color selectedBorderColor = new Color(0xcc, 0, 0); - - //public static final Color backgroundColor = new Color(0xd9, 0xe7, 0xfa); - public static Color getBackgroundColor() { - if (Configuration.useRibbonInterface.get()) { - return SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getBackgroundFillColor(); - } else { - return SystemColor.control; - } - } - - public Timeline getTimeline() { - return timeline; - } - - public void addFrameSelectionListener(FrameSelectionListener l) { - timelineBodyPanel.addFrameSelectionListener(l); - } - - public void removeFrameSelectionListener(FrameSelectionListener l) { - timelineBodyPanel.removeFrameSelectionListener(l); - } - - public void setTimelined(Timelined timelined) { - this.removeAll(); - if (timelined == null) { - this.revalidate(); - return; - } - timeline = timelined.getTimeline(); - timelineBodyPanel = new TimelineBodyPanel(timeline); - setLayout(new BorderLayout()); - - JScrollPane sp = new FasterScrollPane(timelineBodyPanel); - - depthPanel = new TimelineDepthPanel(timeline); - - timePanel = new TimelineTimePanel(); - - JPanel row1Panel = new JPanel(); - row1Panel.setLayout(new BorderLayout()); - JPanel sepPanel = new JPanel(); - sepPanel.setBackground(getBackgroundColor()); - sepPanel.setPreferredSize(new Dimension(depthPanel.getWidth(), timePanel.getHeight())); - row1Panel.add(sepPanel, BorderLayout.WEST); - row1Panel.add(timePanel, BorderLayout.CENTER); - - JPanel row2Panel = new JPanel(); - row2Panel.setLayout(new BorderLayout()); - row2Panel.add(depthPanel, BorderLayout.WEST); - row2Panel.add(sp, BorderLayout.CENTER); - - add(row1Panel, BorderLayout.NORTH); - add(row2Panel, BorderLayout.CENTER); - - sp.getHorizontalScrollBar().addAdjustmentListener(new AdjustmentListener() { - @Override - public void adjustmentValueChanged(AdjustmentEvent e) { - timePanel.scroll(e.getValue()); - } - }); - sp.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() { - - @Override - public void adjustmentValueChanged(AdjustmentEvent e) { - depthPanel.scroll(e.getValue()); - } - }); - - final TimelineTimePanel ftime = timePanel; - timelineBodyPanel.addFrameSelectionListener(new FrameSelectionListener() { - - @Override - public void frameSelected(int frame, int depth) { - ftime.frameSelect(frame); - } - }); - final TimelineBodyPanel ftimeline = timelineBodyPanel; - timePanel.addFrameSelectionListener(new FrameSelectionListener() { - - @Override - public void frameSelected(int frame, int depth) { - ftimeline.frameSelect(frame, depth); - } - }); - this.revalidate(); - } -} diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineTimePanel.java b/src/com/jpexs/decompiler/flash/gui/timeline/TimelineTimePanel.java deleted file mode 100644 index 43526d41d..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineTimePanel.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.ArrayList; -import java.util.List; -import javax.swing.JPanel; - -/** - * @author JPEXS - */ -public class TimelineTimePanel extends JPanel implements MouseListener { - - public static final Color borderColor = Color.black; - - public static final int lineLength = 3; - - public static final int lineTextSpace = 3; - - public static final Color fontColor = Color.black; - - public float fontSize = 10.0f; - - private int scrollOffset = 0; - - private int selectedFrame = -1; - - private final List listeners = new ArrayList<>(); - - public TimelineTimePanel() { - Dimension dim = new Dimension(Integer.MAX_VALUE, TimelinePanel.FRAME_HEIGHT); - setSize(dim); - setPreferredSize(dim); - addMouseListener(this); - } - - public void addFrameSelectionListener(FrameSelectionListener l) { - listeners.add(l); - } - - public void removeFrameSelectionListener(FrameSelectionListener l) { - listeners.remove(l); - } - - public void frameSelect(int frame) { - if (selectedFrame == frame) { - return; - } - for (FrameSelectionListener l : listeners) { - l.frameSelected(frame, -1); - } - selectedFrame = frame; - repaint(); - } - - public void scroll(int offset) { - this.scrollOffset = offset; - repaint(); - } - - @Override - protected void paintComponent(Graphics g) { - Rectangle clip = g.getClipBounds(); - int start_f = (scrollOffset + clip.x) / TimelinePanel.FRAME_WIDTH; - int end_f = (scrollOffset + clip.x + clip.width) / TimelinePanel.FRAME_WIDTH; - g.setColor(TimelinePanel.getBackgroundColor()); - g.fillRect(0, 0, getWidth(), getHeight()); - g.setColor(borderColor); - int xofs = TimelinePanel.FRAME_WIDTH - scrollOffset % TimelinePanel.FRAME_WIDTH - 1; - for (int f = 0; f <= end_f; f++) { - g.drawLine(xofs + f * TimelinePanel.FRAME_WIDTH + 1, TimelinePanel.FRAME_HEIGHT - 1, xofs + f * TimelinePanel.FRAME_WIDTH + 1, TimelinePanel.FRAME_HEIGHT - lineLength); - } - g.setFont(g.getFont().deriveFont(fontSize)); - for (int f = 0; f <= end_f; f++) { - int cur_f = start_f + f; - if (selectedFrame == cur_f) { - g.setColor(TimelinePanel.selectedColor); - g.fillRect(xofs + (f - 1) * TimelinePanel.FRAME_WIDTH + 1, 0, TimelinePanel.FRAME_WIDTH, TimelinePanel.FRAME_HEIGHT - 1); - g.setColor(TimelinePanel.selectedBorderColor); - g.drawRect(xofs + (f - 1) * TimelinePanel.FRAME_WIDTH + 1, 0, TimelinePanel.FRAME_WIDTH, TimelinePanel.FRAME_HEIGHT - 1); - } - g.setColor(fontColor); - if ((cur_f + 1) % 5 == 0 || cur_f == 0) { - String timeStr = Integer.toString(cur_f + 1); - int w = g.getFontMetrics().stringWidth(timeStr); - g.drawString(timeStr, xofs + (f - 1) * TimelinePanel.FRAME_WIDTH + TimelinePanel.FRAME_WIDTH / 2 - w / 2, TimelinePanel.FRAME_HEIGHT - lineLength - lineTextSpace); - } - } - } - - @Override - public void mouseClicked(MouseEvent e) { - } - - @Override - public void mousePressed(MouseEvent e) { - frameSelect((scrollOffset + e.getX()) / TimelinePanel.FRAME_WIDTH); - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void mouseEntered(MouseEvent e) { - } - - @Override - public void mouseExited(MouseEvent e) { - } -} diff --git a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineViewPanel.java b/src/com/jpexs/decompiler/flash/gui/timeline/TimelineViewPanel.java deleted file mode 100644 index 3fe78ba8f..000000000 --- a/src/com/jpexs/decompiler/flash/gui/timeline/TimelineViewPanel.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2010-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 . - */ -package com.jpexs.decompiler.flash.gui.timeline; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.ImagePanel; -import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; -import com.jpexs.decompiler.flash.timeline.Timelined; -import java.awt.BorderLayout; -import javax.swing.JPanel; -import javax.swing.JSplitPane; - -/** - * @author JPEXS - */ -public class TimelineViewPanel extends JPanel { - - public TimelinePanel timeline; - - public ImagePanel previewPanel; - - public TimelineViewPanel() { - - } - - public void setTimelined(Timelined timelined) { - removeAll(); - if (timelined == null) { - revalidate(); - return; - } - setLayout(new BorderLayout()); - timeline = new TimelinePanel(); - timeline.setTimelined(timelined); - add(new JPersistentSplitPane(JSplitPane.HORIZONTAL_SPLIT, timeline, previewPanel = new ImagePanel(), Configuration.guiTimeLineSplitPaneDividerLocationPercent)); - - previewPanel.setTimelined(timelined, timelined.getTimeline().swf, 0, true, true, !Configuration.animateSubsprites.get(), true, !Configuration.playFrameSounds.get(), true, true); - //previewPanel.setPreferredSize(new Dimension(400,300)); - previewPanel.pause(); - previewPanel.gotoFrame(0); - timeline.addFrameSelectionListener(new FrameSelectionListener() { - - @Override - public void frameSelected(int frame, int depth) { - previewPanel.selectDepth(depth); - previewPanel.pause(); - previewPanel.gotoFrame(frame); - } - }); - revalidate(); - } -}