package hexenschach.gui;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import hexenschach.gui.event.GameEvent;
import hexenschach.gui.event.GameListener;
import hexenschach.gui.help.HelpWindow;
import hexenschach.gui.resources.Images;
/**
* JPanel, dass die obere Menue-Leiste darstellt.
* @author Tobias Marquardt
*/
class MainMenu extends JPanel implements GUIContainer, GameListener {
private static final long serialVersionUID = -3728670435567372195L;
private GUI gui;
// Größe des Panels
static final int xSize = 1008;
static final int ySize = 50;
// Abstand der Buttons zum Rand bzw. zu anderen Buttons
static final int horizontalGap = 4;
static final int verticalGap = 2;
private FlowLayout layout;
// Buttons
private MainMenuButton newGameButton;
private MainMenuButton saveButton;
private MainMenuButton loadButton;
private MainMenuButton helpButton;
// Dialoge
private NewGameDialog newGameDialog;
private SaveDialog saveDialog;
private LoadDialog loadDialog;
/**
* @param gui GUI, zu dem das Panel gehört.
*/
MainMenu(GUI gui) {
this.gui = gui;
initLayout();
initComponents();
initListener();
initContainerProperties();
}
public void initLayout() {
layout = new FlowLayout();
layout.setVgap(verticalGap);
layout.setHgap(horizontalGap);
setLayout(layout);
}
public void initComponents() {
// Buttons erzeugen
newGameButton = new MainMenuButton(Dictionary.NewGameToolTipp, Images.getNewGameButtonDefaultImage(), Images.getNewGameButtonRolloverImage(), Images.getNewGameButtonPressedImage(), Images.getNewGameButtonDisabledImage());
saveButton = new MainMenuButton(Dictionary.SaveToolTipp, Images.getSaveButtonDefaultImage(), Images.getSaveButtonRolloverImage(), Images.getSaveButtonPressedImage(), Images.getSaveButtonDisabledImage());
loadButton = new MainMenuButton(Dictionary.LoadToolTipp, Images.getLoadButtonDefaultImage(), Images.getLoadButtonRolloverImage(), Images.getLoadButtonPressedImage(), Images.getLoadButtonDisabledImage());
helpButton = new MainMenuButton(Dictionary.HelpToolTipp, Images.getHelpButtonDefaultImage(), Images.getHelpButtonRolloverImage(), Images.getHelpButtonPressedImage(), Images.getHelpButtonDisabledImage());
// Wenn noch kein Spiel gestartet ist, deaktiviere den Speichern-Button
saveButton.setEnabled(false);
// Wenn es keine gespeicherten Spielstände gibt, deaktiviere den Laden-Button
if(gui.getPersistence().getSaveGames().isEmpty())
loadButton.setEnabled(false);
// Buttons hinzufuegen
add(newGameButton);
add(saveButton);
add(loadButton);
add(helpButton);
}
public void initContainerProperties() {
setOpaque(false); //Paneltransparenz
setBorder(null);
setPreferredSize(new Dimension(xSize, ySize));
}
/**
* Fügt sicht selbst als dem GUI als GameListener hinzu
* und fügt den Buttons ActionListener in Form
* innerer anonymer Klassen hinzu.
*/
private void initListener() {
gui.addGameListener(this);
newGameButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
newGameButtonClicked();
}
}
);
saveButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
saveButtonClicked();
}
}
);
loadButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
loadButtonClicked();
}
}
);
helpButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
helpButtonClicked();
}
}
);
}
// Für jeden Button gibt es hier eine Clicked-Methode, die vom jeweiligen ActionListener aufgerufen wird.
// Dient vorallem der Übersichtlichkeit.
/**
* Aktion beim Klick auf den Neues-Spiel-Button.
*/
private void newGameButtonClicked() {
newGameDialog = new NewGameDialog(gui);
newGameDialog.setVisible(true);
}
/**
* Aktion beim Klick auf den Speichern-Button.
*/
private void saveButtonClicked() {
saveDialog = new SaveDialog(gui);
saveDialog.setVisible(true);
}
/**
* Aktion beim Klick auf den Laden-Button.
*/
private void loadButtonClicked() {
loadDialog = new LoadDialog(gui);
loadDialog.setVisible(true);
}
/**
* Aktion beim Klick auf den Hilfe-Button.
*/
private void helpButtonClicked() {
// bj add
new HelpWindow().show();
}
@Override
public void gameStarted(GameEvent e) {
// Wenn ein Spiel gestartet wurde, wird der Speichern-Button aktiviert.
saveButton.setEnabled(true);
}
@Override
public void gameFinished(GameEvent e) {
saveButton.setEnabled(false);
}
@Override
public void gameSaved(GameEvent e) {
// Wenn ein Spiel gespeichert wurde und somit mindestens ein Spielstand existiert, aktiviere den Laden-Button
loadButton.setEnabled(true);
}
}