/*
 * 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 ControlsDialog extends javax.swing.JDialog {

    private int[][] keys;
    private boolean okClicked = false;

    /**
     * Creates new form ControlsDialog
     */
    public ControlsDialog(java.awt.Frame parent) {
        super(parent, true);
        Preferences prefs = PrefsSingleton.get();
        int[][] keys = {{prefs.getInt("keyUp1", KeyEvent.VK_UP),
                prefs.getInt("keyDown1", KeyEvent.VK_DOWN),
                prefs.getInt("keyLeft1", KeyEvent.VK_LEFT),
                prefs.getInt("keyRight1", KeyEvent.VK_RIGHT),
                prefs.getInt("keyA1", KeyEvent.VK_X),
                prefs.getInt("keyB1", KeyEvent.VK_Z),
                prefs.getInt("keySelect1", KeyEvent.VK_SHIFT),
                prefs.getInt("keyStart1", KeyEvent.VK_ENTER),}, {
                prefs.getInt("keyUp2", KeyEvent.VK_W),
                prefs.getInt("keyDown2", KeyEvent.VK_S),
                prefs.getInt("keyLeft2", KeyEvent.VK_A),
                prefs.getInt("keyRight2", KeyEvent.VK_D),
                prefs.getInt("keyA2", KeyEvent.VK_G),
                prefs.getInt("keyB2", KeyEvent.VK_F),
                prefs.getInt("keySelect2", KeyEvent.VK_R),
                prefs.getInt("keyStart2", KeyEvent.VK_T)}};
        this.keys = keys;
        initComponents();
        this.setTitle("HalfNES Controller Settings");
        //set all of the text boxes
        jField1Up.setText(KeyEvent.getKeyText(keys[0][0]));
        jField1Down.setText(KeyEvent.getKeyText(keys[0][1]));
        jField1Left.setText(KeyEvent.getKeyText(keys[0][2]));
        jField1Right.setText(KeyEvent.getKeyText(keys[0][3]));
        jField1A.setText(KeyEvent.getKeyText(keys[0][4]));
        jField1B.setText(KeyEvent.getKeyText(keys[0][5]));
        jField1Select.setText(KeyEvent.getKeyText(keys[0][6]));
        jField1Start.setText(KeyEvent.getKeyText(keys[0][7]));

        jField2Up.setText(KeyEvent.getKeyText(keys[1][0]));
        jField2Down.setText(KeyEvent.getKeyText(keys[1][1]));
        jField2Left.setText(KeyEvent.getKeyText(keys[1][2]));
        jField2Right.setText(KeyEvent.getKeyText(keys[1][3]));
        jField2A.setText(KeyEvent.getKeyText(keys[1][4]));
        jField2B.setText(KeyEvent.getKeyText(keys[1][5]));
        jField2Select.setText(KeyEvent.getKeyText(keys[1][6]));
        jField2Start.setText(KeyEvent.getKeyText(keys[1][7]));
        //set the controller text if we've detected some
        String ctrl1 = prefs.get("controller0", "");
        String ctrl2 = prefs.get("controller1", "");
        if (!ctrl1.isEmpty()) {
            jLabelCtrl1.setText(ctrl1);
        }
        if (!ctrl2.isEmpty()) {
            jLabelCtrl2.setText(ctrl2);
        }
        jButtonOK.setActionCommand("OK");
        jButtonCancel.setActionCommand("Cancel");
    }

    /**
     * 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();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jLabel13 = new javax.swing.JLabel();
        jField1Up = new javax.swing.JTextField();
        jField1Down = new javax.swing.JTextField();
        jField1Right = new javax.swing.JTextField();
        jField1Left = new javax.swing.JTextField();
        jField1Start = new javax.swing.JTextField();
        jField1Select = new javax.swing.JTextField();
        jField1B = new javax.swing.JTextField();
        jField1A = new javax.swing.JTextField();
        jField2Up = new javax.swing.JTextField();
        jField2Down = new javax.swing.JTextField();
        jField2Left = new javax.swing.JTextField();
        jField2Right = new javax.swing.JTextField();
        jField2A = new javax.swing.JTextField();
        jField2B = new javax.swing.JTextField();
        jField2Select = new javax.swing.JTextField();
        jField2Start = new javax.swing.JTextField();
        jButtonCancel = new javax.swing.JButton();
        jButtonOK = new javax.swing.JButton();
        jLabel16 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabelCtrl1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jLabelCtrl2 = new javax.swing.JLabel();

        setModalityType(java.awt.Dialog.ModalityType.APPLICATION_MODAL);
        setName("ControlsDialog"); // NOI18N
        setResizable(false);

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel3.setText("Keybindings:"); // NOI18N

        jLabel4.setText("Controller 1"); // NOI18N

        jLabel5.setText("Controller 2"); // NOI18N

        jLabel6.setText("Up"); // NOI18N

        jLabel7.setText("Down"); // NOI18N

        jLabel8.setText("Left"); // NOI18N

        jLabel9.setText("Right"); // NOI18N

        jLabel10.setText("A"); // NOI18N

        jLabel11.setText("B"); // NOI18N

        jLabel12.setText("Select"); // NOI18N

        jLabel13.setText("Start"); // NOI18N

        jField1Up.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Up.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jField2StartActionPerformed(evt);
            }
        });
        jField1Up.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1UpKeyReleased(evt);
            }
        });

        jField1Down.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Down.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jField2StartActionPerformed(evt);
            }
        });
        jField1Down.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1DownKeyReleased(evt);
            }
        });

        jField1Right.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Right.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jField2StartActionPerformed(evt);
            }
        });
        jField1Right.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1RightKeyReleased(evt);
            }
        });

        jField1Left.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Left.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jField2StartActionPerformed(evt);
            }
        });
        jField1Left.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1LeftKeyReleased(evt);
            }
        });

        jField1Start.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Start.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1StartKeyReleased(evt);
            }
        });

        jField1Select.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1Select.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1SelectKeyReleased(evt);
            }
        });

        jField1B.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1B.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1BKeyReleased(evt);
            }
        });

        jField1A.setMinimumSize(new java.awt.Dimension(120, 20));
        jField1A.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField1AKeyReleased(evt);
            }
        });

        jField2Up.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Up.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2UpKeyReleased(evt);
            }
        });

        jField2Down.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Down.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2DownKeyReleased(evt);
            }
        });

        jField2Left.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Left.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2LeftKeyReleased(evt);
            }
        });

        jField2Right.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Right.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2RightKeyReleased(evt);
            }
        });

        jField2A.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2A.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2AKeyReleased(evt);
            }
        });

        jField2B.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2B.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2BKeyReleased(evt);
            }
        });

        jField2Select.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Select.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2SelectKeyReleased(evt);
            }
        });

        jField2Start.setMinimumSize(new java.awt.Dimension(120, 20));
        jField2Start.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jField2StartKeyReleased(evt);
            }
        });

        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);
            }
        });

        jLabel16.setText(" Click in text box and type a key to change that binding."); // NOI18N

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel1.setText("Detected Game Controllers:");

        jLabelCtrl1.setText("No Player 1 controller connected");
        jLabelCtrl1.setEnabled(false);

        jButton1.setText("Set Buttons");
        jButton1.setEnabled(false);
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("Set Buttons");
        jButton2.setEnabled(false);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jLabelCtrl2.setText("No Player 2 controller connected");
        jLabelCtrl2.setEnabled(false);

        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(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel16)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(49, 49, 49)
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel5))
                    .addComponent(jLabel3)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel7)
                            .addComponent(jLabel8)
                            .addComponent(jLabel9)
                            .addComponent(jLabel10)
                            .addComponent(jLabel11)
                            .addComponent(jLabel13)
                            .addComponent(jLabel6)
                            .addComponent(jLabel12))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jField1Right, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1Left, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1B, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1A, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1Start, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1Select, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1Up, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField1Down, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jField2Select, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2B, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2Start, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2A, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2Right, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2Up, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2Down, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jField2Left, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(jButtonOK, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jButtonCancel))
                        .addGroup(layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabelCtrl1)
                                .addComponent(jLabelCtrl2))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jButton2)
                                .addComponent(jButton1))))))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jField1A, jField1B, jField1Down, jField1Left, jField1Right, jField1Select, jField1Start, jField1Up, jField2A, jField2B, jField2Down, jField2Left, jField2Right, jField2Select, jField2Start, jField2Up});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jField2Up, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jLabel6)
                                    .addComponent(jField1Up, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jField1Down, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel7))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jField1Left, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel8))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jField1Right, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel9)
                                    .addComponent(jField2Right, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(jField1A, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel10)
                                    .addComponent(jField2A, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(31, 31, 31)
                                .addComponent(jField2Down, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jField2Left, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jField1B, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel11)
                            .addComponent(jField2B, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jField1Select, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel12)
                            .addComponent(jField2Select, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jField1Start, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel13)
                            .addComponent(jField2Start, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCtrl1)
                    .addComponent(jButton2))
                .addGap(12, 12, 12)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCtrl2)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonOK)
                    .addComponent(jButtonCancel))
                .addGap(0, 8, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jField1A, jField1B, jField1Down, jField1Left, jField1Right, jField1Select, jField1Start, jField1Up, jField2A, jField2B, jField2Down, jField2Left, jField2Right, jField2Select, jField2Start, jField2Up});

        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.putInt("keyUp1", keys[0][0]);
        prefs.putInt("keyDown1", keys[0][1]);
        prefs.putInt("keyLeft1", keys[0][2]);
        prefs.putInt("keyRight1", keys[0][3]);
        prefs.putInt("keyA1", keys[0][4]);
        prefs.putInt("keyB1", keys[0][5]);
        prefs.putInt("keySelect1", keys[0][6]);
        prefs.putInt("keyStart1", keys[0][7]);
        prefs.putInt("keyUp2", keys[1][0]);
        prefs.putInt("keyDown2", keys[1][1]);
        prefs.putInt("keyLeft2", keys[1][2]);
        prefs.putInt("keyRight2", keys[1][3]);
        prefs.putInt("keyA2", keys[1][4]);
        prefs.putInt("keyB2", keys[1][5]);
        prefs.putInt("keySelect2", keys[1][6]);
        prefs.putInt("keyStart2", keys[1][7]);
        try {
            prefs.flush();
        } catch (BackingStoreException ex) {
            Logger.getLogger(ControlsDialog.class.getName()).log(Level.SEVERE, null, ex);
        }
        okClicked = true;
        this.setVisible(false);
        //   }
    }//GEN-LAST:event_jButtonOKActionPerformed
    public boolean okClicked() {
        return okClicked;
    }
    private void jField1UpKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1UpKeyReleased
        int k = evt.getKeyCode();
        jField1Up.setText(KeyEvent.getKeyText(k));
        keys[0][0] = k;
    }//GEN-LAST:event_jField1UpKeyReleased

    private void jField1DownKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1DownKeyReleased
        int k = evt.getKeyCode();
        jField1Down.setText(KeyEvent.getKeyText(k));
        keys[0][1] = k;
    }//GEN-LAST:event_jField1DownKeyReleased

    private void jField1LeftKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1LeftKeyReleased
        int k = evt.getKeyCode();
        jField1Left.setText(KeyEvent.getKeyText(k));
        keys[0][2] = k;
    }//GEN-LAST:event_jField1LeftKeyReleased

    private void jField1RightKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1RightKeyReleased
        int k = evt.getKeyCode();
        jField1Right.setText(KeyEvent.getKeyText(k));
        keys[0][3] = k;
    }//GEN-LAST:event_jField1RightKeyReleased

    private void jField2StartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jField2StartActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jField2StartActionPerformed

    private void jField1AKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1AKeyReleased
        int k = evt.getKeyCode();
        jField1A.setText(KeyEvent.getKeyText(k));
        keys[0][4] = k;
    }//GEN-LAST:event_jField1AKeyReleased

    private void jField1BKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1BKeyReleased
        int k = evt.getKeyCode();
        jField1B.setText(KeyEvent.getKeyText(k));
        keys[0][5] = k;
    }//GEN-LAST:event_jField1BKeyReleased

    private void jField1SelectKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1SelectKeyReleased
        int k = evt.getKeyCode();
        jField1Select.setText(KeyEvent.getKeyText(k));
        keys[0][6] = k;
    }//GEN-LAST:event_jField1SelectKeyReleased

    private void jField1StartKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField1StartKeyReleased
        int k = evt.getKeyCode();
        jField1Start.setText(KeyEvent.getKeyText(k));
        keys[0][7] = k;
    }//GEN-LAST:event_jField1StartKeyReleased

    private void jField2UpKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2UpKeyReleased
        int k = evt.getKeyCode();
        jField2Up.setText(KeyEvent.getKeyText(k));
        keys[1][0] = k;
    }//GEN-LAST:event_jField2UpKeyReleased

    private void jField2StartKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2StartKeyReleased
        int k = evt.getKeyCode();
        jField2Start.setText(KeyEvent.getKeyText(k));
        keys[1][7] = k;
    }//GEN-LAST:event_jField2StartKeyReleased

    private void jField2DownKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2DownKeyReleased
        int k = evt.getKeyCode();
        jField2Down.setText(KeyEvent.getKeyText(k));
        keys[1][1] = k;
    }//GEN-LAST:event_jField2DownKeyReleased

    private void jField2LeftKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2LeftKeyReleased
        int k = evt.getKeyCode();
        jField2Left.setText(KeyEvent.getKeyText(k));
        keys[1][2] = k;
    }//GEN-LAST:event_jField2LeftKeyReleased

    private void jField2RightKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2RightKeyReleased
        int k = evt.getKeyCode();
        jField2Right.setText(KeyEvent.getKeyText(k));
        keys[1][3] = k;
    }//GEN-LAST:event_jField2RightKeyReleased

    private void jField2AKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2AKeyReleased
        int k = evt.getKeyCode();
        jField2A.setText(KeyEvent.getKeyText(k));
        keys[1][4] = k;
    }//GEN-LAST:event_jField2AKeyReleased

    private void jField2BKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2BKeyReleased
        int k = evt.getKeyCode();
        jField2B.setText(KeyEvent.getKeyText(k));
        keys[1][5] = k;
    }//GEN-LAST:event_jField2BKeyReleased

    private void jField2SelectKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jField2SelectKeyReleased
        int k = evt.getKeyCode();
        jField2Select.setText(KeyEvent.getKeyText(k));
        keys[1][6] = k;
    }//GEN-LAST:event_jField2SelectKeyReleased

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jButton2ActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButtonCancel;
    private javax.swing.JButton jButtonOK;
    private javax.swing.JTextField jField1A;
    private javax.swing.JTextField jField1B;
    private javax.swing.JTextField jField1Down;
    private javax.swing.JTextField jField1Left;
    private javax.swing.JTextField jField1Right;
    private javax.swing.JTextField jField1Select;
    private javax.swing.JTextField jField1Start;
    private javax.swing.JTextField jField1Up;
    private javax.swing.JTextField jField2A;
    private javax.swing.JTextField jField2B;
    private javax.swing.JTextField jField2Down;
    private javax.swing.JTextField jField2Left;
    private javax.swing.JTextField jField2Right;
    private javax.swing.JTextField jField2Select;
    private javax.swing.JTextField jField2Start;
    private javax.swing.JTextField jField2Up;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLabel jLabelCtrl1;
    private javax.swing.JLabel jLabelCtrl2;
    // End of variables declaration//GEN-END:variables
}