From 9fa663296778f7d41f3176632b0a34a6fa973fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 1 Nov 2022 22:52:41 +0100 Subject: [PATCH] Added Replace button under shape and DefineSound display (previously, only context menu allowed that) --- CHANGELOG.md | 1 + .../jpexs/decompiler/flash/gui/MainPanel.java | 11 +++-- .../decompiler/flash/gui/PreviewPanel.java | 39 +++++++++++++++--- .../flash/gui/graphics/replaceshape16.png | Bin 0 -> 660 bytes .../flash/gui/graphics/replacesound16.png | Bin 0 -> 6903 bytes .../flash/gui/locales/MainFrame.properties | 2 +- .../flash/gui/locales/MainFrame_ca.properties | 2 +- .../flash/gui/locales/MainFrame_es.properties | 2 +- .../flash/gui/locales/MainFrame_fr.properties | 2 +- .../flash/gui/locales/MainFrame_hu.properties | 2 +- .../flash/gui/locales/MainFrame_it.properties | 2 +- .../gui/locales/MainFrame_pt_BR.properties | 2 +- .../flash/gui/locales/MainFrame_sv.properties | 2 +- .../flash/gui/locales/MainFrame_tr.properties | 2 +- 14 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/replaceshape16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/replacesound16.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 47d73d13a..2f16ac341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Added - Copy/move tag to for SWFs inside bundles and/or DefineBinaryData +- Replace button under shape and DefineSound display (previously, only context menu allowed that) ### Fixed - SWF Add tag before/after menuitem diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 1dda93627..3a14f009d 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -3860,7 +3860,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se previewPanel.showUnknownPanel(unknownTag); } else if (treeItem instanceof ImageTag) { ImageTag imageTag = (ImageTag) treeItem; - previewPanel.setImageReplaceButtonVisible(!((Tag) imageTag).isReadOnly() && imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag); + previewPanel.setImageReplaceButtonVisible(!((Tag) imageTag).isReadOnly() && imageTag.importSupported(), imageTag instanceof DefineBitsJPEG3Tag || imageTag instanceof DefineBitsJPEG4Tag, false, false); SWF imageSWF = makeTimelinedImage(imageTag); previewPanel.showImagePanel(imageSWF, imageSWF, 0, false); @@ -3875,6 +3875,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } previewPanel.setParametersPanelVisible(false); + if (treeItem instanceof ShapeTag) { + previewPanel.setImageReplaceButtonVisible(false, false, !((Tag) treeItem).isReadOnly(), false); + } previewPanel.showImagePanel(timelined, tag.getSwf(), -1, true); } else if (treeItem instanceof Frame && internalViewer) { Frame fn = (Frame) treeItem; @@ -3890,7 +3893,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se previewPanel.showImagePanel(timelinedContainer, swf, frame, true); } 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); + previewPanel.setImageReplaceButtonVisible(false, false, false, !((Tag) treeItem).isReadOnly() && (treeItem instanceof DefineSoundTag)); try { SoundTagPlayer soundThread = new SoundTagPlayer(null, (SoundTag) treeItem, Configuration.loopMedia.get() ? Integer.MAX_VALUE : 1, true); previewPanel.setMedia(soundThread); @@ -3980,8 +3983,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se previewPanel.clear(); stopFlashPlayer(); - previewPanel.setImageReplaceButtonVisible(false, false); - + previewPanel.setImageReplaceButtonVisible(false, false, false, false); + boolean internalViewer = !isAdobeFlashPlayerEnabled(); if (treeItem instanceof ScriptPack) { diff --git a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java index a7030541f..231a69c98 100644 --- a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java @@ -130,6 +130,12 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel private JPanel displayWithPreview; // Image tag buttons + private JButton replaceShapeButton; + + private JButton replaceShapeUpdateBoundsButton; + + private JButton replaceSoundButton; + private JButton replaceImageButton; private JButton replaceImageAlphaButton; @@ -252,8 +258,23 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel parametersPanel.add(displayWithPreview, BorderLayout.CENTER); setRightComponent(parametersPanel); } - + private JPanel createImageButtonsPanel() { + replaceShapeButton = new JButton(mainPanel.translate("button.replace"), View.getIcon("replaceshape16")); + replaceShapeButton.setMargin(new Insets(3, 3, 3, 10)); + replaceShapeButton.addActionListener(mainPanel::replaceButtonActionPerformed); + replaceShapeButton.setVisible(false); + + replaceShapeUpdateBoundsButton = new JButton(mainPanel.translate("button.replaceNoFill"), View.getIcon("replaceshape16")); + replaceShapeUpdateBoundsButton.setMargin(new Insets(3, 3, 3, 10)); + replaceShapeUpdateBoundsButton.addActionListener(mainPanel::replaceNoFillButtonActionPerformed); + replaceShapeUpdateBoundsButton.setVisible(false); + + replaceSoundButton = new JButton(mainPanel.translate("button.replace"), View.getIcon("replacesound16")); + replaceSoundButton.setMargin(new Insets(3, 3, 3, 10)); + replaceSoundButton.addActionListener(mainPanel::replaceButtonActionPerformed); + replaceSoundButton.setVisible(false); + replaceImageButton = new JButton(mainPanel.translate("button.replace"), View.getIcon("replaceimage16")); replaceImageButton.setMargin(new Insets(3, 3, 3, 10)); replaceImageButton.addActionListener(mainPanel::replaceButtonActionPerformed); @@ -275,6 +296,9 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel nextFontsButton.setVisible(false); ButtonsPanel imageButtonsPanel = new ButtonsPanel(); + imageButtonsPanel.add(replaceSoundButton); + imageButtonsPanel.add(replaceShapeButton); + imageButtonsPanel.add(replaceShapeUpdateBoundsButton); imageButtonsPanel.add(replaceImageButton); imageButtonsPanel.add(replaceImageAlphaButton); imageButtonsPanel.add(prevFontsButton); @@ -726,17 +750,22 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel placeFreeTransformButton.setVisible(!readOnly); } - public void setImageReplaceButtonVisible(boolean show, boolean showAlpha) { + public void setImageReplaceButtonVisible(boolean showImage, boolean showAlpha, boolean showShape, boolean showSound) { if (readOnly) { - show = false; + showImage = false; showAlpha = false; + showShape = false; + showSound = false; } - replaceImageButton.setVisible(show); + replaceImageButton.setVisible(showImage); replaceImageAlphaButton.setVisible(showAlpha); + replaceShapeButton.setVisible(showShape); + replaceShapeUpdateBoundsButton.setVisible(showShape); + replaceSoundButton.setVisible(showSound); prevFontsButton.setVisible(false); nextFontsButton.setVisible(false); } - + private void createAndRunTempSwf(TreeItem treeItem) { try { File extTempFile = File.createTempFile("ffdec_viewext_", ".swf"); diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/replaceshape16.png b/src/com/jpexs/decompiler/flash/gui/graphics/replaceshape16.png new file mode 100644 index 0000000000000000000000000000000000000000..d28dc6b1a4420e67d2ad201e77fa6ffdff47b0f0 GIT binary patch literal 660 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