]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/color/ColorComposite.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / color / ColorComposite.java
diff --git a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/color/ColorComposite.java b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/color/ColorComposite.java
new file mode 100644 (file)
index 0000000..bae10b9
--- /dev/null
@@ -0,0 +1,191 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.utils.ui.color;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.events.MouseListener;\r
+import org.eclipse.swt.graphics.Rectangle;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Canvas;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+/**\r
+ * \r
+ * Widget to edit colors\r
+ * \r
+ * @author Marko Luukkainen\r
+ *\r
+ */\r
+public class ColorComposite extends Composite{\r
+       \r
+       \r
+       private Color color = new Color(255,255,255);\r
+       private ColorGradient rGradient;\r
+       private ColorGradient gGradient;\r
+       private ColorGradient bGradient;\r
+       private ColorGradient colorGradient;\r
+       \r
+       Text rText;\r
+       Text gText;\r
+       Text bText;\r
+       ColorGradientCanvas rCanvas;\r
+       ColorGradientCanvas gCanvas;\r
+       ColorGradientCanvas bCanvas;\r
+       ColorGradientCanvas colorCanvas;\r
+       \r
+       \r
+       public ColorComposite(Composite parent, int style) {\r
+               super(parent,style);\r
+               updateGradients();\r
+               \r
+               GridLayout layout = new GridLayout();\r
+               layout.makeColumnsEqualWidth = false;\r
+               layout.numColumns = 3;\r
+               this.setLayout(layout);\r
+               \r
+               colorCanvas = new ColorGradientCanvas(this,SWT.BORDER|SWT.HORIZONTAL);\r
+               GridData colorCanvasData = new GridData();\r
+               colorCanvasData.horizontalSpan = 3;\r
+               colorCanvasData.heightHint = 32;\r
+               colorCanvasData.widthHint = 600;\r
+               colorCanvasData.grabExcessHorizontalSpace = true;\r
+               colorCanvas.setLayoutData(colorCanvasData);\r
+               \r
+               //layout data used with labels\r
+               GridData labelData = new GridData();\r
+               labelData.widthHint = 30;\r
+               //layout data used with gradients\r
+               GridData gradientData = new GridData();\r
+               gradientData.grabExcessHorizontalSpace = true;\r
+               gradientData.heightHint = 16;\r
+               gradientData.widthHint = 500;\r
+               //layout data used with texts\r
+               GridData textData = new GridData();\r
+               textData.widthHint = 30;\r
+               \r
+               \r
+               //Composite rComposite = new Composite(this,SWT.NONE);\r
+               //Layout rLayout = new FillLayout(SWT.HORIZONTAL);\r
+               //rComposite.setLayout(rLayout);\r
+               Label rLabel = new Label(this,SWT.NONE);\r
+               rLabel.setText("Red");\r
+               rLabel.setLayoutData(labelData);\r
+               rCanvas = new ColorGradientCanvas(this,SWT.BORDER|SWT.HORIZONTAL);\r
+               rCanvas.setLayoutData(gradientData);\r
+               rText = new Text(this,SWT.BORDER);\r
+               rText.setLayoutData(textData);\r
+               rCanvas.addMouseListener(new ColorSelectListener(rCanvas) {\r
+                       void setValue(int value) {\r
+                               Color newColor = new Color(value,color.getG(),color.getB());\r
+                               updateColor(newColor);\r
+                       };\r
+               });\r
+               \r
+               //Composite gComposite = new Composite(this,SWT.NONE);\r
+               //Layout gLayout = new FillLayout(SWT.HORIZONTAL);\r
+               //gComposite.setLayout(gLayout);\r
+               Label gLabel = new Label(this,SWT.NONE);\r
+               gLabel.setText("Green");\r
+               gLabel.setLayoutData(labelData);\r
+               gCanvas = new ColorGradientCanvas(this,SWT.BORDER|SWT.HORIZONTAL);\r
+               gCanvas.setLayoutData(gradientData);\r
+               gText = new Text(this,SWT.BORDER);\r
+               gText.setLayoutData(textData);\r
+               gCanvas.addMouseListener(new ColorSelectListener(gCanvas) {\r
+                       void setValue(int value) {\r
+                               Color newColor = new Color(color.getR(),value,color.getB());\r
+                               updateColor(newColor);\r
+                       };\r
+               });\r
+               \r
+               //Composite bComposite = new Composite(this,SWT.NONE);\r
+               //Layout bLayout = new FillLayout(SWT.HORIZONTAL);\r
+               //bComposite.setLayout(bLayout);\r
+               Label bLabel = new Label(this,SWT.NONE);\r
+               bLabel.setText("Blue");\r
+               bLabel.setLayoutData(labelData);\r
+               bCanvas = new ColorGradientCanvas(this,SWT.BORDER|SWT.HORIZONTAL);\r
+               bCanvas.setLayoutData(gradientData);\r
+               bText = new Text(this,SWT.BORDER);\r
+               bText.setLayoutData(textData);\r
+               bCanvas.addMouseListener(new ColorSelectListener(bCanvas) {\r
+                       void setValue(int value) {\r
+                               Color newColor = new Color(color.getR(),color.getG(),value);\r
+                               updateColor(newColor);\r
+                       };\r
+               });\r
+               updateWidgets();\r
+               \r
+       }\r
+       \r
+       private abstract class ColorSelectListener implements MouseListener {\r
+               private Canvas canvas;\r
+               \r
+               public ColorSelectListener(Canvas canvas) {\r
+                       this.canvas = canvas;\r
+               }\r
+               public void mouseDoubleClick(MouseEvent e) {\r
+                                               \r
+               }\r
+               public void mouseDown(MouseEvent e) {\r
+                       Rectangle r = this.canvas.getBounds();\r
+                       double d = (double)e.x / (double)r.width;\r
+                       int value = (int)(d * 255);\r
+                       if (value < 0)\r
+                               value = 0;\r
+                       if (value > 255)\r
+                               value = 255;\r
+                       setValue(value);\r
+                       \r
+               }\r
+               public void mouseUp(MouseEvent e) {\r
+                       \r
+               }\r
+               \r
+               abstract void setValue(int value);\r
+       }\r
+       \r
+       private void updateColor(Color color) {\r
+               this.color = color;\r
+               updateWidgets();\r
+       }\r
+       \r
+       private void updateGradients() {\r
+               rGradient = new ColorGradient(new ColorValue[]{\r
+                                       new ColorValue(new Color(0,color.getG(),color.getB()),0.0),\r
+                                       new ColorValue(new Color(255,color.getG(),color.getB()),1.0)});\r
+               gGradient = new ColorGradient(new ColorValue[]{\r
+                               new ColorValue(new Color(color.getR(),0,color.getB()),0.0),\r
+                               new ColorValue(new Color(color.getR(),255,color.getB()),1.0)});\r
+               bGradient = new ColorGradient(new ColorValue[]{\r
+                               new ColorValue(new Color(color.getR(),color.getG(),0),0.0),\r
+                               new ColorValue(new Color(color.getR(),color.getG(),255),1.0)});\r
+               colorGradient = new ColorGradient(new ColorValue[]{\r
+                               new ColorValue(new Color(color.getR(),color.getG(),color.getB()),0.0)});\r
+       \r
+       }\r
+       \r
+       private void updateWidgets() {\r
+               updateGradients();\r
+               rCanvas.setGradient(rGradient);\r
+               gCanvas.setGradient(gGradient);\r
+               bCanvas.setGradient(bGradient);\r
+               colorCanvas.setGradient(colorGradient);\r
+               rText.setText(Integer.toString(color.getR()));\r
+               gText.setText(Integer.toString(color.getG()));\r
+               bText.setText(Integer.toString(color.getB()));  \r
+       }\r
+}\r