org.vclipse.vcml.ui.preferences.ComboFieldEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.vclipse.vcml.ui.preferences.ComboFieldEditor.java

Source

/*******************************************************************************
 * Copyright (c) 2010 - 2013 webXcerpt Software GmbH.
 * 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:
 *        webXcerpt Software GmbH - initial creator
 *       www.webxcerpt.com
 ******************************************************************************/
package org.vclipse.vcml.ui.preferences;

import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.vclipse.vcml.utils.ISapConstants;

/**
 *
 */
public final class ComboFieldEditor extends FieldEditor {

    /**
     *   Entries of the widget
     */
    private Iterable<?> comboEntries;

    /**
     *   Combo widget for the LanguageFieldEditor
     */
    private Combo combo;

    /**
     *   Preference store
     */
    private IPreferenceStore preferenceStore;

    /**
     * @param preferenceName
     * @param label
     * @param parent - 
     * @param comboEntries - a String list will be shown in the ComboBox
     */
    public ComboFieldEditor(final IPreferenceStore preferenceStore, Composite parent, Iterable<?> entries) {
        this.preferenceStore = preferenceStore;
        setPreferenceStore(preferenceStore);
        setPreferenceName(ISapConstants.DEFAULT_LANGUAGE);
        setLabelText("Default language: ");
        comboEntries = entries;
        createControl(parent);
        combo.setText(preferenceStore.getString(ISapConstants.DEFAULT_LANGUAGE));
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#getPreferenceName()
     */
    @Override
    public String getPreferenceName() {
        return ISapConstants.DEFAULT_LANGUAGE;
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#adjustForNumColumns(int)
     */
    @Override
    protected void adjustForNumColumns(int numColumns) {
        GridData gd = (GridData) combo.getLayoutData();
        gd.horizontalSpan = numColumns - 1;
        gd.grabExcessHorizontalSpace = gd.horizontalSpan == 1;
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#doFillIntoGrid(org.eclipse.swt.widgets.Composite, int)
     */
    @Override
    protected void doFillIntoGrid(Composite parent, int numColumns) {
        getLabelControl(parent);
        combo = getComboControl(parent);
        GridData gd = new GridData();
        gd.horizontalSpan = numColumns - 1;
        gd.horizontalAlignment = GridData.FILL;
        gd.grabExcessHorizontalSpace = true;
        combo.setLayoutData(gd);
    }

    @Override
    protected void doLoad() {
        if (combo != null) {
            combo.setText(getPreferenceStore().getString(getPreferenceName()));
        }
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
     */
    @Override
    protected void doLoadDefault() {
        if (combo != null) {
            combo.setText(preferenceStore.getDefaultString(getPreferenceName()));
        }
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#doStore()
     */
    @Override
    protected void doStore() {
        String language = combo.getText();
        getPreferenceStore().putValue(getPreferenceName(), language);
        fireValueChanged(getPreferenceName(), "", language);
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#getNumberOfControls()
     */
    @Override
    public int getNumberOfControls() {
        return 2;
    }

    /**
     * @param parent
     * @return
     */
    public Combo getComboControl(Composite parent) {
        if (combo == null) {
            combo = new Combo(parent, SWT.SINGLE | SWT.DROP_DOWN | SWT.READ_ONLY);
            combo.setFont(parent.getFont());
            for (Object entry : comboEntries) {
                if (entry != null) {
                    combo.add(entry.toString());
                }
            }
            combo.addDisposeListener(new DisposeListener() {
                public void widgetDisposed(DisposeEvent event) {
                    combo = null;
                }
            });
        }
        return combo;
    }
}