package net.jeeeyul.eclipse.themes.ui.preference.internal; import net.jeeeyul.swtend.sam.Procedure1; import net.jeeeyul.swtend.ui.ColorPicker; import net.jeeeyul.swtend.ui.ColorWell; import net.jeeeyul.swtend.ui.HSB; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; @SuppressWarnings("javadoc") public class TextShadowEdit { private ColorWell colorWell; private Button noneButton; private Button belowButton; private Button upperButton; private Composite control; private Procedure1<TextShadowEdit> modifyHandler; public TextShadowEdit(Composite composite) { control = new Composite(composite, SWT.NORMAL); GridLayout layout = new GridLayout(4, false); layout.marginWidth = layout.marginHeight = 0; control.setLayout(layout); colorWell = new ColorWell(control, SWT.NORMAL); noneButton = new Button(control, SWT.RADIO); noneButton.setText("None"); belowButton = new Button(control, SWT.RADIO); belowButton.setText("Below"); upperButton = new Button(control, SWT.RADIO); upperButton.setText("Upper"); colorWell.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { ColorPicker picker = new ColorPicker(control.getShell()); HSB original = colorWell.getSelection(); picker.setSelection(original); picker.setContinuosSelectionHandler(new Procedure1<HSB>() { @Override public void apply(HSB t) { colorWell.setSelection(t, true); } }); if (picker.open() == IDialogConstants.OK_ID) { colorWell.setSelection(picker.getSelection(), true); } else { colorWell.setSelection(original, true); } } }); Listener dispatchModify = new Listener() { @Override public void handleEvent(Event event) { if (modifyHandler != null) { modifyHandler.apply(TextShadowEdit.this); } } }; noneButton.addListener(SWT.Selection, dispatchModify); belowButton.addListener(SWT.Selection, dispatchModify); upperButton.addListener(SWT.Selection, dispatchModify); colorWell.addListener(SWT.Modify, dispatchModify); } public HSB getColor() { return colorWell.getSelection(); } public Composite getControl() { return control; } public Procedure1<TextShadowEdit> getModifyHandler() { return modifyHandler; } public Point getShadowPosition() { if (noneButton.getSelection()) { return new Point(0, 0); } else if (belowButton.getSelection()) { return new Point(0, 1); } else { return new Point(0, -1); } } public void setColor(HSB color) { colorWell.setSelection(color, false); } public void setModifyHandler(Procedure1<TextShadowEdit> modifyHandler) { this.modifyHandler = modifyHandler; } public void setShadowPosition(Point point) { if (point.y < 0) { upperButton.setSelection(true); belowButton.setSelection(false); noneButton.setSelection(false); } else if (point.y > 0) { upperButton.setSelection(false); belowButton.setSelection(true); noneButton.setSelection(false); } else { upperButton.setSelection(false); belowButton.setSelection(false); noneButton.setSelection(true); } } }