content: /*
   * 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
  }
  