diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 1216008c4..1d770a11b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -31,6 +31,7 @@ import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; @@ -240,7 +241,9 @@ public class Configuration { public static final ConfigurationItem recentFiles = null; - public static final ConfigurationItem fontPairing = null; + public static final ConfigurationItem> fontPairingMap = null; + + public static final ConfigurationItem> swfSpecificConfigs = null; public static final ConfigurationItem lastUpdatesCheckDate = null; @@ -575,37 +578,41 @@ public class Configuration { } public static Map getFontToNameMap() { - String fonts = fontPairing.get(); - if (fonts == null) { - return new HashMap<>(); + HashMap map = fontPairingMap.get(); + if (map == null) { + map = new HashMap<>(); + fontPairingMap.set(map); } - Map result = new HashMap<>(); - for (String pair : fonts.split("::")) { - if (!pair.isEmpty()) { - String[] splittedPair = pair.split("="); - result.put(splittedPair[0], splittedPair[1]); - } - } - return result; + return map; } public static void addFontPair(String fileName, int fontId, String fontName, String installedName) { - String key = fileName + "_" + fontId + "_" + fontName; Map fontPairs = getFontToNameMap(); - fontPairs.put(key, installedName); fontPairs.put(fontName, installedName); - StringBuilder sb = new StringBuilder(); - int i = 0; - for (Entry pair : fontPairs.entrySet()) { - if (i != 0) { - sb.append("::"); - } - sb.append(pair.getKey()).append("=").append(pair.getValue()); - i++; + SwfSpecificConfiguration swfConf = getOrCreateSwfSpecificConfiguration(fileName); + swfConf.fontPairingMap.put(fontId + "_" + fontName, installedName); + } + + public static SwfSpecificConfiguration getSwfSpecificConfiguration(String fileName) { + HashMap map = swfSpecificConfigs.get(); + if (map == null) { + map = new HashMap<>(); + swfSpecificConfigs.set(map); } - fontPairing.set(sb.toString()); + + return map.get(fileName); + } + + public static SwfSpecificConfiguration getOrCreateSwfSpecificConfiguration(String fileName) { + SwfSpecificConfiguration swfConf = getSwfSpecificConfiguration(fileName); + if (swfConf == null) { + swfConf = new SwfSpecificConfiguration(); + swfSpecificConfigs.get().put(fileName, swfConf); + } + + return swfConf; } private static String getConfigFile() throws IOException { @@ -694,7 +701,13 @@ public class Configuration { if (config.containsKey(name)) { value = config.get(name); - Class type = (Class) (((ParameterizedType) (field.getGenericType())).getActualTypeArguments()[0]); + Class type; + Type type2 = ((ParameterizedType) (field.getGenericType())).getActualTypeArguments()[0]; + if (type2 instanceof Class) { + type = (Class) type2; + } else { + type = (Class) ((ParameterizedType) type2).getRawType(); + } if (value != null && !type.isAssignableFrom(value.getClass())) { System.out.println("Configuration item has a wrong type: " + name + " expected: " + type.getSimpleName() + " actual: " + value.getClass().getSimpleName()); value = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificConfiguration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificConfiguration.java index a55b91eb6..ae77d7dfc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificConfiguration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/SwfSpecificConfiguration.java @@ -16,9 +16,17 @@ */ package com.jpexs.decompiler.flash.configuration; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + /** * * @author JPEXS */ -public class SwfSpecificConfiguration { +public class SwfSpecificConfiguration implements Serializable { + + public final Map fontPairingMap = new HashMap<>(); + + public final ConfigurationItem lastSessionData = null; } diff --git a/src/com/jpexs/decompiler/flash/gui/FontPanel.java b/src/com/jpexs/decompiler/flash/gui/FontPanel.java index 894b4dbab..5a4f88ca9 100644 --- a/src/com/jpexs/decompiler/flash/gui/FontPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/FontPanel.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; import com.jpexs.decompiler.flash.gui.helpers.TableLayoutHelper; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.base.FontTag; @@ -212,18 +213,21 @@ public class FontPanel extends JPanel { fontCharactersTextArea.setText(chars); fontCharactersScrollPane.getVerticalScrollBar().scrollRectToVisible(new Rectangle(0, 0, 1, 1)); setAllowSave(false); - String key = swf.getShortFileName() + "_" + ft.getFontId() + "_" + ft.getFontNameIntag(); String selectedFont; if (swf.sourceFontNamesMap.containsKey(ft.getFontId())) { selectedFont = swf.sourceFontNamesMap.get(ft.getFontId()); - } else if (Configuration.getFontToNameMap().containsKey(key)) { - selectedFont = Configuration.getFontToNameMap().get(key); - } else if (Configuration.getFontToNameMap().containsKey(ft.getFontNameIntag())) { - selectedFont = Configuration.getFontToNameMap().get(ft.getFontNameIntag()); } else { - selectedFont = FontTag.findInstalledFontName(ft.getFontName()); + SwfSpecificConfiguration swfConf = Configuration.getSwfSpecificConfiguration(swf.getShortFileName()); + String key = ft.getFontId() + "_" + ft.getFontNameIntag(); + if (swfConf != null && swfConf.fontPairingMap.containsKey(key)) { + selectedFont = swfConf.fontPairingMap.get(key); + } else if (Configuration.getFontToNameMap().containsKey(ft.getFontNameIntag())) { + selectedFont = Configuration.getFontToNameMap().get(ft.getFontNameIntag()); + } else { + selectedFont = FontTag.findInstalledFontName(ft.getFontName()); + } } Font selFont = FontTag.installedFontsByName.get(selectedFont);