com.cubrid.common.ui.query.control.jface.text.PropagatingFontFieldEditor.java Source code

Java tutorial

Introduction

Here is the source code for com.cubrid.common.ui.query.control.jface.text.PropagatingFontFieldEditor.java

Source

/*******************************************************************************
 * 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
 *******************************************************************************/

package com.cubrid.common.ui.query.control.jface.text;

import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;

import org.eclipse.jface.preference.FontFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.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 extends 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 == 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 != null) {
            boolean 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);
    }
}