// File:  MenusDemos\MenusDemo.java

// Show how to set up menus
// Show how to use the AWT FileDialog

import java.awt.*;
import java.awt.event.*;

public class MenusDemo extends Frame {

    // Set up the Menu Bar; initializing the File and Help menus
    public MenusDemo() {
        super("Demo Menu Bar Using Swing");
        setMenuBar(mBar);
        initFileMenu();
        initHelpMenu();
    }

    public void paint(Graphics g) {
        if (sMsg1 != null || sMsg2 != null) {
            g.drawString("Status:", 30, 160);
            g.drawString(sMsg1, 40, 180);
            g.drawString(sMsg2, 40, 200);
        }
    }

    // Set up the File Menu
    private void initFileMenu() {
        fileMenu = new Menu("File");
        mBar.add(fileMenu);

        newItem = new MenuItem("New");
        newItem.addActionListener(new NewHandler());
        newItem.setEnabled(true);
        fileMenu.add(newItem);

        openItem = new MenuItem("Open...");
        openItem.addActionListener(new OpenHandler());
        openItem.setEnabled(true);
        fileMenu.add(openItem);

        saveItem = new MenuItem("Save");
        saveItem.setEnabled(false);
        fileMenu.add(saveItem);

        saveItem = new MenuItem("Save As...");
        saveItem.setEnabled(false);
        fileMenu.add(saveItem);

        fileMenu.addSeparator();

        exitItem = new MenuItem("Exit");
        exitItem.addActionListener(new exitHandler());
        exitItem.setEnabled(true);
        fileMenu.add(exitItem);
    }

    // Define the listener for the 'new' button
    private class NewHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            setMessage("New");
            final SimpleDialog sd = new SimpleDialog(md, "Simple Dialog Box");

            sd.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    sd.dispose();
                }
            });

            // Locate the dialog in the center of the applet's display area
            Point p = getLocationOnScreen();
            int x = p.x + (WIDTH  - sd.WIDTH)/2;
            int y = p.y + (HEIGHT - sd.HEIGHT)/2 + 20;
            sd.setLocation(x, y);
            sd.setVisible(true);
        }
    }

    private class OpenHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            FileDialog fd = new FileDialog(md, "Open", FileDialog.LOAD);
            fd.setVisible(true);
            // Retrieve the selected file name and path (directory)
            String sFile = fd.getFile();
            String sPath = fd.getDirectory();
            setMessage((sFile != null) ? "Open " + sFile + " | " + sPath
                                       : "Open");
        }
    }

    private class exitHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            setMessage("Exit");
            System.exit(0);
        }
    }

    // Set up the Help Menu
    private void initHelpMenu() {
        helpMenu = new Menu("Help");
        mBar.add(helpMenu);

        helpItem = new MenuItem("Help");
        helpItem.addActionListener(new HelpHandler());
        helpItem.setEnabled(true);
        helpMenu.add(helpItem);

        helpMenu.addSeparator();

        debugItem = new CheckboxMenuItem("Debug");
        debugItem.addItemListener(new DebugListener());
        helpMenu.add(debugItem);

        testItem = new CheckboxMenuItem("Test");
        testItem.addItemListener(new TestListener());
        testItem.setState(true);
        helpMenu.add(testItem);
    }

    private class HelpHandler implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.out.println("This is HELP...");
        }
    }

    private class DebugListener implements ItemListener {
        public void itemStateChanged(ItemEvent e) {
            setMessage("Debug");
        }
    }

    private class TestListener implements ItemListener {
        public void itemStateChanged(ItemEvent e) {
            setMessage("Test");
        }
    }

    private void setMessage(String s) {
        sMsg1 = s;
        sMsg2 = "Debug=" + (debugItem.getState() ? "On" : "Off") + "  "
              + "Test="  + (testItem.getState()  ? "On" : "Off");
        md.repaint();
    }

    public static void main(String[] args) {
        md = new MenusDemo();
        md.setSize(WIDTH, HEIGHT);
        md.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        md.setVisible(true);
    }

    private static final int WIDTH  = 500;
    private static final int HEIGHT = 275;
    private static MenusDemo md;
    private MenuBar mBar = new MenuBar();
    private Menu fileMenu, helpMenu;
    private MenuItem newItem, openItem, saveItem, exitItem, helpItem;
    private CheckboxMenuItem debugItem, testItem;
    private String sMsg1, sMsg2;
    private static final long serialVersionUID = 1L;
}
