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

/**
 * ImageViewer is an application that will let you view 
 * images and make some simple modifications to them.
 * 
 * @author Michael Rivers
 * @version May 2nd, 2006
 */

public class ImageViewer
{
    private JFrame frame;
    private ImagePanel imagePanel;
    
    /**
     * Create an ImageViewer and show it on screen.
     */
    public ImageViewer()
    {
        makeFrame();
    }
   
    /**
     * Okay, here are all of the commands.
     */
    private void openFile()
    {
        OFImage image = ImageFileManager.getImage();
        imagePanel.setImage(image);
        frame.pack();
    }
    
    private void saveFile()
    {
        System.out.println("Save");
    }
    
    private void quit()
    {
        System.exit(0);
    }
    
    private void cut()
    {
        System.out.println("Cut");
    }
    
    private void copy()
    {
        System.out.println("Copy");
    }
    
    private void paste()
    {
        System.out.println("Paste");
    }
    
    private void about()
    {
        System.out.println("Look pal, I had to build this thing for class."
            + " If you want to know more about it, get yourself a copy of"
            + " Objects First With JAVA: A Practical Introduction Using"
            + " BLUEJ (Second Edition). That'll tell you all you need to know.");
    }
    
    private void help()
    {
        System.out.println("Help? Yeah right! If I help you then where's"
            + " the sense of accomplishment when you figure it out?");
        System.out.println("Don't worry, I won't rob you of that experience.");
    }

    /**
     * Create the Swing frame and its content.
     */
    private void makeFrame()
    {
        frame = new JFrame("ImageViewer");
        Container contentPane = frame.getContentPane();
        
        imagePanel = new ImagePanel();
        contentPane.add(imagePanel);
        
        makeMenuBar();
        
        frame.pack();
        frame.setSize(500,400);
        frame.setVisible(true);
        
    }

    /**
     * Make the menu bar
     */
    private void makeMenuBar()
    {
        final int SHORTCUT_MASK =
            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

        JMenuBar menubar = new JMenuBar();
        frame.setJMenuBar(menubar);
        
        //Make the file menu
        JMenu fileMenu = new JMenu("File");
        menubar.add(fileMenu);
        
        JMenuItem openItem = new JMenuItem("Open");
        openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));
        openItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { openFile(); }});
        fileMenu.add(openItem);
        
        JMenuItem saveItem = new JMenuItem("Save");
        saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, SHORTCUT_MASK));
        saveItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { saveFile(); }});
        fileMenu.add(saveItem);
        
        JMenuItem quitItem = new JMenuItem("Quit");
        quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
        quitItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { quit(); }});
        fileMenu.add(quitItem);

        //Make the edit menu
        JMenu editMenu = new JMenu("Edit");
        menubar.add(editMenu);
        
        JMenuItem cutItem = new JMenuItem("Cut");
        cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, SHORTCUT_MASK));
        cutItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { cut(); }});
        editMenu.add(cutItem);
        
        JMenuItem copyItem = new JMenuItem("Copy");
        copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, SHORTCUT_MASK));
        copyItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { copy(); }});
        editMenu.add(copyItem);
        
        JMenuItem pasteItem = new JMenuItem("Paste");
        pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, SHORTCUT_MASK));
        pasteItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { paste(); }});
        editMenu.add(pasteItem);

        //Make the help menu
        JMenu helpMenu = new JMenu("Help");
        menubar.add(helpMenu);
        
        JMenuItem aboutItem = new JMenuItem("About");
        aboutItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { about(); }});
        helpMenu.add(aboutItem);
        
        JMenuItem helpItem = new JMenuItem("Help");
        helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, SHORTCUT_MASK));
        helpItem.addActionListener(new ActionListener()
        { public void actionPerformed(ActionEvent e) { help(); }});
        helpMenu.add(helpItem);
    }
}

