import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MultiFrame extends Frame 
{

    private static int instancesOpen;
    private static int instancesTotal;


    /** A static Method that returns 
	the value of a static variable */
    public static int getInstancesOpen() {
	return instancesOpen;
    }



    /** Constructor*/
    public MultiFrame () {
	super("Frame "+instancesTotal);
	instancesTotal++;
	instancesOpen++;
	setBounds(50*instancesTotal,50*instancesTotal,400,300);
	

	// MenuBar
	MenuBar mb = new MenuBar();
	Menu m = new Menu("File");
	mb.add(m);
	
	MenuItem newItem = new MenuItem("New");
	m.add(newItem);
	newItem.addActionListener( new ActionListener() { 
		public void actionPerformed(ActionEvent e){
		    newDocument();
		}
	    });
	
	MenuItem close = new MenuItem("Close");
	m.add(close);
	close.addActionListener( new ActionListener() { 
		public void actionPerformed(ActionEvent e){
		    closeDocument();
		}
	    });
	
	MenuItem quit = new MenuItem("Quit");
	m.add(quit);
	quit.addActionListener( new ActionListener() { 
		public void actionPerformed(ActionEvent e){
		    quitProgram();
		}
	    });
	
	setMenuBar(mb);

	addWindowListener( new WindowAdapter() {
		public void WindowClosing (WindowEvent e) {
		    quitProgram();
		}
	    });

    }

    /** opens a new Frame */
    private void newDocument() {
	MultiFrame newWindow = new MultiFrame();
	newWindow.setVisible(true);
    }


    /** closes this Frame */
    private void closeDocument() {

	QuestionDialog frage = new QuestionDialog(this, "Close this Window?");
	frage.show();
	int state = frage.getSelection();
	frage.dispose();

	if (state==QuestionDialog.YES)	    
	    {
		instancesOpen--;
		dispose();
	    }
	
    }

    /** quits the program */
    private void quitProgram () {
	QuestionDialog frage = new QuestionDialog(this, getInstancesOpen() + 
						  " Windows open.\nQuit and close all?");
	frage.show();
	int state = frage.getSelection();
	frage.dispose();

	if (state==QuestionDialog.YES)	    
	    System.exit(0);
    }


    public static void main(String[] argv) {
	MultiFrame mainWindow = new MultiFrame();
	mainWindow.setVisible(true);
    }
}

