package com.github.jarlakxen.scala.sbt.editor;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor;
import org.eclipse.jface.text.contentassist.IContentAssistant;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import scala.tools.eclipse.InteractiveCompilationUnit;
import scala.tools.eclipse.ScalaEditor;
import scala.tools.eclipse.ScalaPlugin;
import scala.tools.eclipse.ScalaSourceViewerConfiguration;
import scala.tools.eclipse.lexical.ScalaDocumentPartitioner;
/**
* The text editor for *.sbt files.
*
* @author Naoki Takezoe
*/
public class SbtEditor extends CompilationUnitEditor implements ScalaEditor {
private IPropertyChangeListener preferenceListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
handlePreferenceStoreChanged(event);
}
};
private SbtOutlinePage outlinePage;
public SbtEditor() {
ScalaPlugin.plugin().getPreferenceStore().addPropertyChangeListener(preferenceListener);
}
@Override
public void dispose() {
super.dispose();
ScalaPlugin.plugin().getPreferenceStore().removePropertyChangeListener(preferenceListener);
}
@Override
protected void setSourceViewerConfiguration(SourceViewerConfiguration configuration) {
if (configuration instanceof ScalaSourceViewerConfiguration) {
super.setSourceViewerConfiguration(configuration);
} else {
setSourceViewerConfiguration(new ScalaSourceViewerConfiguration(getPreferenceStore(),
ScalaPlugin.plugin().getPreferenceStore(), this) {
@Override
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
return null;
}
});
}
}
@Override
public ScalaDocumentPartitioner createDocumentPartitioner() {
return new ScalaDocumentPartitioner(false);
}
public void doSave(IProgressMonitor progressMonitor) {
super.doSave(progressMonitor);
update();
}
public void doSaveAs() {
super.doSaveAs();
update();
}
private void update() {
if (outlinePage != null) {
outlinePage.update();
}
}
@SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class adapter) {
if (IContentOutlinePage.class.equals(adapter)) {
if (outlinePage == null) {
outlinePage = new SbtOutlinePage(this);
}
return outlinePage;
}
return super.getAdapter(adapter);
}
@Override
public InteractiveCompilationUnit getInteractiveCompilationUnit() {
return (InteractiveCompilationUnit) getInputJavaElement();
}
}