package org.eclipse.ui.views.midi;
import java.text.MessageFormat;
import org.eclipse.jface.resource.ImageDescriptor;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Slider;
public class NumericValueEditor extends Composite {
private int value;
public int getValue() {
return value;
}
public void setValue(int value, boolean callback) {
value = Math.max(0, Math.min(getMaximumValue(), value));
this.value = value;
if(slider.isDisposed()){
return;
}
slider.setSelection(value);
displayer.setText(MessageFormat.format("{0}/{1}", hooks.display(value), hooks.display(getMaximumValue())));
if (callback) {
hooks.valueSet(value);
}
}
public void setValue(int value) {
setValue(value, true);
}
public void resetValue() {
setValue(defaultValue);
}
private int maximumValue;
public int getMaximumValue() {
return maximumValue;
}
public void setMaximumValue(int maximumValue) {
this.maximumValue = maximumValue;
slider.setMaximum(maximumValue + 1);
slider.setPageIncrement(maximumValue / 100);
setValue(getValue());
}
private final int defaultValue;
private final Slider slider;
private final Label displayer;
private final ValueHooks hooks;
public NumericValueEditor(Composite parent, String name, ImageDescriptor icon, ImageDescriptor resetterIcon, int maximumValue, int defaultValue, ValueHooks hooks) {
super(parent, SWT.NONE);
setLayout(new GridLayout(4, false));
Label header = new Label(this, SWT.NONE);
header.setImage(icon.createImage());
header.setToolTipText(name);
Button resetter = new Button(this, SWT.FLAT);
resetter.setImage(resetterIcon.createImage());
resetter.setToolTipText(MessageFormat.format("Reset to {0}", hooks.display(defaultValue)));
resetter.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
resetValue();
}
});
slider = new Slider(this, SWT.NONE);
GridData sliderLayoutData = new GridData();
sliderLayoutData.horizontalAlignment = SWT.FILL;
sliderLayoutData.grabExcessHorizontalSpace = true;
slider.setLayoutData(sliderLayoutData);
slider.setThumb(1);
slider.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setValue(slider.getSelection());
}
});
displayer = new Label(this, SWT.CENTER);
displayer.setLayoutData(new GridData(80, SWT.DEFAULT)); // XXX proper width
this.hooks = hooks;
this.setMaximumValue(maximumValue);
this.defaultValue = defaultValue;
setValue(defaultValue);
}
}