-package org.simantics.views.swt.client.impl;\r
-\r
-import java.io.ByteArrayInputStream;\r
-import java.util.Arrays;\r
-\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.resource.ResourceManager;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.graphics.ImageData;\r
-import org.eclipse.swt.graphics.ImageLoader;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.simantics.scl.runtime.function.Function1;\r
-import org.simantics.views.swt.client.base.SingleSWTViewNode;\r
-\r
-public class SWTButton extends SingleSWTViewNode<Button> {\r
- \r
- private static final long serialVersionUID = 7932335224632082902L;\r
-\r
- public Function1<Object, Object> modifier;\r
- public byte[] image;\r
- public String tooltip;\r
-\r
- private transient ImageDescriptor imageDesc;\r
-\r
- @Override\r
- public void createControls(Composite parent) {\r
- \r
- control = new Button(parent, style);\r
-\r
- setProperties();\r
-\r
- control.addSelectionListener(new SelectionListener() {\r
-\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- if(modifier != null)\r
- modifier.apply(SWTButton.this);\r
- }\r
-\r
- @Override\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- widgetSelected(e);\r
- }\r
- \r
- });\r
- \r
- }\r
- \r
- @Override\r
- public void synchronizeText(String text) {\r
- if(text != null) {\r
- control.setText(text);\r
- // This seems to be necessary for correct size computations\r
- control.getParent().layout(true);\r
- }\r
- }\r
-\r
- public void synchronizeImage(byte[] image) {\r
- ResourceManager rm = getResourceManager();\r
- ImageDescriptor oldDesc = imageDesc;\r
- if (image != null)\r
- control.setImage(rm.createImage(imageDesc = new Descriptor(image)));\r
- if (oldDesc != null)\r
- rm.destroyImage(oldDesc);\r
- }\r
- \r
- public void synchronizeModifier(Function1<Object, Object> modifier) {\r
- \r
- }\r
- \r
- public void synchronizeTooltip(String tooltip) {\r
- if(tooltip != null) control.setToolTipText(tooltip);\r
- }\r
-\r
- static class Descriptor extends ImageDescriptor {\r
- \r
- final byte[] data;\r
- final int hash;\r
- \r
- public Descriptor(byte[] data) {\r
- this.data = data;\r
- this.hash = Arrays.hashCode(data);\r
- }\r
-\r
- @Override\r
- public ImageData getImageData() {\r
- return new ImageLoader().load(new ByteArrayInputStream(data))[0];\r
- }\r
-\r
- @Override\r
- public int hashCode() {\r
- return hash;\r
- }\r
-\r
- @Override\r
- public boolean equals(Object obj) {\r
- if (this == obj)\r
- return true;\r
- if (obj == null)\r
- return false;\r
- if (getClass() != obj.getClass())\r
- return false;\r
- Descriptor other = (Descriptor) obj;\r
- if (!Arrays.equals(data, other.data))\r
- return false;\r
- return true;\r
- }\r
-\r
- }\r
-\r
-}\r
+package org.simantics.views.swt.client.impl;
+
+import java.io.ByteArrayInputStream;
+import java.util.Arrays;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.simantics.scl.runtime.function.Function1;
+import org.simantics.views.swt.client.base.SingleSWTViewNode;
+
+public class SWTButton extends SingleSWTViewNode<Button> {
+
+ private static final long serialVersionUID = 7932335224632082902L;
+
+ public Function1<Object, Object> modifier;
+ public byte[] image;
+ public String tooltip;
+
+ private transient ImageDescriptor imageDesc;
+
+ @Override
+ public void createControls(Composite parent) {
+
+ control = new Button(parent, style);
+
+ setProperties();
+
+ control.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if(modifier != null)
+ modifier.apply(SWTButton.this);
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+
+ });
+
+ }
+
+ @Override
+ public void synchronizeText(String text) {
+ if(text != null) {
+ control.setText(text);
+ // This seems to be necessary for correct size computations
+ control.getParent().layout(true);
+ }
+ }
+
+ public void synchronizeImage(byte[] image) {
+ ResourceManager rm = getResourceManager();
+ ImageDescriptor oldDesc = imageDesc;
+ if (image != null)
+ control.setImage(rm.createImage(imageDesc = new Descriptor(image)));
+ if (oldDesc != null)
+ rm.destroyImage(oldDesc);
+ }
+
+ public void synchronizeModifier(Function1<Object, Object> modifier) {
+
+ }
+
+ public void synchronizeTooltip(String tooltip) {
+ if(tooltip != null) control.setToolTipText(tooltip);
+ }
+
+ static class Descriptor extends ImageDescriptor {
+
+ final byte[] data;
+ final int hash;
+
+ public Descriptor(byte[] data) {
+ this.data = data;
+ this.hash = Arrays.hashCode(data);
+ }
+
+ @Override
+ public ImageData getImageData() {
+ return new ImageLoader().load(new ByteArrayInputStream(data))[0];
+ }
+
+ @Override
+ public int hashCode() {
+ return hash;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ Descriptor other = (Descriptor) obj;
+ if (!Arrays.equals(data, other.data))
+ return false;
+ return true;
+ }
+
+ }
+
+}