diff --git a/src/com/eshimoniak/conlangstudio/Main.java b/src/com/eshimoniak/conlangstudio/Main.java index f9f4c08..99bcadb 100644 --- a/src/com/eshimoniak/conlangstudio/Main.java +++ b/src/com/eshimoniak/conlangstudio/Main.java @@ -20,7 +20,7 @@ * @author Evan Shimoniak **/ public class Main { - public static final String VERSION = "0.1.0"; + public static final String VERSION = "0.1.1"; public static File projectRoot; public static File currFile = null; private static MainWindow window; @@ -71,6 +71,7 @@ public static void setCurrFile(File f) { window.getEditorWrapper().addTab(f); window.getCurrentEditor().getRawEditor().loadFile(sb.toString().replaceAll("$\\n", "")); + window.getCurrentEditor().getRawEditor().assertMatchesFile(true); } } diff --git a/src/com/eshimoniak/conlangstudio/MarkdownExtensions.java b/src/com/eshimoniak/conlangstudio/MarkdownExtensions.java index c3ae278..d7891fa 100644 --- a/src/com/eshimoniak/conlangstudio/MarkdownExtensions.java +++ b/src/com/eshimoniak/conlangstudio/MarkdownExtensions.java @@ -20,7 +20,7 @@ public class MarkdownExtensions { private static JSONObject pConsData; public static void init() throws IOException { - InputStream in = MarkdownExtensions.class.getClassLoader().getResourceAsStream("res" + File.separatorChar + "pcons.json"); + InputStream in = MarkdownExtensions.class.getClassLoader().getResourceAsStream("res/pcons.json"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String ln = null; StringBuilder sb = new StringBuilder(); diff --git a/src/com/eshimoniak/conlangstudio/ui/panels/editor/HintingTextArea.java b/src/com/eshimoniak/conlangstudio/ui/panels/editor/HintingTextArea.java new file mode 100644 index 0000000..ca1354d --- /dev/null +++ b/src/com/eshimoniak/conlangstudio/ui/panels/editor/HintingTextArea.java @@ -0,0 +1,68 @@ +package com.eshimoniak.conlangstudio.ui.panels.editor; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; + +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.text.Document; +import javax.swing.undo.CannotUndoException; +import javax.swing.undo.UndoManager; + +public class HintingTextArea extends JTextArea { + private UndoManager undoManager; + + public HintingTextArea() { + InputMap im = getInputMap(JComponent.WHEN_FOCUSED); + ActionMap am = getActionMap(); + + undoManager = new UndoManager(); + Document doc = getDocument(); + doc.addUndoableEditListener(new UndoableEditListener() { + @Override + public void undoableEditHappened(UndoableEditEvent e) { + undoManager.addEdit(e.getEdit()); + } + }); + + setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16)); + + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Undo"); + im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Redo"); + + am.put("Undo", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + try { + if (undoManager.canUndo()) { + undoManager.undo(); + } + } catch (CannotUndoException exp) { + exp.printStackTrace(); + } + } + }); + am.put("Redo", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + try { + if (undoManager.canRedo()) { + undoManager.redo(); + } + } catch (CannotUndoException exp) { + exp.printStackTrace(); + } + } + }); + } +} diff --git a/src/com/eshimoniak/conlangstudio/ui/panels/editor/RawEditor.java b/src/com/eshimoniak/conlangstudio/ui/panels/editor/RawEditor.java index 7c13f40..cfd5fcc 100644 --- a/src/com/eshimoniak/conlangstudio/ui/panels/editor/RawEditor.java +++ b/src/com/eshimoniak/conlangstudio/ui/panels/editor/RawEditor.java @@ -2,24 +2,16 @@ import java.awt.BorderLayout; import java.awt.Font; -import java.awt.Toolkit; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; +import java.awt.Graphics; -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; -import javax.swing.KeyStroke; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.text.Document; -import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; /** @@ -28,14 +20,12 @@ **/ public class RawEditor extends JPanel { private JScrollPane scroller; - private JTextArea textArea; + private HintingTextArea textArea; private boolean matchesFile = true; - private UndoManager undoManager; public RawEditor() { super(new BorderLayout()); - textArea = new JTextArea(); - textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16)); + textArea = new HintingTextArea(); textArea.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent e) { @@ -55,50 +45,13 @@ public void changedUpdate(DocumentEvent e) { scroller = new JScrollPane(textArea); add(scroller, BorderLayout.CENTER); - undoManager = new UndoManager(); - Document doc = textArea.getDocument(); - doc.addUndoableEditListener(new UndoableEditListener() { - @Override - public void undoableEditHappened(UndoableEditEvent e) { - undoManager.addEdit(e.getEdit()); - } - }); - - InputMap im = textArea.getInputMap(JComponent.WHEN_FOCUSED); - ActionMap am = textArea.getActionMap(); - - im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Undo"); - im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "Redo"); - - am.put("Undo", new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - try { - if (undoManager.canUndo()) { - undoManager.undo(); - } - } catch (CannotUndoException exp) { - exp.printStackTrace(); - } - } - }); - am.put("Redo", new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - try { - if (undoManager.canRedo()) { - undoManager.redo(); - } - } catch (CannotUndoException exp) { - exp.printStackTrace(); - } - } - }); } + public void assertMatchesFile(boolean val) { + matchesFile = val; + } public void setText(String str) { textArea.setText(str); - matchesFile = false; } public String getText() { return textArea.getText();