/*
* This file is part of the OpenJML project.
* Copyright (c) 2012-2013 David R. Cok
* @author David R. Cok
*/
package org.jmlspecs.openjml.eclipse.widgets;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* A fake field editor that is just a button that can instigate an action when
* the button is pushed.
*/
public class ButtonFieldEditor extends FieldEditor {
/**
* The Button widget.
*/
private Button fButton;
/** The text on the button. */
private String buttonText;
/** The listener for button presses (typically a mouse up or down event). */
private MouseListener listener;
/**
* Create the combo box field editor.
*
* @param name the key of the preference this field editor works on
* @param labelText the label text of the field editor
* @param listener the action to take when the button is pressed or released
* @param parent the parent composite
*/
public ButtonFieldEditor(String name, String labelText, String buttonText, MouseListener listener, Composite parent) {
init(name, labelText);
this.buttonText = buttonText;
this.listener = listener;
createControl(parent);
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#adjustForNumColumns(int)
*/
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)fButton.getLayoutData()).horizontalSpan = left;
} else {
Control control = getLabelControl();
if (control != null) {
((GridData)control.getLayoutData()).horizontalSpan = 1;
}
((GridData)fButton.getLayoutData()).horizontalSpan = 1;
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#doFillIntoGrid(org.eclipse.swt.widgets.Composite, int)
*/
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 = getButton(parent);
gd = new GridData();
gd.horizontalSpan = comboC;
gd.horizontalAlignment = GridData.FILL;
control.setLayoutData(gd);
control.setFont(parent.getFont());
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#doLoad()
*/
protected void doLoad() {
// There is no state to update
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#doLoadDefault()
*/
protected void doLoadDefault() {
// There is no state to update
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#doStore()
*/
protected void doStore() {
// There is no state to store
}
/* (non-Javadoc)
* @see org.eclipse.jface.preference.FieldEditor#getNumberOfControls()
*/
public int getNumberOfControls() {
return 2;
}
/*
* Lazily create and return the control.
*/
private Button getButton(Composite parent) {
if (fButton == null) {
fButton = new Button(parent, SWT.PUSH);
fButton.setFont(parent.getFont());
fButton.setText(buttonText);
fButton.addMouseListener(listener);
}
return fButton;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.FieldEditor#setEnabled(boolean,
* org.eclipse.swt.widgets.Composite)
*/
public void setEnabled(boolean enabled, Composite parent) {
super.setEnabled(enabled, parent);
getButton(parent).setEnabled(enabled);
}
}