// ShapesWindow2.java

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

// Uses ActionListener classes defined in:
//    FileOpener.java
//    Quitter.java
//    AdderOfOneEnteredShape.java

public class ShapesWindow2 extends JFrame
{
   // To store ShapeOutline data:
   private ShapeBoundedBuffer shapes;

   // Menu items:
   private JMenuItem mOpen;
   private JMenuItem mQuit;
   private JMenuItem mAdd;

   // Displayed regions of the window:
   private JTextField messageField;
   private JTextArea shapesTextArea;
   private ShapesPanel shapesDisplay;

   public ShapesWindow2()
   {
      shapes = new ShapeBoundedBuffer(5);

      //  Create menu items for the "File" menu:
      mOpen = new JMenuItem ("Open");
      mQuit = new JMenuItem ("Quit");

      //  Create "File" menu:
      JMenu fileMenu = new JMenu ("File", /*tearoff =*/ false);
      fileMenu.add(mOpen);
      fileMenu.addSeparator();
      fileMenu.add(mQuit);

      //  Create menu items for the "Edit" menu:
      mAdd = new JMenuItem ("Add");

      //  Create "Edit" menu:
      JMenu editMenu = new JMenu ("Edit", /*tearoff =*/ false);
      editMenu.add(mAdd);

      // Create menu bar:
      JMenuBar mainMenuBar = new JMenuBar();
      mainMenuBar.add(fileMenu);
      mainMenuBar.add(editMenu);

      // Put menu bar on this window:
      setJMenuBar(mainMenuBar);

      // Enable this window to respond when menu items are clicked:
      mOpen.addActionListener(new FileOpener(this, shapes));
      mQuit.addActionListener(new Quitter());
      mAdd.addActionListener(new AdderOfOneEnteredShape(this,
                                                        shapes));
      // mAdd.addActionListener(new AdderOfOneEnteredShape2(this,
      //                                                    shapes));

      // Note that mAdd should have only one ActionListener.
      // Exactly one of the above addActionListener statements
      // for mAdd should be uncommented.

      // Components to display on window:
      messageField = new JTextField();
      messageField.setEditable(false);
      shapesTextArea = new JTextArea();
      shapesTextArea.setEditable(false);
      shapesDisplay = new ShapesPanel(shapes);
      
      // Arrange components on window:
      Container contentPane = getContentPane();
      contentPane.add(messageField, BorderLayout.SOUTH);
      JPanel centerPanel = new JPanel();
      contentPane.add(centerPanel, BorderLayout.CENTER);
      centerPanel.setLayout(new GridLayout(2,1));
      centerPanel.add(shapesDisplay);
      centerPanel.add(new JScrollPane(shapesTextArea));

      // Routine necessities with JFrame windows:
      setSize(600, 400);
      setLocation(100, 50);
      setTitle("Interactive GUI example");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setVisible(true);
   } // constructor

   void updateDisplay()
   {
      String lineBreak = System.getProperty("line.separator");

      shapesTextArea.setText("");
      for ( int i = 0; i < shapes.getLengthFilled(); i++ )
         shapesTextArea.append(shapes.getShapeAt(i) + lineBreak);

      messageField.setText("Created so far:  "
                           + RightTriangle.getCount()
                           + " right triangles, "
                           + Wheel.getCount() + " wheels, "
                           + (Circle.getCount() - Wheel.getCount())
                           + " non-wheel circles, "
                           + ShapeOutline.getCount()
                           + " shapes total.");

      repaint();  // to force shapes display panel to update
   }  // method updateDisplay;

   public static void main(String[] args)
   {
      new ShapesWindow2();
   }  // method main
} // class ShapesWindow2