Mercurial > projects > dwt-addons
diff dwtx/jface/text/PropagatingFontFieldEditor.d @ 129:eb30df5ca28b
Added JFace Text sources
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 23 Aug 2008 19:10:48 +0200 |
parents | |
children | c4fb132a086c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtx/jface/text/PropagatingFontFieldEditor.d Sat Aug 23 19:10:48 2008 +0200 @@ -0,0 +1,138 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 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 + * Port to the D programming language: + * Frank Benoit <benoit@tionex.de> + *******************************************************************************/ + +module dwtx.jface.text.PropagatingFontFieldEditor; + +import dwt.dwthelper.utils; + + + + +import dwt.graphics.FontData; +import dwt.widgets.Composite; +import dwt.widgets.Control; +import dwt.widgets.Label; +import dwtx.jface.preference.FontFieldEditor; +import dwtx.jface.preference.IPreferenceStore; +import dwtx.jface.preference.PreferenceConverter; +import dwtx.jface.util.IPropertyChangeListener; +import dwtx.jface.util.PropertyChangeEvent; + + +/** + * This font field editor implements chaining between a source preference + * store and a target preference store. Any time the source preference + * store changes, the change is propagated to the target store. Propagation + * means that the actual value stored in the source store is set as default + * value in the target store. If the target store does not contain a value + * other than the default value, the new default value is immediately + * effective. + * + * @see FontFieldEditor + * @since 2.0 + * @deprecated since 3.0 not longer in use, no longer supported + */ +public class PropagatingFontFieldEditor : FontFieldEditor { + + /** The editor's parent widget */ + private Composite fParent; + /** The representation of the default font choice */ + private String fDefaultFontLabel; + + /** + * Creates a new font field editor with the given parameters. + * + * @param name the editor's name + * @param labelText the text shown as editor description + * @param parent the editor's parent widget + * @param defaultFontLabel the label shown in the editor value field when the default value should be taken + */ + public PropagatingFontFieldEditor(String name, String labelText, Composite parent, String defaultFontLabel) { + super(name, labelText, parent); + fParent= parent; + fDefaultFontLabel= defaultFontLabel is null ? "" : defaultFontLabel; //$NON-NLS-1$ + } + + /* + * @see FontFieldEditor#doLoad() + */ + protected void doLoad() { + if (getPreferenceStore().isDefault(getPreferenceName())) + loadDefault(); + super.doLoad(); + checkForDefault(); + } + + /* + * @see FontFieldEditor#doLoadDefault() + */ + protected void doLoadDefault() { + super.doLoadDefault(); + checkForDefault(); + } + + /** + * Checks whether this editor presents the default value "inherited" + * from the workbench rather than its own font. + */ + private void checkForDefault() { + if (presentsDefaultValue()) { + Control c= getValueControl(fParent); + if (c instanceof Label) + ((Label) c).setText(fDefaultFontLabel); + } + } + + /** + * Propagates the font set in the source store to the + * target store using the given keys. + * + * @param source the store from which to read the text font + * @param sourceKey the key under which the font can be found + * @param target the store to which to propagate the font + * @param targetKey the key under which to store the font + */ + private static void propagateFont(IPreferenceStore source, String sourceKey, IPreferenceStore target, String targetKey) { + FontData fd= PreferenceConverter.getFontData(source, sourceKey); + if (fd !is null) { + bool isDefault= target.isDefault(targetKey); // save old state! + PreferenceConverter.setDefault(target, targetKey, fd); + if (isDefault) { + // restore old state + target.setToDefault(targetKey); + } + } + } + + /** + * Starts the propagation of the font preference stored in the source preference + * store under the source key to the target preference store using the target + * preference key. + * + * @param source the source preference store + * @param sourceKey the key to be used in the source preference store + * @param target the target preference store + * @param targetKey the key to be used in the target preference store + */ + public static void startPropagate(final IPreferenceStore source, final String sourceKey, final IPreferenceStore target, final String targetKey) { + source.addPropertyChangeListener(new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + if (sourceKey.equals(event.getProperty())) + propagateFont(source, sourceKey, target, targetKey); + } + }); + + propagateFont(source, sourceKey, target, targetKey); + } +} +