Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 723b01ab409ad18375c015dde409324db6841721 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                                                                
                                                                







                                                                                 
                                                      






































































































































                                                                                 
/*******************************************************************************
 * Copyright (c) 2008, 2011 Wind River Systems, Inc. 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:
 *     Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.tcf.internal.debug.ui.preferences;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

/**
 * An integer field editor with an enablement check box.
 */
public class IntegerWithBooleanFieldEditor extends DecoratingIntegerFieldEditor {

    private final String fEnableKey;

    private Button fCheckbox;

    private boolean fWasSelected;

    public IntegerWithBooleanFieldEditor(String enableKey, String nameKey,
            String labelText, Composite parent) {
        super(nameKey, labelText, parent);
        fEnableKey = enableKey;
    }

    public IntegerWithBooleanFieldEditor(String enableKey, String nameKey,
            String labelText, Composite parent, int textLimit) {
        super(nameKey, labelText, parent, textLimit);
        fEnableKey = enableKey;
    }

    @Override
    protected void doFillIntoGrid(Composite parent, int numColumns) {
        getCheckboxControl(parent);
        super.doFillIntoGrid(parent, numColumns);
    }

    private Button getCheckboxControl(Composite parent) {
        if (fCheckbox == null) {
            Composite inner = new Composite(parent, SWT.NULL);
            final GridLayout layout = new GridLayout(2, false);
            layout.marginWidth = 0;
            inner.setLayout(layout);
            fCheckbox = new Button(inner, SWT.CHECK);
            fCheckbox.setFont(parent.getFont());
            fCheckbox.setText(getLabelText());
            // create and hide label from base class
            Label label = getLabelControl(inner);
            label.setText(""); //$NON-NLS-1$
            label.setVisible(false);
            fCheckbox.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    boolean isSelected = fCheckbox.getSelection();
                    valueChanged(fWasSelected, isSelected);
                    fWasSelected = isSelected;
                }
            });
        }
        else {
            checkParent(fCheckbox.getParent(), parent);
        }
        return fCheckbox;
    }

    @Override
    public Label getLabelControl(Composite parent) {
        final Label label = getLabelControl();
        if (label == null) {
            return super.getLabelControl(parent);
        }
        else {
            checkParent(label.getParent(), parent);
        }
        return label;
    }

    protected void valueChanged(boolean oldValue, boolean newValue) {
        if (oldValue != newValue) {
            valueChanged();
            fireStateChanged(VALUE, oldValue, newValue);
            getTextControl().setEnabled(newValue);
            getLabelControl().setEnabled(newValue);
        }
    }

    @Override
    protected boolean checkState() {
        if (fCheckbox != null && !fCheckbox.getSelection()) {
            clearErrorMessage();
            return true;
        }
        return super.checkState();
    }

    @Override
    protected void doLoad() {
        super.doLoad();
        if (fCheckbox != null) {
            boolean value = getPreferenceStore().getBoolean(fEnableKey);
            fCheckbox.setSelection(value);
            fWasSelected = value;
            getTextControl().setEnabled(value);
            getLabelControl().setEnabled(value);
        }
    }

    @Override
    protected void doLoadDefault() {
        super.doLoadDefault();
        if (fCheckbox != null) {
            boolean value = getPreferenceStore().getDefaultBoolean(fEnableKey);
            fCheckbox.setSelection(value);
            fWasSelected = value;
            getTextControl().setEnabled(value);
            getLabelControl().setEnabled(value);
        }
    }

    @Override
    protected void doStore() {
        super.doStore();
        getPreferenceStore().setValue(fEnableKey, fCheckbox.getSelection());
    }

    /**
     * Returns this field editor's current boolean value.
     *
     * @return the value
     */
    public boolean getBooleanValue() {
        return fCheckbox.getSelection();
    }
}

Back to the top