package magic.ui.theme; import java.awt.Color; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; import magic.data.GeneralConfig; import magic.ui.MagicImages; import magic.utility.MagicFileSystem; public class ThemeFactory { private static final ThemeFactory INSTANCE = new ThemeFactory(); private Theme currentTheme; private ThemeFactory() { loadThemes(); } public void loadThemes() { setCurrentTheme(GeneralConfig.getInstance().getTheme()); } public static String[] getThemeNames() { final List<String> themes = new ArrayList<>(); // built-in themes... themes.add("wood"); themes.add("granite"); themes.add("opal"); // custom themes in "themes" folder... final File[] files = MagicFileSystem.getThemes(); for (File f : files) { String name = CustomTheme.getThemeName(f); if (!themes.contains(name)) { themes.add(name); } } // sort alphabetically (ignoring case)... Collections.sort(themes, (s1, s2) -> s1.compareToIgnoreCase(s2)); return themes.toArray(new String[themes.size()]); } private static Theme getBuiltInTheme(String themeName) { switch (themeName.toLowerCase(Locale.ENGLISH)) { case "wood": return new DefaultTheme("wood", MagicImages.WOOD, MagicImages.MARBLE, Color.BLACK); case "granite": return new DefaultTheme("granite", MagicImages.GRANITE, MagicImages.GRANITE2, Color.BLACK); case "opal": return new DefaultTheme("opal", MagicImages.OPAL, MagicImages.OPAL2, Color.BLUE); } return null; } public Theme loadTheme(String name) { final Theme custom = CustomTheme.loadTheme(name); if (custom != null) { return custom; } final Theme builtin = getBuiltInTheme(name); return builtin != null ? builtin : getBuiltInTheme("wood"); } public void setCurrentTheme(final String aName) { for (String theme : getThemeNames()) { if (theme.equalsIgnoreCase(aName)) { currentTheme = loadTheme(theme); return; } } currentTheme = getBuiltInTheme("wood"); } public Theme getCurrentTheme() { return currentTheme; } public static Theme getTheme() { return getInstance().currentTheme; } public static ThemeFactory getInstance() { return INSTANCE; } public static File getThemeFile(String name) { if (getBuiltInTheme(name) != null) { return null; } return CustomTheme.getThemeFile(name); } }