blob: ea182194f6682f813bf2f243407231caedc22c62 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2011 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
******************************************************************************/
package org.eclipse.wst.sse.ui.internal.preferences.ui;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.text.source.ISourceViewer;
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.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.AbstractTextEditor;
public abstract class AbstractSyntaxColoringPage extends PreferencePage {
private Color fForegroundColor;
private Color fBackgroundColor;
private Color fSelectionForegroundColor;
private Color fSelectionBackgroundColor;
final private IPropertyChangeListener fListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
final String property = event.getProperty();
if (AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND.equals(property) || AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT.equals(property)) {
initializeSourcePreviewColors(getSourcePreviewViewer());
}
}
};
public AbstractSyntaxColoringPage() {
final IPreferenceStore store = EditorsUI.getPreferenceStore();
if (store != null) {
store.addPropertyChangeListener(fListener);
}
}
/**
* Initializes the colors of the source preview window based on the values in the Editors' UI preference store
*
* @param viewer the {@link ISourceViewer} used as the source preview
*/
protected void initializeSourcePreviewColors(ISourceViewer viewer) {
final IPreferenceStore store = EditorsUI.getPreferenceStore();
if (store != null && viewer != null) {
final StyledText styledText = viewer.getTextWidget();
// ----------- foreground color --------------------
Color color = store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT) ? null : createColor(store, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND, styledText.getDisplay());
styledText.setForeground(color);
if (fForegroundColor != null)
fForegroundColor.dispose();
fForegroundColor = color;
// ---------- background color ----------------------
color = store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT) ? null : createColor(store, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, styledText.getDisplay());
styledText.setBackground(color);
if (fBackgroundColor != null)
fBackgroundColor.dispose();
fBackgroundColor = color;
// ----------- selection foreground color --------------------
color = store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT) ? null : createColor(store, AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND, styledText.getDisplay());
styledText.setSelectionForeground(color);
if (fSelectionForegroundColor != null)
fSelectionForegroundColor.dispose();
fSelectionForegroundColor = color;
// ---------- selection background color ----------------------
color = store.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT) ? null : createColor(store, AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND, styledText.getDisplay());
styledText.setSelectionBackground(color);
if (fSelectionBackgroundColor != null)
fSelectionBackgroundColor.dispose();
fSelectionBackgroundColor = color;
}
}
/**
* Provides the {@link ISourceViewer} that is acting as the source preview
* @return
*/
protected ISourceViewer getSourcePreviewViewer() {
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.DialogPage#dispose()
*/
public void dispose() {
if (fForegroundColor != null) {
fForegroundColor.dispose();
fForegroundColor = null;
}
if (fBackgroundColor != null) {
fBackgroundColor.dispose();
fBackgroundColor = null;
}
if (fSelectionForegroundColor != null) {
fSelectionForegroundColor.dispose();
fSelectionForegroundColor = null;
}
if (fSelectionBackgroundColor != null) {
fSelectionBackgroundColor.dispose();
fSelectionBackgroundColor = null;
}
if (fListener != null) {
final IPreferenceStore store = EditorsUI.getPreferenceStore();
if (store != null) {
store.removePropertyChangeListener(fListener);
}
}
super.dispose();
}
/**
* Creates a color from the information stored in the given preference
* store. Returns <code>null</code> if there is no such information
* available.
*
* @param store
* the store to read from
* @param key
* the key used for the lookup in the preference store
* @param display
* the display used create the color
* @return the created color according to the specification in the
* preference store
* @since 2.0
*/
private Color createColor(IPreferenceStore store, String key, Display display) {
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;
}
}