package net.jeeeyul.eclipse.themes.ui.preference.internal; import net.jeeeyul.swtend.SWTExtensions; import net.jeeeyul.swtend.sam.Procedure1; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; @SuppressWarnings("javadoc") public class LineStyleEditor { private Button[] buttons; private Procedure1<LineStyleEditor> selectionHandler; private Composite composite; public LineStyleEditor(Composite parent) { composite = new Composite(parent, SWT.NORMAL); GridLayout layout = new GridLayout(4, false); composite.setLayout(layout); Listener listener = new Listener() { @Override public void handleEvent(Event event) { fireSelection(); } }; buttons = new Button[4]; buttons[0] = new Button(composite, SWT.RADIO); buttons[0].setText("None"); buttons[0].setData(SWT.NONE); buttons[1] = new Button(composite, SWT.RADIO); buttons[1].setText("Solid"); buttons[1].setData(SWT.LINE_SOLID); buttons[2] = new Button(composite, SWT.RADIO); buttons[2].setText("Dashed"); buttons[2].setData(SWT.LINE_DASH); buttons[3] = new Button(composite, SWT.RADIO); buttons[3].setText("Dotted"); buttons[3].setData(SWT.LINE_DOT); SWTExtensions.INSTANCE.attachTo(listener, SWT.Selection, buttons); } private void fireSelection() { if (selectionHandler != null) { selectionHandler.apply(this); } } /** * * @return line style value. * * @see SWT#LINE_SOLID * @see SWT#LINE_DASH * @see SWT#LINE_DOT * @see SWT#NONE */ public int getSelection() { for (Button each : buttons) { if (each.getSelection()) { return (Integer) each.getData(); } } return SWT.NONE; } public Procedure1<LineStyleEditor> getSelectionHandler() { return selectionHandler; } public Control getControl() { return composite; } public void setSelection(int lineStyle) { for (Button each : buttons) { int data = (Integer) each.getData(); each.setSelection(data == lineStyle); } } public void setSelectionHandler(Procedure1<LineStyleEditor> selectionHandler) { this.selectionHandler = selectionHandler; } }