diff --git a/.gitignore b/.gitignore index 037e9ef..c4dc2a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .settings/ target/ *.class +config.yaml \ No newline at end of file diff --git a/README.md b/README.md index df80d3a..e350bd2 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Student ID: 19023939 ### *Student 2* ```css Name: Jack Sandford; -Student ID: ??? +Student ID: 19025303 ``` --- @@ -30,4 +30,6 @@ Fletcher: ``` Jack: +```css + ``` --- diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..2f4e2c7 --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + nz.ac.massey.cs + nz.ac.massey.cs.flackpad + 0.3.4-SNAPSHOT + + + + maven-compiler-plugin + 3.8.1 + + 16 + 16 + + + + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + nz.ac.massey.cs.flackpad.RunApp + + + + + + + + + + 16 + 16 + 16 + UTF-8 + + diff --git a/pom.xml b/pom.xml index aa0e1ab..40cf87a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 nz.ac.massey.cs nz.ac.massey.cs.flackpad - 0.3.4-SNAPSHOT + 0.3.5 16 16 @@ -22,6 +22,11 @@ itextpdf 5.5.13.2 + + org.yaml + snakeyaml + 1.29 + diff --git a/src/main/java/nz/ac/massey/cs/flackpad/Config.java b/src/main/java/nz/ac/massey/cs/flackpad/Config.java new file mode 100644 index 0000000..a8c1888 --- /dev/null +++ b/src/main/java/nz/ac/massey/cs/flackpad/Config.java @@ -0,0 +1,89 @@ +package nz.ac.massey.cs.flackpad; + +import java.awt.Font; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; + +class Config { + + private Window window; + private Map defaults = new LinkedHashMap(); + private Map config = new LinkedHashMap(); + + Config(Window window) { + this.window = window; + + loadDefaults(); + loadConfigFile(); + } + + private void loadDefaults() { + defaults.put("fontFamily", "Consolas"); + defaults.put("fontStyle", Font.PLAIN); + defaults.put("fontSize", 12); + } + + void loadConfigFile() { + // Read config file + Yaml yaml = new Yaml(); + + try { + InputStream inputStream = new FileInputStream("config.yaml"); + config = yaml.load(inputStream); + inputStream.close(); + } catch (FileNotFoundException e) { + Dialogs.error("Configuration file does not exist, using defaults", window); + } catch (IOException e) { + Dialogs.error("Something wen't wrong when loading configuration file", window); + } + + // Set missing values with defaults + for (String key:defaults.keySet()) { + if (!config.containsKey(key)) config.put(key, defaults.get(key)); + } + + // Save config + saveConfigFile(); + } + + void saveConfigFile() { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setPrettyFlow(true); + Yaml yaml = new Yaml(options); + + try { + PrintWriter writer = new PrintWriter("config.yaml"); + yaml.dump(config, writer); + writer.flush(); + writer.close(); + } catch (IOException e) { + Dialogs.error("Something wen't wrong when saving configuration", window); + } + } + + Font getFont() { + try { + return new Font((String) config.get("fontFamily"), (int) config.get("fontStyle"), (int) config.get("fontSize")); + } catch (Exception e) { + Dialogs.error("Something wen't wrong when loading the configured font, using defaults", window); + } + setFont(new Font((String) defaults.get("fontFamily"), (int) defaults.get("fontStyle"), (int) defaults.get("fontSize"))); + return getFont(); + } + + void setFont(Font font) { + config.put("fontFamily", font.getFamily()); + config.put("fontStyle", font.getStyle()); + config.put("fontSize", font.getSize()); + } + +} diff --git a/src/main/java/nz/ac/massey/cs/flackpad/TextArea.java b/src/main/java/nz/ac/massey/cs/flackpad/TextArea.java index 131fec6..af99616 100644 --- a/src/main/java/nz/ac/massey/cs/flackpad/TextArea.java +++ b/src/main/java/nz/ac/massey/cs/flackpad/TextArea.java @@ -39,6 +39,12 @@ void addTimeAndDate() { } } + void setFontWithZoom(Font font) { + fontSize = font.getSize(); + setFont(font); + zoom(); + } + //Zoom methods work by changing font size void zoomIn() { if (fontPercentage < 1000) { diff --git a/src/main/java/nz/ac/massey/cs/flackpad/Window.java b/src/main/java/nz/ac/massey/cs/flackpad/Window.java index 0ccfa03..d5d59b5 100644 --- a/src/main/java/nz/ac/massey/cs/flackpad/Window.java +++ b/src/main/java/nz/ac/massey/cs/flackpad/Window.java @@ -17,6 +17,7 @@ class Window extends JFrame { private String name = "FlackPad"; private JFrame frame; private WindowListener winListener; + private Config config; private MenuBar menuBar; private TextArea textArea; @@ -32,14 +33,11 @@ class Window extends JFrame { frame = new JFrame(fileName + " - " + name); // Add icon -// ImageIcon icon = new ImageIcon("./flackpad.png"); -// System.out.println(icon.getImageLoadStatus()); -// frame.setIconImage(icon.getImage()); frame.setIconImages(List.of( - new ImageIcon("16x16.png").getImage(), - new ImageIcon("32x32.png").getImage(), - new ImageIcon("64x64.png").getImage(), - new ImageIcon("128x128.png").getImage())); + new ImageIcon("icons/16x16.png").getImage(), + new ImageIcon("icons/32x32.png").getImage(), + new ImageIcon("icons/64x64.png").getImage(), + new ImageIcon("icons/128x128.png").getImage())); // Add window listener winListener = new WinListener(this); @@ -61,6 +59,12 @@ class Window extends JFrame { frame.setSize(1000, 500); frame.setVisible(true); frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + + // Get config + config = new Config(this); + + // Set configuration + textArea.setFontWithZoom(config.getFont()); } void newDoc() { @@ -85,6 +89,7 @@ void exit() { if (saveChoice == JOptionPane.YES_OPTION) saved = FileIO.save(this); if (saved == FileIO.SAVED) { + config.saveConfigFile(); frame.dispose(); } } @@ -126,7 +131,6 @@ void setFile(File file) { this.file = file; fileName = file == null ? "Untitled" : file.getName(); fileMIME = FileIO.getFileMIME(file); -// System.out.println(fileMIME); } String getFileName() { diff --git a/src/main/resources/config.yaml b/src/main/resources/config.yaml new file mode 100644 index 0000000..eb60f36 --- /dev/null +++ b/src/main/resources/config.yaml @@ -0,0 +1,3 @@ +fontFamily: Consolas +fontStyle: 0 +fontSize: 12 \ No newline at end of file diff --git a/src/main/resources/128x128.png b/src/main/resources/icons/128x128.png similarity index 100% rename from src/main/resources/128x128.png rename to src/main/resources/icons/128x128.png diff --git a/src/main/resources/16x16.png b/src/main/resources/icons/16x16.png similarity index 100% rename from src/main/resources/16x16.png rename to src/main/resources/icons/16x16.png diff --git a/src/main/resources/32x32.png b/src/main/resources/icons/32x32.png similarity index 100% rename from src/main/resources/32x32.png rename to src/main/resources/icons/32x32.png diff --git a/src/main/resources/64x64.png b/src/main/resources/icons/64x64.png similarity index 100% rename from src/main/resources/64x64.png rename to src/main/resources/icons/64x64.png