--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpeclipse.views.browser;
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.CloseWindowListener;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.browser.LocationListener;
+import org.eclipse.swt.browser.OpenWindowListener;
+import org.eclipse.swt.browser.ProgressEvent;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.browser.StatusTextEvent;
+import org.eclipse.swt.browser.StatusTextListener;
+import org.eclipse.swt.browser.TitleEvent;
+import org.eclipse.swt.browser.TitleListener;
+import org.eclipse.swt.browser.VisibilityWindowListener;
+import org.eclipse.swt.browser.WindowEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+
+public class PHPBrowser {
+ static ResourceBundle resourceBundle = ResourceBundle
+ .getBundle("net.sourceforge.phpeclipse.views.browser.browser");
+ int index;
+ boolean busy;
+ Image images[];
+ Text location;
+ Browser browser;
+ static final String[] imageLocations = {"eclipse01.bmp", "eclipse02.bmp",
+ "eclipse03.bmp", "eclipse04.bmp", "eclipse05.bmp", "eclipse06.bmp",
+ "eclipse07.bmp", "eclipse08.bmp", "eclipse09.bmp", "eclipse10.bmp",
+ "eclipse11.bmp", "eclipse12.bmp",};
+ static final String iconLocation = "document.gif";
+ /**
+ * Creates an instance of a ControlExample embedded inside the supplied
+ * parent Composite.
+ *
+ * @param parent
+ * the container of the example
+ */
+ public PHPBrowser(Composite parent) {
+ initResources();
+ final Display display = parent.getDisplay();
+ FormLayout layout = new FormLayout();
+ parent.setLayout(layout);
+ ToolBar toolbar = new ToolBar(parent, SWT.NONE);
+ final ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
+ itemBack.setText(getResourceString("Back"));
+ final ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
+ itemForward.setText(getResourceString("Forward"));
+ final ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
+ itemStop.setText(getResourceString("Stop"));
+ final ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
+ itemRefresh.setText(getResourceString("Refresh"));
+ final ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
+ itemGo.setText(getResourceString("Go"));
+ location = new Text(parent, SWT.BORDER);
+ final Canvas canvas = new Canvas(parent, SWT.NO_BACKGROUND);
+ final Rectangle rect = images[0].getBounds();
+ canvas.addListener(SWT.Paint, new Listener() {
+ public void handleEvent(Event e) {
+ Point pt = canvas.getSize();
+ e.gc.drawImage(images[index], 0, 0, rect.width, rect.height, 0, 0,
+ pt.x, pt.y);
+ }
+ });
+ canvas.addListener(SWT.MouseDown, new Listener() {
+ public void handleEvent(Event e) {
+ browser.setUrl(getResourceString("Startup"));
+ }
+ });
+ display.asyncExec(new Runnable() {
+ public void run() {
+ if (canvas.isDisposed())
+ return;
+ if (busy) {
+ index++;
+ if (index == images.length)
+ index = 0;
+ canvas.redraw();
+ }
+ display.timerExec(150, this);
+ }
+ });
+ final Label status = new Label(parent, SWT.NONE);
+ final ProgressBar progressBar = new ProgressBar(parent, SWT.NONE);
+ FormData data = new FormData();
+ data.top = new FormAttachment(0, 5);
+ toolbar.setLayoutData(data);
+ data = new FormData();
+ data.left = new FormAttachment(0, 0);
+ data.right = new FormAttachment(100, 0);
+ data.top = new FormAttachment(canvas, 5, SWT.DEFAULT);
+ data.bottom = new FormAttachment(status, -5, SWT.DEFAULT);
+ try {
+ browser = new Browser(parent, SWT.NONE);
+ browser.setLayoutData(data);
+ } catch (SWTError e) {
+ /* Browser widget could not be instantiated */
+ Label label = new Label(parent, SWT.CENTER | SWT.WRAP);
+ label.setText(getResourceString("BrowserNotCreated"));
+ label.setLayoutData(data);
+ }
+ data = new FormData();
+ data.width = 24;
+ data.height = 24;
+ data.top = new FormAttachment(0, 5);
+ data.right = new FormAttachment(100, -5);
+ canvas.setLayoutData(data);
+ data = new FormData();
+ data.top = new FormAttachment(toolbar, 0, SWT.TOP);
+ data.left = new FormAttachment(toolbar, 5, SWT.RIGHT);
+ data.right = new FormAttachment(canvas, -5, SWT.DEFAULT);
+ location.setLayoutData(data);
+ data = new FormData();
+ data.left = new FormAttachment(0, 5);
+ data.right = new FormAttachment(progressBar, 0, SWT.DEFAULT);
+ data.bottom = new FormAttachment(100, -5);
+ status.setLayoutData(data);
+ data = new FormData();
+ data.right = new FormAttachment(100, -5);
+ data.bottom = new FormAttachment(100, -5);
+ progressBar.setLayoutData(data);
+ if (browser != null) {
+ itemBack.setEnabled(browser.isBackEnabled());
+ itemForward.setEnabled(browser.isForwardEnabled());
+ Listener listener = new Listener() {
+ public void handleEvent(Event event) {
+ ToolItem item = (ToolItem) event.widget;
+ if (item == itemBack)
+ browser.back();
+ else if (item == itemForward)
+ browser.forward();
+ else if (item == itemStop)
+ browser.stop();
+ else if (item == itemRefresh)
+ browser.refresh();
+ else if (item == itemGo)
+ browser.setUrl(location.getText());
+ }
+ };
+ browser.addLocationListener(new LocationListener() {
+ public void changed(LocationEvent event) {
+ busy = true;
+ if (event.top)
+ location.setText(event.location);
+ }
+ public void changing(LocationEvent event) {
+ }
+ });
+ browser.addProgressListener(new ProgressListener() {
+ public void changed(ProgressEvent event) {
+ if (event.total == 0)
+ return;
+ int ratio = event.current * 100 / event.total;
+ progressBar.setSelection(ratio);
+ busy = event.current != event.total;
+ if (!busy) {
+ index = 0;
+ canvas.redraw();
+ }
+ }
+ public void completed(ProgressEvent event) {
+ itemBack.setEnabled(browser.isBackEnabled());
+ itemForward.setEnabled(browser.isForwardEnabled());
+ progressBar.setSelection(0);
+ busy = false;
+ index = 0;
+ canvas.redraw();
+ }
+ });
+ browser.addStatusTextListener(new StatusTextListener() {
+ public void changed(StatusTextEvent event) {
+ status.setText(event.text);
+ }
+ });
+ if (parent instanceof Shell) {
+ final Shell shell = (Shell) parent;
+ browser.addTitleListener(new TitleListener() {
+ public void changed(TitleEvent event) {
+ shell.setText(event.title + " - "
+ + getResourceString("window.title"));
+ }
+ });
+ }
+ itemBack.addListener(SWT.Selection, listener);
+ itemForward.addListener(SWT.Selection, listener);
+ itemStop.addListener(SWT.Selection, listener);
+ itemRefresh.addListener(SWT.Selection, listener);
+ itemGo.addListener(SWT.Selection, listener);
+ location.addListener(SWT.DefaultSelection, new Listener() {
+ public void handleEvent(Event e) {
+ browser.setUrl(location.getText());
+ }
+ });
+ initialize(display, browser);
+ browser.setUrl(getResourceString("Startup"));
+ }
+ }
+ /**
+ * Gets a string from the resource bundle. We don't want to crash because of
+ * a missing String. Returns the key if not found.
+ */
+ static String getResourceString(String key) {
+ try {
+ return resourceBundle.getString(key);
+ } catch (MissingResourceException e) {
+ return key;
+ } catch (NullPointerException e) {
+ return "!" + key + "!";
+ }
+ }
+ /**
+ * Gets a string from the resource bundle and binds it with the given
+ * arguments. If the key is not found, return the key.
+ */
+ static String getResourceString(String key, Object[] args) {
+ try {
+ return MessageFormat.format(getResourceString(key), args);
+ } catch (MissingResourceException e) {
+ return key;
+ } catch (NullPointerException e) {
+ return "!" + key + "!";
+ }
+ }
+ static void initialize(final Display display, Browser browser) {
+ browser.addOpenWindowListener(new OpenWindowListener() {
+ public void open(WindowEvent event) {
+ Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ Browser browser = new Browser(shell, SWT.NONE);
+ initialize(display, browser);
+ event.browser = browser;
+ }
+ });
+ browser.addVisibilityWindowListener(new VisibilityWindowListener() {
+ public void hide(WindowEvent event) {
+ }
+ public void show(WindowEvent event) {
+ Browser browser = (Browser) event.widget;
+ Shell shell = browser.getShell();
+ if (event.location != null)
+ shell.setLocation(event.location);
+ if (event.size != null) {
+ Point size = event.size;
+ shell.setSize(shell.computeSize(size.x, size.y));
+ }
+ shell.open();
+ }
+ });
+ browser.addCloseWindowListener(new CloseWindowListener() {
+ public void close(WindowEvent event) {
+ Browser browser = (Browser) event.widget;
+ Shell shell = browser.getShell();
+ shell.close();
+ }
+ });
+ }
+ /**
+ * Disposes of all resources associated with a particular instance of the
+ * BrowserExample.
+ */
+ public void dispose() {
+ freeResources();
+ }
+ /**
+ * Frees the resources
+ */
+ void freeResources() {
+ if (images != null) {
+ for (int i = 0; i < images.length; ++i) {
+ final Image image = images[i];
+ if (image != null)
+ image.dispose();
+ }
+ images = null;
+ }
+ }
+ /**
+ * Grabs input focus.
+ */
+ public void setFocus() {
+ location.setFocus();
+ }
+ /**
+ * Loads the resources
+ */
+ void initResources() {
+ final Class clazz = this.getClass();
+ if (resourceBundle != null) {
+ try {
+ if (images == null) {
+ images = new Image[imageLocations.length];
+ for (int i = 0; i < imageLocations.length; ++i) {
+ ImageData source = new ImageData(clazz
+ .getResourceAsStream(imageLocations[i]));
+ ImageData mask = source.getTransparencyMask();
+ images[i] = new Image(null, source, mask);
+ }
+ }
+ return;
+ } catch (Throwable t) {
+ }
+ }
+ String error = (resourceBundle != null)
+ ? getResourceString("error.CouldNotLoadResources")
+ : "Unable to load resources";
+ freeResources();
+ throw new RuntimeException(error);
+ }
+ public static void main(String[] args) {
+ Display display = new Display();
+ Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ shell.setText(getResourceString("window.title"));
+ PHPBrowser instance = new PHPBrowser(shell);
+ Image icon = new Image(display, PHPBrowser.class
+ .getResourceAsStream(iconLocation));
+ shell.setImage(icon);
+ shell.open();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ icon.dispose();
+ instance.dispose();
+ display.dispose();
+ }
+}
\ No newline at end of file