package view;

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

/****
 *
 * Class ViewMenu is the "View" pulldown menu in the CalendarToolUI prototype.
 * Anonymous instances of JMenuItem are defined for each item in the menu.
 *                                                                           <p>
 * The constructor for this class receives a reference to the containing
 * ViewUI.  It uses this reference to access the dialogs that ViewUI
 * constructs.  Since this class and ViewUI are in the same package, it has
 * access to its protected data fields.  This is not the best practice for info
 * hiding, but it's fine in a rapid prototype.
 *                                                                           <p>
 * In the current prototype, only the Month and Lists->Appointments items have
 * an action listener that brings up a dialog.  The other items just print a
 * message to stdout.
 *                                                                           <p>
 * See <a href=FileMenu.html>FileMenu.java</a> documentation for further
 * discussion on setting up menu items.  See <a href=PrintOnlyMenuItem.html>
 * documentation for a description of the convenience class that constructs
 * menu items that do nothing but print a message to stdout.
 *
 */
public class ViewMenu extends JMenu {

    /**
     * Construct this by inserting each of its items, which are Item through.
     * Calendars.  A JSepartor goes between item groupings, as shown in the
     * requirements.
     *                                                                       <p>
     * The input parameter is used to reference the dialogs that ViewUI
     * creates.  Note that it must be declared final, since it is referenced
     * inside an anonymous inner class.
     */
    public ViewMenu(final ViewUI viewUI) {
        super("View");

        add(new PrintOnlyMenuItem("View", "Item"));
        add(new PrintOnlyMenuItem("View", "Day"));
        add(new PrintOnlyMenuItem("View", "Week"));

        add(new JMenuItem("Month")).addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    viewUI.monthlyAgendaDisplay.setVisible(true);
                }
            }
        );

        add(new PrintOnlyMenuItem("View", "Year"));
        add(new JSeparator());
        add(new PrintOnlyMenuItem("View", "Next"));
        add(new PrintOnlyMenuItem("View", "Previous"));
        add(new PrintOnlyMenuItem("View", "Today"));
        add(new PrintOnlyMenuItem("View", "Goto Date ..."));
        add(new JSeparator());

        add(constructListsSubmenu(viewUI));

        add(new PrintOnlyMenuItem("View", "Filter ..."));
        add(new JSeparator());
        add(new PrintOnlyMenuItem("View", "Other User ..."));
        add(new PrintOnlyMenuItem("View", "Group ..."));
        add(new JSeparator());
        add(new PrintOnlyMenuItem("View", "Windows ->"));
        add(new PrintOnlyMenuItem("View", "Calendars ->"));
    }


    /**
     * Construct the pull-right submenu that appears under "Lists ->".  As
     * explained in the 308 lecture notes, adding a JMenu to another JMenu
     * automatically makes the added menu a pull-right style submenu.
     */
    JMenu constructListsSubmenu(final ViewUI viewUI) {
        JMenu menu = new JMenu("Lists");

        menu.add(new JMenuItem("Appointments")).addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    viewUI.appointmentsListDisplay.setVisible(true);
                    viewUI.appointmentsListDisplay.
                        setLocation(new Point(75, 150));
                }
            }
        );

        menu.add(new PrintOnlyMenuItem("View", "Meetings"));
        menu.add(new PrintOnlyMenuItem("View", "Tasks"));
        menu.add(new PrintOnlyMenuItem("View", "Events"));
        menu.add(new PrintOnlyMenuItem("View", "All Items"));
        menu.add(new PrintOnlyMenuItem("View", "Custom ->"));

        return menu;
    }
}