1 package org.simantics.views.swt.client.impl;
\r
3 import java.io.ByteArrayInputStream;
\r
4 import java.util.Arrays;
\r
6 import org.eclipse.jface.resource.ImageDescriptor;
\r
7 import org.eclipse.jface.resource.ResourceManager;
\r
8 import org.eclipse.swt.events.SelectionEvent;
\r
9 import org.eclipse.swt.events.SelectionListener;
\r
10 import org.eclipse.swt.graphics.ImageData;
\r
11 import org.eclipse.swt.graphics.ImageLoader;
\r
12 import org.eclipse.swt.widgets.Button;
\r
13 import org.eclipse.swt.widgets.Composite;
\r
14 import org.simantics.scl.runtime.function.Function1;
\r
15 import org.simantics.views.swt.client.base.SingleSWTViewNode;
\r
17 public class SWTButton extends SingleSWTViewNode<Button> {
\r
19 private static final long serialVersionUID = 7932335224632082902L;
\r
21 public Function1<Object, Object> modifier;
\r
22 public byte[] image;
\r
23 public String tooltip;
\r
25 private transient ImageDescriptor imageDesc;
\r
28 public void createControls(Composite parent) {
\r
30 control = new Button(parent, style);
\r
34 control.addSelectionListener(new SelectionListener() {
\r
37 public void widgetSelected(SelectionEvent e) {
\r
38 if(modifier != null)
\r
39 modifier.apply(SWTButton.this);
\r
43 public void widgetDefaultSelected(SelectionEvent e) {
\r
52 public void synchronizeText(String text) {
\r
54 control.setText(text);
\r
55 // This seems to be necessary for correct size computations
\r
56 control.getParent().layout(true);
\r
60 public void synchronizeImage(byte[] image) {
\r
61 ResourceManager rm = getResourceManager();
\r
62 ImageDescriptor oldDesc = imageDesc;
\r
64 control.setImage(rm.createImage(imageDesc = new Descriptor(image)));
\r
65 if (oldDesc != null)
\r
66 rm.destroyImage(oldDesc);
\r
69 public void synchronizeModifier(Function1<Object, Object> modifier) {
\r
73 public void synchronizeTooltip(String tooltip) {
\r
74 if(tooltip != null) control.setToolTipText(tooltip);
\r
77 static class Descriptor extends ImageDescriptor {
\r
82 public Descriptor(byte[] data) {
\r
84 this.hash = Arrays.hashCode(data);
\r
88 public ImageData getImageData() {
\r
89 return new ImageLoader().load(new ByteArrayInputStream(data))[0];
\r
93 public int hashCode() {
\r
98 public boolean equals(Object obj) {
\r
103 if (getClass() != obj.getClass())
\r
105 Descriptor other = (Descriptor) obj;
\r
106 if (!Arrays.equals(data, other.data))
\r