blob: 602c5302f0df302ee7042ef7197e2699ec8dfea5 [file] [log] [blame] [raw]
package com.plusminus.craft;
/*
* Copyright (c) 2005-2006, The ParticleReality Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of The ParticleReality Project nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.util.List;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
/***
* Static popup screen which enables the user to set values such as
* resolution, refreshrate, antialas modes and fullscreen</br>
* </br>
* Will query the system for available resolutions, bit depths and appropriate
* refresh rates.</br>
* </br>
* Allows the programmer to pass a set of preferred values for each property,
* the ResolutionDialog will attempt to find the nearest match</br>
* </br>
* Allows the programmer to attach a second panel where optional
* advanced properties can be set</br>
* </br>
* The static method "presentDialog" will popup the screen and will not
* return untill the user has either selected "go" or "exit". The return
* value of the method determines which button the user has clicked</br>
* </br>
* </br>
* </br>
* <i>(example:)</i><br/>
* <code>
* if(ResolutionDialog.presentDialog("Choose Video Options") == ResolutionDialog.DIALOG_BUTTON_EXIT) {
* System.exit(0);
* }
* </code>
* <br/>
* The selected properties can be read this way<br/>
* <code>
* ResolutionDialog.selectedDisplayMode
* ResolutionDialog.selectedAntiAliasMode
* ResolutionDialog.selectedFullScreenValue
* </code>
* @author Vincent Vollers
* @version 1.0
*/
public class ResolutionDialog extends JFrame {
private static final int FRAMEWIDTH = 300;
private static final int FRAMEHEIGHT = 230;
private static final String PANEL_NAME_BASIC ="Basic";
private static final String PANEL_NAME_ADVANCED = "Advanced";
private static final int[][] defaultPreferredResolutions =
new int[][] {{1920,1080},{1600,900},{1280,720},{1024, 768}, {800, 600}, {1280,1024}};
private static final int[] defaultPreferredBitDepths =
new int[] {32, 16, 8};
private static final int[] defaultPreferredRefreshRates =
new int[] {85, 80, 75, 70, 65, 60};
private static final int[] defaultPreferredAntialiasModes =
new int[] {0,2,4,8};
private static final boolean defaultPreferredFullScreenValue = false;
public static final int DIALOG_BUTTON_EXIT = 0;
public static final int DIALOG_BUTTON_GO = 1;
private JComboBox resolutionsList;
private JComboBox bitDepthList;
private JComboBox refreshRateList;
private JComboBox antiAliasList;
private JButton runButton;
private JButton exitButton;
private GridBagLayout gridBagLayoutManager;
private JTabbedPane tabbedPane;
private JPanel basicPanel;
private Container advancedPanel;
private JCheckBox fullScreenCheckBox;
private DefaultComboBoxModel resolutionsModel;
private DefaultComboBoxModel bitDepthModel;
private DefaultComboBoxModel refreshRateModel;
private DefaultComboBoxModel antiAliasModel;
private Map<IntegerPair, List<DisplayMode>> resolutionsMap;
private int[][] preferredResolutions;
private int[] preferredRefreshRates;
private int[] preferredBitDepths;
private int[] preferredAntiAliasModes;
private boolean preferredFullScreenValue;
private int exitCode = -1;
public static DisplayMode selectedDisplayMode;
public static int selectedAntiAliasMode;
public static boolean selectedFullScreenValue;
public static Image iconImage;
/***
* Class holding a pair of two integers where the order is determined
* first by the first integer and when these are equal, by the second
* integer. This is used for holding resolution information
* @author Vincent Vollers
*/
private class IntegerPair implements Comparable {
private int valueOne;
private int valueTwo;
public IntegerPair(int valueOne, int valueTwo) {
this.valueOne = valueOne;
this.valueTwo = valueTwo;
}
public int getValueOne() {
return this.valueOne;
}
public int getValueTwo() {
return this.valueTwo;
}
public int compareTo(Object o) {
if(!(o instanceof IntegerPair)) {
return -1;
}
IntegerPair i = (IntegerPair) o;
if(i.getValueOne()>valueOne)
return 1;
if(i.getValueOne()<valueOne)
return -1;
if(i.getValueTwo()>valueTwo)
return 1;
if(i.getValueTwo()<valueTwo)
return -1;
return 0;
}
}
/***
* Renders IntegerPairs ("[a] x [b]", so "1024 x 768" for example)
* @author Vincent Vollers
*/
private class DisplayModesRenderer extends BasicComboBoxRenderer {
public DisplayModesRenderer() {
super();
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
IntegerPair pair = (IntegerPair) value;
String newValue = "" + pair.getValueOne() + " x " + pair.getValueTwo();
return super.getListCellRendererComponent(list, newValue, index, isSelected, cellHasFocus);
}
}
/***
* Renders Integers and adds an 'x' to the end, so '2x' for example.
* @author Vincent Vollers
*/
private class AntiAliasModesRenderer extends BasicComboBoxRenderer {
public AntiAliasModesRenderer() {
super();
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
Integer val = (Integer) value;
String newValue = "" + val + "x";
if(val == 0) {
newValue = "none";
}
return super.getListCellRendererComponent(list, newValue, index, isSelected, cellHasFocus);
}
}
/***
* Centers this dialog on the screen
*/
private void centerDialogOnScreen() {
Toolkit t = Toolkit.getDefaultToolkit();
Dimension screenSize = t.getScreenSize();
int x = (screenSize.width / 2) - (this.getWidth()/ 2);
int y = (screenSize.height/ 2) - (this.getHeight()/ 2);
gridBagLayoutManager = new GridBagLayout();
this.setLocation(x,y);
}
/***
* Layouts all the controls and labels on the dialog using a gridbaglayout
*/
private void layoutControlsOnDialog() {
this.tabbedPane = new JTabbedPane();
basicPanel = new JPanel();
this.tabbedPane.add(PANEL_NAME_BASIC, basicPanel);
if(advancedPanel != null) {
this.tabbedPane.add(PANEL_NAME_ADVANCED, advancedPanel);
this.tabbedPane.setEnabledAt(1, true);
} else {
this.tabbedPane.add(PANEL_NAME_ADVANCED, new JPanel());
this.tabbedPane.setEnabledAt(1, false);
}
this.getContentPane().setLayout(gridBagLayoutManager);
basicPanel.setLayout(gridBagLayoutManager);
GridBagConstraints c = new GridBagConstraints();
JLabel resolutionsLabel = new JLabel("Resolution: ");
JLabel bitDepthLabel = new JLabel("Bit Depth: ");
JLabel refreshRateLabel = new JLabel("Refresh Rate: ");
JLabel antiAliasLabel = new JLabel("Anti Aliasing: ");
JLabel fullScreenLabel = new JLabel("Full Screen: ");
float flabel = 0.1f;
float flist = 1.9f;
c.insets = new Insets(5,5,5,5);
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 0;
c.anchor = GridBagConstraints.EAST;
c.fill = GridBagConstraints.NONE;
addComponent(basicPanel, resolutionsLabel,c);
c.weightx = flist;
c.weighty = 1.0f;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1; c.gridy = 0;
addComponent(basicPanel, resolutionsList,c);
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 1;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
addComponent(basicPanel, bitDepthLabel,c);
c.weightx = flist;
c.fill = GridBagConstraints.HORIZONTAL;
c.weighty = 1.0f;
c.gridx = 1; c.gridy = 1;
addComponent(basicPanel, bitDepthList,c);
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 2;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
addComponent(basicPanel, refreshRateLabel,c);
c.weightx = flist;
c.weighty = 1.0f;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1; c.gridy = 2;
addComponent(basicPanel, refreshRateList,c);
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 3;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
addComponent(basicPanel, antiAliasLabel,c);
c.weightx = flist;
c.weighty = 1.0f;
c.gridx = 1; c.gridy = 3;
c.fill = GridBagConstraints.HORIZONTAL;
addComponent(basicPanel, antiAliasList,c);
fullScreenCheckBox = new JCheckBox();
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 4;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
addComponent(basicPanel, fullScreenLabel,c);
c.insets = new Insets(5,0,5,0);
fullScreenCheckBox.setSelected(this.preferredFullScreenValue);
c.weightx = flist;
c.weighty = 1.0f;
c.gridx = 1; c.gridy = 4;
c.fill = GridBagConstraints.HORIZONTAL;
addComponent(basicPanel, fullScreenCheckBox,c);
c.weightx = 1.0f;
c.weighty = 15.0f;
c.gridwidth = 2;
c.gridx = 0; c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
addComponent(this.getContentPane(), tabbedPane,c);
c.insets = new Insets(5,15,5,15);
c.gridwidth = 1;
c.weightx = flabel;
c.weighty = 1.0f;
c.gridx = 0; c.gridy = 1;
c.anchor = GridBagConstraints.WEST;
c.fill = GridBagConstraints.HORIZONTAL;
addComponent(this.getContentPane(), exitButton,c);
c.weightx = flist;
c.weighty = 1.0f;
c.gridx = 1; c.gridy = 1;
c.anchor = GridBagConstraints.EAST;
c.fill = GridBagConstraints.HORIZONTAL;
addComponent(this.getContentPane(), runButton,c);
}
/***
* Adds a component to the container and updates the constraints for that component
* @param root The contiainer to add the component to
* @param comp The component to add to the container
* @param constraints The constraints which affect the component
*/
private void addComponent(Container root, Component comp, GridBagConstraints constraints) {
gridBagLayoutManager.setConstraints(comp,constraints);
root.add(comp);
}
/***
* Builds the Go and Exit Buttons and attaches the actions to them
*/
private void buildButtons() {
runButton = new JButton("Go!");
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
exitCode = ResolutionDialog.DIALOG_BUTTON_GO;
setSelectedValues();
setVisible(false);
dispose();
synchronized(ResolutionDialog.this) {
ResolutionDialog.this.notify();
}
}
});
exitButton = new JButton("Exit");
exitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
exitCode = ResolutionDialog.DIALOG_BUTTON_EXIT;
setVisible(false);
dispose();
synchronized(ResolutionDialog.this) {
ResolutionDialog.this.notify();
}
}
});
}
/***
* Builds the different lists and fills them with their respective information
* (Available Resolutions, Available Bit Depths, Available Refresh Rates etc)
*/
private void buildLists() {
resolutionsModel = new DefaultComboBoxModel();
bitDepthModel = new DefaultComboBoxModel();
antiAliasModel = new DefaultComboBoxModel();
refreshRateModel = new DefaultComboBoxModel();
resolutionsMap = new TreeMap<IntegerPair, List<DisplayMode>>();
bitDepthList = new JComboBox();
bitDepthList.setModel(bitDepthModel);
antiAliasList = new JComboBox();
antiAliasList.setModel(antiAliasModel);
antiAliasList.setRenderer(new AntiAliasModesRenderer());
refreshRateList = new JComboBox();
refreshRateList.setModel(refreshRateModel);
try {
DisplayMode[] modes = Display.getAvailableDisplayModes();
for(DisplayMode mode : modes) {
IntegerPair modePair = new IntegerPair(mode.getWidth(), mode.getHeight());
if(!resolutionsMap.containsKey(modePair))
resolutionsMap.put(modePair, new ArrayList<DisplayMode>());
resolutionsMap.get(modePair).add(mode);
}
IntegerPair firstMode = null;
for(IntegerPair mode : resolutionsMap.keySet()) {
resolutionsModel.addElement(mode);
if(firstMode == null)
firstMode = mode;
}
fillBppAndRefreshForMode(firstMode);
} catch (LWJGLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
antiAliasModel.addElement(0);
antiAliasModel.addElement(2);
antiAliasModel.addElement(4);
antiAliasModel.addElement(8);
antiAliasModel.addElement(16);
resolutionsList = new JComboBox();
resolutionsList.setModel(resolutionsModel);
resolutionsList.setRenderer(new DisplayModesRenderer());
resolutionsList.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
IntegerPair pair = (IntegerPair) resolutionsList.getSelectedItem();
if(pair != null)
fillBppAndRefreshForMode(pair);
}
});
findSelectionIntegerPair(resolutionsList, preferredResolutions);
findSelectionInteger(antiAliasList, preferredAntiAliasModes);
}
/***
* Reconstructs the Bpp (bits per pixel, or color depth) and refresh rates lists
* for a given resolution. Will then attempt to select the most compatible color depth
* and refresh rate given the preferred values for each
* @param mode The mode for which to look up the color depth and refresh rates
*/
private void fillBppAndRefreshForMode(IntegerPair mode) {
List<DisplayMode> modes = resolutionsMap.get(mode);
bitDepthList.setSelectedIndex(-1);
refreshRateList.setSelectedItem(-1);
bitDepthModel.removeAllElements();
refreshRateModel.removeAllElements();
TreeSet<Integer> bppSet = new TreeSet<Integer>();
TreeSet<Integer> refreshRateSet = new TreeSet<Integer>();
for(DisplayMode m : modes) {
bppSet.add(m.getBitsPerPixel());
refreshRateSet.add(m.getFrequency());
}
for(Integer bpp : bppSet) {
bitDepthModel.addElement(bpp);
}
for(Integer refreshRate : refreshRateSet) {
refreshRateModel.addElement(refreshRate);
}
findSelectionInteger(bitDepthList, preferredBitDepths);
findSelectionInteger(refreshRateList, preferredRefreshRates);
bitDepthList.validate();
refreshRateList.validate();
}
/***
* Will attempt to locate and select a preferred integer-pair value in a given combobox
* @param box the combobox to look in
* @param preferred the list of integer pairs, in order of preference, to look for
*/
private void findSelectionIntegerPair(JComboBox box, int[][] preferred) {
ComboBoxModel model = box.getModel();
int arrayOff = Integer.MAX_VALUE;
int modelOff = -1;
for(int i=0; i<model.getSize(); i++) {
IntegerPair pair = (IntegerPair) model.getElementAt(i);
int foundOff = -1;
for(int j=0; j<preferred.length; j++) {
if( pair.getValueOne() == preferred[j][0] &&
pair.getValueTwo() == preferred[j][1]) {
foundOff = j;
break;
}
}
if(foundOff != -1 && foundOff < arrayOff) {
arrayOff = foundOff;
modelOff = i;
}
}
if(modelOff != -1) {
box.setSelectedIndex(modelOff);
}
box.validate();
}
/***
* Will attempt to locate and select a preferred integer value in a given combobox
* @param box the combobox to look in
* @param preferred the list of integers, in order of preference, to look for
*/
private void findSelectionInteger(JComboBox box, int[] preferred) {
ComboBoxModel model = box.getModel();
int arrayOff = Integer.MAX_VALUE;
int modelOff = -1;
for(int i=0; i<model.getSize(); i++) {
Integer intVal = (Integer) model.getElementAt(i);
int foundOff = -1;
for(int j=0; j<preferred.length; j++) {
if( intVal == preferred[j]) {
foundOff = j;
break;
}
}
if(foundOff != -1 && foundOff < arrayOff) {
arrayOff = foundOff;
modelOff = i;
}
}
if(modelOff != -1) {
box.setSelectedIndex(modelOff);
}
box.validate();
}
/***
* Sets the selected values to the static properties of this resolution dialog
*/
private void setSelectedValues() {
IntegerPair resolution;
if(resolutionsList.getSelectedIndex() == -1) {
resolution = (IntegerPair) resolutionsModel.getElementAt(0);
} else {
resolution = (IntegerPair) resolutionsModel.getElementAt(resolutionsList.getSelectedIndex());
}
Integer bitDepth;
if(bitDepthList.getSelectedIndex() == -1) {
bitDepth = (Integer) bitDepthModel.getElementAt(0);
} else {
bitDepth = (Integer) bitDepthModel.getElementAt(bitDepthList.getSelectedIndex());
}
Integer refreshRate;
if(refreshRateList.getSelectedIndex() == -1) {
refreshRate = (Integer) refreshRateModel.getElementAt(0);
} else {
refreshRate = (Integer) refreshRateModel.getElementAt(refreshRateList.getSelectedIndex());
}
Integer antiAliasMode;
if(antiAliasList.getSelectedIndex() == -1) {
antiAliasMode = (Integer) antiAliasModel.getElementAt(0);
} else {
antiAliasMode = (Integer) antiAliasModel.getElementAt(antiAliasList.getSelectedIndex());
}
for(DisplayMode mode : resolutionsMap.get(resolution)) {
if(mode.getBitsPerPixel() == bitDepth &&
mode.getFrequency() == refreshRate) {
ResolutionDialog.selectedDisplayMode = mode;
break;
}
}
ResolutionDialog.selectedAntiAliasMode = antiAliasMode;
ResolutionDialog.selectedFullScreenValue = this.fullScreenCheckBox.isSelected();
}
/***
* Creates a new Resolutions Dialog
* @param windowName the title of the dialog
* @param advancedPanel an optional advanced panel
* @param preferredResolutions a list of resolutions, in order of preference, which will be looked for
* @param preferredBitDepths a list of color depths, in order of preference, which will be looked for
* @param preferredRefreshRates a list of refresh rates, in order of preference, which will be looked for
* @param preferredAntialiasModes a list of antia-alias values, in order of preference, which will be looked for
* @param preferredFullScreenValue the initial value of the full-screen checkbox
*/
protected ResolutionDialog(String windowName, Container advancedPanel, int[][] preferredResolutions, int[] preferredBitDepths, int[] preferredRefreshRates, int[] preferredAntialiasModes, boolean preferredFullScreenValue) {
super(windowName);
this.preferredResolutions = preferredResolutions;
this.preferredBitDepths = preferredBitDepths;
this.preferredRefreshRates = preferredRefreshRates;
this.preferredAntiAliasModes = preferredAntialiasModes;
this.advancedPanel = advancedPanel;
this.preferredFullScreenValue = preferredFullScreenValue;
if(ResolutionDialog.iconImage != null)
this.setIconImage(ResolutionDialog.iconImage);
this.setSize(FRAMEWIDTH,FRAMEHEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
centerDialogOnScreen();
buildLists();
buildButtons();
layoutControlsOnDialog();
validate();
this.setVisible(true);
}
/***
* Pops up the dialog window
* @param windowName the title of the dialog
* @param advancedPanel an optional advanced panel
* @param preferredResolutions a list of resolutions, in order of preference, which will be looked for
* @param preferredBitDepths a list of color depths, in order of preference, which will be looked for
* @param preferredRefreshRates a list of refresh rates, in order of preference, which will be looked for
* @param preferredAntialiasModes a list of antia-alias values, in order of preference, which will be looked for
* @param preferredFullScreenValue the initial value of the full-screen checkbox
* @return an integer value which represents which button was clicked (DIALOG_BUTTON_EXIT or DIALOG_BUTTON_GO)
*/
public static int presentDialog(String windowName, Container advancedPanel, int[][] preferredResolutions, int[] preferredBitDepths, int[] preferredRefreshRates, int[] preferredAntialiasModes, boolean preferredFullScreenValue) {
ResolutionDialog dialog = new ResolutionDialog(
windowName,
advancedPanel,
preferredResolutions,
preferredBitDepths,
preferredRefreshRates,
preferredAntialiasModes,
preferredFullScreenValue
);
try {
synchronized(dialog) {
dialog.wait();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dialog.exitCode;
}
/***
* Pops up the dialog window using the default preffered values
* @return an integer value which represents which button was clicked (DIALOG_BUTTON_EXIT or DIALOG_BUTTON_GO)
*/
public static int presentDialog(String windowName) {
return presentDialog(windowName, null);
}
/***
* Pops up the dialog window using the default preffered values and an
* advanced panel
* @return an integer value which represents which button was clicked (DIALOG_BUTTON_EXIT or DIALOG_BUTTON_GO)
*/
public static int presentDialog(String windowName, Container advancedPanel) {
return presentDialog(windowName,advancedPanel,
defaultPreferredResolutions,
defaultPreferredBitDepths,
defaultPreferredRefreshRates,
defaultPreferredAntialiasModes,
defaultPreferredFullScreenValue
);
}
/***
* Pops up the dialog window
* @param windowName the title of the dialog
* @param preferredResolutions a list of resolutions, in order of preference, which will be looked for
* @param preferredBitDepths a list of color depths, in order of preference, which will be looked for
* @param preferredRefreshRates a list of refresh rates, in order of preference, which will be looked for
* @param preferredAntialiasModes a list of antia-alias values, in order of preference, which will be looked for
* @param preferredFullScreenValue the initial value of the full-screen checkbox
* @return an integer value which represents which button was clicked (DIALOG_BUTTON_EXIT or DIALOG_BUTTON_GO)
*/
public static int presentDialog(String windowName, int[][] preferredResolutions, int[] preferredBitDepths, int[] preferredRefreshRates, int[] preferredAntialiasModes, boolean preferredFullScreenValue) {
return presentDialog(windowName, null, preferredResolutions, preferredBitDepths, preferredRefreshRates, preferredAntialiasModes, preferredFullScreenValue);
}
/***
* A little test
* @param args
*/
public static void main(String[] args) {
System.out.println("return code: " + ResolutionDialog.presentDialog("Choose Video Options"));
System.out.println("selected resolution: " + ResolutionDialog.selectedDisplayMode);
System.out.println("selected anti alias settings: " + ResolutionDialog.selectedAntiAliasMode);
}
}