

/**
 *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.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.undo.*;

/**
 *A PUBLIC CLASS FOR NOTEPAD.JAVA
 */
public class Notepad extends JFrame{
	//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
    JTextArea textArea;
	//create the Menu Bar that contains the JMenu "filE, ediT, vieW, formaT, helP"
    JMenuBar Menubar;
	//Create the menu that contains the items
     JMenu filE, ediT, helP;
	//Create the menu items
    private JMenuItem exiT, abouT, finD, findNexT;
	//Create the Tool Bar that contains the JButton
	 JToolBar toolBar;
	//Create the buttons
	private JButton findButton, aboutButton;
	//Create Scroll pane (JScrollPane) for the JTextArea
	private JScrollPane scrollpane;

    public JTextArea getTextArea(){
	return textArea;
    }

    void MenuFileIOHook(){
    }   	 

    void MenuPrintHook(){
    }   	 

    void MenuFormatHook(){
    }   	 

    void MenuCutPasteHook(){
    }   	 

    void MenuRedoHook(){
    }   	 

    void MenuSelectAllHook(){
    }

    void ToolBarPrintHook(){
    }   	 

    void ToolBarFileIOHook(){
    }   	 

    void ToolBarCutPasteHook(){
    }   	 

    void ToolBarRedoHook(){
    }   	 

    void ToolBarFormatHook(){
    }   	 


	//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, edit, view, format, help to the menu bar
		Menubar.add(filE   = new JMenu("File"));
		Menubar.add(ediT   = new JMenu("Edit"));
		MenuFormatHook();
		Menubar.add(helP   = new JMenu("Help"));

		MenuFileIOHook();
		MenuPrintHook();
		filE.add(exiT   = new JMenuItem("Exit"));

 		/**
		 *adding finD, findNexT to the ediT Menu,
		 *adding a small image icon to the menu item &
		 *adding separator between the menu item
		 */
		 MenuRedoHook();
		 MenuCutPasteHook();
		ediT.add(finD = new JMenuItem("Find", new ImageIcon(this.getClass().getResource("images/find.gif"))));
		ediT.add(findNexT = new JMenuItem("Find Next"));
		MenuSelectAllHook();
		/**
		 *adding abouT to the helP Menu & 
		 *adding a samll image icon to the menu item
		 */
		helP.add(abouT = new JMenuItem("About Notepad", new ImageIcon(this.getClass().getResource("images/about.gif"))));
		
		/**
		 *allowing the file   menu to be selected by pressing ALT + F
		 *allowing the edit   menu to be selected by pressing ALT + E
		 *allowing the help   menu to be selected by pressing ALT + H
		 */
		filE.setMnemonic('f');
		ediT.setMnemonic('e');
		helP.setMnemonic('h');
		
		/**
		 *allowing the exiT      menu item to be selected by pressing ALT + F4
		 *allowing the finD      menu item to be selected by pressing ALT + F
		 *allowing the findNexT  menu item to be selected by pressing ALT + F3
		 */
		finD.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
		findNexT.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, ActionEvent.CTRL_MASK));
		exiT.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.CTRL_MASK));
		
		/**
		 *adding findButton & aboutButton to the tool bar,
		 *adding a small image icon to the menu item &
		 *adding separator between the button
		 */
		 ToolBarFileIOHook();
		 ToolBarPrintHook();
		 ToolBarRedoHook();
		 ToolBarCutPasteHook();
		toolBar.add(findButton  = new JButton(new ImageIcon(this.getClass().getResource("images/find.gif"))));
		findButton.setToolTipText("Find");
		toolBar.addSeparator();
		ToolBarFormatHook();
		toolBar.add(aboutButton = new JButton(new ImageIcon(this.getClass().getResource("images/about.gif"))));
		
		//adding a tool tip text to the button for descriping the image icon.

		aboutButton.setToolTipText("About Notepad");
		
		/**
		 *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: finD, findNexT, exiT & abouT
		 *the actions was written @Actions.java
		 */
		exiT.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.exiT();
			}
		});
		finD.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.finD();
			}
		});
		findNexT.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.findNexT();
			}
		});
		abouT.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
			    actions.abouT();
			}
		    });
		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, printButton, redoButton, undoButton, copyButton,
		 *cutButton, pasteButton, findButton, selectALL, lineWraP, fontButton & aboutButton
		 *the actions was written @Actions.java
		 */
		findButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.finD();
			}
		});
		aboutButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae){
				actions.abouT();
			}
		});			
		/**
		 *Setting the Line Wrap & Wrap Style Word features are true 
		 */
		textArea.setLineWrap(true);
		textArea.setWrapStyleWord(true);
		/**
		 *for making the program at the center, 
		 *@see Center.java 
		 */
		center.nCenter();
		show();
	}
	//Main Method
	public static void main(String[] args){
		new Notepad();
		
	}
}			
