]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/color/ColorGradientComposite2.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.utils.ui / src / org / simantics / utils / ui / color / ColorGradientComposite2.java
index 497407bca65d0c9daf84171ddd767b0df3a4444d..3ef52271afc162e9cac5e5bec2b71aa0cd090951 100644 (file)
-/*******************************************************************************\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
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.IStructuredSelection;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.graphics.RGB;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-/**\r
- * Widget to create and edit color gradients\r
- * \r
- * @author Marko Luukkainen\r
- *\r
- */\r
-public class ColorGradientComposite2 extends Composite implements ISelectionChangedListener{   \r
-       \r
-       private ColorGradientAdjustingCanvas gradientComposite;\r
-       private Button addButton;\r
-       private Button editButton;\r
-       private Button removeButton;\r
-       private Button rgbButton;\r
-       private Button hsvButton;\r
-       private int type = ColorGradient.RGB;\r
-       \r
-       private ArrayList<ColorValue> values = new ArrayList<ColorValue>();\r
-       \r
-       public ColorGradientComposite2(Composite parent, int style) {\r
-               super(parent,style);\r
-               GridLayout layout = new GridLayout(2,false);\r
-           this.setLayout(layout);\r
-           gradientComposite = new ColorGradientAdjustingCanvas(this,SWT.HORIZONTAL);\r
-           \r
-           gradientComposite.addSelectionChangedListener(this);\r
-           \r
-           Composite typeComposite = new Composite(this, SWT.NONE);\r
-           \r
-           typeComposite.setLayout(new GridLayout(1,false));\r
-           rgbButton = new Button(typeComposite,SWT.RADIO);\r
-           rgbButton.setSelection(true);\r
-           rgbButton.addSelectionListener(new SelectionListener() {\r
-               public void widgetDefaultSelected(SelectionEvent e) {\r
-                       widgetSelected(e);\r
-               }\r
-               public void widgetSelected(SelectionEvent e) {\r
-                       rgbButton.setSelection(true);\r
-                       hsvButton.setSelection(false);\r
-                       type = ColorGradient.RGB;\r
-                       gradientComposite.setGradient(new ColorGradient(values,type));\r
-               }\r
-           });\r
-           rgbButton.setText("RGB");\r
-           hsvButton = new Button(typeComposite,SWT.RADIO);\r
-           hsvButton.addSelectionListener(new SelectionListener() {\r
-               public void widgetDefaultSelected(SelectionEvent e) {\r
-                       widgetSelected(e);\r
-               }\r
-               public void widgetSelected(SelectionEvent e) {\r
-                       hsvButton.setSelection(true);\r
-                       rgbButton.setSelection(false);\r
-                       type = ColorGradient.HSV;\r
-                       gradientComposite.setGradient(new ColorGradient(values,type));\r
-               }\r
-           });\r
-           hsvButton.setText("HSV"); \r
-           \r
-           Composite buttonComposite = new Composite(this,SWT.NONE);\r
-\r
-           buttonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));\r
-           \r
-           addButton = new Button(buttonComposite,SWT.PUSH);\r
-           addButton.setText("Add new color");\r
-           addButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { \r
-               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    \r
-                       RGB rgb = openDialog(null);\r
-                if (rgb != null) {\r
-                    Color c = new Color(rgb.red,rgb.green,rgb.blue);\r
-                    Double value;\r
-                    if (values.size() == 0) {\r
-                       value = 0.0;\r
-                    } else if (values.size() == 1) {\r
-                       value = 100.0;\r
-                    } else {\r
-                       StructuredSelection selection = (StructuredSelection)gradientComposite.getSelection();\r
-                       if (selection.size() == 1) {\r
-                               // add new color next to the selection\r
-                               ColorValue v = (ColorValue)selection.getFirstElement();\r
-                               int index = values.indexOf(v);\r
-                               if (index == values.size() -1) {\r
-                                       index--;\r
-                               }\r
-                               value = (values.get(index+1).getValue()-values.get(index).getValue())*0.5;\r
-                               value += values.get(index).getValue();\r
-                       } else {\r
-                               // add new color to largest gap\r
-                               int index = 0;\r
-                               double r = 0.0;\r
-                               for (int i = 0; i < values.size() -1; i++) {\r
-                                       double v1 = values.get(i).getValue();\r
-                                       double v2 = values.get(i+1).getValue();\r
-                                       double vr = v2 -v1;\r
-                                       if (vr > r) {\r
-                                               r=vr;\r
-                                               index = i;\r
-                                       }\r
-                               }\r
-                               value = values.get(index).getValue() + r *0.5;\r
-                       }\r
-                    }\r
-                    addColor(c,value);\r
-                }\r
-            }\r
-        });\r
-           editButton = new Button(buttonComposite,SWT.PUSH);\r
-           editButton.setText("Edit color");\r
-           editButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { \r
-               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    \r
-               \r
-                       Object obj = ((StructuredSelection)gradientComposite.getSelection()).getFirstElement();\r
-                       if (obj == null)\r
-                               return;\r
-                       if (obj instanceof ColorValue) {\r
-                               RGB rgb = openDialog(((ColorValue)obj).getColor().getRgb());\r
-                    if (rgb != null) {\r
-                       modifyColorValueColor((ColorValue)obj,rgb);\r
-                    }\r
-                       }                       \r
-                       \r
-               }\r
-        });\r
-           editButton.setEnabled(false);\r
-           removeButton = new Button(buttonComposite,SWT.PUSH);\r
-           removeButton.setText("Remove color");\r
-           removeButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { \r
-               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    \r
-                       Object o = ((StructuredSelection)gradientComposite.getSelection()).getFirstElement();\r
-                       if (o == null)\r
-                               return;\r
-                       if (o instanceof ColorValue) {\r
-                               values.remove(o);\r
-                               updateWidgets();\r
-                       }                       \r
-                       \r
-               }\r
-        });\r
-           removeButton.setEnabled(false);\r
-           \r
-           GridDataFactory.fillDefaults().span(1, 1).grab(true, false).align(SWT.FILL, SWT.CENTER).hint(SWT.DEFAULT, 32).applyTo(gradientComposite);\r
-           GridDataFactory.fillDefaults().grab(false, true).align(SWT.LEFT, SWT.FILL).applyTo(typeComposite);\r
-           GridDataFactory.fillDefaults().span(1, 1).grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(buttonComposite);  \r
-       }\r
-       \r
-       protected RGB openDialog(RGB selection) {\r
-//             ColorDialog dialog = new ColorDialog(ColorGradientComposite2.this.getShell(), SWT.NONE);\r
-//        if (selection != null)\r
-//             dialog.setRGB(selection);\r
-//        RGB rgb = dialog.open();\r
-//        return rgb;\r
-               org.simantics.utils.ui.color.ColorDialog dialog = new org.simantics.utils.ui.color.ColorDialog(getShell());\r
-               if (selection != null) {\r
-                       Color color = new Color(selection);\r
-                       dialog.setInitialValue(color);\r
-               }\r
-               if (dialog.open() == org.simantics.utils.ui.color.ColorDialog.OK) {\r
-                       Color color = dialog.getColor();\r
-                       return color.getRgb();\r
-               }\r
-               return null;\r
-       }\r
-\r
-       public void addColor(Color color, double value) {\r
-               addColor(new ColorValue(color,value));\r
-       }\r
-       \r
-       public void addColor(ColorValue value) {\r
-               values.add(value);\r
-               updateWidgets();\r
-       }\r
-       \r
-       private void updateWidgets() {\r
-               Collections.sort(values,new ColorValueComparator());    \r
-               gradientComposite.setGradient(new ColorGradient(values,type));\r
-       }\r
-\r
-       public ColorGradient getGradient() {\r
-               return new ColorGradient(values,type);\r
-       }\r
-\r
-       public void dispose() {\r
-               super.dispose();\r
-       }\r
-       \r
-       public void setGradient(ColorGradient gradient) {\r
-               values.clear();\r
-               type = gradient.getType();\r
-               for (ColorValue value : gradient.getColorValues())\r
-                       addColor(value);\r
-               if (type == ColorGradient.HSV) {\r
-                       rgbButton.setSelection(false);\r
-                       hsvButton.setSelection(true);\r
-               } else if (type == ColorGradient.RGB) {\r
-                       hsvButton.setSelection(false);\r
-                       rgbButton.setSelection(true);\r
-               }\r
-               \r
-       }\r
-       \r
-       private void modifyColorValueColor(ColorValue cValue, RGB rgb) {\r
-               values.remove(cValue);;\r
-               Color newColor = new Color(rgb.red,rgb.green,rgb.blue);\r
-               ColorValue newCValue = new ColorValue(newColor,cValue.getValue());\r
-               values.add(newCValue);\r
-               updateWidgets();\r
-       }\r
-       \r
-       /**\r
-        * Enables and disables "Edit color" and "Remove color" buttons depending on selected item\r
-        */\r
-       public void selectionChanged(SelectionChangedEvent event) {\r
-               Object obj = ((IStructuredSelection)event.getSelection()).getFirstElement();\r
-               if (obj == null) {\r
-                       editButton.setEnabled(false);\r
-                       removeButton.setEnabled(false);\r
-               } else {\r
-                       editButton.setEnabled(true);\r
-                       int index = values.indexOf(obj);\r
-                       if (index > 0 && index < values.size() -1)\r
-                               removeButton.setEnabled(true);\r
-                       else\r
-                               removeButton.setEnabled(false);\r
-               }\r
-       }\r
-       \r
-}\r
-\r
-       \r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.utils.ui.color;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Widget to create and edit color gradients
+ * 
+ * @author Marko Luukkainen
+ *
+ */
+public class ColorGradientComposite2 extends Composite implements ISelectionChangedListener{   
+       
+       private ColorGradientAdjustingCanvas gradientComposite;
+       private Button addButton;
+       private Button editButton;
+       private Button removeButton;
+       private Button rgbButton;
+       private Button hsvButton;
+       private int type = ColorGradient.RGB;
+       
+       private ArrayList<ColorValue> values = new ArrayList<ColorValue>();
+       
+       public ColorGradientComposite2(Composite parent, int style) {
+               super(parent,style);
+               GridLayout layout = new GridLayout(2,false);
+           this.setLayout(layout);
+           gradientComposite = new ColorGradientAdjustingCanvas(this,SWT.HORIZONTAL);
+           
+           gradientComposite.addSelectionChangedListener(this);
+           
+           Composite typeComposite = new Composite(this, SWT.NONE);
+           
+           typeComposite.setLayout(new GridLayout(1,false));
+           rgbButton = new Button(typeComposite,SWT.RADIO);
+           rgbButton.setSelection(true);
+           rgbButton.addSelectionListener(new SelectionListener() {
+               public void widgetDefaultSelected(SelectionEvent e) {
+                       widgetSelected(e);
+               }
+               public void widgetSelected(SelectionEvent e) {
+                       rgbButton.setSelection(true);
+                       hsvButton.setSelection(false);
+                       type = ColorGradient.RGB;
+                       gradientComposite.setGradient(new ColorGradient(values,type));
+               }
+           });
+           rgbButton.setText("RGB");
+           hsvButton = new Button(typeComposite,SWT.RADIO);
+           hsvButton.addSelectionListener(new SelectionListener() {
+               public void widgetDefaultSelected(SelectionEvent e) {
+                       widgetSelected(e);
+               }
+               public void widgetSelected(SelectionEvent e) {
+                       hsvButton.setSelection(true);
+                       rgbButton.setSelection(false);
+                       type = ColorGradient.HSV;
+                       gradientComposite.setGradient(new ColorGradient(values,type));
+               }
+           });
+           hsvButton.setText("HSV"); 
+           
+           Composite buttonComposite = new Composite(this,SWT.NONE);
+
+           buttonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
+           
+           addButton = new Button(buttonComposite,SWT.PUSH);
+           addButton.setText("Add new color");
+           addButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { 
+               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    
+                       RGB rgb = openDialog(null);
+                if (rgb != null) {
+                    Color c = new Color(rgb.red,rgb.green,rgb.blue);
+                    Double value;
+                    if (values.size() == 0) {
+                       value = 0.0;
+                    } else if (values.size() == 1) {
+                       value = 100.0;
+                    } else {
+                       StructuredSelection selection = (StructuredSelection)gradientComposite.getSelection();
+                       if (selection.size() == 1) {
+                               // add new color next to the selection
+                               ColorValue v = (ColorValue)selection.getFirstElement();
+                               int index = values.indexOf(v);
+                               if (index == values.size() -1) {
+                                       index--;
+                               }
+                               value = (values.get(index+1).getValue()-values.get(index).getValue())*0.5;
+                               value += values.get(index).getValue();
+                       } else {
+                               // add new color to largest gap
+                               int index = 0;
+                               double r = 0.0;
+                               for (int i = 0; i < values.size() -1; i++) {
+                                       double v1 = values.get(i).getValue();
+                                       double v2 = values.get(i+1).getValue();
+                                       double vr = v2 -v1;
+                                       if (vr > r) {
+                                               r=vr;
+                                               index = i;
+                                       }
+                               }
+                               value = values.get(index).getValue() + r *0.5;
+                       }
+                    }
+                    addColor(c,value);
+                }
+            }
+        });
+           editButton = new Button(buttonComposite,SWT.PUSH);
+           editButton.setText("Edit color");
+           editButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { 
+               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    
+               
+                       Object obj = ((StructuredSelection)gradientComposite.getSelection()).getFirstElement();
+                       if (obj == null)
+                               return;
+                       if (obj instanceof ColorValue) {
+                               RGB rgb = openDialog(((ColorValue)obj).getColor().getRgb());
+                    if (rgb != null) {
+                       modifyColorValueColor((ColorValue)obj,rgb);
+                    }
+                       }                       
+                       
+               }
+        });
+           editButton.setEnabled(false);
+           removeButton = new Button(buttonComposite,SWT.PUSH);
+           removeButton.setText("Remove color");
+           removeButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { 
+               public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {    
+                       Object o = ((StructuredSelection)gradientComposite.getSelection()).getFirstElement();
+                       if (o == null)
+                               return;
+                       if (o instanceof ColorValue) {
+                               values.remove(o);
+                               updateWidgets();
+                       }                       
+                       
+               }
+        });
+           removeButton.setEnabled(false);
+           
+           GridDataFactory.fillDefaults().span(1, 1).grab(true, false).align(SWT.FILL, SWT.CENTER).hint(SWT.DEFAULT, 32).applyTo(gradientComposite);
+           GridDataFactory.fillDefaults().grab(false, true).align(SWT.LEFT, SWT.FILL).applyTo(typeComposite);
+           GridDataFactory.fillDefaults().span(1, 1).grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(buttonComposite);  
+       }
+       
+       protected RGB openDialog(RGB selection) {
+//             ColorDialog dialog = new ColorDialog(ColorGradientComposite2.this.getShell(), SWT.NONE);
+//        if (selection != null)
+//             dialog.setRGB(selection);
+//        RGB rgb = dialog.open();
+//        return rgb;
+               org.simantics.utils.ui.color.ColorDialog dialog = new org.simantics.utils.ui.color.ColorDialog(getShell());
+               if (selection != null) {
+                       Color color = new Color(selection);
+                       dialog.setInitialValue(color);
+               }
+               if (dialog.open() == org.simantics.utils.ui.color.ColorDialog.OK) {
+                       Color color = dialog.getColor();
+                       return color.getRgb();
+               }
+               return null;
+       }
+
+       public void addColor(Color color, double value) {
+               addColor(new ColorValue(color,value));
+       }
+       
+       public void addColor(ColorValue value) {
+               values.add(value);
+               updateWidgets();
+       }
+       
+       private void updateWidgets() {
+               Collections.sort(values,new ColorValueComparator());    
+               gradientComposite.setGradient(new ColorGradient(values,type));
+       }
+
+       public ColorGradient getGradient() {
+               return new ColorGradient(values,type);
+       }
+
+       public void dispose() {
+               super.dispose();
+       }
+       
+       public void setGradient(ColorGradient gradient) {
+               values.clear();
+               type = gradient.getType();
+               for (ColorValue value : gradient.getColorValues())
+                       addColor(value);
+               if (type == ColorGradient.HSV) {
+                       rgbButton.setSelection(false);
+                       hsvButton.setSelection(true);
+               } else if (type == ColorGradient.RGB) {
+                       hsvButton.setSelection(false);
+                       rgbButton.setSelection(true);
+               }
+               
+       }
+       
+       private void modifyColorValueColor(ColorValue cValue, RGB rgb) {
+               values.remove(cValue);;
+               Color newColor = new Color(rgb.red,rgb.green,rgb.blue);
+               ColorValue newCValue = new ColorValue(newColor,cValue.getValue());
+               values.add(newCValue);
+               updateWidgets();
+       }
+       
+       /**
+        * Enables and disables "Edit color" and "Remove color" buttons depending on selected item
+        */
+       public void selectionChanged(SelectionChangedEvent event) {
+               Object obj = ((IStructuredSelection)event.getSelection()).getFirstElement();
+               if (obj == null) {
+                       editButton.setEnabled(false);
+                       removeButton.setEnabled(false);
+               } else {
+                       editButton.setEnabled(true);
+                       int index = values.indexOf(obj);
+                       if (index > 0 && index < values.size() -1)
+                               removeButton.setEnabled(true);
+                       else
+                               removeButton.setEnabled(false);
+               }
+       }
+       
+}
+
+