package com.onpositive.gae.baseviewer;
import java.io.ByteArrayInputStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import com.google.appengine.api.datastore.Blob;
public class ImageBlobVisualizer extends AbstractBlobVisualizer {
private Composite cc2;
private Composite cc;
private GridLayout layout;
private Label picLabel;
private Image image;
private Composite parent;
public void init(Composite parent) {
this.parent = parent;
layout = new GridLayout(1, false);
layout.horizontalSpacing = 0;
layout.verticalSpacing = 2;
layout.marginWidth = 0;
layout.marginHeight = 0;
GridLayout l2 = new GridLayout(2, false);
l2.horizontalSpacing = 1;
l2.verticalSpacing = 0;
l2.marginWidth = 0;
l2.marginHeight = 0;
cc = new Composite(parent, SWT.None);
cc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
cc.setLayout(l2);
cc2 = new Composite(cc, SWT.None);
cc2.setLayoutData(new GridData(0, 0));
cc2.setLayout(layout);
picLabel = new Label(cc, SWT.None);
cc2.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
boolean needDraw = false;
if (image != null) {
needDraw = true;
}
if (needDraw) {
e.gc.drawImage(image, 0, 0, image.getBounds().width,
image.getBounds().height, 0, 0,
cc2.getBounds().width, cc2.getBounds().height);
} else {
// cc.pack();
cc.setVisible(false);
picLabel.setVisible(true);
}
}
});
}
public boolean handleBlob(Blob bl) {
boolean flag = true;
if (!isSupported(bl)) {
image.dispose();
image = null;
GridData layoutData = new GridData(0, 0);
layout.verticalSpacing = 0;
cc2.setLayoutData(layoutData);
picLabel.setVisible(false);
flag = false;
} else {
if (image != null && !image.isDisposed()) {
image.dispose();
}
image = parseBlob(bl);
cc.setVisible(true);
if (picLabel != null) {
picLabel.setText("(" + image.getBounds().width + "x"
+ image.getBounds().height + ")");
picLabel.setVisible(true);
}
GridData layoutData = new GridData(82, 82);
cc2.setLayoutData(layoutData);
flag = true;
}
if (cc != null) {
// parent.getShell().layout(true, true);
// parent.getShell().pack(true);
cc.redraw();
}
return flag;
}
protected Image parseBlob(Blob blob) {
try {
byte[] data = blob.getBytes();
Image image = new Image(Display.getCurrent(),
new ByteArrayInputStream(data));
return image;
} catch (Throwable exp) {
}
return null;
}
public void dispose() {
parent = null;
cc.dispose();
if (!image.isDisposed()) {
image.dispose();
}
}
public int getType() {
return IMAGE_TYPE;
}
}