package gui;
import gui.PieceMenuPanel.PieceMenuManager;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Stack;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import models.Game;
import timer.ChessTimer;
import utility.AppConstants;
import utility.ChessCrafter;
import utility.FileUtility;
import utility.GuiUtility;
public final class Driver extends JFrame implements ChessCrafter, PieceMenuManager
{
public static void main(String[] args)
{
try
{
getInstance().initGuiComponents();
}
catch (Exception e)
{
System.out.println(Messages.getString("Driver.errorSettingUpInitialScreen")); //$NON-NLS-1$
e.printStackTrace();
}
}
private Driver()
{
mPanelStack = new Stack<ChessPanel>();
}
public static Driver getInstance()
{
if (sInstance == null)
{
sInstance = new Driver();
GuiUtility.setChessCrafter(sInstance);
}
return sInstance;
}
@Override
public void setFileMenuVisibility(boolean isVisible)
{
mFileMenu.setVisible(isVisible);
}
@Override
public void setOptionsMenuVisibility(boolean isVisible)
{
mOptionsMenu.setVisible(isVisible);
}
public void setUpNewGame()
{
if (PlayGamePanel.mOptionsMenu != null)
PlayGamePanel.mOptionsMenu.setVisible(false);
ChessTimer.stopTimers();
pushPanel(new NewGamePanel());
}
@Override
public void pushPanel(Object panel)
{
if (panel instanceof ChessPanel)
pushPanel((ChessPanel) panel);
}
public void pushPanel(ChessPanel panel)
{
if (panel instanceof PlayGamePanel)
m_playGameScreen = (PlayGamePanel) panel;
else if (panel instanceof WatchGamePanel)
m_watchGameScreen = (WatchGamePanel) panel;
if (!mPanelStack.isEmpty())
remove(mPanelStack.peek());
mPanelStack.push(panel);
add(panel);
// FIXME
if (panel.toString().contains(Messages.getString("Driver.playGame")) || panel.toString().contains(Messages.getString("Driver.playNetGame"))) //$NON-NLS-1$ //$NON-NLS-2$
activateWindowListener();
pack();
mMainMenuItem.setVisible(true);
centerFrame(this);
}
public void popPanel()
{
if (!mPanelStack.isEmpty())
remove(mPanelStack.pop());
if (!mPanelStack.isEmpty())
{
add(mPanelStack.peek());
pack();
centerFrame(this);
}
else
revertToMainPanel();
}
@Override
public void revertToMainPanel()
{
while(!mPanelStack.isEmpty())
remove(mPanelStack.pop());
mMainMenuItem.setVisible(false);
pushPanel(mMainPanel);
deactivateWindowListener();
}
public void setMenu(JMenu menu)
{
mOptionsMenu = menu;
mMenuBar.add(mOptionsMenu);
mOptionsMenu.setVisible(true);
mOptionsMenu.setMnemonic('O');
mOptionsMenu.setText(Messages.getString("Driver.options")); //$NON-NLS-1$
mOptionsMenu.setToolTipText(Messages.getString("Driver.accessGameOptions")); //$NON-NLS-1$
}
private void initGuiComponents() throws ClassNotFoundException, InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException
{
setTitle(AppConstants.APP_NAME);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(685, 450);
setLayout(new BorderLayout());
setResizable(true);
// put the window in the center of the screen, regardless of resolution
setLocationRelativeTo(null);
// make the app match the look and feel of the user's system
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
UIManager.put("TabbedPane.contentOpaque", false); //$NON-NLS-1$
createWindowsTrayIconIfNecessary();
// create the menu bar
createMenuBar();
// set up a new panel to hold everything in the main window
mMainPanel = new ChessPanel();
mMainPanel.setBorder(BorderFactory.createLoweredBevelBorder());
mMainPanel.setLayout(new GridBagLayout());
mButtonPanel = new ChessPanel();
mButtonPanel.setOpaque(false);
mButtonPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
// home screen image
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
try
{
mMainPanel.add(new JLabel(GuiUtility.createImageIcon(400, 400, "/chess_logo.png")), c); //$NON-NLS-1$
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// new game
c.gridx = 0;
c.gridy = 0;
mButtonPanel.add(createNewGameButton(), c);
// open variant menu
c.gridx = 0;
c.gridy = 1;
mButtonPanel.add(variantMenuButton(), c);
// Pieces
c.gridx = 0;
c.gridy = 2;
mButtonPanel.add(pieceMenuButton(), c);
// continue
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 3;
mButtonPanel.add(createContinueGameButton(), c);
// view completed game
c.gridx = 0;
c.gridy = 4;
mButtonPanel.add(createViewCompletedGamesButton(), c);
c.gridx = 1;
c.gridy = 0;
mMainPanel.add(mButtonPanel, c);
pushPanel(mMainPanel);
pack();
centerFrame(this);
setVisible(true);
}
private JButton pieceMenuButton()
{
JButton pieceButton = new JButton(Messages.getString("Driver.pieces")); //$NON-NLS-1$
pieceButton.setToolTipText(Messages.getString("Driver.createEditRemove")); //$NON-NLS-1$
try
{
pieceButton.setIcon(GuiUtility.createImageIcon(10, 30, "/pieces.png")); //$NON-NLS-1$
}
catch (IOException e)
{
e.printStackTrace();
}
pieceButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
pushPanel(new PieceMenuPanel(Driver.this));
}
});
return pieceButton;
}
private void activateWindowListener()
{
if (mWindowListener == null)
{
mWindowListener = new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
Object[] options = new String[] {
Messages.getString("Driver.saveGame"), Messages.getString("Driver.dontSave"), Messages.getString("Driver.cancel") }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
switch (JOptionPane
.showOptionDialog(
Driver.getInstance(),
Messages.getString("Driver.saveBeforeQuitting"), //$NON-NLS-1$
Messages.getString("Driver.quitQ"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0])) //$NON-NLS-1$
{
case JOptionPane.YES_OPTION:
((PlayGamePanel) mOtherPanel).saveGame();
break;
case JOptionPane.NO_OPTION:
System.exit(0);
break;
case JOptionPane.CANCEL_OPTION:
break;
}
}
};
}
else
{
removeWindowListener(mWindowListener);
}
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(mWindowListener);
}
private void deactivateWindowListener()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
removeWindowListener(mWindowListener);
}
private void createWindowsTrayIconIfNecessary()
{
try
{
BufferedImage frontPageImage = FileUtility.getFrontPageImage();
if (System.getProperty("os.name").startsWith("Windows")) //$NON-NLS-1$ //$NON-NLS-2$
{
final SystemTray sysTray = SystemTray.getSystemTray();
TrayIcon tray = new TrayIcon(frontPageImage.getScaledInstance(25, 18, Image.SCALE_SMOOTH));
sysTray.add(tray);
}
setIconImage(frontPageImage);
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void createMenuBar()
{
mMenuBar = new JMenuBar();
mMenuBar.add(createFileMenu());
mMenuBar.add(createHelpMenu());
setJMenuBar(mMenuBar);
}
private JMenu createFileMenu()
{
JMenu fileMenu = new JMenu(Messages.getString("Driver.file")); //$NON-NLS-1$
fileMenu.setMnemonic('F');
JMenuItem newGameItem = new JMenuItem(Messages.getString("Driver.newGame"), KeyEvent.VK_N); //$NON-NLS-1$
newGameItem.setToolTipText(Messages.getString("Driver.startNewGame")); //$NON-NLS-1$
newGameItem.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
pushPanel(new NewGamePanel());
}
});
fileMenu.add(newGameItem);
mMainMenuItem = new JMenuItem(Messages.getString("Driver.mainMenu"), KeyEvent.VK_M); //$NON-NLS-1$
mMainMenuItem.setToolTipText(Messages.getString("Driver.returnToMain")); //$NON-NLS-1$
mMainMenuItem.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (mOptionsMenu != null)
mOptionsMenu.setVisible(false);
if (mOtherPanel != null)
remove(mOtherPanel);
// FIXME Shouldn't need to deal with timers from here
ChessTimer.stopTimers();
revertToMainPanel();
}
});
mMainMenuItem.setVisible(false);
fileMenu.add(mMainMenuItem);
JMenuItem preferences = new JMenuItem(Messages.getString("Driver.preferences"), KeyEvent.VK_P); //$NON-NLS-1$
preferences.setToolTipText(Messages.getString("Driver.changePreferences")); //$NON-NLS-1$
preferences.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
PreferenceUtility.createPreferencePopup();
}
});
fileMenu.add(preferences);
JMenuItem exitMenuItem = new JMenuItem(Messages.getString("Driver.quit"), KeyEvent.VK_Q); //$NON-NLS-1$
exitMenuItem.setToolTipText(Messages.getString("Driver.closeProgram")); //$NON-NLS-1$
exitMenuItem.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
int answer = JOptionPane.showConfirmDialog(Driver.getInstance(),
Messages.getString("Driver.sureYouWannaQuit"), Messages.getString("Driver.quitQ"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE);
if (answer == 0)
System.exit(0);
}
});
fileMenu.add(exitMenuItem);
// keep a reference to the file menu so we can toggle its visibility
mFileMenu = fileMenu;
return fileMenu;
}
private JMenu createHelpMenu()
{
JMenu helpMenu = new JMenu(Messages.getString("Driver.help")); //$NON-NLS-1$
helpMenu.setMnemonic('H');
JMenuItem helpMenuItem = new JMenuItem(Messages.getString("Driver.browseHelp"), KeyEvent.VK_H); //$NON-NLS-1$
helpMenuItem.setToolTipText(Messages.getString("Driver.clickToGetHelp")); //$NON-NLS-1$
helpMenuItem.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
new HelpFrame();
}
});
helpMenu.add(helpMenuItem);
JMenuItem aboutItem = new JMenuItem(Messages.getString("Driver.about") + AppConstants.APP_NAME, KeyEvent.VK_A); //$NON-NLS-1$
aboutItem.setToolTipText(Messages.getString("Driver.informationAbout") + AppConstants.APP_NAME); //$NON-NLS-1$
aboutItem.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
new AboutFrame();
}
});
helpMenu.add(aboutItem);
return helpMenu;
}
private JButton createNewGameButton()
{
JButton newGameButton = new JButton(Messages.getString("Driver.newGame")); //$NON-NLS-1$
newGameButton.setToolTipText(Messages.getString("Driver.startANewGame")); //$NON-NLS-1$
try
{
newGameButton.setIcon(GuiUtility.createImageIcon(30, 30, "/start_game.png")); //$NON-NLS-1$
}
catch (IOException ae)
{
ae.printStackTrace();
}
newGameButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
pushPanel(new NewGamePanel());
}
});
return newGameButton;
}
private JButton createContinueGameButton()
{
JButton continueGameButton = new JButton(Messages.getString("Driver.loadGame")); //$NON-NLS-1$
continueGameButton.setToolTipText(Messages.getString("Driver.loadASavedGame")); //$NON-NLS-1$
try
{
continueGameButton.setIcon(GuiUtility.createImageIcon(30, 30, "/saved_games.png")); //$NON-NLS-1$
}
catch (IOException e)
{
e.printStackTrace();
}
continueGameButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
String[] files = FileUtility.getGamesInProgressFileArray();
if (files.length == 0)
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages.getString("Driver.noSavedGames"), //$NON-NLS-1$
Messages.getString("Driver.noGamesInProgress"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$
return;
}
GridBagConstraints constraints = new GridBagConstraints();
final ChessPanel continueGamePanel = new ChessPanel();
continueGamePanel.setLayout(new GridBagLayout());
final JList gamesInProgressList = new JList(FileUtility.getGamesInProgressFileArray());
final JScrollPane scrollPane = new JScrollPane(gamesInProgressList);
scrollPane.setPreferredSize(new Dimension(200, 200));
gamesInProgressList.setSelectedIndex(0);
JButton nextButton = new JButton(Messages.getString("Driver.loadSavedGame")); //$NON-NLS-1$
nextButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
FileInputStream fileInputStream;
ObjectInputStream objectInputStream;
Game gameToPlay;
try
{
if (gamesInProgressList.getSelectedValue() == null)
{
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("Driver.selectGame"), Messages.getString("Driver.error"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return;
}
fileInputStream = new FileInputStream(FileUtility.getGamesInProgressFile(gamesInProgressList
.getSelectedValue().toString()));
objectInputStream = new ObjectInputStream(fileInputStream);
gameToPlay = (Game) objectInputStream.readObject();
gameToPlay.getWhiteRules().setGame(gameToPlay);
gameToPlay.getBlackRules().setGame(gameToPlay);
// set the help menu info to be specific for game
// play
if (mOptionsMenu != null)
mOptionsMenu.setVisible(true);
m_playGameScreen = new PlayGamePanel(gameToPlay);
pushPanel(m_playGameScreen);
}
catch (Exception e)
{
e.printStackTrace();
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("Driver.noValidSavedGames"), Messages.getString("Driver.invalidSavedGames"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
}
}
});
JButton cancelButton = new JButton(Messages.getString("Driver.cancel")); //$NON-NLS-1$
GuiUtility.setupDoneButton(cancelButton, Driver.this);
JButton deleteButton = new JButton(Messages.getString("Driver.deleteSavedGame")); //$NON-NLS-1$
deleteButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (gamesInProgressList.getSelectedValue() != null)
{
boolean didDeleteSuccessfully = FileUtility.getGamesInProgressFile(
gamesInProgressList.getSelectedValue().toString()).delete();
if (!didDeleteSuccessfully)
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages.getString("Driver.savedGameNotDeleted"), //$NON-NLS-1$
Messages.getString("Driver.error"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$
}
else
{
gamesInProgressList.setListData(FileUtility.getGamesInProgressFileArray());
gamesInProgressList.setSelectedIndex(0);
if (gamesInProgressList.getSelectedValue() == null)
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages
.getString("Driver.noMoreCompletedGames"), Messages.getString("Driver.noCompletedGames"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
revertToMainPanel();
}
scrollPane.getViewport().add(gamesInProgressList, null);
}
}
else
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages.getString("Driver.noSaveFiles"), //$NON-NLS-1$
Messages.getString("Driver.noSaveFileSelected"), JOptionPane.PLAIN_MESSAGE); //$NON-NLS-1$
}
}
});
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 2;
constraints.insets = new Insets(5, 5, 5, 5);
continueGamePanel.add(scrollPane, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
continueGamePanel.add(deleteButton, constraints);
constraints.weighty = 1.0;
constraints.weightx = 1.0;
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 1;
constraints.anchor = GridBagConstraints.EAST;
continueGamePanel.add(nextButton, constraints);
constraints.gridx = 1;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.WEST;
continueGamePanel.add(cancelButton, constraints);
pushPanel(continueGamePanel);
}
});
return continueGameButton;
}
private JButton createViewCompletedGamesButton()
{
JButton viewCompletedGameButton = new JButton(Messages.getString("Driver.completedGames")); //$NON-NLS-1$
viewCompletedGameButton.setToolTipText(Messages.getString("Driver.reviewFinishedGame")); //$NON-NLS-1$
try
{
viewCompletedGameButton.setIcon(GuiUtility.createImageIcon(30, 30, "/view_completed.png")); //$NON-NLS-1$
}
catch (IOException ae)
{
ae.printStackTrace();
}
viewCompletedGameButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
String[] files = FileUtility.getCompletedGamesFileArray();
if (files.length == 0)
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages.getString("Driver.noCompletedToDisplay"), //$NON-NLS-1$
Messages.getString("Driver.noCompleted"), JOptionPane.ERROR_MESSAGE); //$NON-NLS-1$
return;
}
GridBagConstraints constraints = new GridBagConstraints();
final ChessPanel continueGamePanel = new ChessPanel();
continueGamePanel.setLayout(new GridBagLayout());
final JList completedGamesList = new JList(FileUtility.getCompletedGamesFileArray());
final JScrollPane scrollPane = new JScrollPane(completedGamesList);
scrollPane.setPreferredSize(new Dimension(200, 200));
completedGamesList.setSelectedIndex(0);
JButton nextButton = new JButton(Messages.getString("Driver.next")); //$NON-NLS-1$
nextButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (completedGamesList.getSelectedValue() == null)
{
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("Driver.selectGame"), Messages.getString("Driver.error"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return;
}
File file = FileUtility.getCompletedGamesFile(completedGamesList.getSelectedValue().toString());
m_watchGameScreen = new WatchGamePanel(file);
pushPanel(m_watchGameScreen);
mOtherPanel = m_watchGameScreen;
deactivateWindowListener();
}
});
JButton cancelButton = new JButton(Messages.getString("Driver.cancel")); //$NON-NLS-1$
cancelButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
revertToMainPanel();
}
});
JButton deleteButton = new JButton(Messages.getString("Driver.deleteCompleted")); //$NON-NLS-1$
deleteButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (completedGamesList.getSelectedValue() != null)
{
boolean didDeleteCompletedGameSuccessfully = FileUtility.getCompletedGamesFile(
completedGamesList.getSelectedValue().toString()).delete();
if (!didDeleteCompletedGameSuccessfully)
{
JOptionPane.showMessageDialog(Driver.getInstance(),
Messages.getString("Driver.completedNotDeleted"), //$NON-NLS-1$
Messages.getString("Driver.error"), JOptionPane.PLAIN_MESSAGE); //$NON-NLS-1$
}
else
{
completedGamesList.removeAll();
completedGamesList.setListData(FileUtility.getCompletedGamesFileArray());
completedGamesList.setSelectedIndex(0);
if (completedGamesList.getSelectedValue() == null)
{
JOptionPane.showMessageDialog(
Driver.getInstance(),
Messages.getString("Driver.noMoreCompleted"), Messages.getString("Driver.noCompleted"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
revertToMainPanel();
}
scrollPane.getViewport().add(completedGamesList, null);
}
}
else
{
JOptionPane.showMessageDialog(Driver.getInstance(), Messages.getString("Driver.currentlyNoCompleted"), //$NON-NLS-1$
Messages.getString("Driver.noCompletedSelected"), JOptionPane.PLAIN_MESSAGE); //$NON-NLS-1$
}
}
});
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 2;
constraints.insets = new Insets(5, 5, 5, 5);
continueGamePanel.add(scrollPane, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
continueGamePanel.add(deleteButton, constraints);
constraints.weighty = 1.0;
constraints.weightx = 1.0;
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 1;
constraints.anchor = GridBagConstraints.EAST;
continueGamePanel.add(nextButton, constraints);
constraints.gridx = 1;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.WEST;
continueGamePanel.add(cancelButton, constraints);
pushPanel(continueGamePanel);
}
});
return viewCompletedGameButton;
}
private JButton variantMenuButton()
{
JButton variantButton = new JButton(Messages.getString("Driver.variants")); //$NON-NLS-1$
variantButton.setToolTipText(Messages.getString("Driver.createEditRemoveVariants")); //$NON-NLS-1$
try
{
variantButton.setIcon(GuiUtility.createImageIcon(30, 30, "/chess_variants.jpg")); //$NON-NLS-1$
}
catch (IOException e)
{
e.printStackTrace();
}
variantButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
pushPanel(new VariantMenuPanel());
}
});
return variantButton;
}
public static void centerFrame(JFrame frame)
{
int width = frame.getWidth();
int height = frame.getHeight();
if (s_screenWidth == null)
{
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
s_screenWidth = screenSize.getWidth();
s_screenHeight = screenSize.getHeight();
}
frame.setLocation((int) ((s_screenWidth / 2) - (width / 2)), (int) ((s_screenHeight / 2) - (height / 2)));
}
@Override
public PlayGameScreen getPlayGameScreen(Game game)
{
if (m_playGameScreen == null)
m_playGameScreen = new PlayGamePanel(game);
return m_playGameScreen;
}
@Override
public WatchGamePanel getWatchGameScreen(File acnFile)
{
if (m_watchGameScreen == null)
m_watchGameScreen = new WatchGamePanel(acnFile);
return m_watchGameScreen;
}
@Override
public PlayNetGameScreen getNetGameScreen()
{
if (m_playNetGameScreen == null)
try
{
m_playNetGameScreen = new PlayNetGamePanel(null, false, false);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return m_playNetGameScreen;
}
@Override
public PlayNetGameScreen getNetGameScreen(Game g, boolean isPlayback, boolean isBlack)
{
try
{
m_playNetGameScreen = new PlayNetGamePanel(g, isPlayback, isBlack);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return m_playNetGameScreen;
}
@Override
public void onPieceMenuClosed()
{
revertToMainPanel();
}
@Override
public void openPieceMakerPanel(String pieceName, PieceMenuPanel panel)
{
pushPanel(new PieceMakerPanel(pieceName, panel, this));
}
@Override
public void openPieceMakerPanel(PieceMenuPanel panel)
{
openPieceMakerPanel(null, panel);
}
@Override
public String getReturnButtonText()
{
return Messages.getString("PieceMenuPanel.returnToMenu"); //$NON-NLS-1$
}
@Override
public void onPieceListChanged()
{
pack();
centerFrame(sInstance);
}
private static Double s_screenWidth;
private static Double s_screenHeight;
private static final long serialVersionUID = -3533604157531154757L;
private static Driver sInstance;
private JMenuBar mMenuBar;
private JMenu mFileMenu;
private JMenu mOptionsMenu;
private JMenuItem mMainMenuItem;
private ChessPanel mMainPanel;
private ChessPanel mOtherPanel;
private ChessPanel mButtonPanel;
private WindowListener mWindowListener;
private PlayGamePanel m_playGameScreen;
private WatchGamePanel m_watchGameScreen;
private PlayNetGamePanel m_playNetGameScreen;
private Stack<ChessPanel> mPanelStack;
}