Learn How to Develop Simple Text Editor / NotePad Code in Java

Learn How to Develop Simple Text Editor / NotePad Code in Java

Learn How to Develop Simple Text Editor / NotePad Code in Java

Hey Guys, This is a Simple Text Editor / Notepad, which you can use to create, read, write Text files.

This Program is written in Netbeans Version 7.3.1, and Consist of Almost 700 Lines of Code, Using Java Programming on a Macintosh Operating System Machine, with the concepts of Object Oriented Programming.

I created this simple yet Powerful text Editor, which will definitely help you demonstrate working of a Notepad/TextEditor.

This is “ROUGH”,coz it is for learning purpose only, so kindly don’t misuse this Source Code.

Simple Text Editor Notepad Program using Java Programming by Loudfind Developer Rahul Poonia
HERE’S THE SOURCE CODE:-

 

Simple-Text-Editor-Notepad-Program-using-Java-Programming-by-loudfind-Developer Rahul Poonia
Simple-Text-Editor-Notepad-Program-using-Java-Programming-by-loudfind-Developer Rahul Poonia

____________________________________________________________________________________________

/**
* This is a Simple Text Editor. It explains the working of a Simple Text Editor.
*
* @NotePad [Note: NotePad is just a Name to get hint about the Text Editor]
*
* Copyright @ Rahul Poonia @ loudfind.com
* Source Code for just learning purpose, DO NOT COPY || NOT FOR SALE !!
*
* @Loudfind
* This code demonstrates almost each option available on any simple TextEditor.
*/

package guiswings;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.io.*;
import javax.swing.border.TitledBorder;
import static java.awt.event.InputEvent.*;

//import javax.
/**
*
* @author Rahul Poonia
*/

