Added saving/opening, and conditional quitting.

This commit is contained in:
Sebastian Cabrera 2022-10-02 15:33:22 -04:00
parent 9976b96c18
commit b00c9c40e7
5 changed files with 127 additions and 39 deletions

View file

@ -1,6 +1,6 @@
# README # # README #
This README would normally document whatever steps are necessary to get your application up and running. This is a scuffed project
### What is this repository for? ### ### What is this repository for? ###

View file

@ -8,7 +8,7 @@ public class Main {
static Window w; static Window w;
static String title = "Scrypt"; static String title = "Scrypt";
static double version = 0.1; static String version = "v0.2";
static Dimension winSize = new Dimension(1280, 720); static Dimension winSize = new Dimension(1280, 720);
public static void main(String[] args) { public static void main(String[] args) {

View file

@ -1,7 +1,21 @@
package com.okseby.io; package com.okseby.io;
public class Open { import java.io.FileReader;
public void readFile(String path) { import com.okseby.win.Window;
public class Open {
static FileReader fr;
public static void readFile(String resource) {
try {
fr = new FileReader(resource);
Window.textArea.read(fr, null);
fr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
} }

View file

@ -1,7 +1,22 @@
package com.okseby.io; package com.okseby.io;
public class Save { import java.io.FileWriter;
public Save() {
import com.okseby.win.Window;
public class Save {
static FileWriter fw;
public static void saveFile(String resource) {
try {
fw = new FileWriter(resource);
fw.write(Window.textArea.getText());
fw.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
} }

View file

@ -7,10 +7,12 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.Box; import javax.swing.Box;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuBar; import javax.swing.JMenuBar;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.UIManager; import javax.swing.UIManager;
import javax.swing.border.EtchedBorder; import javax.swing.border.EtchedBorder;
@ -21,26 +23,35 @@ import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rtextarea.RTextScrollPane; import org.fife.ui.rtextarea.RTextScrollPane;
import com.okseby.io.Open;
import com.okseby.io.Save;
import com.okseby.utils.Providers; import com.okseby.utils.Providers;
public class Window implements Runnable { public class Window implements Runnable {
public static RSyntaxTextArea textArea;
public static boolean isFileOpened;
JFrame window; JFrame window;
JMenuBar menuBar; JMenuBar menuBar;
JMenu fileMenu; JMenu fileMenu;
JMenu editMenu; JMenu editMenu;
JFileChooser browser;
JButton quitButton; JButton quitButton;
JMenuItem fileMenuItem1, fileMenuItem2, fileMenuItem3; JMenuItem fileMenuItem1, fileMenuItem2, fileMenuItem3;
JPanel fileExplorer; JPanel fileExplorer;
JPanel mainPanel; JPanel mainPanel;
RSyntaxTextArea textArea;
RTextScrollPane scrollPane; RTextScrollPane scrollPane;
CompletionProvider completionProvider; CompletionProvider completionProvider;
AutoCompletion autoComplete; AutoCompletion autoComplete;
String title; String title;
String p;
int status;
double version; double version;
Dimension winSize; Dimension winSize;
Object[] options = {"Save", "Discard"};
public void setup() { public void setup() {
menuBar.add(fileMenu); menuBar.add(fileMenu);
menuBar.add(editMenu); menuBar.add(editMenu);
@ -51,6 +62,49 @@ public class Window implements Runnable {
fileMenu.add(fileMenuItem2); fileMenu.add(fileMenuItem2);
fileMenu.add(fileMenuItem3); fileMenu.add(fileMenuItem3);
browser.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals(javax.swing.JFileChooser.APPROVE_SELECTION)) {
p = browser.getSelectedFile().getPath();
if (browser.getDialogType() == JFileChooser.OPEN_DIALOG) {
Open.readFile(p);
}
isFileOpened = true;
window.setTitle(title + " - " + browser.getSelectedFile().getName());
}
}
});
fileMenuItem1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
status = browser.showOpenDialog(window);
}
});
fileMenuItem2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (isFileOpened) {
Save.saveFile(p);
} else {
status = browser.showSaveDialog(window);
}
}
});
fileMenuItem3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.setText(null);
isFileOpened = false;
window.setTitle(title);
}
});
quitButton.setContentAreaFilled(false); quitButton.setContentAreaFilled(false);
quitButton.setBorderPainted(false); quitButton.setBorderPainted(false);
quitButton.setFocusable(false); quitButton.setFocusable(false);
@ -70,8 +124,12 @@ public class Window implements Runnable {
quitButton.addActionListener(new ActionListener() { quitButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (isFileOpened || !textArea.getText().isBlank()) {
JOptionPane.showOptionDialog(window, "Do you want to save your work?", "Unsaved changes!", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
} else {
System.exit(0); System.exit(0);
} }
}
}); });
fileExplorer.setBorder(new EtchedBorder()); fileExplorer.setBorder(new EtchedBorder());
@ -82,7 +140,7 @@ public class Window implements Runnable {
mainPanel.setBorder(new EtchedBorder()); mainPanel.setBorder(new EtchedBorder());
mainPanel.add(scrollPane); mainPanel.add(scrollPane);
textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_CPLUSPLUS);
textArea.setCodeFoldingEnabled(true); textArea.setCodeFoldingEnabled(true);
LanguageSupportFactory.get().register(textArea); LanguageSupportFactory.get().register(textArea);
@ -109,6 +167,7 @@ public class Window implements Runnable {
fileMenuItem1 = new JMenuItem("Open"); fileMenuItem1 = new JMenuItem("Open");
fileMenuItem2 = new JMenuItem("Save"); fileMenuItem2 = new JMenuItem("Save");
fileMenuItem3 = new JMenuItem("Close File"); fileMenuItem3 = new JMenuItem("Close File");
browser = new JFileChooser("");
fileExplorer = new JPanel(); fileExplorer = new JPanel();
mainPanel = new JPanel(); mainPanel = new JPanel();
textArea = new RSyntaxTextArea(); textArea = new RSyntaxTextArea();
@ -123,8 +182,8 @@ public class Window implements Runnable {
setup(); setup();
} }
public Window(String title, double version, Dimension winSize) { public Window(String title, String version, Dimension winSize) {
this.title = title + version; this.title = title + " " + version;
this.winSize = winSize; this.winSize = winSize;
} }
} }