001: /*******************************************************************************
002: * Copyright (c) 2000, 2005 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jface.text;
011:
012: import org.eclipse.swt.graphics.FontData;
013: import org.eclipse.swt.widgets.Composite;
014: import org.eclipse.swt.widgets.Control;
015: import org.eclipse.swt.widgets.Label;
016:
017: import org.eclipse.jface.preference.FontFieldEditor;
018: import org.eclipse.jface.preference.IPreferenceStore;
019: import org.eclipse.jface.preference.PreferenceConverter;
020: import org.eclipse.jface.util.IPropertyChangeListener;
021: import org.eclipse.jface.util.PropertyChangeEvent;
022:
023: /**
024: * This font field editor implements chaining between a source preference
025: * store and a target preference store. Any time the source preference
026: * store changes, the change is propagated to the target store. Propagation
027: * means that the actual value stored in the source store is set as default
028: * value in the target store. If the target store does not contain a value
029: * other than the default value, the new default value is immediately
030: * effective.
031: *
032: * @see FontFieldEditor
033: * @since 2.0
034: * @deprecated since 3.0 not longer in use, no longer supported
035: */
036: public class PropagatingFontFieldEditor extends FontFieldEditor {
037:
038: /** The editor's parent widget */
039: private Composite fParent;
040: /** The representation of the default font choice */
041: private String fDefaultFontLabel;
042:
043: /**
044: * Creates a new font field editor with the given parameters.
045: *
046: * @param name the editor's name
047: * @param labelText the text shown as editor description
048: * @param parent the editor's parent widget
049: * @param defaultFontLabel the label shown in the editor value field when the default value should be taken
050: */
051: public PropagatingFontFieldEditor(String name, String labelText,
052: Composite parent, String defaultFontLabel) {
053: super (name, labelText, parent);
054: fParent = parent;
055: fDefaultFontLabel = defaultFontLabel == null ? "" : defaultFontLabel; //$NON-NLS-1$
056: }
057:
058: /*
059: * @see FontFieldEditor#doLoad()
060: */
061: protected void doLoad() {
062: if (getPreferenceStore().isDefault(getPreferenceName()))
063: loadDefault();
064: super .doLoad();
065: checkForDefault();
066: }
067:
068: /*
069: * @see FontFieldEditor#doLoadDefault()
070: */
071: protected void doLoadDefault() {
072: super .doLoadDefault();
073: checkForDefault();
074: }
075:
076: /**
077: * Checks whether this editor presents the default value "inherited"
078: * from the workbench rather than its own font.
079: */
080: private void checkForDefault() {
081: if (presentsDefaultValue()) {
082: Control c = getValueControl(fParent);
083: if (c instanceof Label)
084: ((Label) c).setText(fDefaultFontLabel);
085: }
086: }
087:
088: /**
089: * Propagates the font set in the source store to the
090: * target store using the given keys.
091: *
092: * @param source the store from which to read the text font
093: * @param sourceKey the key under which the font can be found
094: * @param target the store to which to propagate the font
095: * @param targetKey the key under which to store the font
096: */
097: private static void propagateFont(IPreferenceStore source,
098: String sourceKey, IPreferenceStore target, String targetKey) {
099: FontData fd = PreferenceConverter
100: .getFontData(source, sourceKey);
101: if (fd != null) {
102: boolean isDefault = target.isDefault(targetKey); // save old state!
103: PreferenceConverter.setDefault(target, targetKey, fd);
104: if (isDefault) {
105: // restore old state
106: target.setToDefault(targetKey);
107: }
108: }
109: }
110:
111: /**
112: * Starts the propagation of the font preference stored in the source preference
113: * store under the source key to the target preference store using the target
114: * preference key.
115: *
116: * @param source the source preference store
117: * @param sourceKey the key to be used in the source preference store
118: * @param target the target preference store
119: * @param targetKey the key to be used in the target preference store
120: */
121: public static void startPropagate(final IPreferenceStore source,
122: final String sourceKey, final IPreferenceStore target,
123: final String targetKey) {
124: source.addPropertyChangeListener(new IPropertyChangeListener() {
125: public void propertyChange(PropertyChangeEvent event) {
126: if (sourceKey.equals(event.getProperty()))
127: propagateFont(source, sourceKey, target, targetKey);
128: }
129: });
130:
131: propagateFont(source, sourceKey, target, targetKey);
132: }
133: }
|