]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - swt/org.argeo.swt.minidesktop/src/org/argeo/minidesktop/MiniImageViewer.java
Make MiniDesktop RAP compatible.
[lgpl/argeo-commons.git] / swt / org.argeo.swt.minidesktop / src / org / argeo / minidesktop / MiniImageViewer.java
diff --git a/swt/org.argeo.swt.minidesktop/src/org/argeo/minidesktop/MiniImageViewer.java b/swt/org.argeo.swt.minidesktop/src/org/argeo/minidesktop/MiniImageViewer.java
new file mode 100644 (file)
index 0000000..86ff53f
--- /dev/null
@@ -0,0 +1,129 @@
+package org.argeo.minidesktop;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+
+public class MiniImageViewer implements PaintListener {
+       private URL url;
+       private Canvas area;
+
+       private Image image;
+
+       public MiniImageViewer(Composite parent, int style) {
+               parent.setLayout(new GridLayout());
+
+               Composite toolBar = new Composite(parent, SWT.NONE);
+               toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+               toolBar.setLayout(new RowLayout());
+               Button load = new Button(toolBar, SWT.FLAT);
+               load.setText("\u2191");// up arrow
+               load.addSelectionListener(new SelectionAdapter() {
+
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               FileDialog fileDialog = new FileDialog(area.getShell());
+                               String path = fileDialog.open();
+                               if (path != null) {
+                                       setUrl(path);
+                               }
+                       }
+
+               });
+
+               area = new Canvas(parent, SWT.NONE);
+               area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               area.addPaintListener(this);
+       }
+
+       protected void load(URL url) {
+               try {
+                       ImageLoader imageLoader = new ImageLoader();
+                       ImageData[] data = imageLoader.load(url.openStream());
+                       image = new Image(area.getDisplay(), data[0]);
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+       }
+
+       @Override
+       public void paintControl(PaintEvent e) {
+               e.gc.drawImage(image, 0, 0);
+
+       }
+
+       protected Path url2path(URL url) {
+               try {
+                       Path path = Paths.get(url.toURI());
+                       return path;
+               } catch (URISyntaxException e) {
+                       throw new IllegalStateException("Cannot convert " + url + " to uri", e);
+               }
+       }
+
+       public void setUrl(URL url) {
+               this.url = url;
+               if (area != null)
+                       load(this.url);
+       }
+
+       public void setUrl(String url) {
+               try {
+                       setUrl(new URL(url));
+               } catch (MalformedURLException e) {
+                       // try with http
+                       try {
+                               setUrl(new URL("file://" + url));
+                               return;
+                       } catch (MalformedURLException e1) {
+                               // nevermind...
+                       }
+                       throw new IllegalArgumentException("Cannot interpret URL " + url, e);
+               }
+       }
+
+       public static void main(String[] args) {
+               Display display = Display.getCurrent() == null ? new Display() : Display.getCurrent();
+               Shell shell = new Shell(display, SWT.SHELL_TRIM);
+
+               MiniImageViewer miniBrowser = new MiniImageViewer(shell, SWT.NONE);
+               String url = args.length > 0 ? args[0] : "";
+               if (!url.trim().equals("")) {
+                       miniBrowser.setUrl(url);
+                       shell.setText(url);
+               } else {
+                       shell.setText("*");
+               }
+
+               shell.open();
+               shell.setSize(new Point(800, 480));
+               while (!shell.isDisposed()) {
+                       if (!display.readAndDispatch())
+                               display.sleep();
+               }
+       }
+
+}