package com.redhat.ceylon.eclipse.code.preferences; import org.eclipse.jface.preference.ScaleFieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; public final class ScaleWithLabelFieldEditor extends ScaleFieldEditor { Label label; public ScaleWithLabelFieldEditor(String name, String labelText, Composite parent) { super(name, labelText, parent); } @Override protected void adjustForNumColumns(int numColumns) { ((GridData) scale.getLayoutData()).horizontalSpan = numColumns - 2; } @Override protected void doFillIntoGrid(Composite parent, int numColumns) { super.doFillIntoGrid(parent, numColumns-1); label = new Label(parent, SWT.SHADOW_IN); getScaleControl().addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { label.setText(scale.getSelection() + " ms"); } @Override public void widgetDefaultSelected(SelectionEvent e) { label.setText(scale.getSelection() + " ms"); } }); GridData gd = new GridData(); label.setLayoutData(gd); } @Override public int getNumberOfControls() { return super.getNumberOfControls()+1; } @Override protected void createControl(Composite parent) { GridLayout layout = new GridLayout(); layout.numColumns = getNumberOfControls(); layout.marginWidth = 0; layout.marginHeight = 0; layout.horizontalSpacing = HORIZONTAL_GAP; parent.setLayout(layout); doFillIntoGrid(parent, layout.numColumns); } @Override public void setEnabled(boolean enabled, Composite parent) { super.setEnabled(enabled, parent); getScaleControl().setEnabled(enabled); label.setEnabled(enabled); } @Override protected void doLoad() { super.doLoad(); if (label != null) { int value = getPreferenceStore().getInt(getPreferenceName()); label.setText(value + " ms "); } } @Override protected void doLoadDefault() { super.doLoadDefault(); if (label != null) { int value = getPreferenceStore().getDefaultInt(getPreferenceName()); label.setText(value + " ms "); } } }