package ie.dcu.apps.ist.widgets; import ie.dcu.swt.PopupComposite; import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /** * Pop up control for changing brush sizes. * * @author Kevin McGuinness */ public class BrushControl extends PopupComposite { private static final int MAX_BRUSH_SIZE = 20; private final Label label; private final Scale scale; public BrushControl(Shell parent, int style) { super(parent, style); // Create controls label = new Label(this, SWT.NONE); scale = new Scale(this, SWT.NONE); configureControls(); configureListeners(); layoutControls(); } public void setBrushSize(int size) { scale.setSelection(size); updateLabel(); } public int getBrushSize() { return scale.getSelection(); } public void addSelectionListener(SelectionListener listener) { scale.addSelectionListener(listener); } public void removeSelectionListener(SelectionListener listener) { scale.removeSelectionListener(listener); } private void configureControls() { scale.setMinimum(1); scale.setMaximum(MAX_BRUSH_SIZE); scale.setIncrement(1); scale.setPageIncrement(2); setBrushSize(1); } private void configureListeners() { scale.addSelectionListener(new ScaleChangeListener()); } private void layoutControls() { setLayout(new GridLayout()); // Layout label GridData gd = new GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = SWT.FILL; label.setLayoutData(gd); // Layout scale control gd = new GridData(); gd.grabExcessHorizontalSpace = true; gd.horizontalAlignment = SWT.FILL; gd.minimumWidth = 150; scale.setLayoutData(gd); } private void updateLabel() { int size = scale.getSelection(); label.setText(String.format("Brush Size: %dpx ", size)); } private final class ScaleChangeListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { updateLabel(); } }; }