/* MainFrame.java */

package distributedwave;

/** The main frame for displaying the wave and controls
 *
 * @author Russell C. Bjork
 */
public class MainFrame extends javax.swing.JFrame {
    
    /** Constructor
     *
     *  @param wave the wave to be displayed
     */
    public MainFrame(DistributedWave wave)
    {
        this.wave = wave;
        initComponents();
        wavePanel.add(new WaveDisplay(wave));
        propagateForeverCheckboxStateChanged(null);
        pack();
    }
    
    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        wavePanel = new javax.swing.JPanel();
        buttonPanel = new javax.swing.JPanel();
        leftToRightButton = new javax.swing.JButton();
        rightToLeftButton = new javax.swing.JButton();
        propagateForeverPanel = new javax.swing.JPanel();
        propagateForeverCheckbox = new javax.swing.JCheckBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridBagLayout());
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.insets = new java.awt.Insets(15, 15, 5, 15);
        getContentPane().add(wavePanel, gridBagConstraints);

        leftToRightButton.setText("Start Left to Right Wave");
        leftToRightButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                leftToRightButtonActionPerformed(evt);
            }
        });
        buttonPanel.add(leftToRightButton);

        rightToLeftButton.setText("Start Right to Left Wave");
        rightToLeftButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rightToLeftButtonActionPerformed(evt);
            }
        });
        buttonPanel.add(rightToLeftButton);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.insets = new java.awt.Insets(5, 15, 5, 15);
        getContentPane().add(buttonPanel, gridBagConstraints);

        propagateForeverCheckbox.setText("Keep propagating a wave forever");
        propagateForeverCheckbox.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                propagateForeverCheckboxStateChanged(evt);
            }
        });
        propagateForeverPanel.add(propagateForeverCheckbox);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.insets = new java.awt.Insets(5, 15, 15, 15);
        getContentPane().add(propagateForeverPanel, gridBagConstraints);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void leftToRightButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_leftToRightButtonActionPerformed
        new Thread() {
            public void run()
            {
                wave.doWave(DistributedWave.LEFT, null);
            }
        }.start();
    }//GEN-LAST:event_leftToRightButtonActionPerformed

    private void rightToLeftButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rightToLeftButtonActionPerformed
        new Thread() {
            public void run()
            {
                wave.doWave(DistributedWave.RIGHT, null);
            }
        }.start();

    }//GEN-LAST:event_rightToLeftButtonActionPerformed

    private void propagateForeverCheckboxStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_propagateForeverCheckboxStateChanged
        wave.setPropagateForever(propagateForeverCheckbox.isSelected());
    }//GEN-LAST:event_propagateForeverCheckboxStateChanged
        
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel buttonPanel;
    private javax.swing.JButton leftToRightButton;
    private javax.swing.JCheckBox propagateForeverCheckbox;
    private javax.swing.JPanel propagateForeverPanel;
    private javax.swing.JButton rightToLeftButton;
    private javax.swing.JPanel wavePanel;
    // End of variables declaration//GEN-END:variables
    
    private DistributedWave wave;
}
