package nl.rug.ai.mas.oops;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JComponent;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rtextarea.RTextScrollPane;
public class ScriptEditor {
private final RSyntaxTextArea d_textArea;
private final RTextScrollPane d_scrollPane;
private File d_file;
public ScriptEditor() {
d_textArea = new RSyntaxTextArea();
d_textArea.setFont(new Font("Monospaced", Font.PLAIN, 11));
d_textArea.setLineWrap(true);
d_textArea.setWrapStyleWord(true);
d_textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_LUA);
d_textArea.setAutoIndentEnabled(true);
d_scrollPane = new RTextScrollPane(d_textArea);
d_scrollPane.setLineNumbersEnabled(true);
}
public boolean isStyled() {
return true;
}
public void undo() {
d_textArea.undoLastAction();
}
public void redo() {
d_textArea.redoLastAction();
}
public void cut() {
d_textArea.cut();
}
public void copy() {
d_textArea.copy();
}
public void paste() {
d_textArea.paste();
}
public String getText() {
return d_textArea.getText();
}
public void setText(String newText) {
d_textArea.setText(newText);
d_textArea.discardAllEdits();
}
public JComponent getComponent() {
return d_scrollPane;
}
public void setFile(File f) {
d_file = f;
}
public File getFile() {
return d_file;
}
public void load() throws IOException {
if (d_file == null) {
throw new IOException("No file to read from.");
}
BufferedReader r = new BufferedReader(new FileReader(d_file));
StringBuffer sb = new StringBuffer(1024);
char[] chars = new char[1024];
int read = 0;
while ((read = r.read(chars)) > -1) {
sb.append(String.valueOf(chars, 0, read));
}
r.close();
setText(sb.toString());
}
public void clear() {
setText("");
}
public void write() throws IOException {
if (d_file == null) {
throw new IOException("No file to write to.");
}
BufferedWriter w = new BufferedWriter(new FileWriter(d_file));
w.write(getText());
w.close();
}
}