/******************************************************************************* | |
* Copyright (c) 2005, 2007 ILOG 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: | |
* Joel Cheuoua - Initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.jet.internal.editor; | |
import org.eclipse.jface.preference.IPreferenceStore; | |
import org.eclipse.jface.preference.PreferenceConverter; | |
import org.eclipse.jface.text.source.IOverviewRuler; | |
import org.eclipse.jface.text.source.IVerticalRuler; | |
import org.eclipse.jface.text.source.projection.ProjectionViewer; | |
import org.eclipse.jface.util.IPropertyChangeListener; | |
import org.eclipse.jface.util.PropertyChangeEvent; | |
import org.eclipse.swt.custom.StyledText; | |
import org.eclipse.swt.graphics.Color; | |
import org.eclipse.swt.widgets.Composite; | |
import org.eclipse.swt.widgets.Display; | |
public class JETSourceViewer extends ProjectionViewer implements IPropertyChangeListener { | |
private IPreferenceStore preferenceStore; | |
private Color foregroundColor; | |
private Color backgroundColor; | |
private Color selectionForegroundColor; | |
private Color selectionBackgroundColor; | |
public JETSourceViewer(Composite parent, IVerticalRuler ruler, IOverviewRuler overviewRuler, | |
boolean showsAnnotationOverview, int styles, IPreferenceStore store) { | |
super(parent, ruler, overviewRuler, showsAnnotationOverview, styles); | |
setPreferenceStore(store); | |
} | |
public void setPreferenceStore(IPreferenceStore store) { | |
if (preferenceStore != null) | |
preferenceStore.removePropertyChangeListener(this); | |
preferenceStore = store; | |
if (preferenceStore != null) { | |
preferenceStore.addPropertyChangeListener(this); | |
initializeViewerColors(); | |
} | |
} | |
private void initializeViewerColors() { | |
if (preferenceStore != null) { | |
StyledText styledText = getTextWidget(); | |
if (styledText == null || styledText.isDisposed()) | |
return; | |
Color color = preferenceStore.getBoolean("AbstractTextEditor.Color.Foreground.SystemDefault") ? null | |
: createColor(preferenceStore, "AbstractTextEditor.Color.Foreground", styledText.getDisplay()); | |
styledText.setForeground(color); | |
if (foregroundColor != null) | |
foregroundColor.dispose(); | |
foregroundColor = color; | |
color = preferenceStore.getBoolean("AbstractTextEditor.Color.Background.SystemDefault") ? null : createColor( | |
preferenceStore, "AbstractTextEditor.Color.Background", styledText.getDisplay()); | |
styledText.setBackground(color); | |
if (backgroundColor != null) | |
backgroundColor.dispose(); | |
backgroundColor = color; | |
color = preferenceStore.getBoolean("AbstractTextEditor.Color.SelectionForeground.SystemDefault") ? null | |
: createColor(preferenceStore, "AbstractTextEditor.Color.SelectionForeground", styledText.getDisplay()); | |
styledText.setSelectionForeground(color); | |
if (selectionForegroundColor != null) | |
selectionForegroundColor.dispose(); | |
selectionForegroundColor = color; | |
color = preferenceStore.getBoolean("AbstractTextEditor.Color.SelectionBackground.SystemDefault") ? null | |
: createColor(preferenceStore, "AbstractTextEditor.Color.SelectionBackground", styledText.getDisplay()); | |
styledText.setSelectionBackground(color); | |
if (selectionBackgroundColor != null) | |
selectionBackgroundColor.dispose(); | |
selectionBackgroundColor = color; | |
} | |
} | |
private Color createColor(IPreferenceStore store, String key, Display display) { | |
org.eclipse.swt.graphics.RGB rgb = null; | |
if (store.contains(key)) { | |
if (store.isDefault(key)) | |
rgb = PreferenceConverter.getDefaultColor(store, key); | |
else | |
rgb = PreferenceConverter.getColor(store, key); | |
if (rgb != null) | |
return new Color(display, rgb); | |
} | |
return null; | |
} | |
public void propertyChange(PropertyChangeEvent event) { | |
String property = event.getProperty(); | |
if ("AbstractTextEditor.Color.Foreground".equals(property) | |
|| "AbstractTextEditor.Color.Foreground.SystemDefault".equals(property) | |
|| "AbstractTextEditor.Color.Background".equals(property) | |
|| "AbstractTextEditor.Color.Background.SystemDefault".equals(property) | |
|| "AbstractTextEditor.Color.SelectionForeground".equals(property) | |
|| "AbstractTextEditor.Color.SelectionForeground.SystemDefault".equals(property) | |
|| "AbstractTextEditor.Color.SelectionBackground".equals(property) | |
|| "AbstractTextEditor.Color.SelectionBackground.SystemDefault".equals(property)) | |
initializeViewerColors(); | |
} | |
} |