org.ebayopensource.turmeric.eclipse.ui.components.SimpleComboBoxEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.eclipse.ui.components.SimpleComboBoxEditor.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/
package org.ebayopensource.turmeric.eclipse.ui.components;

import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

/**
 * The Class SimpleComboBoxEditor.
 *
 * @author smathew
 */
public class SimpleComboBoxEditor extends FieldEditor {

    /**
     * component to display
     */
    private Combo itemList;

    /**
     * the value of selected item
     */
    private String selectedValue;

    /**
     * display name and the value for the display name.
     */
    private String[][] nameValuePairs;

    /**
     * Instantiates a new simple combo box editor.
     *
     * @param name the name
     * @param labelText the label text
     * @param entryNamesAndValues the entry names and values
     * @param parent the parent
     */
    public SimpleComboBoxEditor(String name, String labelText, String[][] entryNamesAndValues, Composite parent) {
        init(name, labelText);
        Assert.isTrue(isNameValuePairCorrect(entryNamesAndValues));
        nameValuePairs = entryNamesAndValues;
        createControl(parent);
    }

    /**
     * check if the given array is a correct name-value array.
     * 
     * @param table
     * @return true if the array format is correct.
     */
    private boolean isNameValuePairCorrect(String[][] table) {
        if (table == null) {
            return false;
        }
        for (int i = 0; i < table.length; i++) {
            String[] array = table[i];
            if (array == null || array.length != 2) {
                return false;
            }
        }
        return true;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void adjustForNumColumns(int numColumns) {
        if (numColumns > 1) {
            Control control = getLabelControl();
            int left = numColumns;
            if (control != null) {
                ((GridData) control.getLayoutData()).horizontalSpan = 1;
                left = left - 1;
            }
            ((GridData) itemList.getLayoutData()).horizontalSpan = left;
        } else {
            Control control = getLabelControl();
            if (control != null) {
                ((GridData) control.getLayoutData()).horizontalSpan = 1;
            }
            ((GridData) itemList.getLayoutData()).horizontalSpan = 1;
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doFillIntoGrid(Composite parent, int numColumns) {
        int comboC = 1;
        if (numColumns > 1) {
            comboC = numColumns - 1;
        }
        Control control = getLabelControl(parent);
        GridData gd = new GridData();
        gd.horizontalSpan = 1;
        control.setLayoutData(gd);
        control = getComboBoxControl(parent);
        gd = new GridData();
        gd.horizontalSpan = comboC;
        gd.horizontalAlignment = GridData.FILL;
        control.setLayoutData(gd);
        control.setFont(parent.getFont());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doLoad() {
        selectItemOfValue(getPreferenceStore().getString(getPreferenceName()));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doLoadDefault() {
        selectItemOfValue(getPreferenceStore().getDefaultString(getPreferenceName()));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void doStore() {
        if (selectedValue == null) {
            getPreferenceStore().setToDefault(getPreferenceName());
            return;
        }
        getPreferenceStore().setValue(getPreferenceName(), selectedValue);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int getNumberOfControls() {
        return 2;
    }

    /**
     * Gets the combo box control.
     *
     * @param parent the parent
     * @return the combo box control
     */
    public Combo getComboBoxControl(Composite parent) {
        if (itemList == null) {
            itemList = new Combo(parent, SWT.READ_ONLY);
            itemList.setFont(parent.getFont());
            for (int i = 0; i < nameValuePairs.length; i++) {
                itemList.add(nameValuePairs[i][0], i);
            }

            itemList.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent evt) {
                    String oldValue = selectedValue;
                    String name = itemList.getText();
                    selectedValue = getSelectedItemValue(name);
                    setPresentsDefaultValue(false);
                    fireValueChanged(VALUE, oldValue, selectedValue);
                }
            });
        }
        return itemList;
    }

    public void updateProtocolList(String selection, String[][] newNameValuePairs) {
        if (itemList == null) {
            return;
        }
        itemList.removeAll();
        boolean has = false;
        for (int i = 0; i < newNameValuePairs.length; i++) {
            itemList.add(newNameValuePairs[i][0], i);
            if (newNameValuePairs[i][0].equalsIgnoreCase(selection) == true) {
                has = true;
            }
        }
        nameValuePairs = newNameValuePairs;
        if (has == true) {
            itemList.setText(selection);
        } else {
            itemList.setText(newNameValuePairs[0][0]);
        }
    }

    private String getSelectedItemValue(String selected) {
        for (int i = 0; i < nameValuePairs.length; i++) {
            String[] entry = nameValuePairs[i];
            if (selected.equals(entry[0])) {
                return entry[1];
            }
        }
        return nameValuePairs[0][0];
    }

    /**
     * select the item whose value is the given parameter
     * 
     * @param value
     */
    private void selectItemOfValue(String value) {
        selectedValue = value;
        for (int i = 0; i < nameValuePairs.length; i++) {
            if (value.equals(nameValuePairs[i][1])) {
                itemList.setText(nameValuePairs[i][0]);
                return;
            }
        }
        if (nameValuePairs.length > 0) {
            selectedValue = nameValuePairs[0][1];
            itemList.setText(nameValuePairs[0][0]);
        }
    }
}