blob: d17d3acb58d7b69760ce761dc7dac7a63b2b9a4f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2017 xored software, Inc. 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:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.ui.compare;
import java.util.Stack;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
import org.eclipse.core.runtime.Assert;
import org.eclipse.dltk.ui.DLTKUILanguageManager;
import org.eclipse.dltk.ui.IDLTKUILanguageToolkit;
import org.eclipse.dltk.ui.text.ScriptTextTools;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
/**
* Abstract base class for compare viewers.
*
* Note: {@link TextMergeViewer} uses current class name as font symbolic name,
* so it descendants should not be anonymous classes, because their class name
* is unpredictable.
*/
public class ScriptMergeViewer extends TextMergeViewer {
private static final Stack<IDLTKUILanguageToolkit> toolkitStorage = new Stack<>();
/*
* Unfortunately, super constructor creates controls and calls getTitle().
* But the fields of this instance aren't initialized yet. So, this
* workaround is used to temporary save toolkit into the static variable.
*/
private static int pushToolkit(IDLTKUILanguageToolkit toolkit) {
Assert.isNotNull(toolkit);
toolkitStorage.push(toolkit);
return SWT.LEFT_TO_RIGHT;
}
private static void popToolkit() {
toolkitStorage.pop();
}
private final IDLTKUILanguageToolkit fToolkit;
/**
* @param parent
* @param configuration
* @param title
*/
public ScriptMergeViewer(Composite parent,
CompareConfiguration configuration,
IDLTKUILanguageToolkit toolkit) {
super(parent, pushToolkit(toolkit), configuration);
popToolkit();
this.fToolkit = toolkit;
}
public ScriptMergeViewer(Composite parent,
CompareConfiguration configuration, String natureId) {
this(parent, configuration,
DLTKUILanguageManager.getLanguageToolkit(natureId));
}
protected IDLTKUILanguageToolkit getToolkit() {
return fToolkit != null ? fToolkit : toolkitStorage.peek();
}
protected ScriptTextTools getTextTools() {
return getToolkit().getTextTools();
}
protected IPreferenceStore getPreferenceStore() {
return getToolkit().getPreferenceStore();
}
@Override
public String getTitle() {
return NLS.bind("{0} Compare",
getToolkit().getCoreToolkit().getLanguageName());
}
@Override
protected void configureTextViewer(TextViewer textViewer) {
if (!(textViewer instanceof SourceViewer)) {
return;
}
final ScriptTextTools tools = getTextTools();
if (tools == null) {
return;
}
final SourceViewer sourceViewer = (SourceViewer) textViewer;
sourceViewer.configure(tools
.createSourceViewerConfiguraton(getPreferenceStore(), null));
}
@Override
protected IDocumentPartitioner getDocumentPartitioner() {
final ScriptTextTools tools = getTextTools();
return tools != null ? tools.createDocumentPartitioner() : null;
}
@Override
protected String getDocumentPartitioning() {
final ScriptTextTools tools = getTextTools();
return tools != null ? tools.getDefaultPartitioning() : null;
}
}