import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * Ikkunaluokka.
 */
public class TicTacToeFrame extends JFrame
{
  private JToolBar jToolBar = new JToolBar();
  private JButton buttonStart = new JButton();
  private JButton buttonReset = new JButton();
  private JButton buttonHelp = new JButton();
  private JLabel statusBar = new JLabel();
  private TicTacToePanel gamePanel = new TicTacToePanel( this );

  /**
   * Konstruktori.
   */
  public TicTacToeFrame()
  {
    ImageIcon startImage = new ImageIcon( TicTacToeFrame.class.getResource( "start.gif" ) );
    ImageIcon resetImage = new ImageIcon( TicTacToeFrame.class.getResource( "reset.gif" ) );
    ImageIcon helpImage = new ImageIcon( TicTacToeFrame.class.getResource( "help.gif" ) );
    setIconImage( Toolkit.getDefaultToolkit().createImage( TicTacToeFrame.class.getResource( "help.gif" ) ) );
    JPanel contentPane = ( JPanel ) getContentPane();
    contentPane.setLayout( new BorderLayout() );
    setSize( new Dimension( 350, 400 ) );
    setTitle( "Tic Tac Toe" );
    setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );

    statusBar.setBorder( BorderFactory.createLineBorder( Color.black ) );
    statusBar.setText( " " );
    buttonStart.setIcon( startImage );
    buttonStart.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonStart_actionPerformed( e );
      }
    } );
    buttonStart.setToolTipText( "Aloitus" );
    buttonReset.setIcon( resetImage );
    buttonReset.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonReset_actionPerformed( e );
      }
    } );
    buttonReset.setToolTipText( "Pisteiden nollaus" );
    buttonHelp.setIcon( helpImage );
    buttonHelp.addActionListener( new java.awt.event.ActionListener()
    {
      public void actionPerformed( ActionEvent e )
      {
        buttonHelp_actionPerformed( e );
      }
    } );
    buttonHelp.setToolTipText( "Tietoja ohjelmasta" );
    contentPane.addComponentListener( new java.awt.event.ComponentAdapter()
    {
      public void componentResized( ComponentEvent e )
      {
        contentPaneResized( e );
      }
    } );
    jToolBar.add( buttonStart );
    jToolBar.add( buttonReset );
    jToolBar.add( buttonHelp );
    contentPane.add( jToolBar, BorderLayout.NORTH );
    contentPane.add( statusBar, BorderLayout.SOUTH );
    contentPane.add( gamePanel, BorderLayout.CENTER );
  }

  /**
   * Ikkunan kokoa muutetaan.
   * @param e tarkempi kuvaus
   */
  private void contentPaneResized( ComponentEvent e )
  {
    repaint();
  }

  /**
   * Kirjoittaa tekstiä statusbariin.
   * @param text teksti
   */
  void write( String text )
  {
    statusBar.setText( text );
  }

  /**
   * Starttinappula.
   * @param e tarkempi kuvaus
   */
  void buttonStart_actionPerformed( ActionEvent e )
  {
    gamePanel.restartGame();
  }

  /**
   * Resettinappula.
   * @param e tarkempi kuvaus
   */
  void buttonReset_actionPerformed( ActionEvent e )
  {
    gamePanel.resetGame();
  }

  /**
   * Helppinappula.
   * @param e tarkempi kuvaus
   */
  void buttonHelp_actionPerformed( ActionEvent e )
  {
    TicTacToeHelp help = new TicTacToeHelp( this );
    Point loc = getLocation();
    help.setLocation( loc.x + 3, loc.y + 20 );
    help.show();
  }

}
