diff --git a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java index f81e444ff1a..3eac7878b91 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java @@ -218,20 +218,14 @@ public enum CSubmenuPreferences implements ICDoc { private void initializeSkinsComboBox() { FPref userSetting = FPref.UI_SKIN; - FComboBoxPanel panel = this.view.getSkinsComboBoxPanel(); - String[] installedSkins = getSortedListOfInstalledSkins(); - validatePreferredSkinName(installedSkins); - JComboBox comboBox = createComboBox(installedSkins, userSetting); + FComboBoxPanel panel = this.view.getSkinsComboBoxPanel(); + String[] installedSkins = FSkin.getSkinNamesArray(true); + validatePreferredSkinName(installedSkins); + JComboBox comboBox = createComboBox(installedSkins, userSetting); String selectedItem = this.prefs.getPref(userSetting); - panel.setComboBox(comboBox, selectedItem); + panel.setComboBox(comboBox, selectedItem); } - - private String[] getSortedListOfInstalledSkins() { - String[] skins = FSkin.getSkinNamesArray(); - java.util.Arrays.sort(skins); - return skins; - } - + private void validatePreferredSkinName(String[] installedSkins) { String preferredSkin = this.prefs.getPref(FPref.UI_SKIN); if (!Arrays.asList(installedSkins).contains(preferredSkin)) { diff --git a/src/main/java/forge/gui/menus/LayoutMenu.java b/src/main/java/forge/gui/menus/LayoutMenu.java index 42f76f0671e..fee9b23e982 100644 --- a/src/main/java/forge/gui/menus/LayoutMenu.java +++ b/src/main/java/forge/gui/menus/LayoutMenu.java @@ -5,11 +5,15 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; +import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JRadioButtonMenuItem; import forge.Singletons; +import forge.control.RestartUtil; import forge.control.FControl.Screens; import forge.gui.GuiChoose; import forge.gui.match.controllers.CDock; @@ -40,8 +44,9 @@ public final class LayoutMenu { if (currentScreen != Screens.HOME_SCREEN) { menu.add(getMenu_ViewOptions()); menu.add(getMenu_FileOptions()); - menu.addSeparator(); } + menu.add(getMenu_ThemeOptions()); + menu.addSeparator(); menu.add(getMenuItem_SetWindowSize()); if (currentScreen != Screens.HOME_SCREEN) { menu.add(getMenuItem_RevertLayout()); @@ -65,6 +70,49 @@ public final class LayoutMenu { return menu; } + private static JMenu getMenu_ThemeOptions() { + JMenu menu = new JMenu("Theme"); + JRadioButtonMenuItem menuItem; + ButtonGroup group = new ButtonGroup(); + String currentSkin = prefs.getPref(FPref.UI_SKIN); + String[] skins = FSkin.getSkinNamesArray(true); + for (String skin : skins) { + menuItem = new JRadioButtonMenuItem(skin); + group.add(menuItem); + if (skin.equals(currentSkin)) { + menuItem.setSelected(true); + } + menuItem.setActionCommand(skin); + menuItem.addActionListener(changeSkin); + menu.add(menuItem); + } + return menu; + } + + private static final ActionListener changeSkin = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String skin = e.getActionCommand(); + if (!skin.equals(prefs.getPref(FPref.UI_SKIN))) { + prefs.setPref(FPref.UI_SKIN, skin); + prefs.save(); + + Object[] options = {"Restart Now", "Restart Later"}; + int reply = JOptionPane.showOptionDialog( + null, + "You must restart Forge for " + skin + " theme to take effect.", + "Change Theme", + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE, + null, + options, + options[0]); + if (reply == JOptionPane.YES_OPTION) { + RestartUtil.restartApplication(null); + } + } + } + }; private static JMenuItem getMenuItem_ShowBackgroundImage() { final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem("Background Image"); diff --git a/src/main/java/forge/gui/toolbox/FSkin.java b/src/main/java/forge/gui/toolbox/FSkin.java index b051681e5c6..532e5654ee0 100644 --- a/src/main/java/forge/gui/toolbox/FSkin.java +++ b/src/main/java/forge/gui/toolbox/FSkin.java @@ -786,12 +786,15 @@ public enum FSkin { return mySkins; } - public static String[] getSkinNamesArray() { + public static String[] getSkinNamesArray(boolean sorted) { ArrayList skinDirectoryNames = getSkinDirectoryNames(); String[] prettySkinNames = new String[skinDirectoryNames.size()]; for (int i = 0; i < skinDirectoryNames.size(); i++) { prettySkinNames[i] = WordUtils.capitalize(skinDirectoryNames.get(i).replace('_', ' ')); } + if (sorted) { + java.util.Arrays.sort(prettySkinNames); + } return prettySkinNames; }