// QueuePanel.java

package lab07;

import java.awt.*;
import javax.swing.*;

/**
 * This panel corresponds to the Queue tab in the tabbed pane.
 * 
 * @author J.K. Daugherty
 */
public class QueuePanel extends JPanel {
    private JFrame frame;               // Toplevel window

    private Queue queue = new Queue();
    private DisplayPanel display = new DisplayPanel (queue);
    
    private JButton btnAdd;
    private JButton btnExit;
    private JButton btnRemove;
    private JButton btnClear;
    private JTextField fldAdd;
    private JTextField fldSize;
    private JTextField fldRemove;
    private JPanel controlPanel;
    private JPanel statusPanel;
    private JLabel lblSize;

    public QueuePanel (JFrame frame) {
        this.frame = frame;
        initComponents();
    }

    private void initComponents() {
        controlPanel = new JPanel();
        fldAdd = new JTextField();
        btnAdd = new JButton();
        fldRemove = new JTextField();
        btnRemove = new JButton();
        btnClear = new JButton();
        btnExit = new JButton();
        statusPanel = new JPanel();
        lblSize = new JLabel();
        fldSize = new JTextField();
        fldSize.setText("" + queue.size());

        controlPanel.setBackground(new java.awt.Color(255, 255, 255));
        fldAdd.setColumns(5);
        fldAdd.setToolTipText("Enter name  to be added");
        fldAdd.setPreferredSize(new java.awt.Dimension(66, 28));
        fldAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fldAddActionPerformed(evt);
            }
        });
        controlPanel.add(fldAdd);

        btnAdd.setText("Add");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });
        controlPanel.add(btnAdd);

        fldRemove.setColumns(5);
        fldRemove.setEditable(false);
        fldRemove.setPreferredSize(new java.awt.Dimension(66, 28));
        controlPanel.add(fldRemove);

        btnRemove.setText("Remove");
        btnRemove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRemoveActionPerformed(evt);
            }
        });
        controlPanel.add(btnRemove);

        btnClear.setText("Clear");
        btnClear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnClearActionPerformed(evt);
            }
        });
        controlPanel.add(btnClear);

        btnExit.setText("Exit");
        btnExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExitActionPerformed(evt);
            }
        });
        controlPanel.add(btnExit);

        statusPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 10, 5));

        statusPanel.setBackground(new java.awt.Color(255, 255, 255));
        lblSize.setHorizontalAlignment(SwingConstants.RIGHT);
        lblSize.setText("Current size:");
        statusPanel.add(lblSize);

        fldSize.setColumns(2);
        fldSize.setEditable(false);
        fldSize.setFont(
                new java.awt.Font("Microsoft Sans Serif", 1, 13));
        fldSize.setHorizontalAlignment(JTextField.RIGHT);
        fldSize.setText("0");
        fldSize.setPreferredSize(new java.awt.Dimension(35, 20));
        statusPanel.add(fldSize);

        setLayout (new BorderLayout());
        add (statusPanel, BorderLayout.NORTH);
        add (display, BorderLayout.CENTER);
        add (controlPanel, BorderLayout.SOUTH);
    }

    private void fldAddActionPerformed(java.awt.event.ActionEvent evt) {
        addItem();
    }

    private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
        queue.removeAll();
        fldSize.setText("" + queue.size());
        fldAdd.setText("");
        fldRemove.setText("");
        display.repaint();
    }

    private void btnExitActionPerformed(java.awt.event.ActionEvent evt) {
        frame.dispose();
        //System.exit(0);
    }

    private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {
       try {
            String temp = (String) queue.remove();
            fldRemove.setText (temp);
            fldSize.setText ("" + queue.size());
            display.repaint();
        }
        catch (IllegalStateException e) {
            fldRemove.setText ("");
             JOptionPane.showMessageDialog (this, e.getMessage());
        }
    }

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
        addItem();
    }
    
    private void addItem () {
        queue.add (fldAdd.getText());
        fldAdd.setText("");
        fldSize.setText("" + queue.size());
        display.repaint();
    }
}
