package org.erlide.ui.internal.compare; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.erlide.ui.editors.erl.ErlangSourceViewerConfiguration; import org.erlide.ui.internal.ErlideUIPlugin; import org.erlide.ui.util.ColorManager; import org.erlide.util.ErlLogger; public class ErlContentViewer extends Viewer { private final SourceViewer fSourceViewer; private Object fInput; ErlContentViewer(final Composite parent) { fSourceViewer = new SourceViewer(parent, null, SWT.LEFT_TO_RIGHT | SWT.H_SCROLL | SWT.V_SCROLL); final IPreferenceStore store = ErlideUIPlugin.getDefault().getPreferenceStore(); fSourceViewer.configure( new ErlangSourceViewerConfiguration(store, new ColorManager())); fSourceViewer.setEditable(false); final String symbolicFontName = ErlMergeViewer.class.getName(); final Font font = JFaceResources.getFont(symbolicFontName); if (font != null) { fSourceViewer.getTextWidget().setFont(font); } } @Override public Control getControl() { return fSourceViewer.getControl(); } @Override public void setInput(final Object input) { if (input instanceof IStreamContentAccessor) { final Document document = new Document(getString(input)); // ErlangCompareUtilities.setupDocument(document); fSourceViewer.setDocument(document); } fInput = input; } @Override public Object getInput() { return fInput; } @Override public ISelection getSelection() { return fSourceViewer.getSelection(); } @Override public void setSelection(final ISelection s, final boolean reveal) { fSourceViewer.setSelection(s, reveal); } @Override public void refresh() { fSourceViewer.refresh(); } /** * A helper method to retrieve the contents of the given object if it * implements the IStreamContentAccessor interface. */ private static String getString(final Object input) { if (input instanceof IStreamContentAccessor) { final IStreamContentAccessor sca = (IStreamContentAccessor) input; try { return ErlangCompareUtilities.readString(sca); } catch (final CoreException ex) { ErlLogger.error(ex); } } return ""; //$NON-NLS-1$ } }