// RAP [bm]: GC + ColorDialog
///*******************************************************************************
// * Copyright (c) 2000, 2006 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// * IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.jface.viewers;
//
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.custom.TableTree;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.FontMetrics;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.ImageData;
//import org.eclipse.swt.graphics.PaletteData;
//import org.eclipse.swt.graphics.Point;
//import org.eclipse.swt.graphics.RGB;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.widgets.ColorDialog;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Label;
//import org.eclipse.swt.widgets.Layout;
//import org.eclipse.swt.widgets.Table;
//import org.eclipse.swt.widgets.Tree;
//
///**
// * A cell editor that manages a color field.
// * The cell editor's value is the color (an SWT <code>RBG</code>).
// * <p>
// * This class may be instantiated; it is not intended to be subclassed.
// * </p>
// */
//public class ColorCellEditor extends DialogCellEditor {
//
// /**
// * The default extent in pixels.
// */
// private static final int DEFAULT_EXTENT = 16;
//
// /**
// * Gap between between image and text in pixels.
// */
// private static final int GAP = 6;
//
// /**
// * The composite widget containing the color and RGB label widgets
// */
// private Composite composite;
//
// /**
// * The label widget showing the current color.
// */
// private Label colorLabel;
//
// /**
// * The label widget showing the RGB values.
// */
// private Label rgbLabel;
//
// /**
// * The image.
// */
// private Image image;
//
// /**
// * Internal class for laying out this cell editor.
// */
// private class ColorCellLayout extends Layout {
// public Point computeSize(Composite editor, int wHint, int hHint,
// boolean force) {
// if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) {
// return new Point(wHint, hHint);
// }
// Point colorSize = colorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT,
// force);
// Point rgbSize = rgbLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT,
// force);
// return new Point(colorSize.x + GAP + rgbSize.x, Math.max(
// colorSize.y, rgbSize.y));
// }
//
// public void layout(Composite editor, boolean force) {
// Rectangle bounds = editor.getClientArea();
// Point colorSize = colorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT,
// force);
// Point rgbSize = rgbLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT,
// force);
// int ty = (bounds.height - rgbSize.y) / 2;
// if (ty < 0) {
// ty = 0;
// }
// colorLabel.setBounds(-1, 0, colorSize.x, colorSize.y);
// rgbLabel.setBounds(colorSize.x + GAP - 1, ty, bounds.width
// - colorSize.x - GAP, bounds.height);
// }
// }
//
// /**
// * Creates a new color cell editor parented under the given control.
// * The cell editor value is black (<code>RGB(0,0,0)</code>) initially, and has no
// * validator.
// *
// * @param parent the parent control
// */
// public ColorCellEditor(Composite parent) {
// this(parent, SWT.NONE);
// }
//
// /**
// * Creates a new color cell editor parented under the given control.
// * The cell editor value is black (<code>RGB(0,0,0)</code>) initially, and has no
// * validator.
// *
// * @param parent the parent control
// * @param style the style bits
// * @since 1.0
// */
// public ColorCellEditor(Composite parent, int style) {
// super(parent, style);
// doSetValue(new RGB(0, 0, 0));
// }
//
// /**
// * Creates and returns the color image data for the given control
// * and RGB value. The image's size is either the control's item extent
// * or the cell editor's default extent, which is 16 pixels square.
// *
// * @param w the control
// * @param color the color
// */
// private ImageData createColorImage(Control w, RGB color) {
//
// GC gc = new GC(w);
// FontMetrics fm = gc.getFontMetrics();
// int size = fm.getAscent();
// gc.dispose();
//
// int indent = 6;
// int extent = DEFAULT_EXTENT;
// if (w instanceof Table) {
// extent = ((Table) w).getItemHeight() - 1;
// } else if (w instanceof Tree) {
// extent = ((Tree) w).getItemHeight() - 1;
// } else if (w instanceof TableTree) {
// extent = ((TableTree) w).getItemHeight() - 1;
// }
//
// if (size > extent) {
// size = extent;
// }
//
// int width = indent + size;
// int height = extent;
//
// int xoffset = indent;
// int yoffset = (height - size) / 2;
//
// RGB black = new RGB(0, 0, 0);
// PaletteData dataPalette = new PaletteData(new RGB[] { black, black,
// color });
// ImageData data = new ImageData(width, height, 4, dataPalette);
// data.transparentPixel = 0;
//
// int end = size - 1;
// for (int y = 0; y < size; y++) {
// for (int x = 0; x < size; x++) {
// if (x == 0 || y == 0 || x == end || y == end) {
// data.setPixel(x + xoffset, y + yoffset, 1);
// } else {
// data.setPixel(x + xoffset, y + yoffset, 2);
// }
// }
// }
//
// return data;
// }
//
// /* (non-Javadoc)
// * Method declared on DialogCellEditor.
// */
// protected Control createContents(Composite cell) {
// Color bg = cell.getBackground();
// composite = new Composite(cell, getStyle());
// composite.setBackground(bg);
// composite.setLayout(new ColorCellLayout());
// colorLabel = new Label(composite, SWT.LEFT);
// colorLabel.setBackground(bg);
// rgbLabel = new Label(composite, SWT.LEFT);
// rgbLabel.setBackground(bg);
// rgbLabel.setFont(cell.getFont());
// return composite;
// }
//
// /* (non-Javadoc)
// * Method declared on CellEditor.
// */
// public void dispose() {
// if (image != null) {
// image.dispose();
// image = null;
// }
// super.dispose();
// }
//
// /* (non-Javadoc)
// * Method declared on DialogCellEditor.
// */
// protected Object openDialogBox(Control cellEditorWindow) {
// ColorDialog dialog = new ColorDialog(cellEditorWindow.getShell());
// Object value = getValue();
// if (value != null) {
// dialog.setRGB((RGB) value);
// }
// value = dialog.open();
// return dialog.getRGB();
// }
//
// /* (non-Javadoc)
// * Method declared on DialogCellEditor.
// */
// protected void updateContents(Object value) {
// RGB rgb = (RGB) value;
// // XXX: We don't have a value the first time this method is called".
// if (rgb == null) {
// rgb = new RGB(0, 0, 0);
// }
// // XXX: Workaround for 1FMQ0P3: SWT:ALL - TableItem.setImage doesn't work if using the identical image."
// if (image != null) {
// image.dispose();
// }
//
// ImageData id = createColorImage(colorLabel.getParent().getParent(), rgb);
// ImageData mask = id.getTransparencyMask();
// image = new Image(colorLabel.getDisplay(), id, mask);
// colorLabel.setImage(image);
//
// rgbLabel
// .setText("(" + rgb.red + "," + rgb.green + "," + rgb.blue + ")");//$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$
// }
//}