/**
* Copyright (c) 2015 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.base.xtext.utils.jface.viewers;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.xtext.ui.editor.XtextPresentationReconciler;
import org.eclipse.xtext.ui.editor.XtextSourceViewer;
import org.eclipse.xtext.ui.editor.XtextSourceViewerConfiguration;
import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
import org.eclipse.xtext.ui.editor.syntaxcoloring.HighlightingPresenter;
import org.eclipse.xtext.ui.editor.syntaxcoloring.TextAttributeProvider;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* Modified copy of
* org.eclipse.xtext.ui.editor.syntaxcoloring.HighlightingHelper
*/
class XtextStyledTextHighlightingHelper implements IPropertyChangeListener {
@Inject
private Provider<XtextStyledTextHighlightingReconciler> reconcilerProvider;
@Inject
private Provider<HighlightingPresenter> presenterProvider;
@Inject
private IPreferenceStoreAccess preferenceStoreAccessor;
@Inject
private TextAttributeProvider textAttributeProvider;
/** Highlighting presenter */
private HighlightingPresenter fPresenter;
/** Highlighting reconciler */
private XtextStyledTextHighlightingReconciler fReconciler;
/** The editor */
private StyledTextXtextAdapter styledTextXtextAdapter;
/** The source viewer */
private XtextSourceViewer fSourceViewer;
/** The source viewer configuration */
private XtextSourceViewerConfiguration fConfiguration;
/** The presentation reconciler */
private XtextPresentationReconciler fPresentationReconciler;
private IPreferenceStore preferenceStore;
public void install(StyledTextXtextAdapter styledTextXtextAdapter,
XtextSourceViewer sourceViewer) {
this.styledTextXtextAdapter = styledTextXtextAdapter;
fSourceViewer = sourceViewer;
if (styledTextXtextAdapter != null) {
fConfiguration = styledTextXtextAdapter
.getXtextSourceViewerConfiguration();
fPresentationReconciler = (XtextPresentationReconciler) fConfiguration
.getPresentationReconciler(sourceViewer);
} else {
fConfiguration = null;
fPresentationReconciler = null;
}
preferenceStore = getPreferenceStoreAccessor().getPreferenceStore();
preferenceStore.addPropertyChangeListener(this);
enable();
}
/**
* Enable advanced highlighting.
*/
private void enable() {
fPresenter = getPresenterProvider().get();
fPresenter.install(fSourceViewer, fPresentationReconciler);
if (styledTextXtextAdapter != null) {
fReconciler = reconcilerProvider.get();
fReconciler.install(styledTextXtextAdapter, fSourceViewer, fPresenter);
}
}
public void uninstall() {
disable();
if (preferenceStore != null) {
preferenceStore.removePropertyChangeListener(this);
}
styledTextXtextAdapter = null;
fSourceViewer = null;
fConfiguration = null;
fPresentationReconciler = null;
}
/**
* Disable advanced highlighting.
*/
private void disable() {
if (fReconciler != null) {
fReconciler.uninstall();
fReconciler = null;
}
if (fPresenter != null) {
fPresenter.uninstall();
fPresenter = null;
}
}
/**
* Returns this hightlighter's reconciler.
*
* @return the highlighter reconciler or <code>null</code> if none
*/
public XtextStyledTextHighlightingReconciler getReconciler() {
return fReconciler;
}
public void setReconcilerProvider(
Provider<XtextStyledTextHighlightingReconciler> reconcilerProvider) {
this.reconcilerProvider = reconcilerProvider;
}
public Provider<XtextStyledTextHighlightingReconciler> getReconcilerProvider() {
return reconcilerProvider;
}
public void setPresenterProvider(
Provider<HighlightingPresenter> presenterProvider) {
this.presenterProvider = presenterProvider;
}
public Provider<HighlightingPresenter> getPresenterProvider() {
return presenterProvider;
}
public void setPreferenceStoreAccessor(
IPreferenceStoreAccess preferenceStoreAccessor) {
this.preferenceStoreAccessor = preferenceStoreAccessor;
}
public IPreferenceStoreAccess getPreferenceStoreAccessor() {
return preferenceStoreAccessor;
}
public void propertyChange(PropertyChangeEvent event) {
if (fReconciler != null
&& event.getProperty().contains(".syntaxColorer.tokenStyles")) {
textAttributeProvider.propertyChange(event);
fReconciler.refresh();
}
}
}