X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java new file mode 100644 index 0000000..3374fed --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java @@ -0,0 +1,358 @@ +/******************************************************************************* + * 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