diff --git a/src/controller/Controller.java b/src/controller/Controller.java new file mode 100644 index 0000000..3c6eede --- /dev/null +++ b/src/controller/Controller.java @@ -0,0 +1,39 @@ +package controller; + +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileNameExtensionFilter; + +import controller.actionlistener.OpenActionListener; +import view.TextEditorFrame; +import view.jmenuitem.BaseItem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class Controller { + private final TextEditorFrame textEditorFrame = new TextEditorFrame(); + private final JFileChooser fileExplorer = new JFileChooser(); + + public Controller() { + //You could create it's own controller that you can call in this big controller. + //something like JMenuItemController menuItemController = new JMenuItemController(); + //menuItemController.control(); + String filePath = "C:/Users/Dhruv/Desktop/Java Course Materials/"; //default file path name - yet to be given by professor! + fileExplorer.setCurrentDirectory(new File(filePath)); // 'Citation: From the problem statement (example)' + FileNameExtensionFilter filter = new FileNameExtensionFilter("Text files", "txt"); // Filter to accept only file with .txt extension + fileExplorer.setFileFilter(filter); + + BaseItem openItem = textEditorFrame + .getTextEditorMenuBar() + .getFileMenu() + .getOpenItem(); + + textEditorFrame + .getTextEditorMenuBar() + .getFileMenu().addItemActionListener(openItem, new OpenActionListener(fileExplorer, textEditorFrame)); + } +} diff --git a/src/controller/actionlistener/OpenActionListener.java b/src/controller/actionlistener/OpenActionListener.java new file mode 100644 index 0000000..57a1c78 --- /dev/null +++ b/src/controller/actionlistener/OpenActionListener.java @@ -0,0 +1,78 @@ +package controller.actionlistener; + +import java.awt.Color; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JTextArea; +import javax.swing.text.Highlighter; + +import view.TextEditorFrame; +import view.jmenuitem.BaseItem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class OpenActionListener implements ActionListener { + private Highlighter hl; + private BaseItem openItem; + private JFileChooser fileExplorer; + private JTextArea jta; + private JLabel label; + + + public OpenActionListener(JFileChooser fileExplorer, TextEditorFrame textEditorFrame) { + this.openItem = textEditorFrame.getTextEditorMenuBar().getFileMenu().getOpenItem(); + this.fileExplorer = fileExplorer; + this.jta = ((JTextArea) textEditorFrame.getTextEditorScrollPane().getViewport().getView()); + this.hl = jta.getHighlighter(); + this.label = textEditorFrame.getLabel(); + } + + @Override + public void actionPerformed(ActionEvent e) { + hl.removeAllHighlights(); + String getFileName; + String getFilePath; + if (e.getSource().equals(openItem)) { // action when user selects open menuitem + fileExplorer.setDialogTitle("Choose a File to open"); + int result = fileExplorer.showOpenDialog(fileExplorer); // opening the open dialogue window + if (result == JFileChooser.APPROVE_OPTION) { // when user chooses open option + File file = fileExplorer.getSelectedFile(); + getFilePath = fileExplorer.getSelectedFile().getPath(); //getting the complete path of the file + getFileName = fileExplorer.getSelectedFile().getName(); // getting the name of the file + FileReader fr; + try { + fr = new FileReader(getFilePath); + jta.setFont(new Font("Serif", Font.PLAIN, 20)); + jta.setBackground(Color.WHITE); + jta.setBorder(null); + jta.read(fr, null); // reading the file chosen by user + label.setText("You have opened: " + getFileName + " file"); + + //You can add these in later.. + /*searchMenu.removeAll(); + addSearchItems.clear(); + searchMenu.add(searchMenuItem); + + oldBookMarkMenu.removeAll(); + oldBookMarkItem1.removeAll(); + addSearchItems.clear(); + addSearchItemsSorted.clear(); + bookMarkPosition.clear();*/ + } catch (IOException e1) { + label.setText("System cannot find " + getFileName); + } + } + } + + } +} diff --git a/src/view/TextEditorFrame.java b/src/view/TextEditorFrame.java new file mode 100644 index 0000000..41d0157 --- /dev/null +++ b/src/view/TextEditorFrame.java @@ -0,0 +1,53 @@ +package view; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import javax.swing.JFrame; +import javax.swing.JLabel; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class TextEditorFrame extends JFrame { + private static final String NAME = "Text Editor"; + private TextEditorScrollPane textEditorScrollPane; + private TextEditorMenuBar textEditorMenuBar; + private JLabel label = new JLabel(); + + public TextEditorFrame() { + super(NAME); + initilaze(); + setFrameSpecs(); + } + + private void initilaze() { + textEditorScrollPane = new TextEditorScrollPane(); + textEditorMenuBar = new TextEditorMenuBar(); + label.setPreferredSize(new Dimension(400, 20)); + this.add(textEditorScrollPane, BorderLayout.CENTER); + this.setJMenuBar(textEditorMenuBar); + this.add(label, BorderLayout.PAGE_END); + } + + private void setFrameSpecs() { + this.setLayout(new BorderLayout()); + this.setSize(800, 500); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + public TextEditorScrollPane getTextEditorScrollPane() { + return textEditorScrollPane; + } + + public TextEditorMenuBar getTextEditorMenuBar() { + return textEditorMenuBar; + } + + public JLabel getLabel() { + return label; + } +} diff --git a/src/view/TextEditorMenuBar.java b/src/view/TextEditorMenuBar.java new file mode 100644 index 0000000..ab6309a --- /dev/null +++ b/src/view/TextEditorMenuBar.java @@ -0,0 +1,29 @@ +package view; + +import javax.swing.JMenuBar; + +import view.jmenu.FileMenu; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class TextEditorMenuBar extends JMenuBar { + private FileMenu fileMenu; + + public TextEditorMenuBar() { + initialize(); + } + + private void initialize() { + fileMenu = new FileMenu(); + this.add(fileMenu); + } + + public FileMenu getFileMenu() { + return fileMenu; + } +} + diff --git a/src/view/TextEditorScrollPane.java b/src/view/TextEditorScrollPane.java new file mode 100644 index 0000000..98d9f49 --- /dev/null +++ b/src/view/TextEditorScrollPane.java @@ -0,0 +1,17 @@ +package view; + +import javax.swing.JScrollPane; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class TextEditorScrollPane extends JScrollPane { + + public TextEditorScrollPane() { + super(new TextEditorTextArea(), JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + } + +} diff --git a/src/view/TextEditorTextArea.java b/src/view/TextEditorTextArea.java new file mode 100644 index 0000000..e9ee56f --- /dev/null +++ b/src/view/TextEditorTextArea.java @@ -0,0 +1,23 @@ +package view; + +import java.awt.Font; +import javax.swing.JTextArea; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class TextEditorTextArea extends JTextArea { + private final static int ROWS = 20; + private final static int COLS = 60; + + public TextEditorTextArea() { + super(ROWS, COLS); + setEditable(true); + setWrapStyleWord(true); + setLineWrap(true); + setFont(new Font("Serif", Font.PLAIN, 20)); + } +} diff --git a/src/view/jmenu/FileMenu.java b/src/view/jmenu/FileMenu.java new file mode 100644 index 0000000..92fc377 --- /dev/null +++ b/src/view/jmenu/FileMenu.java @@ -0,0 +1,69 @@ +package view.jmenu; + +import java.awt.event.ActionListener; +import javax.swing.JMenu; + +import view.jmenuitem.BaseItem; +import view.jmenuitem.CloseItem; +import view.jmenuitem.ExitItem; +import view.jmenuitem.OpenItem; +import view.jmenuitem.SaveAsItem; +import view.jmenuitem.SaveItem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class FileMenu extends JMenu { + private static final String NAME = "File"; + private OpenItem openItem; + private CloseItem closeItem; + private SaveAsItem saveAsItem; + private SaveItem saveItem; + private ExitItem exitItem; + + public FileMenu() { + super(NAME); + openItem = new OpenItem(); + closeItem = new CloseItem(); + saveAsItem = new SaveAsItem(); + saveItem = new SaveItem(); + exitItem = new ExitItem(); + this.add(openItem); + this.addSeparator(); + this.add(closeItem); + this.addSeparator(); + this.add(saveAsItem); + this.addSeparator(); + this.add(saveItem); + this.addSeparator(); + this.add(exitItem); + this.addSeparator(); + } + + public void addItemActionListener(BaseItem item, ActionListener listener) { + item.addActionListener(listener); + } + + public OpenItem getOpenItem() { + return openItem; + } + + public CloseItem getCloseItem() { + return closeItem; + } + + public SaveAsItem getSaveAsItem() { + return saveAsItem; + } + + public SaveItem getSaveItem() { + return saveItem; + } + + public ExitItem getExitItem() { + return exitItem; + } +} diff --git a/src/view/jmenuitem/BaseItem.java b/src/view/jmenuitem/BaseItem.java new file mode 100644 index 0000000..d8d81b0 --- /dev/null +++ b/src/view/jmenuitem/BaseItem.java @@ -0,0 +1,16 @@ +package view.jmenuitem; + +import javax.swing.JMenuItem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class BaseItem extends JMenuItem { + + protected BaseItem(String name) { + super(name); + } +} diff --git a/src/view/jmenuitem/CloseItem.java b/src/view/jmenuitem/CloseItem.java new file mode 100644 index 0000000..2b729ed --- /dev/null +++ b/src/view/jmenuitem/CloseItem.java @@ -0,0 +1,14 @@ +package view.jmenuitem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class CloseItem extends BaseItem { + + public CloseItem() { + super("Close"); + } +} diff --git a/src/view/jmenuitem/ExitItem.java b/src/view/jmenuitem/ExitItem.java new file mode 100644 index 0000000..95441c6 --- /dev/null +++ b/src/view/jmenuitem/ExitItem.java @@ -0,0 +1,13 @@ +package view.jmenuitem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class ExitItem extends BaseItem { + public ExitItem() { + super("Exit"); + } +} diff --git a/src/view/jmenuitem/OpenItem.java b/src/view/jmenuitem/OpenItem.java new file mode 100644 index 0000000..db2de2c --- /dev/null +++ b/src/view/jmenuitem/OpenItem.java @@ -0,0 +1,14 @@ +package view.jmenuitem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class OpenItem extends BaseItem { + + public OpenItem() { + super("Open..."); + } +} diff --git a/src/view/jmenuitem/SaveAsItem.java b/src/view/jmenuitem/SaveAsItem.java new file mode 100644 index 0000000..9dcdc1f --- /dev/null +++ b/src/view/jmenuitem/SaveAsItem.java @@ -0,0 +1,13 @@ +package view.jmenuitem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class SaveAsItem extends BaseItem { + public SaveAsItem() { + super("Save as..."); + } +} diff --git a/src/view/jmenuitem/SaveItem.java b/src/view/jmenuitem/SaveItem.java new file mode 100644 index 0000000..c0e1dbf --- /dev/null +++ b/src/view/jmenuitem/SaveItem.java @@ -0,0 +1,13 @@ +package view.jmenuitem; + +/** + * Description + * + * @author swkumar (swkumar@groupon.com) + * @since 1.0.0 + */ +public class SaveItem extends BaseItem { + public SaveItem() { + super("Save"); + } +}