mirror of
https://github.com/xfarrow/guify.git
synced 2025-06-05 22:09:25 +02:00
180 lines
5.5 KiB
Java
180 lines
5.5 KiB
Java
package views;
|
|
|
|
import java.awt.Color;
|
|
import javax.imageio.ImageIO;
|
|
import javax.swing.Box;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.JButton;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JTextArea;
|
|
import javax.swing.JToolBar;
|
|
import javax.swing.border.EmptyBorder;
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
|
|
import code.GuiAbstractions.Implementations.JGenericTextArea;
|
|
import controllers.NotepadController;
|
|
import views.interfaces.INotepadFrame;
|
|
|
|
import java.awt.Font;
|
|
import java.awt.Image;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.awt.event.WindowEvent;
|
|
import java.io.IOException;
|
|
import javax.swing.JScrollPane;
|
|
public class Notepad extends JFrame implements INotepadFrame {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
private NotepadController controller;
|
|
private boolean jtextAreaShouldListenForChanges = true;
|
|
private JTextArea textArea;
|
|
|
|
/**
|
|
* Create the application.
|
|
*/
|
|
public Notepad(Object controller) {
|
|
this.controller = (NotepadController) controller;
|
|
setTitle(this.controller.getFilePath());
|
|
setBounds(100, 100, 800, 600);
|
|
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
|
getContentPane().setLayout(null);
|
|
|
|
JScrollPane scrollPane = new JScrollPane();
|
|
scrollPane.setBounds(10, 38, 764, 512);
|
|
getContentPane().add(scrollPane);
|
|
|
|
textArea = new JTextArea();
|
|
scrollPane.setViewportView(textArea);
|
|
textArea.setTabSize(4);
|
|
textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
|
|
textArea.setCaretPosition(0);
|
|
textArea.getDocument().addDocumentListener(new DocumentListener() {
|
|
@Override
|
|
public void insertUpdate(DocumentEvent e) {
|
|
// Called when text is inserted into the document
|
|
handleTextChange();
|
|
}
|
|
|
|
@Override
|
|
public void removeUpdate(DocumentEvent e) {
|
|
// Called when text is removed from the document
|
|
handleTextChange();
|
|
}
|
|
|
|
@Override
|
|
public void changedUpdate(DocumentEvent e) {
|
|
// Called when attributes of the document change
|
|
// NO OP
|
|
}
|
|
|
|
private void handleTextChange() {
|
|
if(!((NotepadController)controller).isUnsaved() && jtextAreaShouldListenForChanges) {
|
|
((NotepadController)controller).setUnsaved(true);
|
|
setTitle(((NotepadController)controller).getTitle());
|
|
}
|
|
}
|
|
});
|
|
|
|
JToolBar toolBar = new JToolBar();
|
|
toolBar.setFloatable(false);
|
|
toolBar.setBounds(10, 0, 614, 37);
|
|
toolBar.setBackground(new Color(240, 240, 240));
|
|
|
|
JButton saveBtn = new JButton();
|
|
saveBtn.setBorderPainted(false);
|
|
saveBtn.setBorder(new EmptyBorder(0, 0, 0, 0)); // Set empty border
|
|
saveBtn.setToolTipText("Save");
|
|
try {
|
|
saveBtn.setIcon(new ImageIcon(ImageIO.read(getClass().getClassLoader().getResource("save_icon.png")).getScaledInstance(25, 25, Image.SCALE_SMOOTH)));
|
|
saveBtn.setBackground(new Color(240, 240, 240));
|
|
saveBtn.setBorderPainted(false);
|
|
saveBtn.setEnabled(true);
|
|
}catch(IOException ex) {
|
|
saveBtn.setText("Save");
|
|
}
|
|
saveBtn.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {
|
|
((NotepadController)controller).writeOnFile(textArea.getText());
|
|
((NotepadController)controller).setUnsaved(false);
|
|
setTitle(((NotepadController)controller).getTitle());
|
|
}
|
|
|
|
// Hover on
|
|
@Override
|
|
public void mouseEntered(MouseEvent e) {
|
|
if(saveBtn.isEnabled())
|
|
saveBtn.setBackground(new Color(220, 220, 220));
|
|
}
|
|
|
|
// Hover off
|
|
@Override
|
|
public void mouseExited(MouseEvent e) {
|
|
saveBtn.setBackground(new Color(240, 240, 240));
|
|
}
|
|
});
|
|
|
|
JButton searchBtn = new JButton();
|
|
searchBtn.setBorderPainted(false);
|
|
searchBtn.setBorder(new EmptyBorder(0, 0, 0, 0)); // Set empty border;
|
|
searchBtn.setToolTipText("Serch/Replace");
|
|
try {
|
|
searchBtn.setIcon(new ImageIcon(ImageIO.read(getClass().getClassLoader().getResource("search_icon.png")).getScaledInstance(25, 25, Image.SCALE_SMOOTH)));
|
|
searchBtn.setBackground(new Color(240, 240, 240));
|
|
searchBtn.setBorderPainted(false);
|
|
searchBtn.setEnabled(true);
|
|
}catch(IOException ex) {
|
|
searchBtn.setText("Serch/Replace");
|
|
}
|
|
searchBtn.addMouseListener(new MouseAdapter() {
|
|
@Override
|
|
public void mouseClicked(MouseEvent e) {
|
|
((NotepadController)controller).showFindAndReplace(new JGenericTextArea(textArea));
|
|
}
|
|
|
|
// Hover on
|
|
@Override
|
|
public void mouseEntered(MouseEvent e) {
|
|
if(searchBtn.isEnabled())
|
|
searchBtn.setBackground(new Color(220, 220, 220));
|
|
}
|
|
|
|
// Hover off
|
|
@Override
|
|
public void mouseExited(MouseEvent e) {
|
|
searchBtn.setBackground(new Color(240, 240, 240));
|
|
}
|
|
});
|
|
|
|
toolBar.add(saveBtn);
|
|
toolBar.add(Box.createHorizontalStrut(15));
|
|
toolBar.add(searchBtn);
|
|
|
|
getContentPane().add(toolBar);
|
|
|
|
/**
|
|
* Close "Find and Replace" if this window
|
|
* gets closed
|
|
*/
|
|
addWindowListener(new WindowAdapter() {
|
|
@Override
|
|
public void windowClosing(WindowEvent e) {
|
|
((NotepadController)controller).disposeFindAndReplaceFrame();
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Sets text in the JTextArea without triggering
|
|
* a text changed action
|
|
*/
|
|
public void displayContent(String content) {
|
|
jtextAreaShouldListenForChanges = false;
|
|
textArea.setText(content);
|
|
jtextAreaShouldListenForChanges = true;
|
|
}
|
|
|
|
}
|