
// ImageViewer.java
// Michael Kolling and David J Barnes 
// Final version
// Modified by Andrew Davison, Jan 2018, ad@fivedots.coe.psu.ac.th

/* ImageViewer is the main class of the image viewer application. It builds
   and displays the application GUI and initialises all other components. 

   Uses anonymous listeners on the two menu items.
   Open file now uses ImagePanel to load and display an image.
*/


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



public class ImageViewer extends JFrame 
{
  private JFileChooser fileChooser;
  private ImagePanel imagePanel;   // panel that displays the loaded image


  public ImageViewer()
  {
    super("ImageViewer Final");

    // create the GUI
    fileChooser = new JFileChooser(System.getProperty("user.dir"));  // start in user dir.
    makeMenuBar();
    Container c = getContentPane();
    imagePanel = new ImagePanel();
    c.add(imagePanel);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setResizable(false);   // disable window resizing
    setVisible(true);
  }  // end of ImageViewer()



  private void makeMenuBar()
  // Create the main frame's menu bar. Add shortcuts.
  {
    int shortcut_mask =
        Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

    JMenuBar menubar = new JMenuBar();
    setJMenuBar(menubar);
        
    // create 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));  // ctrl-o
    openItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e)
      { File f = chooseImage();
        imagePanel.displayImage(f);
        pack();   // triggers resizing to fit newly loaded image
      }
    });
    fileMenu.add(openItem);

    JMenuItem quitItem = new JMenuItem("Quit");
    quitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, shortcut_mask));  // ctrl-q
    quitItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e)
      { System.exit(0); }
    });
    fileMenu.add(quitItem);
  }  // end of makeMenuBar()
    

  private File chooseImage()
  // open a file chooser and let the user select an image file 
  {
    int returnVal = fileChooser.showOpenDialog(null);
    if (returnVal != JFileChooser.APPROVE_OPTION)
      return null;  // cancelled
    return fileChooser.getSelectedFile();
  }  // end of chooseImage()

  // ----------------------------------------------

  public static void main(String[] args) 
  { new ImageViewer(); } 

} // end of ImageViewer class
