import gdxstudio.panel.ConsolePanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.IOException;
import javax.swing.Timer;
import javax.swing.ToolTipManager;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import org.fife.rsta.ac.LanguageSupport;
import org.fife.rsta.ac.LanguageSupportFactory;
import org.fife.rsta.ac.java.JavaLanguageSupport;
import org.fife.ui.autocomplete.DefaultCompletionProvider;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaHighlighter;
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
import org.fife.ui.rsyntaxtextarea.TextEditorPane;
import org.fife.ui.rtextarea.SearchContext;
import org.fife.ui.rtextarea.SearchEngine;
final public class Editor extends TextEditorPane {
private static final long serialVersionUID = 1L;
static DefaultCompletionProvider provider = new DefaultCompletionProvider();
public static SearchContext context = new SearchContext();
final private Timer saveTimer = new Timer(60000, new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
super(TextEditorPane.INSERT_MODE, true);
setMargin(new Insets(0, 0, 0, 0));
setMarginLineEnabled(true);
setMarginLineColor(new Color(248,248,248)); //FIXME color not changing
setAntiAliasingEnabled(true);
setAutoIndentEnabled(true);
setBracketMatchingEnabled(true);
setUseFocusableTips(true);
setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
LanguageSupportFactory lsf = LanguageSupportFactory.get();
LanguageSupport support = lsf.getSupportFor(SYNTAX_STYLE_JAVA);
LanguageSupportFactory.get().register(this);
ToolTipManager.sharedInstance().registerComponent(this);
JavaLanguageSupport jls = (JavaLanguageSupport)support;
jls.getParser(this).setEnabled(false);
jls.getJarManager().addCurrentJreClassFileSource();
jls.setAutoActivationEnabled(true);
jls.setAutoCompleteEnabled(true);
jls.setAutoActivationDelay(50);
String filename = this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile();
if(filename.endsWith(".jar"))
jls.getJarManager().addClassFileSource(new File(filename));
} catch (IOException ioe) {
((RSyntaxTextAreaHighlighter ) getHighlighter()).setDrawsLayeredHighlights(false);
addFocusListener(new FocusListener(){
public void focusGained(FocusEvent arg0) {
public void focusLost(FocusEvent arg0) {
addCaretListener(new CaretListener(){
public void caretUpdate(CaretEvent e) {
StatusBar.updateCaret(getCaretLineNumber()+1, getCaretOffsetFromLineStart()+1);
if(Frame.scenePanel.selectedValueExists()){
setText(Export.readFile("source/"+Frame.scenePanel.getSelectedValue()+".java"));
if(Frame.scenePanel.selectedValueExists()){
Export.writeFile("source/"+Frame.scenePanel.getSelectedValue()+".java", getText());
ConsolePanel.compile(Frame.scenePanel.getSelectedValue());
setFont(getFont().deriveFont(zoomSize));
setFont(getFont().deriveFont(zoomSize));
public void find(String text){
context.setSearchFor(text);
SearchEngine.find(this, context);
public void replace(String text, String replaceText){
context.setSearchFor(text);
context.setReplaceWith(replaceText);
SearchEngine.replace(this, context);
public void replaceAll(String text, String replaceText){
context.setSearchFor(text);
context.setReplaceWith(replaceText);
SearchEngine.replaceAll(this, context);
public void addWarning(int line, String tip){
if(getLineCount() >= line){
Content.editorScroll.getGutter().addLineTrackingIcon(line-1, Icon.icon("warning"), tip);
catch (BadLocationException e){
public void addError(int line, String tip){
if(getLineCount() >= line){
Content.editorScroll.getGutter().addLineTrackingIcon(line-1, Icon.icon("error"), tip);
catch (BadLocationException e){
public void clearIcons(){
Content.editorScroll.getGutter().removeAllTrackingIcons();