| /******************************************************************************* |
| * Copyright (c) 2000, 2003 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.swt.opengl.examples; |
| |
| |
| import java.util.Vector; |
| |
| import org.eclipse.opengl.*; |
| import org.eclipse.swt.*; |
| import org.eclipse.swt.events.*; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| |
| class ColorSelectionGroup implements Listener { |
| private Color color; |
| private Label label; |
| private Image image; |
| private Button button; |
| private Vector listeners = new Vector(); |
| |
| /** |
| * Constructor. |
| * |
| * @param parent the parent composite |
| * @param style style bits to be applied to the color group |
| */ |
| ColorSelectionGroup(Composite parent, int style) { |
| super(); |
| initColor(parent.getDisplay()); |
| |
| Composite colorGroup = new Composite(parent, style); |
| GridLayout layout = new GridLayout(2, false); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| colorGroup.setLayout(layout); |
| // GridData data = new GridData(GridData.FILL_HORIZONTAL); |
| // data.grabExcessHorizontalSpace = true; |
| // colorGroup.setLayoutData(data); |
| |
| button = new Button(colorGroup, SWT.NONE); |
| button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); |
| image = new Image(button.getDisplay(), 12, 12); |
| drawButtonImage(); |
| button.setImage(image); |
| button.addListener(SWT.Selection, this); |
| button.addDisposeListener(new DisposeListener() { |
| public void widgetDisposed(DisposeEvent event) { |
| if (image != null) image.dispose(); |
| if (color != null) color.dispose(); |
| } |
| }); |
| |
| label = new Label(colorGroup, SWT.NONE); |
| label.setText("Color"); |
| // data = new GridData(GridData.FILL_HORIZONTAL); |
| // data.grabExcessHorizontalSpace = true; |
| // label.setLayoutData(data); |
| } |
| |
| /** |
| * Adds the argument to this group's collection of |
| * color selection listeners. |
| * |
| * @param listener |
| */ |
| void addColorSelectionListener(IColorSelectionListener listener) { |
| listeners.addElement(listener); |
| } |
| |
| /** |
| * Draws the colored square on the selection button. |
| */ |
| void drawButtonImage() { |
| GC gc = new GC(image); |
| gc.setBackground(color); |
| Rectangle bounds = image.getBounds(); |
| gc.fillRectangle(0, 0, bounds.width, bounds.height); |
| gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1); |
| gc.dispose(); |
| } |
| |
| /** |
| * @see org.eclipse.swt.widgets.Listener#handleEvent(Event) |
| */ |
| public void handleEvent(Event e) { |
| Shell shell = button.getShell(); |
| ColorDialog colorDialog = new ColorDialog(shell); |
| colorDialog.setRGB( |
| new RGB(color.getRed(), color.getGreen(), color.getBlue())); |
| RGB rgb = colorDialog.open(); |
| if (rgb == null) return; |
| setRGB(rgb); |
| notifyListeners(rgb); |
| } |
| |
| /** |
| * Initializes the color by querying for the current color. |
| * |
| * @param display |
| */ |
| void initColor(Display display) { |
| double[] currentColor = new double[4]; |
| GL.glGetDoublev(GL.GL_CURRENT_COLOR, currentColor); |
| RGB rgb = |
| new RGB( |
| (int) currentColor[0] * 255, |
| (int) currentColor[1] * 255, |
| (int) currentColor[2] * 255); |
| color = new Color(display, rgb); |
| } |
| |
| /** |
| * Notifies all registered color selection listeners. |
| * |
| * @param value |
| */ |
| void notifyListeners(RGB rgb) { |
| IColorSelectionListener[] listenersArr = |
| new IColorSelectionListener[listeners.size()]; |
| listeners.copyInto(listenersArr); |
| for (int i = 0; i < listenersArr.length; i++) { |
| listenersArr [i].handleColorSelection(rgb); |
| } |
| } |
| |
| /** |
| * Removes the argument from this group's collection of color selection |
| * listeners. If the argument is not a registered listener then does |
| * nothing. |
| * |
| * @param listener |
| */ |
| void removeColorSelectionListener(IColorSelectionListener listener) { |
| listeners.removeElement(listener); |
| } |
| |
| /** |
| * Sets the text for the group's label. |
| * |
| * @param text the new label text |
| */ |
| void setText(String text) { |
| label.setText(text); |
| } |
| |
| /** |
| * Sets the current color. |
| * |
| * @param rgb the rgb of the new color |
| */ |
| void setRGB(RGB rgb) { |
| Color oldColor = color; |
| color = new Color(button.getDisplay(), rgb); |
| drawButtonImage(); |
| button.setImage(image); |
| if (oldColor != null) oldColor.dispose(); |
| } |
| } |