blob: f0910ac0904dc4592a7628ba64608010e5a877aa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BestSolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
******************************************************************************/
package org.eclipse.e4.demo.simpleide.jdt.internal.editor;
import javax.inject.Inject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.Path;
import org.eclipse.e4.demo.simpleide.editor.IDocumentInput;
import org.eclipse.e4.demo.simpleide.jdt.internal.editor.scanners.IJavaColorConstants;
import org.eclipse.e4.demo.simpleide.jdt.internal.editor.scanners.IJavaPartitions;
import org.eclipse.e4.demo.simpleide.jdt.internal.editor.scanners.JavaSourceViewerConfiguration;
import org.eclipse.e4.demo.simpleide.jdt.internal.editor.scanners.JavaTextTools;
import org.eclipse.e4.demo.simpleide.jdt.internal.editor.scanners.PreferenceConstants;
import org.eclipse.e4.demo.simpleide.outline.IOutlinePageProvider;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.model.application.ui.basic.MInputPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.VerticalRuler;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
public class JavaEditor implements IOutlinePageProvider {
private static final int VERTICAL_RULER_WIDTH = 12;
private IDocumentInput input;
private static PreferenceStore store = new PreferenceStore();
static {
store.setDefault(IJavaColorConstants.JAVA_MULTI_LINE_COMMENT, "102,153,102"); // 669966
store.setDefault(IJavaColorConstants.JAVA_SINGLE_LINE_COMMENT, "102,153,102"); // 669966
store.setDefault(IJavaColorConstants.JAVA_STRING, "51,0,255"); // 3300FF
store.setDefault(IJavaColorConstants.JAVADOC_DEFAULT, "51,102,204"); // 3366CC
store.setDefault(IJavaColorConstants.JAVADOC_KEYWORD, "51,102,204");
store.setDefault(IJavaColorConstants.JAVADOC_KEYWORD+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
store.setDefault(IJavaColorConstants.JAVADOC_LINK, "255,0,255");
store.setDefault(IJavaColorConstants.JAVADOC_TAG, "255,255,0");
store.setDefault(IJavaColorConstants.TASK_TAG, "255,100,0");
store.setDefault(IJavaColorConstants.JAVA_KEYWORD, "153,51,102"); // 993366
store.setDefault(IJavaColorConstants.JAVA_KEYWORD+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
store.setDefault(IJavaColorConstants.JAVA_DEFAULT, "0,0,0");
store.setDefault(IJavaColorConstants.JAVA_KEYWORD_RETURN, "153,51,102"); // 993366
store.setDefault(IJavaColorConstants.JAVA_KEYWORD_RETURN+PreferenceConstants.EDITOR_BOLD_SUFFIX, true);
store.setDefault(IJavaColorConstants.JAVA_OPERATOR, "0,0,0");
store.setDefault(IJavaColorConstants.JAVA_BRACKET, "0,0,0");
}
private static final JavaTextTools textTools = new JavaTextTools(store, true);
private ICompilationUnit compilationUnit;
//TODO We should try to get access to the file through injection
private MPart part;
private IWorkspace workspace;
@Inject
public JavaEditor(Composite parent, IDocumentInput input, IWorkspace workspace, MPart part) {
this.input = input;
this.part = part;
this.workspace = workspace;
VerticalRuler verticalRuler = new VerticalRuler(VERTICAL_RULER_WIDTH);
int styles= SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION;
SourceViewer viewer = new SourceViewer(parent, verticalRuler, styles);
Font f = null;
if( ! JFaceResources.getFontRegistry().hasValueFor("JavaEditorFont") ) {
if( SWT.getPlatform().equals("carbon") || SWT.getPlatform().equals("cocoa") ) {
JFaceResources.getFontRegistry().put("JavaEditorFont", new FontData[] {new FontData("Monaco",11,SWT.NONE)});
}
}
f = JFaceResources.getFontRegistry().get("JavaEditorFont");
viewer.getTextWidget().setFont(f);
viewer.configure(new JavaSourceViewerConfiguration(textTools));
IDocument document = input.getDocument();
textTools.setupJavaDocumentPartitioner(document, IJavaPartitions.JAVA_PARTITIONING);
viewer.setDocument(document);
}
ICompilationUnit getCompilationUnit() {
if( compilationUnit == null ) {
String uri = ((MInputPart)part).getInputURI();
Path p = new Path(uri);
IFile file = workspace.getRoot().getFile(p);
compilationUnit = (ICompilationUnit) JavaCore.create(file);
}
return compilationUnit;
}
@Persist
public void save() {
System.err.println("Saving ...");
input.save();
}
public Class<?> getOutlineClass() {
return JDTOutlinePage.class;
}
}