package net.java.nboglpack.glsleditor;
/**
* Created on 26. March 2007, 00:49
*
*/
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import net.java.nboglpack.glslcompiler.GLSLCompilerService;
import org.openide.loaders.DataObject;
import org.openide.util.Lookup;
import org.openide.util.RequestProcessor;
/**
* Observes an DataObject for document updates and starts compilation automatically.
* @author Michael Bien
*/
public class GlslShaderFileObserver implements DocumentListener {
private final DataObject observedDao;
private final static RequestProcessor RP = new RequestProcessor("compiler");
private final RequestProcessor.Task compilerTask;
private boolean runOnDocUpdate = true;
private int compileDelay = 500;
public GlslShaderFileObserver(DataObject dao) {
observedDao = dao;
compilerTask = RP.create(new Runnable() {
public void run() {
GLSLCompilerService compiler = Lookup.getDefault().lookup(GLSLCompilerService.class);
compiler.compileShader(new DataObject[] {observedDao}, false);
}
});
compilerTask.setPriority(Thread.MIN_PRIORITY);
}
// DocumentListener
public void insertUpdate(DocumentEvent arg0) {
if(runOnDocUpdate)
runCompileTask();
}
public void removeUpdate(DocumentEvent arg0) {
if(runOnDocUpdate)
runCompileTask();
}
public void changedUpdate(DocumentEvent arg0) {
}
public final void runCompileTask() {
compilerTask.schedule(compileDelay);
}
public void setCompileDelay(int compileDelay) {
this.compileDelay = compileDelay;
}
public void setRunOnDocUpdate(boolean runOnDocUpdate) {
this.runOnDocUpdate = runOnDocUpdate;
}
}