/*******************************************************************************
* Copyright (c) 2010 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
package org.eclipse.xtext.gmf.glue.partialEditing;
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 com.google.inject.Inject;
import com.google.inject.Provider;
/**
* @author Sebastian Zarnekow - Initial contribution and API
*/
public class HighlightingHelper implements IPropertyChangeListener {
@Inject
private Provider<HighlightingReconciler> reconcilerProvider;
@Inject
private Provider<HighlightingPresenter> presenterProvider;
@Inject
private IPreferenceStoreAccess preferenceStoreAccessor;
/** Highlighting presenter */
private HighlightingPresenter fPresenter;
/** Highlighting reconciler */
private HighlightingReconciler fReconciler;
/** The source viewer */
private XtextSourceViewer fSourceViewer;
/** The source viewer configuration */
private XtextSourceViewerConfiguration fConfiguration;
/** The presentation reconciler */
private XtextPresentationReconciler fPresentationReconciler;
/**
* @param configuration
* @param sourceViewer
*
*/
public void install(XtextSourceViewerConfiguration configuration, XtextSourceViewer sourceViewer) {
fSourceViewer= sourceViewer;
fConfiguration= configuration;
fPresentationReconciler= (XtextPresentationReconciler) fConfiguration.getPresentationReconciler(sourceViewer);
preferenceStoreAccessor.getPreferenceStore().addPropertyChangeListener(this);
enable();
}
/**
* Enable advanced highlighting.
*/
private void enable() {
fPresenter= getPresenterProvider().get();
fPresenter.install(fSourceViewer, fPresentationReconciler);
if (fSourceViewer.getDocument() != null) {
fReconciler= reconcilerProvider.get();
fReconciler.install(fSourceViewer, fPresenter);
}
}
/**
*
*/
public void uninstall() {
disable();
preferenceStoreAccessor.getPreferenceStore().removePropertyChangeListener(this);
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 HighlightingReconciler getReconciler() {
return fReconciler;
}
/**
* @param reconcilerProvider
*
*/
public void setReconcilerProvider(Provider<HighlightingReconciler> reconcilerProvider) {
this.reconcilerProvider = reconcilerProvider;
}
/**
* @return Provider<HightlightingReconciler>
*
*/
public Provider<HighlightingReconciler> getReconcilerProvider() {
return reconcilerProvider;
}
/**
* @param presenterProvider
*
*/
public void setPresenterProvider(Provider<HighlightingPresenter> presenterProvider) {
this.presenterProvider = presenterProvider;
}
/**
* @return Provider<HightlightingPresented>
*/
public Provider<HighlightingPresenter> getPresenterProvider() {
return presenterProvider;
}
/**
* @param preferenceStoreAccessor
*
*/
public void setPreferenceStoreAccessor(IPreferenceStoreAccess preferenceStoreAccessor) {
this.preferenceStoreAccessor = preferenceStoreAccessor;
}
/**
* @return IPreferenceStoreAccessor
*
*/
public IPreferenceStoreAccess getPreferenceStoreAccessor() {
return preferenceStoreAccessor;
}
public void propertyChange(PropertyChangeEvent event) {
if (fReconciler != null && event.getProperty().contains(".syntaxColorer.tokenStyles"))
fReconciler.refresh();
}
}