package magic.ui.screen.menu.language; import java.awt.event.ActionEvent; import java.io.FileNotFoundException; import java.util.List; import javax.swing.AbstractAction; import javax.swing.JPanel; import javax.swing.SwingUtilities; import magic.data.GeneralConfig; import magic.ui.ScreenController; import magic.translate.MText; import magic.ui.screen.MScreen; import magic.ui.screen.widget.MenuPanel; import magic.utility.MagicFileSystem; import magic.utility.MagicSystem; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class StartScreen extends MScreen { // translatable strings private static final String _S1 = "Language"; private static final String _S2 = "Invalid translation file."; private List<String> translations; public StartScreen() { // use of runnable fixes #731 (https://github.com/magarena/magarena/issues/731) SwingUtilities.invokeLater(() -> { if (MagicSystem.isNewInstall() == false) { showMainMenuScreen(); } else { setMainContent(new ScreenContent()); } }); } private class ScreenContent extends JPanel { private final MigLayout migLayout = new MigLayout(); public ScreenContent() { setOpaque(false); setLayout(migLayout); translations = MagicFileSystem.getTranslationFilenames(); if (translations.isEmpty()) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ScreenController.showImportScreen(); } }); } else { showLanguageMenu(); } } private void setLanguage(String aLanguage) throws FileNotFoundException { GeneralConfig.getInstance().setTranslation(aLanguage); MText.loadTranslationFile(); GeneralConfig.getInstance().save(); } private void showLanguageMenu() { final MenuPanel menuPanel = new MenuPanel(MText.get(_S1)); menuPanel.addMenuItem(MText.get("English"), new AbstractAction() { @Override public void actionPerformed(final ActionEvent ev) { try { setLanguage(GeneralConfig.DEFAULT_TRANSLATION); ScreenController.showImportScreen(); } catch (FileNotFoundException ex) { throw new RuntimeException(ex); } } }); for (final String translation : translations) { menuPanel.addMenuItem(translation, new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { try { setLanguage(translation); ScreenController.showImportScreen(); } catch (FileNotFoundException | NumberFormatException ex) { System.err.println(ex); ScreenController.showWarningMessage(String.format("%s\n\n%s", MText.get(_S2), ex) ); } } }); } menuPanel.refreshLayout(); migLayout.setLayoutConstraints("alignx center, aligny center"); add(menuPanel); } } private void showMainMenuScreen() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ScreenController.showMainMenuScreen(); } }); } }