// RAP [bm]: FontDialog ///******************************************************************************* // * Copyright (c) 2000, 2006 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.resource.StringConverter; //import org.eclipse.core.runtime.Assert; //import org.eclipse.swt.SWT; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.events.SelectionAdapter; //import org.eclipse.swt.events.SelectionEvent; //import org.eclipse.swt.graphics.Font; //import org.eclipse.swt.graphics.FontData; //import org.eclipse.swt.layout.GridData; //import org.eclipse.swt.widgets.Button; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Control; //import org.eclipse.swt.widgets.FontDialog; //import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Text; // ///** // * A field editor for a font type preference. // */ //public class FontFieldEditor extends FieldEditor { // // /** // * The change font button, or <code>null</code> if none // * (before creation and after disposal). // */ // private Button changeFontButton = null; // // /** // * The text for the change font button, or <code>null</code> // * if missing. // */ // private String changeButtonText; // // /** // * The text for the preview, or <code>null</code> if no preview is desired // */ // private String previewText; // // /** // * Font data for the chosen font button, or <code>null</code> if none. // */ // private FontData[] chosenFont; // // /** // * The label that displays the selected font, or <code>null</code> if none. // */ // private Label valueControl; // // /** // * The previewer, or <code>null</code> if none. // */ // private DefaultPreviewer previewer; // // /** // * Internal font previewer implementation. // */ // private static class DefaultPreviewer { // private Text text; // // private String string; // // private Font font; // // /** // * Constructor for the previewer. // * @param s // * @param parent // */ // public DefaultPreviewer(String s, Composite parent) { // string = s; // text = new Text(parent, SWT.READ_ONLY | SWT.BORDER); // text.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent e) { // if (font != null) { // font.dispose(); // } // } // }); // if (string != null) { // text.setText(string); // } // } // // /** // * @return the control the previewer is using // */ // public Control getControl() { // return text; // } // // /** // * Set the font to display with // * @param fontData // */ // public void setFont(FontData[] fontData) { // if (font != null) { // font.dispose(); // } // font = new Font(text.getDisplay(), fontData); // text.setFont(font); // } // // /** // * @return the preferred size of the previewer. // */ // public int getPreferredExtent() { // return 40; // } // } // // /** // * Creates a new font field editor // */ // protected FontFieldEditor() { // } // // /** // * Creates a font field editor with an optional preview area. // * // * @param name the name of the preference this field editor works on // * @param labelText the label text of the field editor // * @param previewAreaText the text used for the preview window. If it is // * <code>null</code> there will be no preview area, // * @param parent the parent of the field editor's control // */ // public FontFieldEditor(String name, String labelText, // String previewAreaText, Composite parent) { // init(name, labelText); // previewText = previewAreaText; // changeButtonText = JFaceResources.getString("openChange"); //$NON-NLS-1$ // createControl(parent); // // } // // /** // * Creates a font field editor without a preview. // * // * @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 FontFieldEditor(String name, String labelText, Composite parent) { // this(name, labelText, null, parent); // // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void adjustForNumColumns(int numColumns) { // // GridData data = new GridData(); // if (valueControl.getLayoutData() != null) { // data = (GridData) valueControl.getLayoutData(); // } // // data.horizontalSpan = numColumns - getNumberOfControls() + 1; // valueControl.setLayoutData(data); // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void applyFont() { // if (chosenFont != null && previewer != null) { // previewer.setFont(chosenFont); // } // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void doFillIntoGrid(Composite parent, int numColumns) { // getLabelControl(parent); // // valueControl = getValueControl(parent); // // GridData gd = new GridData(GridData.FILL_HORIZONTAL // | GridData.GRAB_HORIZONTAL); // gd.horizontalSpan = numColumns - getNumberOfControls() + 1; // valueControl.setLayoutData(gd); // if (previewText != null) { // previewer = new DefaultPreviewer(previewText, parent); // gd = new GridData(GridData.FILL_HORIZONTAL); // gd.heightHint = previewer.getPreferredExtent(); // gd.widthHint = previewer.getPreferredExtent(); // previewer.getControl().setLayoutData(gd); // } // // changeFontButton = getChangeControl(parent); // gd = new GridData(); // int widthHint = convertHorizontalDLUsToPixels(changeFontButton, // IDialogConstants.BUTTON_WIDTH); // gd.widthHint = Math.max(widthHint, changeFontButton.computeSize( // SWT.DEFAULT, SWT.DEFAULT, true).x); // changeFontButton.setLayoutData(gd); // // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void doLoad() { // if (changeFontButton == null) { // return; // } // updateFont(PreferenceConverter.getFontDataArray(getPreferenceStore(), // getPreferenceName())); // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void doLoadDefault() { // if (changeFontButton == null) { // return; // } // updateFont(PreferenceConverter.getDefaultFontDataArray( // getPreferenceStore(), getPreferenceName())); // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // protected void doStore() { // if (chosenFont != null) { // PreferenceConverter.setValue(getPreferenceStore(), // getPreferenceName(), chosenFont); // } // } // // /** // * Returns the change button for this field editor. // * // * @param parent The Composite to create the button in if required. // * @return the change button // */ // protected Button getChangeControl(Composite parent) { // if (changeFontButton == null) { // changeFontButton = new Button(parent, SWT.PUSH); // if (changeButtonText != null) { // changeFontButton.setText(changeButtonText); // } // changeFontButton.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // FontDialog fontDialog = new FontDialog(changeFontButton // .getShell()); // if (chosenFont != null) { // fontDialog.setFontList(chosenFont); // } // FontData font = fontDialog.open(); // if (font != null) { // FontData[] oldFont = chosenFont; // if (oldFont == null) { // oldFont = JFaceResources.getDefaultFont() // .getFontData(); // } // setPresentsDefaultValue(false); // FontData[] newData = new FontData[1]; // newData[0] = font; // updateFont(newData); // fireValueChanged(VALUE, oldFont[0], font); // } // // } // }); // changeFontButton.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent event) { // changeFontButton = null; // } // }); // changeFontButton.setFont(parent.getFont()); // setButtonLayoutData(changeFontButton); // } else { // checkParent(changeFontButton, parent); // } // return changeFontButton; // } // // /* (non-Javadoc) // * Method declared on FieldEditor. // */ // public int getNumberOfControls() { // if (previewer == null) { // return 3; // } // // return 4; // } // // /** // * Returns the preferred preview height. // * // * @return the height, or <code>-1</code> if no previewer // * is installed // */ // public int getPreferredPreviewHeight() { // if (previewer == null) { // return -1; // } // return previewer.getPreferredExtent(); // } // // /** // * Returns the preview control for this field editor. // * // * @return the preview control // */ // public Control getPreviewControl() { // if (previewer == null) { // return null; // } // // return previewer.getControl(); // } // // /** // * Returns the value control for this field editor. The value control // * displays the currently selected font name. // * @param parent The Composite to create the viewer in if required // * @return the value control // */ // protected Label getValueControl(Composite parent) { // if (valueControl == null) { // valueControl = new Label(parent, SWT.LEFT); // valueControl.setFont(parent.getFont()); // valueControl.addDisposeListener(new DisposeListener() { // public void widgetDisposed(DisposeEvent event) { // valueControl = null; // } // }); // } else { // checkParent(valueControl, parent); // } // return valueControl; // } // // /** // * Sets the text of the change button. // * // * @param text the new text // */ // public void setChangeButtonText(String text) { // Assert.isNotNull(text); // changeButtonText = text; // if (changeFontButton != null) { // changeFontButton.setText(text); // } // } // // /** // * Updates the change font button and the previewer to reflect the // * newly selected font. // * @param font The FontData[] to update with. // */ // private void updateFont(FontData font[]) { // FontData[] bestFont = JFaceResources.getFontRegistry().filterData( // font, valueControl.getDisplay()); // // //if we have nothing valid do as best we can // if (bestFont == null) { // bestFont = getDefaultFontData(); // } // // //Now cache this value in the receiver // this.chosenFont = bestFont; // // if (valueControl != null) { // valueControl.setText(StringConverter.asString(chosenFont[0])); // } // if (previewer != null) { // previewer.setFont(bestFont); // } // } // // /** // * Store the default preference for the field // * being edited // */ // protected void setToDefault() { // FontData[] defaultFontData = PreferenceConverter // .getDefaultFontDataArray(getPreferenceStore(), // getPreferenceName()); // PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(), // defaultFontData); // } // // /** // * Get the system default font data. // * @return FontData[] // */ // private FontData[] getDefaultFontData() { // return valueControl.getDisplay().getSystemFont().getFontData(); // } // // /* // * @see FieldEditor.setEnabled(boolean,Composite). // */ // public void setEnabled(boolean enabled, Composite parent) { // super.setEnabled(enabled, parent); // getChangeControl(parent).setEnabled(enabled); // getValueControl(parent).setEnabled(enabled); // } // //}