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 000000000..d28dc6b1a Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/replaceshape16.png differ diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/replacesound16.png b/src/com/jpexs/decompiler/flash/gui/graphics/replacesound16.png new file mode 100644 index 000000000..ef77ccbb3 Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/replacesound16.png differ diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index 9dd13c30b..e59da134a 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -697,7 +697,7 @@ debug.break.reason.scriptLoaded = (Script loaded) menu.file.start.debugpcode = Debug P-code #after 7.1.2 -button.replaceNoFill = Replace - Update bounds... +button.replaceNoFill = Replace - update bounds... message.warning.svgImportExperimental = Not all SVG features are supported. Please check the log after import. message.imported.swf = The SWF file uses assets from an imported SWF file:\n%url%\nDo you want the assets to be loaded from that URL? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties index 448a65265..301acd6f3 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties @@ -697,7 +697,7 @@ debug.break.reason.scriptLoaded = (Script carregat) menu.file.start.debugpcode = Depura el codi-P #after 7.1.2 -button.replaceNoFill = Substitueix - Actualitza els l\u00edmits... +button.replaceNoFill = Substitueix - actualitza els l\u00edmits... message.warning.svgImportExperimental = No totes les caracter\u00edstiques SVG estan suportades. Comprova el registre despr\u00e9s d'importar, si et plau. message.imported.swf = El fitxer SWF utilitza valors d'un fitxer SWF importat:\n%url%\nVols que els valors es carreguin des d'aquest URL? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties index d6a65c773..39b44ed37 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties @@ -695,7 +695,7 @@ debug.break.reason.scriptLoaded = (Script cargado) menu.file.start.debugpcode = Depurar P-code #after 7.1.2 -button.replaceNoFill = Replace - L\u00edmites de actualizaci\u00f3n... +button.replaceNoFill = Replace - l\u00edmites de actualizaci\u00f3n... message.warning.svgImportExperimental = No todas las catacter\u00edsticas de SVG est\u00e1n soportadas. Solo el modo de llenado de color s\u00f3lido es soportado. Por favor, compruebe la anotaciones despu\u00e9s de importar. message.imported.swf = El archivo utiliza recursos de un archivo SWF importado: %url% Quiere que los recursos sean cargados desde dicha URL? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties index fc0bda547..19d03d909 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties @@ -695,7 +695,7 @@ debug.break.reason.scriptLoaded = (Script charg\u00e9) menu.file.start.debugpcode = D\u00e9boguage assembleur #after 7.1.2 -button.replaceNoFill = Remplacer - Mettre \u00e0 jour les limites... +button.replaceNoFill = Remplacer - mettre \u00e0 jour les limites... message.warning.svgImportExperimental = Toutes les fonctionnalit\u00e9s SVG ne sont pas forc\u00e9ment support\u00e9es. V\u00e9rifiez le journal apr\u00e8s l'import. message.imported.swf = Le fichier SWF utilise des propri\u00e9t\u00e9s du fichier import\u00e9 :\n%url%\nSouhaitez-vous charger les propri\u00e9t\u00e9s \u00e0 partir de cette URL ? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties index 0f72a3e88..4433811f0 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties @@ -694,7 +694,7 @@ debug.break.reason.scriptLoaded = (Szkript bet\u00f6ltve) menu.file.start.debugpcode = P-k\u00f3d hibakeres\u00e9s #after 7.1.2 -button.replaceNoFill = Csere - Hat\u00e1rok friss\u00edt\u00e9se... +button.replaceNoFill = Csere - hat\u00e1rok friss\u00edt\u00e9se... message.warning.svgImportExperimental = Nem minden SVG funkci\u00f3 t\u00e1mogatott. Ellen\u0151rizze a hibanapl\u00f3t import\u00e1l\u00e1s ut\u00e1n. message.imported.swf = Az SWF f\u00e1jl haszn\u00e1l dolgokat az import\u00e1lt SWF f\u00e1jlb\u00f3l:\n%url%\nSzeretn\u00e9 bet\u00f6lteni a megadott URL-r\u0151l? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties index ed5661907..17e0df693 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties @@ -696,7 +696,7 @@ debug.break.reason.scriptLoaded = (Script caricato) menu.file.start.debugpcode = Debug P-code # after 7.1.2 -button.replaceNoFill = Sostituisci - Aggiorna limiti... +button.replaceNoFill = Sostituisci - aggiorna limiti... message.warning.svgImportExperimental = Non tutte le funzioni SVG sono supportate. Controllare il registro dopo l'importazione. message.imported.swf = Il file SWF utilizza asset da un file SWF importato:\n%url%\nCaricare gli asset da quell'indirizzo? message.imported.swf.manually = Impossibile caricare SWF importato\n%url%\nFile o URL non esistente.\nSelezionare un file locale? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties index fb15a20cc..22625b8c5 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties @@ -697,7 +697,7 @@ debug.break.reason.scriptLoaded = (Script loaded) menu.file.start.debugpcode = Depurar P-code #after 7.1.2 -button.replaceNoFill = Substituir - Atualizar limites... +button.replaceNoFill = Substituir - atualizar limites... message.warning.svgImportExperimental = Nem todos os recursos SVG s\u00e3o suportados. Por favor, verifique o log ap\u00f3s a importa\u00e7\u00e3o. message.imported.swf = O arquivo SWF usa ativos de um arquivo SWF importado:\n%url%\nDeseja que os ativos sejam carregados dessa URL? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties index b9de406ef..e19524ff5 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties @@ -696,7 +696,7 @@ debug.break.reason.scriptLoaded = (Skript laddat) menu.file.start.debugpcode = Debugga P-kod #after 7.1.2 -button.replaceNoFill = Ers\u00e4tt - Uppdaterings gr\u00e4nser... +button.replaceNoFill = Ers\u00e4tt - uppdaterings gr\u00e4nser... message.warning.svgImportExperimental = Inte alla SVG funktioner st\u00f6ds. Sn\u00e4lla kontrollera loggen efter importering. message.imported.swf = SWF-filen anv\u00e4nder assets fr\u00e5n en imported SWF-fil:\n%url%\nVill du att assets kommer att bli laddad fr\u00e5n den l\u00e4nken? diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_tr.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_tr.properties index 91dbd2335..20b629c63 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_tr.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_tr.properties @@ -1123,7 +1123,7 @@ menu.file.start.debugpcode = Hata ay\u0131klama P kodu -button.replaceNoFill = De\u011fi\u015ftir - S\u0131n\u0131rlar\u0131 g\u00fcncelle ... +button.replaceNoFill = De\u011fi\u015ftir - s\u0131n\u0131rlar\u0131 g\u00fcncelle ... message.warning.svgImportExperimental = T\u00fcm SVG \u00f6zellikleri desteklenmiyor. L\u00fctfen i\u00e7e aktarma yapt\u0131ktan sonra g\u00fcnl\u00fc\u011f\u00fc kontrol edin.