package magic.ui;
import magic.ui.helpers.UrlHelper;
import magic.translate.MText;
import magic.ui.utility.MagicStyle;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import javax.swing.AbstractAction;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import magic.ui.screen.interfaces.IThemeStyle;
import magic.ui.screen.widget.MenuButton;
import magic.ui.screen.widget.MenuPanel;
import magic.ui.theme.Theme;
import magic.ui.widget.TexturedPanel;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
public abstract class ScreenOptionsOverlay extends TexturedPanel implements IThemeStyle {
// translatable strings
private static final String _S1 = "General Options";
private static final String _S2 = "ReadMe";
private static final String _S3 = "Online help";
private static final String _S4 = "Keywords glossary";
private static final String _S5 = "Preferences";
private static final String _S6 = "Quit to main menu";
private static final String _S7 = "Quit to desktop";
private static final String _S8 = "Close Menu";
private final MenuPanel screenMenu;
private MenuPanel menu = null;
protected abstract MenuPanel getScreenMenu();
protected abstract boolean showPreferencesOption();
public ScreenOptionsOverlay() {
refreshStyle();
setBackground(FontsAndBorders.IMENUOVERLAY_BACKGROUND_COLOR);
setLayout(new MigLayout("insets 0, gap 10, flowx, center, center"));
screenMenu = getScreenMenu();
addScreenSpecificMenu();
addGeneralOptionsMenu();
getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "closeMenu");
getActionMap().put("closeMenu", new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
hideOverlay();
}
});
addMouseListener(new MouseAdapter() {});
addMouseMotionListener(new MouseMotionAdapter() {});
addKeyListener(new KeyAdapter() {});
ScreenController.getFrame().setGlassPane(this);
setVisible(true);
}
private void addGeneralOptionsMenu() {
menu = new MenuPanel(MText.get(_S1));
// Help stuff.
menu.addMenuItem(MText.get(_S2), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
ScreenController.showReadMeScreen();
hideOverlay();
}
});
menu.addMenuItem(MText.get(_S3), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
UrlHelper.openURL(UrlHelper.URL_USERGUIDE);
hideOverlay();
}
});
menu.addMenuItem(MText.get(_S4), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
ScreenController.showKeywordsScreen();
hideOverlay();
}
});
menu.addBlankItem();
if (showPreferencesOption()) {
menu.addMenuItem(MText.get(_S5), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
hideAllMenuPanels();
ScreenController.showPreferencesDialog();
hideOverlay();
}
});
menu.addBlankItem();
}
menu.addMenuItem(MText.get(_S6), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
ScreenController.showMainMenuScreen();
hideOverlay();
}
});
menu.addMenuItem(MText.get(_S7), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
ScreenController.getFrame().quitToDesktop(false);
}
});
if (showGeneralCloseMenuOption()) {
menu.addBlankItem();
menu.addMenuItem(new MenuButton(MText.get(_S8), new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
hideOverlay();
}
}));
}
refreshStyle();
menu.refreshLayout();
add(menu);
}
private void addScreenSpecificMenu() {
if (screenMenu != null) {
add(screenMenu);
}
}
private boolean showGeneralCloseMenuOption() {
return screenMenu == null;
}
public void hideOverlay() {
setVisible(false);
}
public void hideAllMenuPanels() {
for (final Component component : getComponents()) {
if (component instanceof MenuPanel) {
((MenuPanel) component).setVisible(false);
}
}
}
@Override
public final void refreshStyle() {
if (menu != null) {
final Color refBG = MagicStyle.getTheme().getColor(Theme.COLOR_TITLE_BACKGROUND);
final Color BG = MagicStyle.getTranslucentColor(refBG, 230);
menu.setBackground(BG);
}
}
}