
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.util.Hashtable;


import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

/** 
  The main application frame. Contains all of the interface
  components (Desktop Manager, Desktop, Toolbar, menus, etc)
  that are used in the application.
  <br><br><a href="../source/MozartFrame.java">View Source File</a>
*/
public class MozartFrame extends JFrame {
  
  private DesktopManager manager;
  private JDesktopPane desktop;
  private MozartToolbar toolbar;
  protected Mozart mozart;

  /**
    Initialize a new application frame.
    The constructor creates all of the menus and 
    initializes the toolbar. It also adds all of the
    currently supported actions (all five of them).
  */
  public MozartFrame(Mozart mozart) {
    super("Mozart");

    this.mozart = mozart;
    MozartActions actions = mozart.getActions();
    
    // Set up the toolbar
    toolbar = new MozartToolbar(mozart);
    getContentPane().add(toolbar, BorderLayout.NORTH);

    // Setup the desktop
    desktop = new JDesktopPane();
    getContentPane().add(desktop, "Center");
    manager = new DefaultDesktopManager() {
      public void activateFrame(JInternalFrame f) {
	super.activateFrame(f);
	//System.out.println(f);
      }
    };

    desktop.setDesktopManager(manager);

    /* Setup the menubar (I could have made a menubar class,
    but that would have been a little much, I think) */

    JMenuBar menubar = new JMenuBar();
    setJMenuBar(menubar);

    menubar.add(new FileMenu(mozart));
    menubar.add(new EditMenu(mozart));
    menubar.add(new InsertMenu(mozart));
    menubar.add(new FormatMenu(mozart));
    menubar.add(new TableMenu(mozart));
    menubar.add(new WindowMenu(mozart));
    menubar.add(new HelpMenu(mozart));
        
    // This window listener just listens for closing events
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent e) {
	//System.out.println(e);
	close();
      }
    });

    setSize(640,480);
    show();
  }

  /**
    Add MozartInternalFrames to the frame. Also a good place
    to manage any InternalFrames (count, list, etc).
  */
  public void addToDesktop(JInternalFrame internalFrame) {
    desktop.add(internalFrame);
    internalFrame.show();
    ((MozartInternalFrame) internalFrame).showProperties();
  }
  
  /** Return the desktop for this frame */
  public JDesktopPane getDesktop() {
    return desktop;
  }

  /** Pretty obvious. */
  public void close() {
    mozart.quit();
  }
}
