Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.preferences/src/org/eclipse/papyrus/infra/gmfdiag/preferences/jface/preference/ColorFieldEditor.java')
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.preferences/src/org/eclipse/papyrus/infra/gmfdiag/preferences/jface/preference/ColorFieldEditor.java197
1 files changed, 197 insertions, 0 deletions
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.preferences/src/org/eclipse/papyrus/infra/gmfdiag/preferences/jface/preference/ColorFieldEditor.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.preferences/src/org/eclipse/papyrus/infra/gmfdiag/preferences/jface/preference/ColorFieldEditor.java
new file mode 100644
index 00000000000..82b6f449e48
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.preferences/src/org/eclipse/papyrus/infra/gmfdiag/preferences/jface/preference/ColorFieldEditor.java
@@ -0,0 +1,197 @@
+/****************************************************************************
+ * Copyright (c) 2008 Atos Origin.
+ *
+ * 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:
+ * Thibault Landre (Atos Origin) - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.preferences.jface.preference;
+
+import org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ColorPalettePopup;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.preference.FieldEditor;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.CompositeImageDescriptor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+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.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * A field editor that display a button and a small rectangle under it to show the color selected.
+ *
+ * This field editor is inspired by the class {@link org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ColorsAndFontsPropertySection
+ * <em>ColorsAndFontsPropertySection</em>}
+ *
+ * @author tlandre
+ */
+
+public class ColorFieldEditor extends FieldEditor {
+
+ private Image buttonImage;
+
+ private Image backgroundImage;
+
+ private ColorPalettePopup colorSelector;
+
+ private Button colorButton;
+
+ /**
+ * Default constructor
+ *
+ * @param name
+ * the preference name to use
+ * @param image
+ * the image to display
+ * @param parent
+ * the parent composite
+ */
+ public ColorFieldEditor(String name, Image image, Composite parent) {
+ super(name, "", parent); // $NON-NLS-1$
+ backgroundImage = image;
+ }
+
+ @Override
+ public void load() {
+ super.load();
+
+ buttonImage = new ColorOverlayImageDescriptor(backgroundImage.getImageData(), PreferenceConverter.getColor(getPreferenceStore(), getPreferenceName())).createImage();
+ colorButton.setImage(buttonImage);
+ }
+
+ @Override
+ protected void adjustForNumColumns(int numColumns) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ protected void doFillIntoGrid(Composite parent, int numColumns) {
+ colorButton = new Button(parent, SWT.PUSH);
+ colorButton.setLayoutData(new GridData());
+ colorButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent event) {
+ changeColors(colorButton);
+ }
+ });
+
+ }
+
+ @Override
+ protected void doLoad() {
+ doLoadColor(PreferenceConverter.getColor(getPreferenceStore(), getPreferenceName()));
+ }
+
+ @Override
+ protected void doLoadDefault() {
+ doLoadColor(PreferenceConverter.getDefaultColor(getPreferenceStore(), getPreferenceName()));
+
+ }
+
+ private void doLoadColor(RGB rgb) {
+ updateButtonImage(rgb);
+ if(colorSelector != null) {
+ colorSelector.setPreviousColor(FigureUtilities.RGBToInteger(rgb));
+ }
+
+ }
+
+ @Override
+ protected void doStore() {
+ if(colorSelector != null) {
+ PreferenceConverter.setValue(getPreferenceStore(), getPreferenceName(), colorSelector.getSelectedColor());
+ }
+ }
+
+ @Override
+ public int getNumberOfControls() {
+ return 1;
+ }
+
+ private void changeColors(Button button) {
+
+ colorSelector = new ColorPalettePopup(colorButton.getParent().getShell(), IDialogConstants.BUTTON_BAR_HEIGHT);
+
+ Rectangle r = button.getBounds();
+ Point location = button.getParent().toDisplay(r.x, r.y);
+ colorSelector.open(location);
+
+ if(colorSelector.getSelectedColor() == null && !colorSelector.useDefaultColor()) {
+ return;
+ }
+ updateButtonImage(colorSelector.getSelectedColor());
+
+ }
+
+ private void updateButtonImage(RGB rgb) {
+ if(!colorButton.isDisposed() && colorButton.getImage() != null && !colorButton.getImage().isDisposed()) {
+ colorButton.getImage().dispose();
+ Image overlyedImage = new ColorOverlayImageDescriptor(backgroundImage.getImageData(), rgb).createImage();
+ colorButton.setImage(overlyedImage);
+ }
+ }
+
+ protected static class ColorOverlayImageDescriptor extends CompositeImageDescriptor {
+
+ /** default color icon width */
+ private static final Point ICON_SIZE = new Point(16, 16);
+
+ /** the basic icon */
+ private ImageData basicImgData;
+
+ /** the color of the thin color bar */
+ private RGB rgb;
+
+ /**
+ * Creates a new color menu image descriptor
+ *
+ * @param basicImgData
+ * The basic Image data
+ * @param rgb
+ * The color bar RGB value
+ */
+ public ColorOverlayImageDescriptor(ImageData basicImgData, RGB rgb) {
+ this.basicImgData = basicImgData;
+ this.rgb = rgb;
+ }
+
+ /**
+ * @see org.eclipse.jface.resource.CompositeImageDescriptor#drawCompositeImage(int, int)
+ */
+ protected void drawCompositeImage(int width, int height) {
+
+ // draw the thin color bar underneath
+ if(rgb != null) {
+ ImageData colorBar = new ImageData(width, height / 5, 1,
+
+ new PaletteData(new RGB[]{ rgb }));
+ drawImage(colorBar, 0, height - height / 5);
+
+ }
+ // draw the base image
+ drawImage(basicImgData, 0, 0);
+ }
+
+ /**
+ * @see org.eclipse.jface.resource.CompositeImageDescriptor#getSize()
+ */
+ protected Point getSize() {
+ return ICON_SIZE;
+ }
+ }
+}

Back to the top