blob: 452fff451740f82b8a657efd22dc8b50f7f154d3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 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.jface.preference;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* A field editor for a color type preference.
*/
public class ColorFieldEditor extends FieldEditor {
/**
* The color selector, or <code>null</code> if none.
*/
private ColorSelector colorSelector;
/**
* Creates a new color field editor
*/
protected ColorFieldEditor() {
//No default behavior
}
/**
* Creates a color field editor.
*
* @param name
* the name of the preference this field editor works on
* @param labelText
* the label text of the field editor
* @param parent
* the parent of the field editor's control
*/
public ColorFieldEditor(String name, String labelText, Composite parent) {
super(name, labelText, parent);
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
protected void adjustForNumColumns(int numColumns) {
((GridData) colorSelector.getButton().getLayoutData()).horizontalSpan = numColumns - 1;
}
/**
* Computes the size of the color image displayed on the button.
* <p>
* This is an internal method and should not be called by clients.
* </p>
*
* @param window
* the window to create a GC on for calculation.
* @return Point The image size
*
*/
protected Point computeImageSize(Control window) {
// Make the image height as high as a corresponding character. This
// makes sure that the button has the same size as a "normal" text
// button.
GC gc = new GC(window);
Font f = JFaceResources.getFontRegistry().get(
JFaceResources.DEFAULT_FONT);
gc.setFont(f);
int height = gc.getFontMetrics().getHeight();
gc.dispose();
Point p = new Point(height * 3 - 6, height);
return p;
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
protected void doFillIntoGrid(Composite parent, int numColumns) {
Control control = getLabelControl(parent);
GridData gd = new GridData();
gd.horizontalSpan = numColumns - 1;
control.setLayoutData(gd);
Button colorButton = getChangeControl(parent);
gd = new GridData();
int widthHint = convertHorizontalDLUsToPixels(colorButton,
IDialogConstants.BUTTON_WIDTH);
gd.widthHint = Math.max(widthHint, colorButton.computeSize(SWT.DEFAULT,
SWT.DEFAULT, true).x);
colorButton.setLayoutData(gd);
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
protected void doLoad() {
if (colorSelector == null)
return;
colorSelector.setColorValue(PreferenceConverter.getColor(
getPreferenceStore(), getPreferenceName()));
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
protected void doLoadDefault() {
if (colorSelector == null)
return;
colorSelector.setColorValue(PreferenceConverter.getDefaultColor(
getPreferenceStore(), getPreferenceName()));
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
protected void doStore() {
PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(),
colorSelector.getColorValue());
}
/**
* Get the color selector used by the receiver.
*
* @return ColorSelector/
*/
public ColorSelector getColorSelector() {
return colorSelector;
}
/**
* Returns the change button for this field editor.
*
* @param parent
* The control to create the button in if required.
* @return the change button
*/
protected Button getChangeControl(Composite parent) {
if (colorSelector == null) {
colorSelector = new ColorSelector(parent);
colorSelector.addListener(new IPropertyChangeListener() {
// forward the property change of the color selector
public void propertyChange(PropertyChangeEvent event) {
ColorFieldEditor.this.fireValueChanged(event.getProperty(),
event.getOldValue(), event.getNewValue());
setPresentsDefaultValue(false);
}
});
} else {
checkParent(colorSelector.getButton(), parent);
}
return colorSelector.getButton();
}
/*
* (non-Javadoc) Method declared on FieldEditor.
*/
public int getNumberOfControls() {
return 2;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.FieldEditor#setEnabled(boolean,
* org.eclipse.swt.widgets.Composite)
*/
public void setEnabled(boolean enabled, Composite parent) {
super.setEnabled(enabled, parent);
getChangeControl(parent).setEnabled(enabled);
}
}