334 lines
8.4 KiB
Java
334 lines
8.4 KiB
Java
package ei.engine;
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JPanel;
|
|
import java.awt.Dimension;
|
|
import java.awt.FlowLayout;
|
|
import java.awt.Toolkit;
|
|
|
|
import javax.swing.JCheckBox;
|
|
import javax.swing.JComboBox;
|
|
import javax.swing.JButton;
|
|
|
|
import org.lwjgl.LWJGLException;
|
|
import org.lwjgl.opengl.Display;
|
|
import org.lwjgl.opengl.DisplayMode;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Properties;
|
|
|
|
import javax.swing.JLabel;
|
|
|
|
public class LWJGLPropertiesDialog implements ActionListener{
|
|
public static final int SOW_ONCE = 0;
|
|
public static final int SOW_ALWAYS = 1;
|
|
|
|
private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="57,133"
|
|
private JCheckBox fullscreen = null;
|
|
private JPanel jPanel = null;
|
|
private JComboBox resulution = null;
|
|
private JComboBox pixelres = null;
|
|
private JComboBox freq = null;
|
|
private JButton ok = null;
|
|
private JButton cancel = null;
|
|
|
|
private JLabel jLabel = null;
|
|
private JLabel jLabel1 = null;
|
|
private JLabel jLabel2 = null;
|
|
|
|
private LWJGLGameWindow window;
|
|
private DisplayMode[] display;
|
|
|
|
public static void main(String[] args){
|
|
|
|
}
|
|
|
|
public LWJGLPropertiesDialog(LWJGLGameWindow window, int status){
|
|
try {
|
|
display = Display.getAvailableDisplayModes();
|
|
} catch (LWJGLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
this.window = window;
|
|
Properties settings = loadProp();
|
|
getJFrame(display);
|
|
|
|
if(settings != null){
|
|
setSelected(resulution,settings.getProperty("Res"));
|
|
setSelected(pixelres,settings.getProperty("Pixel"));
|
|
setSelected(freq,settings.getProperty("Freq"));
|
|
fullscreen.setSelected(Boolean.parseBoolean(settings.getProperty("Fullscreen")));
|
|
if(status == SOW_ONCE){
|
|
actionPerformed(new ActionEvent(ok,0,"loaded settings"));
|
|
}
|
|
else if(status == SOW_ALWAYS){
|
|
jFrame.setVisible(true);
|
|
}
|
|
}
|
|
else{
|
|
jFrame.setVisible(true);
|
|
}
|
|
}
|
|
|
|
private void setSelected(JComboBox box, String sel){
|
|
for(int i=0; i<box.getItemCount() ;i++){
|
|
if(((String)box.getItemAt(i)).equals(sel)){
|
|
box.setSelectedIndex(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
private Properties loadProp(){
|
|
Properties prop = new Properties();
|
|
FileInputStream fis;
|
|
try {
|
|
fis = new FileInputStream("window.ini");
|
|
prop.load(fis);
|
|
} catch (Exception e) {
|
|
prop = null;
|
|
}
|
|
return prop;
|
|
}
|
|
|
|
private void saveProp(Properties p){
|
|
FileOutputStream fos;
|
|
try {
|
|
fos = new FileOutputStream("window.ini");
|
|
p.store(fos, "LWJGLWindow");
|
|
fos.close();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void actionPerformed(ActionEvent event) {
|
|
if(event.getSource() == ok){
|
|
DisplayMode dm = findDisplay();
|
|
if(dm != null){
|
|
jFrame.setVisible(false);
|
|
jFrame = null;
|
|
Properties settings = new Properties();
|
|
settings.setProperty("Res",dm.getWidth()+"x"+dm.getHeight());
|
|
settings.setProperty("Pixel",""+dm.getBitsPerPixel());
|
|
settings.setProperty("Freq",""+dm.getFrequency());
|
|
settings.setProperty("Fullscreen",""+fullscreen.isSelected());
|
|
saveProp(settings);
|
|
window.createWindow(dm, fullscreen.isSelected());
|
|
}
|
|
}
|
|
else if(event.getSource() == cancel){
|
|
System.exit(0);
|
|
}
|
|
}
|
|
|
|
private DisplayMode findDisplay(){
|
|
for(int i=0; i<display.length ;i++){
|
|
if(((String)resulution.getSelectedItem()).equals(display[i].getWidth()+"x"+display[i].getHeight()) &&
|
|
Integer.parseInt((String)pixelres.getSelectedItem()) == display[i].getBitsPerPixel() &&
|
|
Integer.parseInt((String)freq.getSelectedItem()) == display[i].getFrequency()){
|
|
return display[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* This method initializes jFrame
|
|
*
|
|
* @return javax.swing.JFrame
|
|
*/
|
|
private JFrame getJFrame(DisplayMode[] d) {
|
|
if (jFrame == null) {
|
|
jFrame = new JFrame();
|
|
jFrame.setContentPane(getJPanel(d));
|
|
jFrame.pack();
|
|
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
|
|
Dimension size = jFrame.getSize();
|
|
jFrame.setLocation(dim.width/2-size.width/2,dim.height/2-size.height/2);
|
|
}
|
|
return jFrame;
|
|
}
|
|
/**
|
|
* This method initializes fullscreen
|
|
*
|
|
* @return javax.swing.JCheckBox
|
|
*/
|
|
private JCheckBox getFullscreen() {
|
|
if (fullscreen == null) {
|
|
fullscreen = new JCheckBox();
|
|
fullscreen.setText("Fullscreen");
|
|
fullscreen.setName("fullscreen");
|
|
}
|
|
return fullscreen;
|
|
}
|
|
/**
|
|
* This method initializes jPanel
|
|
*
|
|
* @return javax.swing.JPanel
|
|
*/
|
|
private JPanel getJPanel(DisplayMode[] d) {
|
|
if (jPanel == null) {
|
|
jLabel2 = new JLabel();
|
|
jLabel2.setText("Freq: ");
|
|
jLabel1 = new JLabel();
|
|
jLabel1.setText("Pixel");
|
|
jLabel = new JLabel();
|
|
jLabel.setText("Resulution:");
|
|
jPanel = new JPanel();
|
|
jPanel.setLayout(new FlowLayout());
|
|
jPanel.add(jLabel, null);
|
|
jPanel.add(getResulutionButton(d), null);
|
|
jPanel.add(jLabel1, null);
|
|
jPanel.add(getPixelresButton(d), null);
|
|
jPanel.add(jLabel2, null);
|
|
jPanel.add(getFreqButton(d), null);
|
|
jPanel.add(getFullscreen(), null);
|
|
jPanel.add(getOk(), null);
|
|
jPanel.add(getCancel(), null);
|
|
}
|
|
return jPanel;
|
|
}
|
|
/**
|
|
* This method initializes resulution
|
|
*
|
|
* @return javax.swing.JComboBox
|
|
*/
|
|
private JComboBox getResulutionButton(DisplayMode[] d) {
|
|
if (resulution == null) {
|
|
resulution = new JComboBox();
|
|
resulution.setName("resulution");
|
|
setList(resulution, getResulution(display));
|
|
resulution.addActionListener(this);
|
|
}
|
|
return resulution;
|
|
}
|
|
|
|
/**
|
|
* This method initializes pixelres
|
|
*
|
|
* @return javax.swing.JComboBox
|
|
*/
|
|
private JComboBox getPixelresButton(DisplayMode[] d) {
|
|
if (pixelres == null) {
|
|
pixelres = new JComboBox();
|
|
pixelres.setName("pixelres");
|
|
setList(pixelres, getPixelres(display));
|
|
pixelres.addActionListener(this);
|
|
}
|
|
return pixelres;
|
|
}
|
|
/**
|
|
* This method initializes freq
|
|
*
|
|
* @return javax.swing.JComboBox
|
|
*/
|
|
private JComboBox getFreqButton(DisplayMode[] d) {
|
|
if (freq == null) {
|
|
freq = new JComboBox();
|
|
freq.setName("freq");
|
|
setList(freq, getFreq(display));
|
|
freq.addActionListener(this);
|
|
}
|
|
return freq;
|
|
}
|
|
/**
|
|
* This method initializes ok
|
|
*
|
|
* @return javax.swing.JButton
|
|
*/
|
|
private JButton getOk() {
|
|
if (ok == null) {
|
|
ok = new JButton();
|
|
ok.setText("OK");
|
|
ok.addActionListener(this);
|
|
}
|
|
return ok;
|
|
}
|
|
/**
|
|
* This method initializes cancel
|
|
*
|
|
* @return javax.swing.JButton
|
|
*/
|
|
private JButton getCancel() {
|
|
if (cancel == null) {
|
|
cancel = new JButton();
|
|
cancel.setText("Cancel");
|
|
cancel.addActionListener(this);
|
|
}
|
|
return cancel;
|
|
}
|
|
|
|
|
|
private String[] getResulution(DisplayMode[] d){
|
|
ArrayList<String> list = new ArrayList<String>();
|
|
for(int i=0; i<d.length ;i++){
|
|
if(!list.contains(d[i].getWidth()+"x"+d[i].getHeight())){
|
|
list.add(d[i].getWidth()+"x"+d[i].getHeight());
|
|
}
|
|
}
|
|
|
|
String[] res = new String[list.size()];
|
|
for(int i=0; i<list.size() ;i++){
|
|
res[i] = list.get(i);
|
|
}
|
|
Arrays.sort(res);
|
|
return res;
|
|
}
|
|
|
|
private String[] getPixelres(DisplayMode[] d){
|
|
ArrayList<String> list = new ArrayList<String>();
|
|
for(int i=0; i<d.length ;i++){
|
|
if(!list.contains(""+d[i].getBitsPerPixel())){
|
|
list.add(""+d[i].getBitsPerPixel());
|
|
}
|
|
}
|
|
|
|
String[] pixel = new String[list.size()];
|
|
for(int i=0; i<list.size() ;i++){
|
|
pixel[i] = list.get(i);
|
|
}
|
|
sortString(pixel);
|
|
return pixel;
|
|
}
|
|
|
|
private String[] getFreq(DisplayMode[] d){
|
|
ArrayList<String> list = new ArrayList<String>();
|
|
for(int i=0; i<d.length ;i++){
|
|
if(!list.contains(""+d[i].getFrequency())){
|
|
list.add(""+d[i].getFrequency());
|
|
}
|
|
}
|
|
|
|
String[] freq = new String[list.size()];
|
|
for(int i=0; i<list.size() ;i++){
|
|
freq[i] = list.get(i);
|
|
}
|
|
sortString(freq);
|
|
return freq;
|
|
}
|
|
|
|
private void setList(JComboBox box, String[] list){
|
|
box.removeAllItems();
|
|
for(int i=0; i<list.length ;i++){
|
|
box.addItem(list[i]);
|
|
}
|
|
}
|
|
|
|
private void sortString(String[] list){
|
|
for(int i=0; i<list.length ;i++){
|
|
for(int j=i; j<list.length ;j++){
|
|
if(Integer.parseInt(list[i]) > Integer.parseInt(list[j])){
|
|
String temp = list[i];
|
|
list[i] = list[j];
|
|
list[j] = temp;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|