Package com.onpositive.gae.baseviewer

Source Code of com.onpositive.gae.baseviewer.ImageBlobVisualizer

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;
  }

}
TOP

Related Classes of com.onpositive.gae.baseviewer.ImageBlobVisualizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.