/* 
 *	Copyright (c) 1997-98 
 *	NorthEast Parallel Architectures Center, Syracuse University. 
 * All Rights Reserved. Permission to use, copy, modify, and distribute this
 * software and its documentation for educational, research and non-profit
 * purposes, without fee, and without a written agreement is hereby granted,
 * provided that the above copyright notice and this paragraph appear in all
 * copies. Permission to incorporate this software into commercial products may
 * be obtained by contacting the NorthEast Parallel Architectures Center. 
 *
 * The software program and documentation are supplied "as is",
 * without any accompanying services from NPAC. NPAC does not
 * warrant that the operation of the program will be uninterrupted or
 * error-free. The end-user understands that the program was developed for
 * research purposes and is advised not to rely exclusively on the program for
 * any reason.
 *
 */

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * The fromt end for the TextEditor program 
 *
 * @version     0.1 20 April 1998
 * @author      Shrideep Pallickara
 *
 */

public synchronized class ConsoleMenu extends MenuBar implements ActionListener
{
    TextEditor console;

    ConsoleMenu(TextEditor console)
    {
        this.console = console;
        add(fileMenu());
        add(editMenu());
	add(fontMenu());
        add(viewMenu());
	add(searchMenu());
        add(colorMenu());
        add(helpMenu());
    }

    public Menu fileMenu()
    {
        MenuItem menuItem1;
        MenuItem menuItem2;
        MenuItem menuItem3;
        MenuItem menuItem4;
        MenuItem menuItem5;
        MenuItem menuItem6;
        MenuItem menuItem7;
        Menu menu = new Menu("File");
	menu.add(menuItem3 = new MenuItem("New", new MenuShortcut(110)));
        menu.add(menuItem1 = new MenuItem("Browse", new MenuShortcut(98)));
	menu.add(new MenuItem("-"));

        menu.add(menuItem2 = new MenuItem("Load Serialized", new MenuShortcut(108)));
        menu.add(menuItem7 = new MenuItem("Save", new MenuShortcut(115)));
        menu.add(menuItem4 = new MenuItem("Delete", new MenuShortcut(100)));

        menu.add(new MenuItem("-"));
        menu.add(new MenuItem("Page setup [Not implemented]"));
        menu.add(menuItem5 = new MenuItem("Print", new MenuShortcut(112)));
        menu.add(new MenuItem("Print setup"));
        menu.add(new MenuItem("-"));
        menu.add(new MenuItem("Conversion"));
        menu.add(new MenuItem("Preferences"));
        menu.add(new MenuItem("-"));
        menu.add(menuItem6 = new MenuItem("Exit", new MenuShortcut(113)));
        menuItem1.setActionCommand("Browse");
        menuItem2.setActionCommand("LoadSer");
        menuItem7.setActionCommand("Save");
        menuItem3.setActionCommand("New");
        menuItem4.setActionCommand("Delete");
        menuItem5.setActionCommand("Print");
        menuItem6.setActionCommand("Exit");
        menu.addActionListener(this);
        return menu;
    }

    public Menu editMenu()
    {
        MenuItem menuItem1;
        MenuItem menuItem2;
        MenuItem menuItem3;
        MenuItem menuItem4;
        MenuItem menuItem5;
        MenuItem menuItem6;
        Menu menu1 = new Menu("Paste");
        menu1.add(menuItem1 = new MenuItem("into new file", new MenuShortcut(118)));
        menu1.add(menuItem2 = new MenuItem("as new selection", new MenuShortcut(101)));
        menuItem1.setActionCommand("as new image");
        menuItem2.setActionCommand("as new selection");
        menu1.addActionListener(this);
        Menu menu2 = new Menu("Edit");
        menu2.add(menuItem3 = new MenuItem("Undo", new MenuShortcut(122)));
        menu2.add(new MenuItem("-"));
        menu2.add(menuItem4 = new MenuItem("Cut", new MenuShortcut(120)));
        menu2.add(menuItem5 = new MenuItem("Copy", new MenuShortcut(99)));
        menu2.add(menu1);
        menu2.add(new MenuItem("-"));
        menu2.add(menuItem6 = new MenuItem("Empty stack", new MenuShortcut(119)));
        menuItem3.setActionCommand("Undo");
        menuItem4.setActionCommand("Cut");
        menuItem5.setActionCommand("Copy");
        menuItem6.setActionCommand("Empty stack");
        menu2.addActionListener(this);
        return menu2;
    }

  public Menu fontMenu() {
    Menu menu1 = new Menu("FontOptions");
    
    Menu menu2 = new Menu("Font Face");
    Menu menu3 = new Menu("Font Size");
    Menu menu4 = new Menu("Font Color");
    Menu menu5 = new Menu("Font Style");

    menu2.addActionListener(this);
    menu3.addActionListener(this);
    menu4.addActionListener(this);
    menu5.addActionListener(this);

    Toolkit     toolKit=Toolkit.getDefaultToolkit();
    for (int i=0; i<toolKit.getFontList().length; i++)
      menu2.add( new MenuItem(toolKit.getFontList()[i]) );

    for (int i=8; i<19; i++)
      menu3.add(new MenuItem(String.valueOf(i++)));
	     
    menu4.add(new MenuItem("Black"));
    menu4.add(new MenuItem("Blue"));
    menu4.add(new MenuItem("Cyan"));
    menu4.add(new MenuItem("Green"));
    menu4.add(new MenuItem("Magenta"));
    menu4.add(new MenuItem("Orange"));
    menu4.add(new MenuItem("Red"));
    menu4.add(new MenuItem("White"));
    
    menu5.add(new MenuItem("Plain"));
    menu5.add(new MenuItem("Italics"));
    menu5.add(new MenuItem("Bold"));
    menu5.add(new MenuItem("Bold & Italics"));
    
    menu1.add(new MenuItem("Default Values"));
    menu1.add(new MenuItem("-"));
    menu1.add(menu2);
    menu1.add(menu3);
    menu1.add(new MenuItem("-"));
    menu1.add(menu4);
    menu1.add(menu5);
    menu1.addActionListener(this);
    return menu1;

  }    
  public Menu viewMenu()
  {   
    Menu menu3 = new Menu("View");
    menu3.add(new MenuItem("Normal viewing"));
    menu3.add(new MenuItem("-"));
    menu3.add(new MenuItem("Double size"));
    menu3.add(new MenuItem("Half size"));
    menu3.add(new MenuItem("-"));
    menu3.add(new MenuItem("10% larger"));
    menu3.add(new MenuItem("10% smaller"));
    menu3.add(new MenuItem("-"));
    MenuItem menuItem3, menuItem4;
    menu3.add(menuItem3 =new MenuItem("New Frame", new MenuShortcut(102)));
    menuItem3.setActionCommand("New Frame");
    menu3.add(menuItem4 =new MenuItem("Delete Frame",new MenuShortcut(121)));
    menuItem4.setActionCommand("Delete Frame");
    menu3.add(new MenuItem("Delete Frame"));
    menu3.addActionListener(this);
    return menu3;
  }

  public Menu searchMenu() {
    Menu menu1 = new Menu("Search");
    menu1.add(new MenuItem("Search String"));
    menu1.add(new MenuItem("Repeat Search"));
    menu1.add(new MenuItem("-"));
    menu1.add(new MenuItem("Replace String"));
    menu1.add(new MenuItem("Replace All"));
    return menu1;
  }

  public Menu colorMenu()
  {
    Menu menu1 = new Menu("Color depth");
    menu1.add(new MenuItem("64K colors (16 Bit)"));
    menu1.add(new MenuItem("16 Million colors (24 Bit)"));
    menu1.addActionListener(this);
    Menu menu2 = new Menu("Adjust");
    menu2.add(new MenuItem("Red/Green/Blue"));
    menu2.add(new MenuItem("Hue/Saturation/Luminance"));
    menu2.addActionListener(this);
    Menu menu3 = new Menu("Histogram functions");
    menu3.add(new MenuItem("Stretch/Equalize"));
    menu3.add(new MenuItem("Darken/Brighten"));
    menu3.addActionListener(this);
    Menu menu4 = new Menu("Colors");
    menu4.add(menu2);
    menu4.add(new MenuItem("Grey scale"));
    menu4.add(menu3);
    menu4.add(new MenuItem("Negative image"));
    menu4.add(new MenuItem("-"));
    menu4.add(new MenuItem("Count colors used [Not implemented]"));
    menu4.add(new MenuItem("-"));
    menu4.add(menu1);
    menu4.addActionListener(this);
    return menu4;
  }

    public Menu helpMenu()
    {
        MenuItem menuItem1;
        MenuItem menuItem2;
        Menu menu = new Menu("?");
        menu.add(menuItem2 = new MenuItem("Help", new MenuShortcut(104)));
        menu.add(new MenuItem("-"));
        menu.add(menuItem1 = new MenuItem("About", new MenuShortcut(97)));
        menuItem2.setActionCommand("Help");
        menuItem1.setActionCommand("About");
        menu.addActionListener(this);
        return menu;
    }

    public void actionPerformed(ActionEvent actionEvent)
    {
      String arg = actionEvent.getActionCommand();
      if( ("TimesRoman".equals(arg))  || ("Dialog".equals(arg)) ||
	  ("SansSerif".equals(arg))   || ("Courier".equals(arg))||
	  ("DialogInput".equals(arg)) || ("Serif".equals(arg))  ||
	  ("Helvetica".equals(arg))   || ("Monospaced".equals(arg)) ||
	  ("ZapfDingbats".equals(arg))  )
	console.setFontName(arg);
      
      if("Plain".equals(arg)) console.setFontStyle(Font.PLAIN);
      if("Bold".equals(arg)) console.setFontStyle(Font.BOLD);
      if("Italics".equals(arg)) console.setFontStyle(Font.ITALIC);
      if("Bold & Italics".equals(arg)) 
	console.setFontStyle(Font.ITALIC +Font.BOLD );

      if("Blue".equals(arg)) console.textarea.setForeground(Color.blue);
      if("Cyan".equals(arg)) console.textarea.setForeground(Color.cyan);
      if("Green".equals(arg)) console.textarea.setForeground(Color.green);
      if("Magenta".equals(arg)) 
	console.textarea.setForeground(Color.magenta);
      if("Orange".equals(arg)) console.textarea.setForeground(Color.orange);
      if("Red".equals(arg)) console.textarea.setForeground(Color.red);
      if("White".equals(arg)) console.textarea.setForeground(Color.white);
     if("Black".equals(arg)) console.textarea.setForeground(Color.black); 
     
     if (("8".equals(arg)) || ("10".equals(arg)) ||
	 ("12".equals(arg)) || ("14".equals(arg)) ||
	 ("16".equals(arg)) || ("18".equals(arg)) )
       console.setFontSize(Integer.parseInt(arg));

      console.performAction(actionEvent.getActionCommand());
    }
}