⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorcelleditor.java

📁 jfa2ce 源码帮助开发人员更好的理解运用
💻 JAVA
字号:
/******************************************************************************* * 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 2.1     */    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$    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -