blob: 1671e938a6b5a237712ccddcf57e7352b2d869c0 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005, 2009 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.gmf.runtime.diagram.ui.preferences;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.gmf.runtime.common.ui.preferences.AbstractPreferencePage;
import org.eclipse.gmf.runtime.common.ui.preferences.FontFieldEditor;
import org.eclipse.gmf.runtime.diagram.ui.figures.DiagramColorConstants;
import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.PlatformUI;
/**
* Appearance General preference page.
*
* @author schafe
*/
public class AppearancePreferencePage
extends AbstractPreferencePage {
//localized labels
private String COLORANDFONT_GROUPBOX_LABEL = DiagramUIMessages.GeneralPreferencePage_colorAndFontGroupBox_label;
private String DEFAULT_FONT_LABEL = DiagramUIMessages.GeneralPreferencePage_defaultFont_label;
private String FONT_COLOR_LABEL = DiagramUIMessages.GeneralPreferencePage_fontColor_label;
private String FILL_COLOR_LABEL = DiagramUIMessages.GeneralPreferencePage_fillColor_label;
private String LINE_COLOR_LABEL = DiagramUIMessages.GeneralPreferencePage_lineColor_label;
private String NOTE_FILL_COLOR_LABEL = DiagramUIMessages.GeneralPreferencePage_noteFillColor_label;
private String NOTE_LINE_COLOR_LABEL = DiagramUIMessages.GeneralPreferencePage_noteLineColor_label;
//preference page editor controls
private FontFieldEditor defaultFontEditor = null;
private ColorFieldEditor fontColorEditor = null;
private ColorFieldEditor fillColorEditor = null;
private ColorFieldEditor lineColorEditor = null;
private ColorFieldEditor noteFillColorEditor = null;
private ColorFieldEditor noteLineColorEditor = null;
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.preferences.AbstractPreferencePage#addFields(org.eclipse.swt.widgets.Composite)
*/
protected void addFields(Composite parent) {
Composite main = createPageLayout(parent);
createFontAndColorGroup(main);
}
/**
* Creates a new composite for the entire page and sets up the layout.
* @param parent the parent <code>Composite</code> that the field editors will be added
* to
* @return the new <code>Composite</code>
*/
protected Composite createPageLayout(Composite parent) {
Composite main = new Composite(parent, SWT.NULL);
main.setLayout(new GridLayout());
main.setLayoutData(
new GridData(
GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
return main;
}
/**
* Create the font and colour group for the
* preference page
* @param parent
* @return composite fontAndColourGroup
*/
protected Composite createFontAndColorGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setLayout(new GridLayout(3, false));
Composite composite = new Composite(group, SWT.NONE);
GridLayout gridLayout = new GridLayout(3, false);
composite.setLayout(gridLayout);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalSpan = 3;
composite.setLayoutData(gridData);
group.setText(COLORANDFONT_GROUPBOX_LABEL);
addFontAndColorFields(composite);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.horizontalSpacing = 8;
composite.setLayout(layout);
return group;
}
/**
* Adds the font and color fields to the <code>Composite</code> given.
* @param composite
*/
protected void addFontAndColorFields(Composite composite) {
defaultFontEditor =
new FontFieldEditor(
IPreferenceConstants.PREF_DEFAULT_FONT,
DEFAULT_FONT_LABEL,
composite);
addField(defaultFontEditor);
fontColorEditor =
new ColorFieldEditor(
IPreferenceConstants.PREF_FONT_COLOR,
FONT_COLOR_LABEL,
composite);
addField(fontColorEditor);
fillColorEditor =
new ColorFieldEditor(
IPreferenceConstants.PREF_FILL_COLOR,
FILL_COLOR_LABEL,
composite);
addField(fillColorEditor);
lineColorEditor =
new ColorFieldEditor(
IPreferenceConstants.PREF_LINE_COLOR,
LINE_COLOR_LABEL,
composite);
addField(lineColorEditor);
noteFillColorEditor =
new ColorFieldEditor(
IPreferenceConstants.PREF_NOTE_FILL_COLOR,
NOTE_FILL_COLOR_LABEL,
composite);
addField(noteFillColorEditor);
noteLineColorEditor =
new ColorFieldEditor(
IPreferenceConstants.PREF_NOTE_LINE_COLOR,
NOTE_LINE_COLOR_LABEL,
composite);
addField(noteLineColorEditor);
//Accessibility helpers... See bugzilla#142826 ///////////////////////
fontColorEditor.getColorSelector().getButton().
getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
String labelText = fontColorEditor.getLabelText();
labelText = Action.removeMnemonics(labelText);
e.result = labelText;
}
});
fillColorEditor.getColorSelector().getButton().
getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
String labelText = fillColorEditor.getLabelText();
labelText = Action.removeMnemonics(labelText);
e.result = labelText;
}
});
lineColorEditor.getColorSelector().getButton().
getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
String labelText = lineColorEditor.getLabelText();
labelText = Action.removeMnemonics(labelText);
e.result = labelText;
}
});
noteFillColorEditor.getColorSelector().getButton().
getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
String labelText = noteFillColorEditor.getLabelText();
labelText = Action.removeMnemonics(labelText);
e.result = labelText;
}
});
noteLineColorEditor.getColorSelector().getButton().
getAccessible().addAccessibleListener(new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
String labelText = noteLineColorEditor.getLabelText();
labelText = Action.removeMnemonics(labelText);
e.result = labelText;
}
});
}
/**
* Initializes the default preference values
* for this preference store.
*
* @param store
*/
public static void initDefaults(IPreferenceStore store) {
setDefaultFontPreference(store);
Color fontColor = ColorConstants.black;
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_FONT_COLOR,
fontColor.getRGB());
Color fillColor = DiagramColorConstants.white;
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_FILL_COLOR,
fillColor.getRGB());
Color lineColor = DiagramColorConstants.diagramGray;
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_LINE_COLOR,
lineColor.getRGB());
Color noteFillColor = DiagramColorConstants.diagramLightYellow;
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_NOTE_FILL_COLOR,
noteFillColor.getRGB());
Color noteLineColor = DiagramColorConstants.diagramDarkYellow;
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_NOTE_LINE_COLOR,
noteLineColor.getRGB());
}
/**
* @see org.eclipse.gmf.runtime.common.ui.preferences.AbstractPreferencePage#initHelp()
*/
protected void initHelp() {
//do nothing, help not ready yet
//setPageHelpContextId(IHelpContextIds.VZ_U_APPEAR_PAGE_PREF);
}
/**
* The field editor preference page implementation of a <code>PreferencePage</code>
* method loads all the field editors with their default values.
*
* Override so that the font field editor default is set.
* Note: loadDefault() does not work with FontFieldEditor
*/
protected void performDefaults() {
setDefaultFontPreference(getPreferenceStore());
super.performDefaults();
}
/**
* Set the default font for this preference store.
* @param store IPreferenceStore
*/
static protected void setDefaultFontPreference(IPreferenceStore store){
final IPreferenceStore theStore = store;
if (Display.getCurrent() != null) {
initDefaultFontProc(theStore);
} else {
Display display = PlatformUI.isWorkbenchRunning() ? PlatformUI
.getWorkbench().getDisplay() : Display.getDefault();
display.syncExec(new Runnable(){
public void run() {
initDefaultFontProc(theStore);
}
});
}
}
/**
* Set the default font for this preference store. Assumes that the method
* executed on the UI thread
*
* @param store
* IPreferenceStore
*/
private static void initDefaultFontProc(IPreferenceStore store) {
FontData fontDataArray[] =
JFaceResources.getDefaultFont().getFontData();
FontData fontData = fontDataArray[0];
fontData.setHeight(9);
PreferenceConverter.setDefault(
store,
IPreferenceConstants.PREF_DEFAULT_FONT,
fontData);
}
/**
* Gets the field editor used for the default font.
* @return the default font field editor
*/
protected FontFieldEditor getDefaultFontEditor() {
return defaultFontEditor;
}
/**
* Gets the field editor used for the fill color.
* @return the fill color field editor
*/
protected ColorFieldEditor getFillColorEditor() {
return fillColorEditor;
}
/**
* Gets the field editor used for the line color.
* @return the line color field editor
*/
protected ColorFieldEditor getLineColorEditor() {
return lineColorEditor;
}
}