/******************************************************************************* * Copyright (c) 2005 IBM Corporation 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: * IBM Corporation - initial API and implementation * QNX Software System *******************************************************************************/ package org.erlide.ui.internal.compare; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.contentmergeviewer.TextMergeViewer; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.text.IDocumentPartitioner; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.texteditor.AbstractTextEditor; import org.erlide.ui.editors.erl.EditorConfiguration; import org.erlide.ui.editors.erl.ErlangDocumentSetupParticipant; import org.erlide.ui.editors.erl.ErlangEditor; import org.erlide.ui.editors.erl.ErlangSourceViewerConfiguration; import org.erlide.ui.editors.erl.scanner.IErlangPartitions; import org.erlide.ui.internal.ErlideUIPlugin; import org.erlide.ui.util.ColorManager; public class ErlMergeViewer extends TextMergeViewer { private IPropertyChangeListener fPreferenceChangeListener; private final IPreferenceStore fPreferenceStore; private boolean fUseSystemColors; private ErlangSourceViewerConfiguration fSourceViewerConfiguration; private IDocumentPartitioner documentPartitioner = null; public ErlMergeViewer(final Composite parent, final int styles, final CompareConfiguration mp) { super(parent, styles, mp); fPreferenceStore = ErlangEditor.getErlangEditorPreferenceStore(); if (fPreferenceStore != null) { fPreferenceChangeListener = new IPropertyChangeListener() { @Override public void propertyChange(final PropertyChangeEvent event) { handlePropertyChange(event); } }; fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener); fUseSystemColors = fPreferenceStore.getBoolean( AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT); if (!fUseSystemColors) { final RGB bg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND); setBackgroundColor(bg); final RGB fg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND); setForegroundColor(fg); } } } @Override protected void handleDispose(final DisposeEvent event) { if (fPreferenceChangeListener != null) { fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener); fPreferenceChangeListener = null; } super.handleDispose(event); } protected void handlePropertyChange(final PropertyChangeEvent event) { final String key = event.getProperty(); if (key.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND)) { if (!fUseSystemColors) { final RGB bg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND); setBackgroundColor(bg); } } else if (key .equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) { fUseSystemColors = fPreferenceStore.getBoolean( AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT); if (fUseSystemColors) { setBackgroundColor(null); setForegroundColor(null); } else { final RGB bg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND); setBackgroundColor(bg); final RGB fg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND); setForegroundColor(fg); } } else if (key.equals(AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND)) { if (!fUseSystemColors) { final RGB fg = createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND); setForegroundColor(fg); } } // if (getSourceViewerConfiguration().affectsBehavior(event)) { // getSourceViewerConfiguration().adaptToPreferenceChange(event); // invalidateTextPresentation(); // } } /** * Creates a color from the information stored in the given preference * store. Returns <code>null</code> if there is no such information * available. */ private static RGB createColor(final IPreferenceStore store, final String key) { if (!store.contains(key)) { return null; } if (store.isDefault(key)) { return PreferenceConverter.getDefaultColor(store, key); } return PreferenceConverter.getColor(store, key); } private ErlangSourceViewerConfiguration getSourceViewerConfiguration() { if (fSourceViewerConfiguration == null) { fSourceViewerConfiguration = new EditorConfiguration(fPreferenceStore, null, new ColorManager()); } return fSourceViewerConfiguration; } @Override public String getTitle() { return ErlideUIPlugin.getResourceString("Erlang Source Compare"); } @Override protected void configureTextViewer(final TextViewer textViewer) { if (textViewer instanceof SourceViewer) { ((SourceViewer) textViewer).configure(getSourceViewerConfiguration()); } } @Override protected String getDocumentPartitioning() { return IErlangPartitions.ERLANG_PARTITIONING; } @Override protected IDocumentPartitioner getDocumentPartitioner() { if (documentPartitioner == null) { documentPartitioner = ErlangDocumentSetupParticipant .createDocumentPartitioner(); } return documentPartitioner; // return null; } }