org.sf.feeling.decompiler.preferences.StringChoiceFieldEditor.java Source code

Java tutorial

Introduction

Here is the source code for org.sf.feeling.decompiler.preferences.StringChoiceFieldEditor.java

Source

/*******************************************************************************
 * Copyright (c) 2016 Chen Chao(cnfree2000@hotmail.com).
 * 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:
 *  Chen Chao  - initial API and implementation
 *******************************************************************************/

package org.sf.feeling.decompiler.preferences;

import java.util.ArrayList;
import java.util.List;

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.Label;

public class StringChoiceFieldEditor extends FieldEditor {

    private Combo fCombo;
    private List fKeys = new ArrayList(5);
    private List fLabels = new ArrayList(5);
    private String fOldKey;
    private boolean fIsValid;

    public StringChoiceFieldEditor(String name, String label, Composite parent) {
        super(name, label, parent);
        initList();
    }

    public void addItem(String key, String label) {
        fKeys.add(key);
        fLabels.add(label);
        fCombo.add(label);
    }

    public void addItem(String key, String label, String value) {
        fKeys.add(key);
        fLabels.add(value);
        fCombo.add(label);
    }

    public Combo getControl() {
        return fCombo;
    }

    protected void adjustForNumColumns(int numColumns) {
        if (fCombo != null) {
            GridData gd = (GridData) fCombo.getLayoutData();
            gd.horizontalSpan = numColumns - 1;
        }
    }

    protected void doFillIntoGrid(Composite parent, int numColumns) {
        Label l = new Label(parent, SWT.NULL);
        l.setText(getLabelText());
        GridData gd = new GridData();
        fCombo = new Combo(parent, SWT.READ_ONLY);
        fCombo.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                valueChanged();
            }

        });
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = numColumns - 1;
        fCombo.setLayoutData(gd);

    }

    protected void doLoad() {
        String value = getPreferenceStore().getString(getPreferenceName());
        int index = fLabels.indexOf(value);
        if (index >= 0)
            fCombo.select(index);
    }

    protected void doLoadDefault() {
        String value = getPreferenceStore().getDefaultString(getPreferenceName());
        int index = fLabels.indexOf(value);
        if (index >= 0) {
            fCombo.select(index);
            valueChanged();
        }
    }

    protected void doStore() {
        String value = ""; //$NON-NLS-1$
        if (fCombo.getSelectionIndex() >= 0) {
            value = (String) fLabels.get(fCombo.getSelectionIndex());
        }
        getPreferenceStore().setValue(getPreferenceName(), value);
    }

    public int getNumberOfControls() {
        return 2;
    }

    protected String getSelectedKey() {
        int index = fCombo.getSelectionIndex();
        if (index >= 0)
            return (String) fKeys.get(index);
        return null;
    }

    protected void initList() {
        for (int i = 0; i < fLabels.size(); i++)
            fCombo.add((String) fLabels.get(i));
        fOldKey = getSelectedKey();
    }

    public boolean isValid() {
        return fIsValid;
    }

    protected void refreshValidState() {
        fIsValid = fCombo.getSelectionIndex() >= 0;
    }

    public void removeItem(String key) {
        int index = fKeys.indexOf(key);
        if (index >= 0) {
            fKeys.remove(index);
            fLabels.remove(index);
            fCombo.remove(index);
        }
    }

    /**
     * Set the focus to this field editor.
     */
    public void setFocus() {
        if (fCombo != null) {
            fCombo.setFocus();
        }
    }

    protected void valueChanged() {
        setPresentsDefaultValue(false);
        boolean oldState = fIsValid;
        refreshValidState();

        if (fIsValid != oldState)
            fireStateChanged(IS_VALID, oldState, fIsValid);

        String newKey = getSelectedKey();
        if (newKey == null ? newKey != fOldKey : !newKey.equals(fOldKey)) {
            fireValueChanged(VALUE, fOldKey, newKey);
            fOldKey = newKey;
        }
    }
}