| /******************************************************************************* |
| * 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(); |
| } |
| } |