/*
* HalfNES by Andrew Hoffman
* Licensed under the GNU GPL Version 3. See LICENSE file
*/
/*
* OptionsDialog.java
*
* Created on Jan 16, 2011, 4:21:43 PM
*/
package com.grapeshot.halfnes.ui;
import com.grapeshot.halfnes.PrefsSingleton;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
/**
*
* @author Andrew
*/
public class PreferencesDialog extends javax.swing.JDialog {
private int screenScaling;
private boolean okClicked = false;
/**
* Creates new form OptionsDialog
*/
public PreferencesDialog(java.awt.Frame parent) {
super(parent, true);
Preferences prefs = PrefsSingleton.get();
initComponents();
this.setTitle("HalfNES Preferences");
//set all of the text boxes
//aand the sound enable checkbox.
jCheckSoundEnable.setSelected(prefs.getBoolean("soundEnable", true));
jCheckSoundFiltering.setSelected(prefs.getBoolean("soundFiltering", true));
jCheckMaintainAspect.setSelected(prefs.getBoolean("maintainAspect", true));
jCheckBoxNTSC.setSelected(prefs.getBoolean("TVEmulation", false));
jCheckBoxNTView.setSelected(prefs.getBoolean("ntView", false));
jCheckBoxShowScope.setSelected(prefs.getBoolean("showScope", false));
jCheckBoxSleep.setSelected(prefs.getBoolean("Sleep", true));
jButtonOK.setActionCommand("OK");
jButtonCancel.setActionCommand("Cancel");
screenScaling = prefs.getInt("screenScaling", 2);
jSpinnerScale.setValue(screenScaling);
jSampleRateBox.setSelectedItem(Integer.toString(prefs.getInt("sampleRate", 44100)));
jCheckBoxSmoothVideo.setSelected(prefs.getBoolean("smoothScaling", false));
volumeSlider.setValue(prefs.getInt("outputvol", 13107));
jRegionBox.setSelectedIndex(prefs.getInt("region", 0));
//0-> auto, 1-> NTSC, 2-> PAL, 3-> Dendy
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
jLabel1 = new javax.swing.JLabel();
jCheckSoundEnable = new javax.swing.JCheckBox();
jButtonCancel = new javax.swing.JButton();
jButtonOK = new javax.swing.JButton();
jSampleRateBox = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();
jCheckMaintainAspect = new javax.swing.JCheckBox();
jLabel14 = new javax.swing.JLabel();
jCheckSoundFiltering = new javax.swing.JCheckBox();
jLabel15 = new javax.swing.JLabel();
volumeSlider = new javax.swing.JSlider();
jLabel17 = new javax.swing.JLabel();
jLabel18 = new javax.swing.JLabel();
jCheckBoxNTSC = new javax.swing.JCheckBox();
jLabel19 = new javax.swing.JLabel();
jSpinnerScale = new javax.swing.JSpinner();
jLabel20 = new javax.swing.JLabel();
jCheckBoxSmoothVideo = new javax.swing.JCheckBox();
jCheckBoxSleep = new javax.swing.JCheckBox();
jCheckBoxShowScope = new javax.swing.JCheckBox();
jCheckBoxNTView = new javax.swing.JCheckBox();
jLabel3 = new javax.swing.JLabel();
jRegionBox = new javax.swing.JComboBox();
setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
setName("OptionsDialog"); // NOI18N
setResizable(false);
jLabel1.setText("Screen scaling: scale up "); // NOI18N
jCheckSoundEnable.setText("Enable Sound"); // NOI18N
jButtonCancel.setText("Cancel"); // NOI18N
jButtonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCancelActionPerformed(evt);
}
});
jButtonOK.setText("OK"); // NOI18N
jButtonOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonOKActionPerformed(evt);
}
});
jSampleRateBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "16000", "24000", "44100", "48000","96000" }));
jSampleRateBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jSampleRateBoxActionPerformed(evt);
}
});
jLabel2.setText("Sample Rate:"); // NOI18N
jCheckMaintainAspect.setText("Maintain Aspect Ratio"); // NOI18N
jLabel14.setText("Sound:"); // NOI18N
jCheckSoundFiltering.setText("Enable Filtering"); // NOI18N
jCheckSoundFiltering.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckSoundFilteringActionPerformed(evt);
}
});
jLabel15.setText("Output Volume:"); // NOI18N
volumeSlider.setMajorTickSpacing(8192);
volumeSlider.setMaximum(16384);
volumeSlider.setMinorTickSpacing(4096);
volumeSlider.setPaintTicks(true);
volumeSlider.setValue(80);
jLabel17.setText("0"); // NOI18N
jLabel18.setText("100"); // NOI18N
jCheckBoxNTSC.setText("Use NTSC TV Filter (Experimental)");
jCheckBoxNTSC.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBoxNTSCActionPerformed(evt);
}
});
jLabel19.setText("Video options:"); // NOI18N
jSpinnerScale.setModel(new javax.swing.SpinnerNumberModel(2, 1, 6, 1));
jLabel20.setText("times"); // NOI18N
jCheckBoxSmoothVideo.setText("Use Smooth Scaling");
jCheckBoxSmoothVideo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBoxSmoothVideoActionPerformed(evt);
}
});
jCheckBoxSleep.setText("Sleep Between Frames");
jCheckBoxSleep.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBoxSleepActionPerformed(evt);
}
});
jCheckBoxShowScope.setText("Show Audio Output");
jCheckBoxNTView.setText("Show Nametable Viewer");
jLabel3.setText("Console Region:");
jRegionBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Auto Detect", "NTSC", "PAL", "Dendy (Hybrid)" }));
jRegionBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jRegionBoxActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jButtonOK)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonCancel))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSpinnerScale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel19)
.addComponent(jCheckBoxNTSC)
.addComponent(jCheckMaintainAspect)
.addComponent(jCheckBoxSmoothVideo)
.addComponent(jCheckBoxSleep)
.addComponent(jCheckBoxShowScope)
.addComponent(jCheckBoxNTView))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(volumeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel14)
.addComponent(jCheckSoundEnable)
.addComponent(jCheckSoundFiltering)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSampleRateBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel15)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel17)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel18))))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jRegionBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(6, 6, 6)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel14)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckSoundEnable)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckSoundFiltering)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jSampleRateBox, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3)
.addComponent(jLabel15)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(volumeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel17)
.addComponent(jLabel18)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel19)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jSpinnerScale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel20))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBoxSmoothVideo)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckMaintainAspect)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBoxNTSC)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBoxSleep)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBoxShowScope)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jCheckBoxNTView)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jRegionBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonOK)
.addComponent(jButtonCancel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButtonCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelActionPerformed
if ("Cancel".equals(evt.getActionCommand())) {
this.setVisible(false);
}
}//GEN-LAST:event_jButtonCancelActionPerformed
private void jButtonOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOKActionPerformed
// if ("OK".equals(evt.getActionCommand())) {
//here we go... save everything and hide the window
Preferences prefs = PrefsSingleton.get();
prefs.putBoolean("soundEnable", jCheckSoundEnable.isSelected());
prefs.putBoolean("soundFiltering", jCheckSoundFiltering.isSelected());
prefs.putBoolean("maintainAspect", jCheckMaintainAspect.isSelected());
prefs.putBoolean("TVEmulation", jCheckBoxNTSC.isSelected());
prefs.putBoolean("Sleep", jCheckBoxSleep.isSelected());
screenScaling = (Integer) (jSpinnerScale.getModel().getValue());
prefs.putBoolean("smoothScaling", jCheckBoxSmoothVideo.isSelected());
prefs.putBoolean("showScope", jCheckBoxShowScope.isSelected());
prefs.putBoolean("ntView", jCheckBoxNTView.isSelected());
prefs.putInt("screenScaling", screenScaling);
prefs.putInt("sampleRate", Integer.parseInt(jSampleRateBox.getSelectedItem().toString()));
prefs.putInt("outputvol", volumeSlider.getValue());
prefs.putInt("region", jRegionBox.getSelectedIndex());
try {
prefs.flush();
} catch (BackingStoreException ex) {
Logger.getLogger(PreferencesDialog.class.getName()).log(Level.SEVERE, null, ex);
}
okClicked = true;
this.setVisible(false);
// }
}//GEN-LAST:event_jButtonOKActionPerformed
public boolean okClicked() {
return okClicked;
}
private void jSampleRateBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jSampleRateBoxActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jSampleRateBoxActionPerformed
private void jCheckSoundFilteringActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckSoundFilteringActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jCheckSoundFilteringActionPerformed
private void jCheckBoxNTSCActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxNTSCActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jCheckBoxNTSCActionPerformed
private void jCheckBoxSmoothVideoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxSmoothVideoActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jCheckBoxSmoothVideoActionPerformed
private void jCheckBoxSleepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxSleepActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jCheckBoxSleepActionPerformed
private void jRegionBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRegionBoxActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jRegionBoxActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JButton jButtonCancel;
private javax.swing.JButton jButtonOK;
private javax.swing.JCheckBox jCheckBoxNTSC;
private javax.swing.JCheckBox jCheckBoxNTView;
private javax.swing.JCheckBox jCheckBoxShowScope;
private javax.swing.JCheckBox jCheckBoxSleep;
private javax.swing.JCheckBox jCheckBoxSmoothVideo;
private javax.swing.JCheckBox jCheckMaintainAspect;
private javax.swing.JCheckBox jCheckSoundEnable;
private javax.swing.JCheckBox jCheckSoundFiltering;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel18;
private javax.swing.JLabel jLabel19;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel3;
private javax.swing.JComboBox jRegionBox;
private javax.swing.JComboBox jSampleRateBox;
private javax.swing.JSpinner jSpinnerScale;
private javax.swing.JSlider volumeSlider;
// End of variables declaration//GEN-END:variables
}