package vooga.towerdefense.gameeditor.gamemaker.editorscreens;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import vooga.towerdefense.gameeditor.controller.GameEditorController;
/**
* StartUpScreen starts the GameEditor for the
* game developer. The game developer has to provide
* a name for the game.
*
* @author Angelica Schwartz
* @author Leonard K. Ng'eno
*/
public class StartUpScreen extends JPanel {
private static final long serialVersionUID = 1L;
private static final String MESSAGE = "PLEASE ENTER NAME AND CONFIRM!";
private static final String WELCOME_KEYWORD = "WELCOME TO GAME EDITOR";
private static final String START_KEYWORD = "START";
private static final String NEXT_SCREEN_NAME = "vooga.towerdefense.gameeditor.gamemaker.editorscreens.ViewEditorScreen";
private static final String GAME_NAME_TEXT = "Game Name: ";
private static final String SELECT_NAME_TEXT = "Confirm this as Game Name";
private boolean myConfirmation;
private JButton myStartButton;
private JButton myGameNameConfirmation;
private JTextField myGameName;
private MouseAdapter myMouseAdapter;
private GameEditorController myController;
/**
* Class Constructor.
*
* @param size
* @param controller
*/
public StartUpScreen (Dimension size, GameEditorController controller) {
myController = controller;
setSize(size);
setPreferredSize(size);
setVisible(true);
this.setLayout(new BorderLayout());
makeMouseAdapter();
this.add(makeLabel(), BorderLayout.NORTH);
this.add(makeStartButton(), BorderLayout.SOUTH);
this.add(makeGameNamingSection(), BorderLayout.CENTER);
myConfirmation = false;
}
/**
* paints the screen.
*
* @param pen
*/
@Override
public void paintComponent (Graphics pen) {
super.paintComponents(pen);
pen.setColor(Color.WHITE);
pen.fillRect(0, 0, getSize().width, getSize().height);
}
/**
* Helper method to make a welcome title label.
*
* @return the JLabel created
*/
private JComponent makeLabel () {
JPanel panel = new JPanel();
JLabel label = new JLabel(WELCOME_KEYWORD);
panel.setPreferredSize(new Dimension (this.getWidth(), 100));
panel.add(label, BorderLayout.CENTER);
return panel;
}
/**
* Make a text field area
* @return Text field component where name of game is entered
*/
private JPanel makeGameNamingSection() {
JPanel panel = new JPanel();
panel.add(new JLabel(GAME_NAME_TEXT), BorderLayout.NORTH);
myGameName = new JTextField(GameEditorScreen.TEXT_FIELD_WIDTH);
panel.add(myGameName, BorderLayout.CENTER);
myGameNameConfirmation = new JButton(SELECT_NAME_TEXT);
myGameNameConfirmation.addMouseListener(myMouseAdapter);
panel.add(myGameNameConfirmation, BorderLayout.SOUTH);
return panel;
}
/**
* helper method to make the buttons.
*
* @return the JButton created
*/
private JComponent makeStartButton () {
JPanel panel = new JPanel();
myStartButton = new JButton(START_KEYWORD);
myStartButton.addMouseListener(myMouseAdapter);
panel.add(myStartButton);
panel.setPreferredSize(new Dimension(this.getWidth(), 400));
return panel;
}
/**
* Shows a dialogue box with message
*/
private void showMessage() {
JOptionPane.showMessageDialog(null, MESSAGE);
}
/**
* A mouse adapter to listen for button presses
*/
private void makeMouseAdapter () {
myMouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked (MouseEvent e) {
if (e.getSource().equals(myGameNameConfirmation)) {
if (myGameName.getText().length() == 0) {
showMessage();
}
else {
myConfirmation = true;
myController.setNameOfGame(myGameName.getText());
}
}
else if (e.getSource().equals(myStartButton)) {
try {
if (myGameName.getText().length() == 0 || myConfirmation == false) {
showMessage();
}
else {
setVisible(false);
myController.displayNextScreen(NEXT_SCREEN_NAME);
}
}
catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
catch (InstantiationException e1) {
e1.printStackTrace();
}
catch (IllegalAccessException e1) {
e1.printStackTrace();
}
catch (SecurityException e1) {
e1.printStackTrace();
}
catch (IllegalArgumentException e1) {
e1.printStackTrace();
}
catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
catch (InvocationTargetException e1) {
e1.printStackTrace();
}
}
}
};
}
}