package notepad;
/**
 *This is a JAVA� program for writing, opening, saving, editing the documents,
 *has the ability to copy, cut, paste & select all text in the JTextArea,
 *has @see ExampleFileFilter class (From SUN� -http://java.sun.com-) for filter the file
 *has a print class (from AarbTeam2000� -http://wwww.arabteam2000.com-) for printing the documents
 */

/**
 *@King Fahd University of Petroleum and Minerals (KFUPM)
 *@auther: Al-Thubaiti Salah
 *@ICS201 PROJECT
 *@JAVA� Notepad (JNotepad)
 *@version# 2.0
 */
 
//import the packages for using the classes in them into the program
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

/**
 *A PUBLIC CLASS FOR NOTEPAD.JAVA
 */
public class Notepad extends JFrame{
	public static final long serialVersionUID = 1L;
	//for using the methods in these classes
	public Actions actions = new Actions(this);
	public Center center = new Center(this);
	//declaration of the private variables used in the program
	//create the text area
	private JTextArea textArea;
	//create the Menu Bar that contains the JMenu "filE, ediT, formaT, helP"
	private JMenuBar menubar;
	//Create the menu that contains the items
	private JMenu filE, ediT;
	//Create the menu items
	private JMenuItem neW, opeN, savE, saveAS, prinT, exiT;
	//Create the Tool Bar that contains the JButton
	private JToolBar toolBar;
	//Create the buttons
	private JButton newButton, openButton, saveButton, saveAsButton, printButton;
	//Create Scroll pane (JScrollPane) for the JTextArea
	private JScrollPane scrollpane;
	
	public JTextArea getTextArea(){
		return textArea;
	}
	
	//Constructor of Notepad
	public Notepad(){
		//set the title for Notepad and set the size for it.
		setTitle("Untitled - JAVA� Notepad");
		setSize(800,600);
		//get the graphical user interface components display area
		Container cp = getContentPane();
		//adding the text area,
		//adding the tool bar &
		//adding the scroll pane to the container
		cp.add(textArea = new JTextArea());
		cp.add("North", toolBar = new JToolBar("Tool Bar"));
		cp.add(scrollpane = new JScrollPane(textArea)); 
		//for setting the menu bar
		setJMenuBar(menubar= new JMenuBar());
		//adding file
		menubar.add(filE   = new JMenu("File"));
		//adding neW, opeN, savE, saveAS, prinT & exiT to the filE Menu
		filE.add(neW    = new JMenuItem("New", new ImageIcon(this.getClass().getResource("images/new.gif"))));
		filE.add(opeN   = new JMenuItem("Open", new ImageIcon(this.getClass().getResource("images/open.gif"))));
		filE.add(savE   = new JMenuItem("Save", new ImageIcon(this.getClass().getResource("images/save.gif"))));
		filE.add(saveAS = new JMenuItem("Save As", new ImageIcon(this.getClass().getResource("images/saveAs.gif"))));
		filE.add(prinT  = new JMenuItem("Print", new ImageIcon(this.getClass().getResource("images/print.gif"))));
		filE.add(exiT   = new JMenuItem("Exit"));
		filE.insertSeparator(4);
		filE.insertSeparator(6);
		//allowing the file   menu to be selected by pressing ALT + F
		filE.setMnemonic('f');
		//allowing the neW       menu item to be selected by pressing ALT + N
		neW.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
		//allowing the opeN      menu item to be selected by pressing ALT + O
		opeN.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
		//allowing the savE      menu item to be selected by pressing ALT + S
		savE.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
		//allowing the prinT     menu item to be selected by pressing ALT + P
		prinT.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));
		//allowing the exiT      menu item to be selected by pressing ALT + F4
		exiT.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.CTRL_MASK));
		//adding newButton, openButton, saveButton, saveAsButton, printButton
		toolBar.add(newButton   = new JButton(new ImageIcon(this.getClass().getResource("images/new.gif"))));
		toolBar.add(openButton  = new JButton(new ImageIcon(this.getClass().getResource("images/open.gif"))));
		toolBar.add(saveButton  = new JButton(new ImageIcon(this.getClass().getResource("images/save.gif"))));
		toolBar.add(saveAsButton= new JButton(new ImageIcon(this.getClass().getResource("images/saveAs.gif"))));
		toolBar.add(printButton = new JButton(new ImageIcon(this.getClass().getResource("images/print.gif"))));
		toolBar.addSeparator();
		//adding a tool tip text to the button for descriping the image icon.
		newButton.setToolTipText("New");
		openButton.setToolTipText("Open");
		saveButton.setToolTipText("Save");
		saveAsButton.setToolTipText("Save As");
		printButton.setToolTipText("Print");
		//setting the default close operation to false & using own action (exiT action @Actions.java)
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				actions.exiT();
			}
		});
		//adding action listener for menu item: neW, opeN, savE, saveAS, prinT, exiT,
		neW.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.neW();
			}
		});
		opeN.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.opeN();
			}
		});
		savE.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.savE();
			}
		});
		saveAS.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.saveAs();
			}
		});
		prinT.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.prinT();
			}
		});
		
		exiT.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.exiT();
			}
		});
		//adding action listener for the button in the tool bar: newButton, openButton,
		//saveButton, saveAsButton, printButtom
		newButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.neW();
			}
		});
		openButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.opeN();
			}
		});
		saveButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.savE();
			}
		});
		saveAsButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.saveAs();
			}
		});
		printButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.prinT();
			}
		});
		//Setting the Line Wrap & Wrap Style Word features are true 
		textArea.setLineWrap(true);
		textArea.setWrapStyleWord(true);
		center.nCenter();
		setVisible(true);
	}
	//Main Method
	public static void main(String[] args){
		new Notepad();
	}
}			
