package com.gorillalogic.monkeyconsole.tableview.labelproviders; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import com.gorillalogic.monkeyconsole.tableview.TableRow; public class ShouldFailLabelProvider extends ColumnLabelProvider { private static final String CHECKED_KEY = "CHECKED"; private static final String UNCHECK_KEY = "UNCHECKED"; public ShouldFailLabelProvider(ColumnViewer viewer) { if (JFaceResources.getImageRegistry().getDescriptor(CHECKED_KEY) == null) { JFaceResources.getImageRegistry() .put(UNCHECK_KEY, makeShot(viewer.getControl(), false)); JFaceResources.getImageRegistry().put(CHECKED_KEY, makeShot(viewer.getControl(), true)); } } private Image makeShot(Control control, boolean type) { // Hopefully no platform uses exactly this color because we’ll make // it transparent in the image. Color greenScreen = new Color(control.getDisplay(), 222, 223, 224); Shell shell = new Shell(control.getShell(), SWT.NO_TRIM); // otherwise we have a default gray color shell.setBackground(greenScreen); // shell.setLayoutData(control.getLayoutData()); Button button = new Button(shell, SWT.CHECK); button.setBackground(greenScreen); button.setSelection(type); // button.setLayoutData(control.getLayoutData()); // otherwise an image is located in a corner button.setLocation(1, 1); Point bsize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT); // otherwise an image is stretched by width bsize.x = Math.max(bsize.x - 1, bsize.y - 1); bsize.y = Math.max(bsize.x - 1, bsize.y - 1); button.setSize(bsize); shell.setSize(bsize); shell.open(); GC gc = new GC(shell); Image image = new Image(control.getDisplay(), bsize.x, bsize.y); gc.copyArea(image, 0, 0); gc.dispose(); shell.close(); ImageData imageData = image.getImageData(); imageData.transparentPixel = imageData.palette.getPixel(greenScreen.getRGB()); return new Image(control.getDisplay(), imageData); } public Image getImage(Object element) { if (isChecked(element)) { return JFaceResources.getImageRegistry().getDescriptor(CHECKED_KEY).createImage(); } else { return JFaceResources.getImageRegistry().getDescriptor(UNCHECK_KEY).createImage(); } } @Override public String getText(Object element) { return ""; } protected boolean isChecked(Object element) { return ((TableRow) element).shouldFail(); } }