public class NotePadPro implements ActionListener,KeyListener {
// DECLARATION FOR CLASS VARIABLES
private JFrame frame,frame1;
private JToolBar toolBar;
private String currentFile = “Untitled”;
private boolean changed = false;
private boolean check = false;
private JPanel panel,panel1;
private JMenuBar menubar;
private JMenuItem item,item1,item2,item3,item4,item5,item6;
private JMenuItem i,i1,i2,i3,i4,i5,i6,i7,it,it1,it2,it3,it4,it5,it6;
private JMenu menu,menu1,menu2,menu3,menu4;
private JCheckBoxMenuItem cb,cb1,cb2,cb3,cb4,cb5,cb6,c,c1,c2,c3,c4,c5,c6,c7,c8,c9;
private JButton b1,b2,b3,cut,copy,paste,selecto,beep,wrap,fontCol;
private JTextArea tArea = new JTextArea();
private String[] fontSize = {“2″,”4″,”6″,”8″,”10″,”12″,”14″,”16″,”18″,”20″,”24″,”28″,”32″,”36″,”40″,”46″,”50″,”56″,”60″,”64″,”70″,”74″};
private JList fonts = new JList(fontSize);
private String[] fontFam = {“Arial”,”American Typewriter”,”Calibri”,”Comic Sans”,”Didot”,”Futura”,”Georgia”,”Impact”,”Mistral”,”Noteworthy”};
private JList fontFamily = new JList(fontFam);
private JScrollPane scrollPane = new JScrollPane(tArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
private JScrollPane scPane = new JScrollPane();
private JScrollPane scPane1 = new JScrollPane();
private JEditorPane editorpane = new JEditorPane();
private JFileChooser filechooser = new JFileChooser(System.clearProperty(“User.dir”));
private JColorChooser colorChoose = new JColorChooser();
private JTextField tField = new JTextField(10);

// CONSTRUCTING THE LAYOUT
public NotePadPro()
{

// EXCEPTIONS HANDLED THROUGH try{ } catch()
try{

// MAIN FRAME FOR THE PROGRAM
frame = new JFrame(“Notepad Pro”);

Container container = frame.getContentPane();
panel = new JPanel();
// SETTING UP MENU BAR FOR MAIN FRAME
panel.add(menubar = new JMenuBar());
menubar.setBorderPainted(true);
menubar.setBackground(Color.decode(“330020″));

// ADDING FILE MENU BAR AND ITS COMPONENTS
menubar.add(menu = new JMenu(“File”));
menu.setMnemonic(‘F’);
menu.setBackground(Color.YELLOW);
menu.add(item = new JMenuItem(“New”, KeyEvent.VK_F));
item.setMnemonic(‘O’);
menu.addSeparator();
menu.add(item1 = new JMenuItem(“Open…”));
item1.setAccelerator(KeyStroke.getKeyStroke(‘O’,CTRL_DOWN_MASK));
item1.setArmed(true);
item1.addActionListener(this);
//item1.setMnemonic(KeyEvent.VK_F11);
menu.add(item2 = new JMenuItem(“Save”));
item2.setAccelerator(KeyStroke.getKeyStroke(‘S’,CTRL_DOWN_MASK));
item2.setArmed(true);
menu.add(item3 = new JMenuItem(“Save As”));
menu.addSeparator();
item3.setAccelerator(KeyStroke.getKeyStroke(‘S’,CTRL_DOWN_MASK));
item3.setArmed(true);
menu.add(item4 = new JMenuItem(“Print”));
item4.setAccelerator(KeyStroke.getKeyStroke(‘P’,CTRL_DOWN_MASK));
item4.setArmed(true);
menu.add(cb = new JCheckBoxMenuItem(“Preview”));
menu.add(item5 = new JMenuItem(“Preference”));
item5.setAccelerator(KeyStroke.getKeyStroke(‘P’,CTRL_DOWN_MASK));
item5.setArmed(true);
menu.addSeparator();
menu.add(item6 = new JMenuItem(“Exit”));
item6.setAccelerator(KeyStroke.getKeyStroke(‘Q’,CTRL_DOWN_MASK));
item6.setArmed(true);
menu.addSeparator();
// Adding actionPerform
item.addActionListener(this);
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
item5.addActionListener(this);
item6.addActionListener(this);

// ADDING EDIT MENU BAR AND ITS COMPONENTS
menubar.add(menu1 = new JMenu(“Edit”));
menu.setMnemonic(‘E’);
menu1.add(i = new JMenuItem(“Undo”));
i.setAccelerator(KeyStroke.getKeyStroke(‘Z’,CTRL_DOWN_MASK));
i.setArmed(true);
menu1.add(i1 = new JMenuItem(“Redo”));
i1.setAccelerator(KeyStroke.getKeyStroke(‘R’,CTRL_DOWN_MASK));
i1.setArmed(true);
menu1.addSeparator();
menu1.add(i2 = new JMenuItem(“Cut”));
i2.setAccelerator(KeyStroke.getKeyStroke(‘X’,CTRL_DOWN_MASK));
i2.setArmed(true);
menu1.add(i3 = new JMenuItem(“Copy”));
i3.setAccelerator(KeyStroke.getKeyStroke(‘C’,CTRL_DOWN_MASK));
i3.setArmed(true);
menu1.add(i4 = new JMenuItem(“Paste”));
i4.setAccelerator(KeyStroke.getKeyStroke(‘V’,CTRL_DOWN_MASK));
i4.setArmed(true);
menu1.addSeparator();
menu1.add(i5 = new JMenuItem(“Delete”));
i5.setAccelerator(KeyStroke.getKeyStroke(‘D’,CTRL_DOWN_MASK));
i5.setArmed(true);
menu1.add(i6 = new JMenuItem(“Delete All”));
i6.setAccelerator(KeyStroke.getKeyStroke(‘D’,CTRL_DOWN_MASK));
i6.setArmed(true);
menu1.addSeparator();
menu1.add(i7 = new JMenuItem(“Select All”));
i7.setAccelerator(KeyStroke.getKeyStroke(‘A’,CTRL_DOWN_MASK));
i7.setArmed(true);
// Adding actionPerform
i.addActionListener(this);
i1.addActionListener(this);
i2.addActionListener(this);
i3.addActionListener(this);
i4.addActionListener(this);
i5.addActionListener(this);
i6.addActionListener(this);
i7.addActionListener(this);

// ADDING VIEW MENU BAR AND ITS COMPONENTS
menubar.add(menu2 = new JMenu(“View”));
menu.setMnemonic(‘V’);
menu2.setBackground(Color.YELLOW);
menu2.add(cb = new JCheckBoxMenuItem(“Hide Toolbar”));
menu2.add(cb1 = new JCheckBoxMenuItem(“Hide Navigation Bar”));
menu2.add(cb2 = new JCheckBoxMenuItem(“Hide Editor”));
menu2.addSeparator();
menu2.add(cb3 = new JCheckBoxMenuItem(“Show Window”));
cb3.setState(true);
menu2.add(cb4 = new JCheckBoxMenuItem(“Previous Document”));
menu2.add(cb5 = new JCheckBoxMenuItem(“Next Document”));
menu2.addSeparator();
menu2.add(cb6 = new JCheckBoxMenuItem(“Enter Full Screen”));
i2.setAccelerator(KeyStroke.getKeyStroke(‘M’,CTRL_DOWN_MASK));
i2.setArmed(true);
// Adding actionPerform
cb.addActionListener(this);
cb1.addActionListener(this);
cb2.addActionListener(this);
cb3.addActionListener(this);
cb4.addActionListener(this);
cb5.addActionListener(this);
cb6.addActionListener(this);

// ADDING COLORS MENU BAR AND ITS COMPONENTS
menubar.add(menu3 = new JMenu(“Colors”));
menu.setMnemonic(‘C’);
menu3.add(c = new JCheckBoxMenuItem(“RED”));
c.setBackground(Color.red);
menu3.add(c1 = new JCheckBoxMenuItem(“GREEN”));
c1.setBackground(Color.GREEN);
menu3.add(c2 = new JCheckBoxMenuItem(“BLUE”));
c2.setBackground(Color.BLUE);
menu3.addSeparator();
menu3.add(c3 = new JCheckBoxMenuItem(“ORANGE”));
c3.setBackground(Color.ORANGE);
cb3.setState(true);
menu3.add(c4 = new JCheckBoxMenuItem(“YELLOW”));
c4.setBackground(Color.YELLOW);
menu3.add(c5 = new JCheckBoxMenuItem(“GRAY”));
c5.setBackground(Color.GRAY);
menu3.addSeparator();
menu3.add(c6 = new JCheckBoxMenuItem(“PINK”));
c6.setBackground(Color.PINK);
menu3.add(c7 = new JCheckBoxMenuItem(“LIGHT GRAY”));
c7.setBackground(Color.LIGHT_GRAY);
menu3.add(c8 = new JCheckBoxMenuItem(“DARK GRAY”));
c8.setBackground(Color.DARK_GRAY);
menu3.addSeparator();
menu3.add(c9 = new JCheckBoxMenuItem(“DEFAULT !”));
c9.setBackground(Color.WHITE);
menu3.addSeparator();
// Adding actionPerform
c.addActionListener(this);
c1.addActionListener(this);
c2.addActionListener(this);
c3.addActionListener(this);
c4.addActionListener(this);
c5.addActionListener(this);
c6.addActionListener(this);
c7.addActionListener(this);
c8.addActionListener(this);
c9.addActionListener(this);
// ADDING FONT SIZE MENU BAR AND ITS COMPONENTS
menubar.add(menu4 = new JMenu(“Font”));
menu.setMnemonic(‘F’);
menu4.setBackground(Color.YELLOW);
menu4.addSeparator();
JButton fontbut = new JButton(“Font Pane”);
menu4.add(fontbut);
fontbut.addActionListener(this);

// SETTING DEFAULT MENU ITEMS DISABLED
item2.setEnabled(false);
item3.setEnabled(false);
item4.setEnabled(false);
item5.setEnabled(false);

panel.add(toolBar = new JToolBar(), BorderLayout.NORTH);
toolBar.setFloatable(true);
toolBar.setBorderPainted(true);
toolBar.setBackground(Color.decode(“330020″));
toolBar.setForeground(Color.WHITE);
toolBar.setBorder(new TitledBorder(“Quick Tools”));
//toolBar.setBorder(new Color.YELLOW);
cut = toolBar.add(Cut);
toolBar.setFont(new Font(“Monospaced”,Font.PLAIN,19));
cut.setForeground(Color.RED);
cut.setSize(3, 4);
copy = toolBar.add(Copy);
copy.setForeground(Color.RED);
paste = toolBar.add(Paste);
paste.setForeground(Color.RED);
selecto = toolBar.add(Selecto);
selecto.setForeground(Color.RED);
beep = toolBar.add(Beep);
beep.setForeground(Color.RED);
wrap = toolBar.add(Wrap);
wrap.setForeground(Color.RED);

Icon ic1 = new ImageIcon(“/Developer Rahul/Weekate Java/cut.gif”);
Icon ic2 = new ImageIcon(“/Developer Rahul/Weekate Java/copy.gif”);
Icon ic3 = new ImageIcon(“/Developer Rahul/Weekate Java/paste.gif”);
Icon ic4 = new ImageIcon(“/Developer Rahul/Weekate Java/wiz.gif”);
Icon ic5 = new ImageIcon(“/Developer Rahul/Weekate Java/music.gif”);
Icon ic6 = new ImageIcon(“/Developer Rahul/Weekate Java/nave_down.gif”);
cut.setText(“”);
cut.setIcon(ic1);
cut.setBackground(Color.red);
//cut.setIcon(new ImageIcon(“/Users/rahulpoonia/Desktop/rahul.jpg”));
copy.setText(“”);
copy.setIcon(ic2);
copy.setBackground(Color.ORANGE);
paste.setText(“”);
paste.setIcon(ic3);
selecto.setText(“”);
selecto.setIcon(ic4);
beep.setText(“”);
beep.setIcon(ic5);
wrap.setText(“”);
wrap.setIcon(ic6);
//Icon iconn = new ImageIcon(“/Users/rahulpoonia/Downloads/logo-2.jpg”);

panel.setLayout(new GridLayout(2,1));
frame.add(panel, BorderLayout.NORTH);
panel.setBackground(Color.decode(“330020″));
scrollPane.getViewport().add(tArea);
frame.add(scrollPane, BorderLayout.CENTER);
scrollPane.setBackground(Color.decode(“330020″));
//scrollPane.setForeground(Color.decode(“990020″));
tArea.setEditable(true);
tArea.setFont(new Font(“Monospaced”,Font.PLAIN,45));
tArea.addKeyListener(this);
FileInputStream fstream = new FileInputStream(currentFile);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
frame.setTitle(currentFile);
panel.setBorder(new TitledBorder(“Notepad Pro”));
frame.setSize(800,600);
//frame1.setOpacity(78);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}catch(Exception exc){
System.out.println(“”);}
}

// ACTION PERFORMING USING ACTION COMMANDS

@Override
public void actionPerformed(ActionEvent e)
{
//saveOld();
if(e.getActionCommand().equals(“Open…”)){
int asd = filechooser.showOpenDialog(panel);
if(asd==filechooser.APPROVE_OPTION)
{
readInFile(filechooser.getSelectedFile().getAbsolutePath());
}
else if(asd==filechooser.CANCEL_OPTION)
{
//item3.setEnabled(true);
System.out.println(“”);
}
}

else if(e.getActionCommand().equals(“Save As”)){
saveFileAs();
}

else if(e.getActionCommand().equals(“Save”)){
if(currentFile.equals(“Untitled”))
saveFileAs();
else
saveFile(currentFile);
}

if(e.getActionCommand().equals(“Enter Full Screen”))
{
check = true;
if(cb6.getState()==true){
frame.setSize(1280,720);
}
else if(cb6.getState()==false)
{
frame.setSize(800,600);
}
}

else if(e.getActionCommand().equals(“Hide Toolbar”))
{
check = true;
if(cb.getState()==true){
toolBar.setVisible(false);
}
else if(cb.getState()==false)
{
toolBar.setVisible(true);
}
}

else if(e.getActionCommand().equals(“Hide Editor”))
{
check = true;
if(cb2.getState()==true){
scrollPane.setVisible(false);
}
else if(cb2.getState()==false)
{
scrollPane.setVisible(true);
}
}

else if(e.getActionCommand().equals(“Show Window”))
{
check = false;
if(cb3.getState()==true){
frame.setVisible(true);
}
else if(cb3.getState()==false)
{
frame.setVisible(false);
}
}

else if(e.getActionCommand().equals(“Exit”))
{
saveOld();
System.exit(0);
}

else if(e.getActionCommand().equals(“Cut”))
{
//String selerea = tArea.getSelectedText();
//selerea.replaceAll(“”,””);
Action Cut = map.get(DefaultEditorKit.cutAction);
}

else if(e.getActionCommand().equals(“Copy”))
{
tArea.getSelectedText();
Action Copy = map.get(DefaultEditorKit.copyAction);
}

else if(e.getActionCommand().equals(“Paste”))
{
tArea.getSelectedText();
Action Paste = map.get(DefaultEditorKit.pasteAction);
}

else if(e.getActionCommand().equals(“Delete”))
{
String selec = tArea.getSelectedText();
Action Cut = map.get(DefaultEditorKit.cutAction);
}

else if(e.getActionCommand().equals(“Delete All”))
{
tArea.selectAll();
tArea.removeAll();
}

else if(e.getActionCommand().equals(“Select All”))
{
tArea.selectAll();
}

else if(e.getActionCommand().equals(“Font Pane”))
{
subFrame();

}
// FONT COLOR METHOD TO CHANGE TO RED
else if(e.getActionCommand().equals(“RED”))
{
check = true;
if(c.getState()==true)
{
tArea.setBackground(Color.red);
}
else if(c.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO GREEN
else if(e.getActionCommand().equals(“GREEN”))
{
check = true;
if(c1.getState()==true){
tArea.setBackground(Color.GREEN);
}
else if(c1.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}

else if(e.getActionCommand().equals(“BLUE”))
{
check = true;
if(c2.getState()==true){
tArea.setBackground(Color.BLUE);
}
else if(c2.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO ORANGE
else if(e.getActionCommand().equals(“ORANGE”))
{
check = true;
if(c3.getState()==true){
tArea.setBackground(Color.ORANGE);
}
else if(c3.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}

else if(e.getActionCommand().equals(“YELLOW”))
{
check = true;
if(c4.getState()==true)
{
tArea.setBackground(Color.YELLOW);
}
else if(c4.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}

else if(e.getActionCommand().equals(“GRAY”))
{
check = true;
if(c5.getState()==true){
tArea.setBackground(Color.GRAY);
}
else if(c5.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO PINK
else if(e.getActionCommand().equals(“PINK”))
{
check = true;
if(c6.getState()==true){
tArea.setBackground(Color.PINK);
}
else if(c6.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO LIGHT GRAY
else if(e.getActionCommand().equals(“LIGHT GRAY”))
{
check = true;
if(c7.getState()==true){
tArea.setBackground(Color.LIGHT_GRAY);
}else if(c7.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO DARK GRAY
else if(e.getActionCommand().equals(“DARK GRAY”))
{
check = true;
if(c8.getState()==true){
tArea.setBackground(Color.DARK_GRAY);
tArea.setFont(new Font(“Monospaced”,Font.BOLD,45));
}
else if(c8.getState()==false)
{
tArea.setBackground(Color.WHITE);
}
}
// FONT COLOR METHOD TO CHANGE TO BLACK
else if(e.getActionCommand().equals(“DEFAULT !!”))
{
check = true;
if(c9.getState()==true){
tArea.setBackground(Color.WHITE);
tArea.setFont(new Font(“Monospaced”,Font.BOLD,45));
}
else if(c9.getState()==false)
{
tArea.setBackground(Color.GRAY);
}
}

// ACTION LISTENER FOR FONT COLOR CHOOSER
else if(e.getActionCommand().equals(“Font Colorr”))
{
colorChoose.setVisible(true);

}
}

/* ____________________________________________________________________________________________ */
// MAIN METHOD FOR NOTEPADPRO
public static void main(String []args)
{
new NotePadPro();
}
/* ____________________________________________________________________________________________ */
@Override
public void keyPressed(KeyEvent es)
{
try{
//throw new UnsupportedOperationException(“Not supported yet.”); //To change body of generated methods, choose Tools | Templates.
changed = true;
item2.setEnabled(true);
item3.setEnabled(true);
item4.setEnabled(true);
item5.setEnabled(true);
}catch(Exception ex){
System.out.println(“ex”+ex);}

}
@Override
public void keyTyped(KeyEvent es) {
try{
}catch(Exception ex){System.out.println(“”);}

}

@Override
public void keyReleased(KeyEvent es) {
try{
}catch(Exception ex){System.out.println(“ex”+ex);}
}

ActionMap map = tArea.getActionMap();
Action Cut = map.get(DefaultEditorKit.cutAction);
Action Copy = map.get(DefaultEditorKit.copyAction);
Action Paste = map.get(DefaultEditorKit.pasteAction);
Action Selecto = map.get(DefaultEditorKit.selectAllAction);
Action Beep = map.get(DefaultEditorKit.beepAction);
Action Wrap = map.get(DefaultEditorKit.insertBreakAction);

private void saveFileAs(){
if(filechooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
{
saveFile(filechooser.getSelectedFile().getAbsolutePath());
}
}

// METHOD FOR SAVING OPENED FILE
private void saveOld(){
if(currentFile==”Untitle”)
{
if(JOptionPane.showConfirmDialog(null, “Would You Like to Save “+
currentFile+”? “,”Save”,JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
saveFile(currentFile);
}
}
// METHOD FOR FILE READING & WRITING
private void readInFile(String fileName)
{
try{
FileReader fRead = new FileReader(fileName);
tArea.read(fRead, null);
fRead.close();
currentFile = fileName;
frame.setTitle(currentFile);
changed = false;

}catch(IOException exc){
}
}
// METHOD FOR FILE SAVING
private void saveFile(String fileName){
try{
FileWriter fwr = new FileWriter(fileName);
tArea.write(fwr);
fwr.close();
currentFile = fileName;
frame.setTitle(currentFile);
changed = false;
item2.setEnabled(false);
}catch(Exception exc){
System.out.println(“”);}
}
// METHOD FOR FONT FRAME FRAME1
private void subFrame()
{

// FRAME FOR FONTS
frame1 = new JFrame(“Font”);
panel1 = new JPanel();
Container cont1 = frame1.getContentPane();
frame1.add(panel1);
panel1.setLayout(new GridLayout(1,2));

// SET UP FOR FONT COLOR
fontCol = new JButton(“Font Colorr”);
panel1.add(fontCol, BorderLayout.NORTH);
panel1.add(colorChoose);
//colorChoose.add(fontCol);
fontCol.add(colorChoose);
fontCol.addActionListener(this);
colorChoose.setVisible(false);

// SET UP FOR FONT SIZE
scPane.getViewport().add(fonts);
panel1.add(scPane);
fonts.setVisibleRowCount(7);
fonts.setBorder(new TitledBorder(“Font Size”));
scPane.add(tField);
fonts.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

// SET UP FOR FONT TYPE
scPane1.getViewport().add(fontFamily);
panel1.add(scPane1);
fontFamily.setBorder(new TitledBorder(“Font Type”));
fontFamily.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

frame1.setSize(400,300);
frame1.setVisible(true);
}
}

_________________________________________________________________________________________________

NOTE: SOME OF THE BUTTONS OR FUNCTIONS MIGHT NOT WORK PROPERLY

AS THIS SOURCE CODE IS JUST FOR DEMONSTRATION PURPOSE !!
HOPE YOU LIKE IT !
AN UPDATED VERSION WILL BE AVAILABLE SOON.

if you feel like : “oh, its good”, then please like and share !!


Leave a Reply

Your email address will not be published. Required fields are marked *