/*******************************************************************************
* 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:
* Flemming N. Larsen
* - Initial API and implementation
*******************************************************************************/
package net.sf.robocode.ui.dialog;
import net.sf.robocode.settings.ISettingsManager;
import net.sf.robocode.ui.IImageManager;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Flemming N. Larsen (original)
*/
@SuppressWarnings("serial")
public class PreferencesRenderingOptionsTab extends WizardPanel {
private final ISettingsManager properties;
private JPanel specificSettingsPanel;
private JPanel predefinedSettingsPanel;
private JPanel otherSettingsPanel;
private JComboBox optionsRenderingAntialiasingComboBox;
private JComboBox optionsRenderingTextAntialiasingComboBox;
private JComboBox optionsRenderingMethodComboBox;
private JComboBox optionsRenderingNoBuffersComboBox;
private JCheckBox optionsRenderingBufferImagesCheckBox;
private JCheckBox optionsRenderingForceBulletColorCheckBox;
private JButton predefinedPlaformDefaultButton;
private JButton predefinedSpeedButton;
private JButton predefinedQualityButton;
private EventHandler eventHandler;
private final IImageManager imageManager;
public PreferencesRenderingOptionsTab(ISettingsManager properties, IImageManager imageManager) {
super();
this.properties = properties;
this.imageManager = imageManager;
initialize();
}
private void initialize() {
eventHandler = new EventHandler();
setLayout(new GridLayout(1, 3));
add(getSpecificSettingsPanel());
add(getPredefinedSettingsPanel());
add(getOtherSettingsPanel());
loadPreferences(properties);
}
private JPanel getSpecificSettingsPanel() {
if (specificSettingsPanel == null) {
specificSettingsPanel = new JPanel();
specificSettingsPanel.setBorder(
BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Specific settings"));
specificSettingsPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
c.anchor = GridBagConstraints.PAGE_START;
c.weightx = 0;
c.gridwidth = 2;
c.gridx = 0;
c.gridy = 0;
specificSettingsPanel.add(new JLabel("Set individual rendering options:"), c);
c.gridwidth = 1;
c.gridy = 1;
specificSettingsPanel.add(new JLabel("Antialiasing", SwingConstants.RIGHT), c);
c.gridx = 1;
specificSettingsPanel.add(getOptionsRenderingAntialiasingComboBox(), c);
c.gridx = 0;
c.gridy = 2;
specificSettingsPanel.add(new JLabel("Text Antialiasing", SwingConstants.RIGHT), c);
c.gridx = 1;
specificSettingsPanel.add(getOptionsRenderingTextAntialiasingComboBox(), c);
c.gridx = 0;
c.gridy = 3;
specificSettingsPanel.add(new JLabel("Rendering Method", SwingConstants.RIGHT), c);
c.gridx = 1;
specificSettingsPanel.add(getOptionsRenderingMethodComboBox(), c);
c.gridx = 0;
c.gridy = 4;
specificSettingsPanel.add(new JLabel(" "), c);
c.gridx = 0;
c.gridy = 5;
specificSettingsPanel.add(new JLabel("Number of buffers", SwingConstants.RIGHT), c);
c.gridx = 1;
specificSettingsPanel.add(getOptionsRenderingNoBuffersComboBox(), c);
}
return specificSettingsPanel;
}
private JPanel getPredefinedSettingsPanel() {
if (predefinedSettingsPanel == null) {
predefinedSettingsPanel = new JPanel();
predefinedSettingsPanel.setBorder(
BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Predefined settings"));
predefinedSettingsPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 5, 5);
c.anchor = GridBagConstraints.PAGE_START;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 3;
predefinedSettingsPanel.add(new JLabel("Set all rendering settings towards:"), c);
c.weightx = 1f / 3;
c.gridwidth = 1;
c.gridy = 2;
predefinedSettingsPanel.add(getPredefinedPlatformDefaultButton(), c);
c.gridx = 1;
predefinedSettingsPanel.add(getPredefinedSpeedButton(), c);
c.gridx = 2;
predefinedSettingsPanel.add(getPredefinedQualityButton(), c);
}
return predefinedSettingsPanel;
}
private JPanel getOtherSettingsPanel() {
if (otherSettingsPanel == null) {
otherSettingsPanel = new JPanel();
otherSettingsPanel.setBorder(
BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Other settings"));
otherSettingsPanel.setLayout(new BoxLayout(otherSettingsPanel, BoxLayout.Y_AXIS));
otherSettingsPanel.add(getOptionsRenderingBufferImagesCheckBox());
otherSettingsPanel.add(getOptionsRenderingForceBulletColorCheckBox());
}
return otherSettingsPanel;
}
private JComboBox getOptionsRenderingAntialiasingComboBox() {
if (optionsRenderingAntialiasingComboBox == null) {
optionsRenderingAntialiasingComboBox = new JComboBox(new String[] { "Default", "On", "Off"});
optionsRenderingAntialiasingComboBox.addActionListener(eventHandler);
}
return optionsRenderingAntialiasingComboBox;
}
private JComboBox getOptionsRenderingTextAntialiasingComboBox() {
if (optionsRenderingTextAntialiasingComboBox == null) {
optionsRenderingTextAntialiasingComboBox = new JComboBox(new String[] { "Default", "On", "Off"});
optionsRenderingTextAntialiasingComboBox.addActionListener(eventHandler);
}
return optionsRenderingTextAntialiasingComboBox;
}
private JComboBox getOptionsRenderingMethodComboBox() {
if (optionsRenderingMethodComboBox == null) {
optionsRenderingMethodComboBox = new JComboBox(new String[] { "Default", "Quality", "Speed"});
optionsRenderingMethodComboBox.addActionListener(eventHandler);
}
return optionsRenderingMethodComboBox;
}
private JComboBox getOptionsRenderingNoBuffersComboBox() {
if (optionsRenderingNoBuffersComboBox == null) {
optionsRenderingNoBuffersComboBox = new JComboBox(
new String[] { "Single buffering", "Double buffering", "Triple buffering"});
optionsRenderingNoBuffersComboBox.addActionListener(eventHandler);
}
return optionsRenderingNoBuffersComboBox;
}
private JButton getPredefinedPlatformDefaultButton() {
if (predefinedPlaformDefaultButton == null) {
predefinedPlaformDefaultButton = new JButton("Default");
predefinedPlaformDefaultButton.setMnemonic('u');
predefinedPlaformDefaultButton.setDisplayedMnemonicIndex(4);
predefinedPlaformDefaultButton.addActionListener(eventHandler);
}
return predefinedPlaformDefaultButton;
}
private JButton getPredefinedSpeedButton() {
if (predefinedSpeedButton == null) {
predefinedSpeedButton = new JButton("Speed");
predefinedSpeedButton.setMnemonic('p');
predefinedSpeedButton.setDisplayedMnemonicIndex(1);
predefinedSpeedButton.addActionListener(eventHandler);
}
return predefinedSpeedButton;
}
private JButton getPredefinedQualityButton() {
if (predefinedQualityButton == null) {
predefinedQualityButton = new JButton("Quality");
predefinedQualityButton.setMnemonic('Q');
predefinedQualityButton.addActionListener(eventHandler);
}
return predefinedQualityButton;
}
private JCheckBox getOptionsRenderingBufferImagesCheckBox() {
if (optionsRenderingBufferImagesCheckBox == null) {
optionsRenderingBufferImagesCheckBox = new JCheckBox("Buffer images (uses memory)");
optionsRenderingBufferImagesCheckBox.setMnemonic('i');
optionsRenderingBufferImagesCheckBox.setDisplayedMnemonicIndex(7);
optionsRenderingBufferImagesCheckBox.addActionListener(eventHandler);
}
return optionsRenderingBufferImagesCheckBox;
}
private JCheckBox getOptionsRenderingForceBulletColorCheckBox() {
if (optionsRenderingForceBulletColorCheckBox == null) {
optionsRenderingForceBulletColorCheckBox = new JCheckBox("Make all bullets white");
optionsRenderingForceBulletColorCheckBox.setMnemonic('M');
optionsRenderingForceBulletColorCheckBox.addActionListener(eventHandler);
}
return optionsRenderingForceBulletColorCheckBox;
}
private void loadPreferences(ISettingsManager props) {
getOptionsRenderingAntialiasingComboBox().setSelectedIndex(props.getOptionsRenderingAntialiasing());
getOptionsRenderingTextAntialiasingComboBox().setSelectedIndex(props.getOptionsRenderingTextAntialiasing());
getOptionsRenderingMethodComboBox().setSelectedIndex(props.getOptionsRenderingMethod());
getOptionsRenderingNoBuffersComboBox().setSelectedIndex(props.getOptionsRenderingNoBuffers() - 1);
getOptionsRenderingBufferImagesCheckBox().setSelected(props.getOptionsRenderingBufferImages());
getOptionsRenderingForceBulletColorCheckBox().setSelected(props.getOptionsRenderingForceBulletColor());
}
public void storePreferences() {
ISettingsManager props = properties;
props.setOptionsRenderingAntialiasing(optionsRenderingAntialiasingComboBox.getSelectedIndex());
props.setOptionsRenderingTextAntialiasing(optionsRenderingTextAntialiasingComboBox.getSelectedIndex());
props.setOptionsRenderingMethod(optionsRenderingMethodComboBox.getSelectedIndex());
props.setOptionsRenderingNoBuffers(optionsRenderingNoBuffersComboBox.getSelectedIndex() + 1);
props.setOptionsRenderingBufferImages(optionsRenderingBufferImagesCheckBox.isSelected());
props.setOptionsRenderingForceBulletColor(optionsRenderingForceBulletColorCheckBox.isSelected());
properties.saveProperties();
}
@Override
public boolean isReady() {
return true;
}
private void setPredefinedSettings(int index) {
optionsRenderingAntialiasingComboBox.setSelectedIndex(index);
optionsRenderingTextAntialiasingComboBox.setSelectedIndex(index);
optionsRenderingMethodComboBox.setSelectedIndex(index);
}
private class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if (src == predefinedPlaformDefaultButton) {
setPredefinedSettings(0);
} else if (src == predefinedQualityButton) {
setPredefinedSettings(1);
} else if (src == predefinedSpeedButton) {
setPredefinedSettings(2);
} else if (src == optionsRenderingBufferImagesCheckBox) {
// Reset images so they are reloaded and gets buffered or unbuffered
new Thread() {
@Override
public void run() {
storePreferences();
imageManager.initialize();
}
}.start();
return;
}
}
}
}