/****************************************************************************
* Copyright (c) 2008 Atos Origin.
*
* 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:
* Thibault Landre (Atos Origin) - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.preferences.jface.preference;
import org.eclipse.gmf.runtime.common.core.util.StringStatics;
import org.eclipse.gmf.runtime.diagram.ui.properties.internal.l10n.DiagramUIPropertiesImages;
import org.eclipse.gmf.runtime.diagram.ui.properties.internal.l10n.DiagramUIPropertiesMessages;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.papyrus.infra.gmfdiag.preferences.utils.FontHelper;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
/**
* A field editor for GMF Font preferences. This field editor handles :
* <ul>
* <li>Font Style</li>
* <li>Font Size</li>
* <li>Bold</li>
* <li>Italic</li>
* </ul>
* This field editor is inspired by the class {@link org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ColorsAndFontsPropertySection
* <em>ColorsAndFontsPropertySection</em>}
*
* @author tlandre
*/
public class FontFieldEditor extends FieldEditor {
private Button fontBoldButton;
private Button fontItalicButton;
private Combo fontNameCombo;
private Combo fontSizeCombo;
/** value changed string */
// @unused
static protected String VALUE_CHANGED_STRING = DiagramUIPropertiesMessages.AbstractPropertySection_UndoIntervalPropertyString;
/** properties */
// @unused
protected static final String FONT_COMMAND_NAME = DiagramUIPropertiesMessages.Font_commandText + StringStatics.SPACE + VALUE_CHANGED_STRING;
// @unused
protected static final String FONTS_AND_COLORS_LABEL = DiagramUIPropertiesMessages.FontAndColor_nameLabel;
private FontData fontData;
/**
* Constructor
*
* @param preferenceName
* the preference used for the Font
* @param parent
* the parent composite in which this field editor will be placed.
*/
public FontFieldEditor(String preferenceName, Composite parent) {
super(preferenceName, "", parent); //$NON-NLS-1$
}
/**
* @see org.eclipse.jface.preference.FieldEditor#adjustForNumColumns(int)
*/
@Override
protected void adjustForNumColumns(int numColumns) {
// TODO Auto-generated method stub
}
/**
* @see org.eclipse.jface.preference.FieldEditor#doFillIntoGrid(org.eclipse.swt.widgets.Composite, int)
*/
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
// TODO Auto-generated method stub
}
/**
* @see org.eclipse.jface.preference.FieldEditor#doLoad()
*/
@Override
protected void doLoad() {
fontData = PreferenceConverter.getFontData(getPreferenceStore(), getPreferenceName());
initFontData();
}
/**
* @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
*/
@Override
protected void doLoadDefault() {
fontData = PreferenceConverter.getDefaultFontData(getPreferenceStore(), getPreferenceName());
initFontData();
}
private void initFontData() {
// Name Combo
fontNameCombo.setText(fontData.getName());
// Size combo
fontSizeCombo.setText("" + fontData.getHeight()); //$NON-NLS-1$
int style = fontData.getStyle();
// Bold Button
if((style & SWT.BOLD) == SWT.BOLD) {
fontBoldButton.setSelection(true);
} else {
fontBoldButton.setSelection(false);
}
// Italic Button
if((style & SWT.ITALIC) == SWT.ITALIC) {
fontItalicButton.setSelection(true);
} else {
fontItalicButton.setSelection(false);
}
}
/**
* @see org.eclipse.jface.preference.FieldEditor#doStore()
*/
@Override
protected void doStore() {
fontData = new FontData();
fontData.setName(fontNameCombo.getText());
fontData.setHeight(Integer.parseInt(fontSizeCombo.getText()));
fontData.setStyle(getStyle());
PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(), fontData);
}
private int getStyle() {
int style = SWT.NORMAL;
if(fontBoldButton.getSelection()) {
style |= SWT.BOLD;
}
if(fontItalicButton.getSelection()) {
style |= SWT.ITALIC;
}
return style;
}
@Override
public void dispose() {
super.dispose();
fontBoldButton.dispose();
fontItalicButton.dispose();
fontNameCombo.dispose();
fontSizeCombo.dispose();
}
@Override
public int getNumberOfControls() {
return 1;
}
@Override
protected void createControl(Composite parent) {
Composite compo = new Composite(parent, SWT.NONE);
GridLayout gl = new GridLayout(3, false);
gl.marginWidth = 0;
gl.marginHeight = 0;
compo.setLayout(gl);
fontNameCombo = new Combo(compo, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
fontNameCombo.setItems(FontHelper.getFontNames());
GridData gridData = new GridData(SWT.BEGINNING, SWT.CENTER, true, false);
gridData.horizontalSpan = 3;
fontNameCombo.setLayoutData(gridData);
fontBoldButton = new Button(compo, SWT.TOGGLE);
fontBoldButton.setImage(DiagramUIPropertiesImages.get(DiagramUIPropertiesImages.IMG_BOLD));
fontItalicButton = new Button(compo, SWT.TOGGLE);
fontItalicButton.setImage(DiagramUIPropertiesImages.get(DiagramUIPropertiesImages.IMG_ITALIC));
fontSizeCombo = new Combo(compo, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
fontSizeCombo.setItems(FontHelper.getFontSizes());
gridData = new GridData(SWT.END, SWT.CENTER, true, false);
fontSizeCombo.setLayoutData(gridData);
}
}