/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Flemming N. Larsen
* - Code cleanup
* - Added menu items for Robocode API, Robo Wiki, Yahoo Group Robocode,
* and Robocode Repository
* - Updated to use methods from the WindowUtil, which replaces window methods
* that have been (re)moved from the robocode.util.Utils class
* - Changed menu shortcut keys to use getMenuShortcutKeyMask() instead of
* Event.CTRL_MASK in order to comply with other OSes like e.g. Mac OS
* - Added "Recalculate CPU constant" to the Options menu
* - Added "Clean Robot Cache" to the Options menu
* Matthew Reeder
* - Added keyboard mnemonics and a few accelerators to all menus and menu
* items
* Luis Crespo & Flemming N. Larsen
* - Added check box menu item for "Show Rankings"
*******************************************************************************/
package net.sf.robocode.ui.dialog;
import net.sf.robocode.battle.IBattleManager;
import net.sf.robocode.host.ICpuManager;
import net.sf.robocode.recording.BattleRecordFormat;
import net.sf.robocode.recording.IRecordManager;
import net.sf.robocode.serialization.SerializableOptions;
import net.sf.robocode.settings.ISettingsListener;
import net.sf.robocode.settings.ISettingsManager;
import net.sf.robocode.ui.IWindowManagerExt;
import net.sf.robocode.ui.editor.IRobocodeEditor;
import static net.sf.robocode.ui.util.ShortcutUtil.MENU_SHORTCUT_KEY_MASK;
import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
/**
* Handles menu display and interaction for Robocode.
*
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
* @author Matthew Reeder (contributor)
* @author Luis Crespo (contributor)
*/
@SuppressWarnings("serial")
public class MenuBar extends JMenuBar {
// Battle menu
private JMenu battleMenu;
private JMenuItem battleNewMenuItem;
private JMenuItem battleOpenMenuItem;
private JMenuItem battleSaveMenuItem;
private JMenuItem battleSaveAsMenuItem;
private JMenuItem battleExitMenuItem;
private JMenuItem battleOpenRecordMenuItem;
private JMenuItem battleSaveRecordAsMenuItem;
private JMenuItem battleExportRecordMenuItem;
private JMenuItem battleImportRecordMenuItem;
private JMenuItem battleTakeScreenshotMenuItem;
// Robot menu
private JMenu robotMenu;
private JMenuItem robotEditorMenuItem;
private JMenuItem robotImportMenuItem;
private JMenuItem robotPackagerMenuItem;
private JMenuItem robotCreateTeamMenuItem;
// Options menu
private JMenu optionsMenu;
private JMenuItem optionsPreferencesMenuItem;
private JMenuItem optionsFitWindowMenuItem;
private JCheckBoxMenuItem optionsShowRankingCheckBoxMenuItem;
private JMenuItem optionsRecalculateCpuConstantMenuItem;
private JMenuItem optionsCleanRobotCacheMenuItem;
// Help Menu
private JMenu helpMenu;
private JMenuItem helpReadMeMenuItem;
private JMenuItem helpOnlineHelpMenuItem;
private JMenuItem helpCheckForNewVersionMenuItem;
private JMenuItem helpVersionsTxtMenuItem;
private JMenuItem helpRobocodeApiMenuItem;
private JMenuItem helpJavaDocumentationMenuItem;
private JMenuItem helpFaqMenuItem;
private JMenuItem helpAboutMenuItem;
private JMenuItem helpRobocodeMenuItem;
private JMenuItem helpRoboWikiMenuItem;
private JMenuItem helpYahooGroupRobocodeMenuItem;
private JMenuItem helpRobocodeRepositoryMenuItem;
private class EventHandler implements ActionListener, MenuListener {
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
MenuBar mb = MenuBar.this;
// Battle menu
if (source == mb.getBattleNewMenuItem()) {
battleNewActionPerformed();
} else if (source == mb.getBattleOpenMenuItem()) {
battleOpenActionPerformed();
} else if (source == mb.getBattleSaveMenuItem()) {
battleSaveActionPerformed();
} else if (source == mb.getBattleSaveAsMenuItem()) {
battleSaveAsActionPerformed();
} else if (source == mb.getBattleOpenRecordMenuItem()) {
battleOpenRecordActionPerformed();
} else if (source == mb.getBattleImportRecordMenuItem()) {
battleImportRecordActionPerformed();
} else if (source == mb.getBattleSaveRecordAsMenuItem()) {
battleSaveRecordAsActionPerformed();
} else if (source == mb.getBattleExportRecordMenuItem()) {
battleExportRecordActionPerformed();
} else if (source == mb.getBattleTakeScreenshotMenuItem()) {
battleTakeScreenshotActionPerformed();
} else if (source == mb.getBattleExitMenuItem()) {
battleExitActionPerformed();
// Robot Editor menu
} else if (source == mb.getRobotEditorMenuItem()) {
robotEditorActionPerformed();
} else if (source == mb.getRobotImportMenuItem()) {
robotImportActionPerformed();
} else if (source == mb.getRobotPackagerMenuItem()) {
robotPackagerActionPerformed();
// Team / Create Team menu
} else if (source == mb.getRobotCreateTeamMenuItem()) {
teamCreateTeamActionPerformed();
// Options / Preferences menu
} else if (source == mb.getOptionsPreferencesMenuItem()) {
optionsPreferencesActionPerformed();
} else if (source == mb.getOptionsFitWindowMenuItem()) {
optionsFitWindowActionPerformed();
} else if (source == mb.getOptionsShowRankingCheckBoxMenuItem()) {
optionsShowRankingActionPerformed();
} else if (source == mb.getOptionsRecalculateCpuConstantMenuItem()) {
optionsRecalculateCpuConstantPerformed();
} else if (source == mb.getOptionsCleanRobotCacheMenuItem()) {
optionsCleanRobotCachePerformed();
// Help menu
} else if (source == mb.getReadMeMenuItem()) {
helpReadMeActionPerformed();
} else if (source == mb.getHelpOnlineHelpMenuItem()) {
helpOnlineHelpActionPerformed();
} else if (source == mb.getHelpRobocodeApiMenuItem()) {
helpRobocodeApiActionPerformed();
} else if (source == mb.getHelpJavaDocumentationMenuItem()) {
helpJavaDocumentationActionPerformed();
} else if (source == mb.getHelpFaqMenuItem()) {
helpFaqActionPerformed();
} else if (source == mb.getHelpRobocodeMenuItem()) {
helpRobocodeHomeMenuItemActionPerformed();
} else if (source == mb.getHelpRoboWikiMenuItem()) {
helpRoboWikiMenuItemActionPerformed();
} else if (source == mb.getHelpYahooGroupRobocodeMenuItem()) {
helpYahooGroupRobocodeActionPerformed();
} else if (source == mb.getHelpRobocodeRepositoryMenuItem()) {
helpRobocodeRepositoryActionPerformed();
} else if (source == mb.getHelpCheckForNewVersionMenuItem()) {
helpCheckForNewVersionActionPerformed();
} else if (source == mb.getHelpVersionsTxtMenuItem()) {
helpVersionsTxtActionPerformed();
} else if (source == mb.getHelpAboutMenuItem()) {
helpAboutActionPerformed();
}
}
public void menuDeselected(MenuEvent e) {
battleManager.resumeBattle();
}
public void menuSelected(MenuEvent e) {
battleManager.pauseBattle();
}
public void menuCanceled(MenuEvent e) {}
}
public final MenuBar.EventHandler eventHandler = new EventHandler();
private RobocodeFrame robocodeFrame;
private final ISettingsManager properties;
private final IWindowManagerExt windowManager;
private final IBattleManager battleManager;
private final IRecordManager recordManager;
private final ICpuManager cpuManager;
public MenuBar(ISettingsManager properties,
IWindowManagerExt windowManager,
IBattleManager battleManager,
IRecordManager recordManager,
ICpuManager cpuManager) {
this.properties = properties;
this.windowManager = windowManager;
this.battleManager = battleManager;
this.recordManager = recordManager;
this.cpuManager = cpuManager;
// FNL: Make sure that menus are heavy-weight components so that the menus are not painted
// behind the BattleView which is a heavy-weight component. This must be done before
// adding any menu to the menubar.
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
add(getBattleMenu());
add(getRobotMenu());
add(getOptionsMenu());
add(getHelpMenu());
}
public void setup(RobocodeFrame robocodeFrame) {
this.robocodeFrame = robocodeFrame;
}
private void battleExitActionPerformed() {
robocodeFrame.dispose();
}
/**
* Handle battleNew menu item action
*/
private void battleNewActionPerformed() {
windowManager.showNewBattleDialog(battleManager.getBattleProperties(), false);
}
private void battleOpenActionPerformed() {
try {
battleManager.pauseBattle();
String path = windowManager.showBattleOpenDialog(".battle", "Battles");
if (path != null) {
battleManager.setBattleFilename(path);
windowManager.showNewBattleDialog(battleManager.loadBattleProperties(), true);
}
} finally {
battleManager.resumeBattle();
}
}
private void battleSaveActionPerformed() {
try {
battleManager.pauseBattle();
String path = battleManager.getBattleFilename();
if (path == null) {
path = windowManager.saveBattleDialog(battleManager.getBattlePath(), ".battle", "Battles");
}
if (path != null) {
battleManager.setBattleFilename(path);
battleManager.saveBattleProperties();
}
} finally {
battleManager.resumeBattle();
}
}
private void battleSaveAsActionPerformed() {
try {
battleManager.pauseBattle();
String path = windowManager.saveBattleDialog(battleManager.getBattlePath(), ".battle", "Battles");
if (path != null) {
battleManager.setBattleFilename(path);
battleManager.saveBattleProperties();
}
} finally {
battleManager.resumeBattle();
}
}
private void battleOpenRecordActionPerformed() {
try {
battleManager.pauseBattle();
String path = windowManager.showBattleOpenDialog(".br", "Records");
if (path != null) {
battleManager.stop(true);
robocodeFrame.getReplayButton().setVisible(true);
robocodeFrame.getReplayButton().setEnabled(true);
getBattleSaveRecordAsMenuItem().setEnabled(true);
getBattleExportRecordMenuItem().setEnabled(true);
try {
robocodeFrame.setBusyPointer(true);
recordManager.loadRecord(path, BattleRecordFormat.BINARY_ZIP);
} finally {
robocodeFrame.setBusyPointer(false);
}
battleManager.replay();
}
} finally {
battleManager.resumeBattle();
}
}
private void battleImportRecordActionPerformed() {
try {
battleManager.pauseBattle();
String path = windowManager.showBattleOpenDialog(".br.xml", "XML Records");
if (path != null) {
battleManager.stop(true);
robocodeFrame.getReplayButton().setVisible(true);
robocodeFrame.getReplayButton().setEnabled(true);
getBattleSaveRecordAsMenuItem().setEnabled(true);
getBattleExportRecordMenuItem().setEnabled(true);
try {
robocodeFrame.setBusyPointer(true);
recordManager.loadRecord(path, BattleRecordFormat.XML);
} finally {
robocodeFrame.setBusyPointer(false);
}
battleManager.replay();
}
} finally {
battleManager.resumeBattle();
}
}
private void battleSaveRecordAsActionPerformed() {
if (recordManager.hasRecord()) {
try {
battleManager.pauseBattle();
String path = windowManager.saveBattleDialog(battleManager.getBattlePath(), ".br", "Records");
if (path != null) {
try {
robocodeFrame.setBusyPointer(true);
recordManager.saveRecord(path, BattleRecordFormat.BINARY_ZIP, new SerializableOptions(false));
} finally {
robocodeFrame.setBusyPointer(false);
}
}
} finally {
battleManager.resumeBattle();
}
}
}
private void battleExportRecordActionPerformed() {
if (recordManager.hasRecord()) {
try {
battleManager.pauseBattle();
String path = windowManager.saveBattleDialog(battleManager.getBattlePath(), ".br.xml", "XML Records");
if (path != null) {
try {
robocodeFrame.setBusyPointer(true);
recordManager.saveRecord(path, BattleRecordFormat.XML, new SerializableOptions(false));
} finally {
robocodeFrame.setBusyPointer(false);
}
}
} finally {
battleManager.resumeBattle();
}
}
}
private void battleTakeScreenshotActionPerformed() {
robocodeFrame.takeScreenshot();
}
private JMenuItem getBattleExitMenuItem() {
if (battleExitMenuItem == null) {
battleExitMenuItem = new JMenuItem();
battleExitMenuItem.setText("Exit");
battleExitMenuItem.setMnemonic('x');
battleExitMenuItem.setDisplayedMnemonicIndex(1);
battleExitMenuItem.addActionListener(eventHandler);
}
return battleExitMenuItem;
}
public JMenu getBattleMenu() {
if (battleMenu == null) {
battleMenu = new JMenu();
battleMenu.setText("Battle");
battleMenu.setMnemonic('B');
battleMenu.add(getBattleNewMenuItem());
battleMenu.add(getBattleOpenMenuItem());
battleMenu.add(new JSeparator());
battleMenu.add(getBattleSaveMenuItem());
battleMenu.add(getBattleSaveAsMenuItem());
battleMenu.add(new JSeparator());
battleMenu.add(getBattleOpenRecordMenuItem());
battleMenu.add(getBattleSaveRecordAsMenuItem());
battleMenu.add(getBattleImportRecordMenuItem());
battleMenu.add(getBattleExportRecordMenuItem());
battleMenu.add(new JSeparator());
battleMenu.add(getBattleTakeScreenshotMenuItem());
battleMenu.add(new JSeparator());
battleMenu.add(getBattleExitMenuItem());
battleMenu.addMenuListener(eventHandler);
}
return battleMenu;
}
private JMenuItem getBattleNewMenuItem() {
if (battleNewMenuItem == null) {
battleNewMenuItem = new JMenuItem();
battleNewMenuItem.setText("New");
battleNewMenuItem.setMnemonic('N');
battleNewMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, MENU_SHORTCUT_KEY_MASK, false));
battleNewMenuItem.addActionListener(eventHandler);
}
return battleNewMenuItem;
}
private JMenuItem getBattleOpenMenuItem() {
if (battleOpenMenuItem == null) {
battleOpenMenuItem = new JMenuItem();
battleOpenMenuItem.setText("Open");
battleOpenMenuItem.setMnemonic('O');
battleOpenMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, MENU_SHORTCUT_KEY_MASK, false));
battleOpenMenuItem.addActionListener(eventHandler);
}
return battleOpenMenuItem;
}
public JMenuItem getBattleSaveAsMenuItem() {
if (battleSaveAsMenuItem == null) {
battleSaveAsMenuItem = new JMenuItem();
battleSaveAsMenuItem.setText("Save As");
battleSaveAsMenuItem.setMnemonic('A');
battleSaveAsMenuItem.setDisplayedMnemonicIndex(5);
battleSaveAsMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_S, MENU_SHORTCUT_KEY_MASK | InputEvent.SHIFT_MASK, false));
battleSaveAsMenuItem.setEnabled(false);
battleSaveAsMenuItem.addActionListener(eventHandler);
}
return battleSaveAsMenuItem;
}
public JMenuItem getBattleSaveMenuItem() {
if (battleSaveMenuItem == null) {
battleSaveMenuItem = new JMenuItem();
battleSaveMenuItem.setText("Save");
battleSaveMenuItem.setMnemonic('S');
battleSaveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, MENU_SHORTCUT_KEY_MASK, false));
battleSaveMenuItem.setEnabled(false);
battleSaveMenuItem.addActionListener(eventHandler);
}
return battleSaveMenuItem;
}
private JMenuItem getBattleOpenRecordMenuItem() {
if (battleOpenRecordMenuItem == null) {
battleOpenRecordMenuItem = new JMenuItem();
battleOpenRecordMenuItem.setText("Open Record");
battleOpenRecordMenuItem.setMnemonic('d');
battleOpenRecordMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_O, MENU_SHORTCUT_KEY_MASK | InputEvent.SHIFT_MASK, false));
battleOpenRecordMenuItem.addActionListener(eventHandler);
}
return battleOpenRecordMenuItem;
}
private JMenuItem getBattleImportRecordMenuItem() {
if (battleImportRecordMenuItem == null) {
battleImportRecordMenuItem = new JMenuItem();
battleImportRecordMenuItem.setText("Import XML Record");
battleImportRecordMenuItem.setMnemonic('I');
battleImportRecordMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_I, MENU_SHORTCUT_KEY_MASK, false));
battleImportRecordMenuItem.addActionListener(eventHandler);
}
return battleImportRecordMenuItem;
}
public JMenuItem getBattleSaveRecordAsMenuItem() {
if (battleSaveRecordAsMenuItem == null) {
battleSaveRecordAsMenuItem = new JMenuItem();
battleSaveRecordAsMenuItem.setText("Save Record");
battleSaveRecordAsMenuItem.setMnemonic('R');
battleSaveRecordAsMenuItem.setDisplayedMnemonicIndex(5);
battleSaveRecordAsMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_R, MENU_SHORTCUT_KEY_MASK, false));
battleSaveRecordAsMenuItem.setEnabled(false);
battleSaveRecordAsMenuItem.addActionListener(eventHandler);
ISettingsManager props = properties;
props.addPropertyListener(
new ISettingsListener() {
public void settingChanged(String property) {
if (property.equals(ISettingsManager.OPTIONS_COMMON_ENABLE_REPLAY_RECORDING)) {
final boolean canReplayRecord = recordManager.hasRecord();
final boolean enableSaveRecord = properties.getOptionsCommonEnableReplayRecording()
& canReplayRecord;
battleSaveRecordAsMenuItem.setEnabled(enableSaveRecord);
}
}
});
}
return battleSaveRecordAsMenuItem;
}
public JMenuItem getBattleExportRecordMenuItem() {
if (battleExportRecordMenuItem == null) {
battleExportRecordMenuItem = new JMenuItem();
battleExportRecordMenuItem.setText("Export XML Record");
battleExportRecordMenuItem.setMnemonic('E');
battleExportRecordMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_X, MENU_SHORTCUT_KEY_MASK, false));
battleExportRecordMenuItem.setEnabled(false);
battleExportRecordMenuItem.addActionListener(eventHandler);
ISettingsManager props = properties;
props.addPropertyListener(
new ISettingsListener() {
public void settingChanged(String property) {
if (property.equals(ISettingsManager.OPTIONS_COMMON_ENABLE_REPLAY_RECORDING)) {
final boolean canReplayRecord = recordManager.hasRecord();
final boolean enableSaveRecord = properties.getOptionsCommonEnableReplayRecording()
& canReplayRecord;
battleExportRecordMenuItem.setEnabled(enableSaveRecord);
}
}
});
}
return battleExportRecordMenuItem;
}
private JMenuItem getBattleTakeScreenshotMenuItem() {
if (battleTakeScreenshotMenuItem == null) {
battleTakeScreenshotMenuItem = new JMenuItem();
battleTakeScreenshotMenuItem.setText("Take Screenshot");
battleTakeScreenshotMenuItem.setMnemonic('T');
battleTakeScreenshotMenuItem.setAccelerator(
KeyStroke.getKeyStroke(KeyEvent.VK_T, MENU_SHORTCUT_KEY_MASK, false));
battleTakeScreenshotMenuItem.addActionListener(eventHandler);
}
return battleTakeScreenshotMenuItem;
}
private JMenuItem getHelpAboutMenuItem() {
if (helpAboutMenuItem == null) {
helpAboutMenuItem = new JMenuItem();
helpAboutMenuItem.setText("About");
helpAboutMenuItem.setMnemonic('A');
helpAboutMenuItem.addActionListener(eventHandler);
}
return helpAboutMenuItem;
}
private JMenuItem getHelpCheckForNewVersionMenuItem() {
if (helpCheckForNewVersionMenuItem == null) {
helpCheckForNewVersionMenuItem = new JMenuItem();
helpCheckForNewVersionMenuItem.setText("Check for new version");
helpCheckForNewVersionMenuItem.setMnemonic('C');
helpCheckForNewVersionMenuItem.addActionListener(eventHandler);
}
return helpCheckForNewVersionMenuItem;
}
@Override
public JMenu getHelpMenu() {
if (helpMenu == null) {
helpMenu = new JMenu();
helpMenu.setText("Help");
helpMenu.setMnemonic('H');
helpMenu.add(getReadMeMenuItem());
helpMenu.add(getHelpRobocodeApiMenuItem());
helpMenu.add(getHelpJavaDocumentationMenuItem());
helpMenu.add(new JSeparator());
helpMenu.add(getHelpOnlineHelpMenuItem());
helpMenu.add(getHelpRoboWikiMenuItem());
helpMenu.add(getHelpYahooGroupRobocodeMenuItem());
helpMenu.add(getHelpFaqMenuItem());
helpMenu.add(new JSeparator());
helpMenu.add(getHelpRobocodeMenuItem());
helpMenu.add(getHelpRobocodeRepositoryMenuItem());
helpMenu.add(new JSeparator());
helpMenu.add(getHelpCheckForNewVersionMenuItem());
helpMenu.add(getHelpVersionsTxtMenuItem());
helpMenu.add(new JSeparator());
helpMenu.add(getHelpAboutMenuItem());
helpMenu.addMenuListener(eventHandler);
}
return helpMenu;
}
private JMenuItem getHelpFaqMenuItem() {
if (helpFaqMenuItem == null) {
helpFaqMenuItem = new JMenuItem();
helpFaqMenuItem.setText("Robocode FAQ");
helpFaqMenuItem.setMnemonic('F');
helpFaqMenuItem.setDisplayedMnemonicIndex(9);
helpFaqMenuItem.addActionListener(eventHandler);
}
return helpFaqMenuItem;
}
private JMenuItem getReadMeMenuItem() {
if (helpReadMeMenuItem == null) {
helpReadMeMenuItem = new JMenuItem();
helpReadMeMenuItem.setText("ReadMe");
helpReadMeMenuItem.setMnemonic('M');
helpReadMeMenuItem.setDisplayedMnemonicIndex(4);
helpReadMeMenuItem.addActionListener(eventHandler);
}
return helpReadMeMenuItem;
}
private JMenuItem getHelpOnlineHelpMenuItem() {
if (helpOnlineHelpMenuItem == null) {
helpOnlineHelpMenuItem = new JMenuItem();
helpOnlineHelpMenuItem.setText("Online help");
helpOnlineHelpMenuItem.setMnemonic('O');
helpOnlineHelpMenuItem.addActionListener(eventHandler);
}
return helpOnlineHelpMenuItem;
}
private JMenuItem getHelpVersionsTxtMenuItem() {
if (helpVersionsTxtMenuItem == null) {
helpVersionsTxtMenuItem = new JMenuItem();
helpVersionsTxtMenuItem.setText("Version info");
helpVersionsTxtMenuItem.setMnemonic('V');
helpVersionsTxtMenuItem.addActionListener(eventHandler);
}
return helpVersionsTxtMenuItem;
}
private JMenuItem getHelpRobocodeApiMenuItem() {
if (helpRobocodeApiMenuItem == null) {
helpRobocodeApiMenuItem = new JMenuItem();
helpRobocodeApiMenuItem.setText("Robocode API");
helpRobocodeApiMenuItem.setMnemonic('I');
helpRobocodeApiMenuItem.setDisplayedMnemonicIndex(11);
helpRobocodeApiMenuItem.addActionListener(eventHandler);
}
return helpRobocodeApiMenuItem;
}
private JMenuItem getHelpRobocodeMenuItem() {
if (helpRobocodeMenuItem == null) {
helpRobocodeMenuItem = new JMenuItem();
helpRobocodeMenuItem.setText("Robocode home page");
helpRobocodeMenuItem.setMnemonic('H');
helpRobocodeMenuItem.setDisplayedMnemonicIndex(9);
helpRobocodeMenuItem.addActionListener(eventHandler);
}
return helpRobocodeMenuItem;
}
private JMenuItem getHelpJavaDocumentationMenuItem() {
if (helpJavaDocumentationMenuItem == null) {
helpJavaDocumentationMenuItem = new JMenuItem();
helpJavaDocumentationMenuItem.setText("Java 5.0 documentation");
helpJavaDocumentationMenuItem.setMnemonic('J');
helpJavaDocumentationMenuItem.addActionListener(eventHandler);
}
return helpJavaDocumentationMenuItem;
}
private JMenuItem getHelpRoboWikiMenuItem() {
if (helpRoboWikiMenuItem == null) {
helpRoboWikiMenuItem = new JMenuItem();
helpRoboWikiMenuItem.setText("RoboWiki site");
helpRoboWikiMenuItem.setMnemonic('W');
helpRoboWikiMenuItem.setDisplayedMnemonicIndex(4);
helpRoboWikiMenuItem.addActionListener(eventHandler);
}
return helpRoboWikiMenuItem;
}
private JMenuItem getHelpYahooGroupRobocodeMenuItem() {
if (helpYahooGroupRobocodeMenuItem == null) {
helpYahooGroupRobocodeMenuItem = new JMenuItem();
helpYahooGroupRobocodeMenuItem.setText("Yahoo Group for Robocode");
helpYahooGroupRobocodeMenuItem.setMnemonic('Y');
helpYahooGroupRobocodeMenuItem.addActionListener(eventHandler);
}
return helpYahooGroupRobocodeMenuItem;
}
private JMenuItem getHelpRobocodeRepositoryMenuItem() {
if (helpRobocodeRepositoryMenuItem == null) {
helpRobocodeRepositoryMenuItem = new JMenuItem();
helpRobocodeRepositoryMenuItem.setText("Robocode Repository");
helpRobocodeRepositoryMenuItem.setMnemonic('R');
helpRobocodeRepositoryMenuItem.setDisplayedMnemonicIndex(9);
helpRobocodeRepositoryMenuItem.addActionListener(eventHandler);
}
return helpRobocodeRepositoryMenuItem;
}
private JMenuItem getOptionsFitWindowMenuItem() {
if (optionsFitWindowMenuItem == null) {
optionsFitWindowMenuItem = new JMenuItem();
optionsFitWindowMenuItem.setText("Default window size");
optionsFitWindowMenuItem.setMnemonic('D');
optionsFitWindowMenuItem.addActionListener(eventHandler);
}
return optionsFitWindowMenuItem;
}
public JCheckBoxMenuItem getOptionsShowRankingCheckBoxMenuItem() {
if (optionsShowRankingCheckBoxMenuItem == null) {
optionsShowRankingCheckBoxMenuItem = new JCheckBoxMenuItem();
optionsShowRankingCheckBoxMenuItem.setText("Show current rankings");
optionsShowRankingCheckBoxMenuItem.setMnemonic('r');
optionsShowRankingCheckBoxMenuItem.setDisplayedMnemonicIndex(13);
optionsShowRankingCheckBoxMenuItem.addActionListener(eventHandler);
optionsShowRankingCheckBoxMenuItem.setEnabled(false);
}
return optionsShowRankingCheckBoxMenuItem;
}
private JMenuItem getOptionsRecalculateCpuConstantMenuItem() {
if (optionsRecalculateCpuConstantMenuItem == null) {
optionsRecalculateCpuConstantMenuItem = new JMenuItem();
optionsRecalculateCpuConstantMenuItem.setText("Recalculate CPU constant");
optionsRecalculateCpuConstantMenuItem.setMnemonic('e');
optionsRecalculateCpuConstantMenuItem.setDisplayedMnemonicIndex(1);
optionsRecalculateCpuConstantMenuItem.addActionListener(eventHandler);
}
return optionsRecalculateCpuConstantMenuItem;
}
private JMenuItem getOptionsCleanRobotCacheMenuItem() {
if (optionsCleanRobotCacheMenuItem == null) {
optionsCleanRobotCacheMenuItem = new JMenuItem();
optionsCleanRobotCacheMenuItem.setText("Clean robot cache");
optionsCleanRobotCacheMenuItem.setMnemonic('C');
optionsCleanRobotCacheMenuItem.addActionListener(eventHandler);
}
return optionsCleanRobotCacheMenuItem;
}
private JMenu getOptionsMenu() {
if (optionsMenu == null) {
optionsMenu = new JMenu();
optionsMenu.setText("Options");
optionsMenu.setMnemonic('O');
optionsMenu.add(getOptionsPreferencesMenuItem());
optionsMenu.add(getOptionsFitWindowMenuItem());
optionsMenu.add(new JSeparator());
optionsMenu.add(getOptionsShowRankingCheckBoxMenuItem());
optionsMenu.add(new JSeparator());
optionsMenu.add(getOptionsRecalculateCpuConstantMenuItem());
optionsMenu.add(getOptionsCleanRobotCacheMenuItem());
optionsMenu.addMenuListener(eventHandler);
}
return optionsMenu;
}
private JMenuItem getOptionsPreferencesMenuItem() {
if (optionsPreferencesMenuItem == null) {
optionsPreferencesMenuItem = new JMenuItem();
optionsPreferencesMenuItem.setText("Preferences");
optionsPreferencesMenuItem.setMnemonic('P');
optionsPreferencesMenuItem.addActionListener(eventHandler);
}
return optionsPreferencesMenuItem;
}
private JMenuItem getRobotEditorMenuItem() {
if (robotEditorMenuItem == null) {
robotEditorMenuItem = new JMenuItem();
robotEditorMenuItem.setText("Editor");
robotEditorMenuItem.setMnemonic('E');
robotEditorMenuItem.setVisible(net.sf.robocode.core.Container.getComponent(IRobocodeEditor.class) != null);
robotEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, MENU_SHORTCUT_KEY_MASK, false));
robotEditorMenuItem.addActionListener(eventHandler);
}
return robotEditorMenuItem;
}
private JMenuItem getRobotImportMenuItem() {
if (robotImportMenuItem == null) {
robotImportMenuItem = new JMenuItem();
robotImportMenuItem.setText("Import downloaded robot");
robotImportMenuItem.setMnemonic('I');
robotImportMenuItem.addActionListener(eventHandler);
}
return robotImportMenuItem;
}
public JMenu getRobotMenu() {
if (robotMenu == null) {
robotMenu = new JMenu();
robotMenu.setText("Robot");
robotMenu.setMnemonic('R');
robotMenu.add(getRobotEditorMenuItem());
robotMenu.add(new JSeparator());
robotMenu.add(getRobotImportMenuItem());
robotMenu.add(getRobotPackagerMenuItem());
robotMenu.add(new JSeparator());
robotMenu.add(getRobotCreateTeamMenuItem());
robotMenu.addMenuListener(eventHandler);
}
return robotMenu;
}
private JMenuItem getRobotPackagerMenuItem() {
if (robotPackagerMenuItem == null) {
robotPackagerMenuItem = new JMenuItem();
robotPackagerMenuItem.setText("Package robot for upload");
robotPackagerMenuItem.setMnemonic('P');
robotPackagerMenuItem.addActionListener(eventHandler);
}
return robotPackagerMenuItem;
}
private JMenuItem getRobotCreateTeamMenuItem() {
if (robotCreateTeamMenuItem == null) {
robotCreateTeamMenuItem = new JMenuItem();
robotCreateTeamMenuItem.setText("Create a robot team");
robotCreateTeamMenuItem.setMnemonic('C');
robotCreateTeamMenuItem.addActionListener(eventHandler);
}
return robotCreateTeamMenuItem;
}
private void teamCreateTeamActionPerformed() {
windowManager.showCreateTeamDialog();
}
private void helpAboutActionPerformed() {
windowManager.showAboutBox();
}
private void helpCheckForNewVersionActionPerformed() {
if (!robocodeFrame.checkForNewVersion(true)) {
WindowUtil.messageError("Unable to check for new version ");
}
}
private void helpFaqActionPerformed() {
windowManager.showFaq();
}
private void helpReadMeActionPerformed() {
windowManager.showReadMe();
}
private void helpOnlineHelpActionPerformed() {
windowManager.showOnlineHelp();
}
private void helpVersionsTxtActionPerformed() {
windowManager.showVersionsTxt();
}
private void helpRobocodeApiActionPerformed() {
windowManager.showHelpApi();
}
private void helpRobocodeHomeMenuItemActionPerformed() {
windowManager.showRobocodeHome();
}
private void helpJavaDocumentationActionPerformed() {
windowManager.showJavaDocumentation();
}
private void helpRoboWikiMenuItemActionPerformed() {
windowManager.showRoboWiki();
}
private void helpYahooGroupRobocodeActionPerformed() {
windowManager.showYahooGroupRobocode();
}
private void helpRobocodeRepositoryActionPerformed() {
windowManager.showRobocodeRepository();
}
private void optionsFitWindowActionPerformed() {
JFrame robocodeFrame = windowManager.getRobocodeFrame();
robocodeFrame.setSize(robocodeFrame.getPreferredSize());
WindowUtil.fitWindow(robocodeFrame);
}
private void optionsShowRankingActionPerformed() {
windowManager.showRankingDialog(getOptionsShowRankingCheckBoxMenuItem().getState());
}
private void optionsRecalculateCpuConstantPerformed() {
int ok = JOptionPane.showConfirmDialog(this, "Do you want to recalculate the CPU constant?",
"Recalculate CPU constant", JOptionPane.YES_NO_OPTION);
if (ok == JOptionPane.YES_OPTION) {
try {
robocodeFrame.setBusyPointer(true);
cpuManager.calculateCpuConstant();
} finally {
robocodeFrame.setBusyPointer(false);
}
long cpuConstant = cpuManager.getCpuConstant();
JOptionPane.showMessageDialog(this, "CPU constant: " + cpuConstant + " nanoseconds per turn",
"New CPU constant", JOptionPane.INFORMATION_MESSAGE);
}
}
private void optionsCleanRobotCachePerformed() {
int ok = JOptionPane.showConfirmDialog(this, "Do you want to clean the robot cache?", "Clean Robot Cache",
JOptionPane.YES_NO_OPTION);
if (ok == JOptionPane.YES_OPTION) {
try {
robocodeFrame.setBusyPointer(true);
net.sf.robocode.cachecleaner.CacheCleaner.clean();
} finally {
robocodeFrame.setBusyPointer(false);
}
}
}
private void optionsPreferencesActionPerformed() {
windowManager.showOptionsPreferences();
}
private void robotEditorActionPerformed() {
windowManager.showRobocodeEditor();
}
private void robotImportActionPerformed() {
windowManager.showImportRobotDialog();
}
private void robotPackagerActionPerformed() {
windowManager.showRobotPackager();
}
}