/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.swt; import org.beanfabrics.validation.ValidationState; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Control; import com.swtdesigner.SWTResourceManager; /** * Overlay icon to render above a {@link Control} and to indicate an invalid * validation state. * <p> * IMPORTANT: this class does not work correctly for all controls since it can * not be ensured that it paints at last. * </p> * * @author Michael Karneim */ public class ErrorOverlayIcon implements ValidationIndicator { private final String IMAGE_NAME = "error_overlay.gif"; private final Control control; private boolean visible = false; private int xOffset = 10; private int yOffset = 0; public ErrorOverlayIcon(Control aControl) { control = aControl; control.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { paint(e.gc); } }); } public int getXOffset() { return xOffset; } public void setXOffset(int offset) { xOffset = offset; } public int getYOffset() { return yOffset; } public void setYOffset(int offset) { yOffset = offset; } public void setVisible(boolean newValue) { this.visible = newValue; control.redraw(); } private void paint(GC gc) { if (visible) { gc.drawImage(getImage(), getXOffset(), getYOffset()); } } private Image getImage() { return SWTResourceManager.getImage(ErrorOverlayIcon.class, IMAGE_NAME); } public void setValidationState(ValidationState state) { if (state == null) { setVisible(false); } else { setVisible(true); } } }