From f04b12e7fe1a75856ff7aa2f924610db86882e67 Mon Sep 17 00:00:00 2001 From: khartlage Date: Thu, 4 Mar 2004 19:36:28 +0000 Subject: [PATCH] Integrated first version of new SWT Browser (MSIE under Windows; Mozilla under Linux) --- net.sourceforge.phpeclipse/plugin.properties | 1 + net.sourceforge.phpeclipse/plugin.xml | 30 ++- .../phpeclipse/PHPPerspectiveFactory.java | 3 + .../phpeclipse/actions/PHPEclipseShowAction.java | 105 +++---- .../phpeditor/ShowExternalPreviewAction.java | 70 ++--- .../phpeclipse/views/browser/BrowserView.java | 51 +++ .../phpeclipse/views/browser/PHPBrowser.java | 358 ++++++++++++++++++++ .../phpeclipse/views/browser/browser.properties | 20 ++ .../phpeclipse/views/browser/document.gif | Bin 0 -> 380 bytes .../phpeclipse/views/browser/eclipse01.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse02.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse03.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse04.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse05.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse06.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse07.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse08.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse09.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse10.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse11.bmp | Bin 0 -> 6966 bytes .../phpeclipse/views/browser/eclipse12.bmp | Bin 0 -> 6966 bytes 21 files changed, 519 insertions(+), 119 deletions(-) create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse02.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse03.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse08.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse11.bmp create mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse12.bmp diff --git a/net.sourceforge.phpeclipse/plugin.properties b/net.sourceforge.phpeclipse/plugin.properties index d214c3d..d484cf9 100644 --- a/net.sourceforge.phpeclipse/plugin.properties +++ b/net.sourceforge.phpeclipse/plugin.properties @@ -30,6 +30,7 @@ propertyPagePHPProject.name=PHP Project Properties # phpEditorName=PHP Editor phpConsoleView=PHP Console +phpBrowserView=PHP Browser phpFileExtension=php php3FileExtension=php3 php4FileExtension=php4 diff --git a/net.sourceforge.phpeclipse/plugin.xml b/net.sourceforge.phpeclipse/plugin.xml index adedc5e..1dce0ed 100644 --- a/net.sourceforge.phpeclipse/plugin.xml +++ b/net.sourceforge.phpeclipse/plugin.xml @@ -1,4 +1,5 @@ + + @@ -239,7 +241,7 @@ + point="org.eclipse.ui.ide.projectNatureImages"> --> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + point="org.eclipse.ui.editors.documentProviders"> + + diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java index 364df7a..dcc15e4 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPPerspectiveFactory.java @@ -1,5 +1,7 @@ package net.sourceforge.phpeclipse; +import net.sourceforge.phpeclipse.views.browser.BrowserView; + import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.ui.IFolderLayout; import org.eclipse.ui.IPageLayout; @@ -46,6 +48,7 @@ public class PHPPerspectiveFactory implements IPerspectiveFactory { // if (SWT.getPlatform().equals("win32")) { // layout.addShowViewShortcut(UpdatePerspective.ID_BROWSER); // } + layout.addShowViewShortcut(BrowserView.ID_BROWSER); // layout.addShowViewShortcut(PHPeclipsePlugin.PHP_RESOURCES_VIEW_ID); // views - standard workbench diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java index 72fb11f..dcc2a39 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/actions/PHPEclipseShowAction.java @@ -1,45 +1,40 @@ /********************************************************************** -Copyright (c) 2000, 2002 IBM Corp. 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 implementation - Klaus Hartlage - www.eclipseproject.de -**********************************************************************/ + Copyright (c) 2000, 2002 IBM Corp. 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 implementation + Klaus Hartlage - www.eclipseproject.de + **********************************************************************/ package net.sourceforge.phpeclipse.actions; - import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.text.MessageFormat; import java.util.Iterator; - import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.views.PHPConsole; - +import net.sourceforge.phpeclipse.views.browser.BrowserView; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; -import org.eclipse.help.IHelp; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IActionDelegate; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.help.WorkbenchHelp; //import org.eclipse.update.internal.ui.UpdatePerspective; //import org.eclipse.update.internal.ui.views.IEmbeddedWebBrowser; - public class PHPEclipseShowAction implements IObjectActionDelegate { private IWorkbenchPart workbenchPart; /** @@ -48,127 +43,107 @@ public class PHPEclipseShowAction implements IObjectActionDelegate { public PHPEclipseShowAction() { super(); } - /** * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { workbenchPart = targetPart; } - public void run(IAction action) { ISelectionProvider selectionProvider = null; selectionProvider = workbenchPart.getSite().getSelectionProvider(); - StructuredSelection selection = null; selection = (StructuredSelection) selectionProvider.getSelection(); PHPConsole console = PHPConsole.getInstance(); - IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore(); - Shell shell = null; Iterator iterator = null; iterator = selection.iterator(); while (iterator.hasNext()) { // obj => selected object in the view Object obj = iterator.next(); - // is it a resource if (obj instanceof IResource) { IResource resource = (IResource) obj; - // check if it's a file resource switch (resource.getType()) { - case IResource.FILE : // single file: IFile file = (IFile) resource; String localhostURL; if ((localhostURL = getLocalhostURL(store, (IFile) resource)) == null) { - MessageDialog.openInformation( - shell, - "Couldn't create localhost URL", - "Please configure your localhost and documentRoot"); + MessageDialog.openInformation(shell, + "Couldn't create localhost URL", + "Please configure your localhost and documentRoot"); return; } try { if (store.getBoolean(PHPeclipsePlugin.USE_EXTERNAL_BROWSER_PREF)) { - String[] arguments = { localhostURL }; - MessageFormat form = new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF)); - + String[] arguments = {localhostURL}; + MessageFormat form = new MessageFormat(store + .getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF)); Runtime runtime = Runtime.getRuntime(); String command = form.format(arguments); console.write("External Browser command: " + command + "\n"); runtime.exec(command); - // runtime.exec(store.getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF) + " " + fileName); + // runtime.exec(store.getString(PHPeclipsePlugin.EXTERNAL_BROWSER_PREF) + // + " " + fileName); // runtime.exec("command.com /c start iexplore " + fileName); } else { - // MessageDialog.openInformation(shell, "localhostURL", "localhostURL: " + localhostURL); + // MessageDialog.openInformation(shell, "localhostURL", + // "localhostURL: " + localhostURL); // this doesn't work under win98 ? // Program.launch(localhostURL); console.write("Internal Browser URL: " + localhostURL + "\n"); open(new URL(localhostURL), shell, localhostURL); } } catch (MalformedURLException e) { - MessageDialog.openInformation(shell, "MalformedURLException: ", e.toString()); + MessageDialog.openInformation(shell, "MalformedURLException: ", e + .toString()); } catch (IOException e) { - MessageDialog.openInformation(shell, "IOException", "Cannot show: " + localhostURL); - + MessageDialog.openInformation(shell, "IOException", + "Cannot show: " + localhostURL); } } } } } - /** * @see IActionDelegate#selectionChanged(IAction, ISelection) */ public void selectionChanged(IAction action, ISelection selection) { } - public static String getLocalhostURL(IPreferenceStore store, IFile file) { if (store == null) { store = PHPeclipsePlugin.getDefault().getPreferenceStore(); } - // IPath path = file.getFullPath(); - String localhostURL = file.getLocation().toString(); String lowerCaseFileName = localhostURL.toLowerCase(); String documentRoot = store.getString(PHPeclipsePlugin.DOCUMENTROOT_PREF); documentRoot = documentRoot.replace('\\', '/'); documentRoot = documentRoot.toLowerCase(); - if (lowerCaseFileName.startsWith(documentRoot)) { localhostURL = localhostURL.substring(documentRoot.length()); } else { return null; } - return store.getString(PHPeclipsePlugin.LOCALHOST_PREF) + localhostURL; - } - - public static void open(final URL url, final Shell shell, final String dialogTitle) { - // if (SWT.getPlatform().equals("win32")) { - // IWorkbenchPage page = PHPeclipsePlugin.getActivePage(); - // try { - // IViewPart part = page.findView(UpdatePerspective.ID_BROWSER); - // if (part == null) { - // part = page.showView(UpdatePerspective.ID_BROWSER); - // } else - // page.bringToTop(part); - // ((IEmbeddedWebBrowser) part).openTo(url.toExternalForm()); - // } catch (PartInitException e) { - // PHPeclipsePlugin.log(e); - // } - // } else { - IHelp help = WorkbenchHelp.getHelpSupport(); - if (help != null) { - WorkbenchHelp.getHelpSupport().displayHelpResource(url.toExternalForm()); - } else { - // showMessage(shell, dialogTitle, ActionMessages.getString("OpenBrowserUtil.help_not_available"), false); //$NON-NLS-1$ + + public static void open(final URL url, final Shell shell, + final String dialogTitle) { + IWorkbenchPage page = PHPeclipsePlugin.getActivePage(); + try { + IViewPart part = page.findView(BrowserView.ID_BROWSER); + if (part == null) { + part = page.showView(BrowserView.ID_BROWSER); + } else { + page.bringToTop(part); + } + ((BrowserView) part).setUrl(url.toExternalForm()); + } catch (PartInitException e) { + PHPeclipsePlugin.log(e); } } - // } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/ShowExternalPreviewAction.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/ShowExternalPreviewAction.java index a3669ed..941829e 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/ShowExternalPreviewAction.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/ShowExternalPreviewAction.java @@ -1,22 +1,18 @@ package net.sourceforge.phpeclipse.phpeditor; - -/********************************************************************** -Copyright (c) 2000, 2002 IBM Corp. 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 implementation - Klaus Hartlage - www.eclipseproject.de -**********************************************************************/ - +/******************************************************************************* + * Copyright (c) 2000, 2002 IBM Corp. 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 implementation Klaus Hartlage - + * www.eclipseproject.de + ******************************************************************************/ import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.actions.PHPEclipseShowAction; +import net.sourceforge.phpeclipse.views.browser.BrowserView; import org.eclipse.core.resources.IFile; -import org.eclipse.swt.SWT; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IViewPart; @@ -26,16 +22,12 @@ import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.TextEditorAction; //import org.eclipse.update.internal.ui.UpdatePerspective; //import org.eclipse.update.internal.ui.views.IEmbeddedWebBrowser; - /** * ClassDeclaration that defines the action for parsing the current PHP file */ public class ShowExternalPreviewAction extends TextEditorAction { - private static ShowExternalPreviewAction instance = new ShowExternalPreviewAction(); - protected IFile fileToParse; - /** * Constructs and updates the action. */ @@ -43,11 +35,9 @@ public class ShowExternalPreviewAction extends TextEditorAction { super(PHPEditorMessages.getResourceBundle(), "ParserAction.", null); //$NON-NLS-1$ update(); } - public static ShowExternalPreviewAction getInstance() { return instance; } - /** * Code called when the action is fired. */ @@ -57,43 +47,35 @@ public class ShowExternalPreviewAction extends TextEditorAction { // should never happen return; } - -// if (SWT.getPlatform().equals("win32")) { -// String localhostURL; -// if ((localhostURL = PHPEclipseShowAction.getLocalhostURL(null, fileToParse)) == null) { -// return; -// } -// IWorkbenchPage page = PHPeclipsePlugin.getActivePage(); -// try { -// IViewPart part = page.findView(UpdatePerspective.ID_BROWSER); -// if (part == null) { -// part = page.showView(UpdatePerspective.ID_BROWSER); -// } else -// page.bringToTop(part); -// ((IEmbeddedWebBrowser) part).openTo(localhostURL); -// } catch (PartInitException e) { -// PHPeclipsePlugin.log(e); -// } -// } - + String localhostURL; + if ((localhostURL = PHPEclipseShowAction.getLocalhostURL(null, fileToParse)) == null) { + return; + } + IWorkbenchPage page = PHPeclipsePlugin.getActivePage(); + try { + IViewPart part = page.findView(BrowserView.ID_BROWSER); + if (part == null) { + part = page.showView(BrowserView.ID_BROWSER); + } else { + page.bringToTop(part); + } + ((BrowserView) part).setUrl(localhostURL); + } catch (PartInitException e) { + PHPeclipsePlugin.log(e); + } } - /** * Finds the file that's currently opened in the PHP Text Editor */ protected IFile getFile() { ITextEditor editor = getTextEditor(); - IEditorInput editorInput = null; if (editor != null) { editorInput = editor.getEditorInput(); } - if (editorInput instanceof IFileEditorInput) return ((IFileEditorInput) editorInput).getFile(); - // if nothing was found, which should never happen return null; } - } \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java new file mode 100644 index 0000000..a0a6023 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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 org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.part.ViewPart; +/** + * BrowserView is a simple demonstration of the SWT Browser + * widget. It consists of a workbench view and tab folder where each tab in the + * folder allows the user to interact with a control. + * + * @see ViewPart + */ +public class BrowserView extends ViewPart { + public final static String ID_BROWSER = "net.sourceforge.phpeclipse.views.browser"; + PHPBrowser instance = null; + /** + * Create the example + * + * @see ViewPart#createPartControl + */ + public void createPartControl(Composite frame) { + instance = new PHPBrowser(frame); + } + /** + * Called when we must grab focus. + * + * @see org.eclipse.ui.part.ViewPart#setFocus + */ + public void setFocus() { + instance.setFocus(); + } + /** + * Called when the View is to be disposed + */ + public void dispose() { + instance.dispose(); + instance = null; + super.dispose(); + } + public void setUrl(String url) { + instance.browser.setUrl(url); + } +} 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 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties new file mode 100644 index 0000000..e3daf7c --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties @@ -0,0 +1,20 @@ +############################################################################### +# 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 +############################################################################### +error.CouldNotLoadResources = Unable to load resources +window.title = PHP Browser + +Back = Back +BrowserNotCreated = Error - The Browser widget could not be instantiated. Please check the Browser widget is supported on this platform. Supported platforms and software requirements for the Browser widget are listed on the SWT FAQ web page. +Forward = Forward +Stop = Stop +Refresh = Refresh +Go = Go +Startup = http://www.phpeclipse.de diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif new file mode 100644 index 0000000000000000000000000000000000000000..895e22110d6812e43710cd8a1e6b91179f809655 GIT binary patch literal 380 zcmZ?wbhEHb6krfwxXQp_Z$IBYe!hMEeyggvcC~Zu=kK@Qzu$g7P^7+o|Ni+vcD#Lj zef<9W`|J0|&);9)HZQe)K2TLWSP4*Je0)4mNB#Z#^Xuz@f*?)z@9$r`EPCt4zW={J z{J%f{{{Hz53=IGO|37fx!2J318yXsbdVpL8Y5>KbEQ|~c8Vouh!$5vwV4LYMB_Kmf zs{63YDHbWqxyvR8MO4|%yrifesG(wZeR9MKj|w|p)`baAJw#^&vIXdBElkK zjFYEIGqbWWiS1F}A~jVbHkMh5aSNl2%IQc}=JOX$CS7)tkp{YtQ7ZWEJts#7YXJF9 BcIW^A literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp new file mode 100644 index 0000000000000000000000000000000000000000..43116e6d8e617364bce4e9a6ffb8c674221182ea GIT binary patch literal 6966 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 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2140654bb2b78c6d3125a39186371bab224cc707 GIT binary patch literal 6966 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 c3G+p66&^gNGRNet<8 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7e45a99b5bb75f8c620572adf51c29da00919515 GIT binary patch literal 6966 zcmeH~%WoS+9LHxLv+rHoaW;)?VA|IF3yU;_u*VPcarkoU%T7v>xrwDl?ya zf6v`_U?@h)V+eCEemm~`IMQ5RCwTv}#eQs|KGzkfD^ORUu0UOZ8Y;k*N992Fh`F+Y z8$9wnU%lerJp*9-<4{o)B}q~gg;HA0@GnANdD!MSQ4j=GmJLk{m}bz>by=c>6A9rl za{{g!P(g$e3CD>%PX$4vQphl)jp3c~?(JP2wyLUxlZl{kl1NHO{wY(D1vhXG@W{NN zOLEw>+HJc#Vow}C^v1-?F*9Tk*`x*~q9oATxDn$~1kse0NFdl5iR_AZpMGI%`TP0F z<0rra7=_3@5nwyNC1UzW9IuJgQq<;Ps4Eg3**!dQbGQea_po<13(gCRpPG;!EJy99vDlfQb5(1KH&M}{c{B; zm0$I~`s_=_BbQC)tGz1vsBj)CHE4QkDBK;59oWBr=A-i)3Ga4#BXQHQ^@vQA8t4OK zmF-2qVGh0P%;i1D%ex!xO&z9a z)qsapsGy>Pr&%{U8=LNH>v-wNbHDs_qmWz6y6L5bMRzF~)*2D-NQr*y!*~!`uve3+ zw+2E(z4yL-=4{qYdg)Z!Nv^rs3+K*joDOm1lK=RXpP9Xo1}PziNJEkmh4VzBPmeq{ zJ2O+vdC9~IO!nvI?@#Q1T;&w-P?Xe~@IaifqP2y>!+rg4PQIF0SSYM}Nq04u&0hI@ z&bDl1LIe4dAaid0sCY7*8T;c>2?LMJ^WR;~XS__p$)?;-r)Ny1gdw3HLybezxV1E_ z)j^CS;Sf$Iyu}G2Q36j(AoS>i4}JW>hpANuS8*-pEG{)#0aP^j7;*wgP+Yber`&p# zc??c~I65IQE7;l8yk}tW>}#*zod2?vNN~)sI$Lz-d59@YNKyA|++CFe{Z2a`8 zSN1)ymq`H<_)G-}JrXmPPdqpXCX+cH7aCO9jzv8lRgnS}9~w9s)?pY3D;?h%gy6f( z4}EY-8R<^)L7U3_1Robz$6G~`Fe92+x5lV6P4fc=d$RriF~{Go!eH22pN{^|ZP|$x eD%@0))Sjmr5~pLZxq7{RUss^6KwW|VQQ$ApLi_^& literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aaa888a67fb71d589040e4957367bb65f2f0409e GIT binary patch literal 6966 zcmeH}X;0%;6o$Poabi1m?2tHtEF@vc=4?R33W5q%o9i3n^Y}fB@77m6j~S01&I>r2lY?bu#_J4z|5qmmS(u)u z3QQH4Dlk=Gs=#MafMqz2Ca0&Y?6n9Pt49^LYC@ZoG!$jakLI^MpydZrz zu=sG{$*w{kkZ6%;EUKGE+=|s%(JLB z1|5PK%SA_`JAJ?-$(jj$GCA;6mg>!hKYZ3dIoNxBa#ShI31A6S!oScPw>&ILSP(=t zrd!TTCYzg|uPh^_H&;5xd!y^`FGd^d!5#EKCQqL5u)M%!- zGA4?UNTkSv7Y&e5!)S@Jq(rrtY1m0OUC5XGrP_9J`^#*t%98#b9K-EZspdx=%%`)PSmB^<B*F>U%S}b{rKjGzdqb7dKrxk`hpa+ zMY;nH1dfwhia%HzvnhiW2Y$)D#+T0Ra=5rmAUdIZ|FJ zSLoL2TW$aH@N4kA7!9=`c>)xW(^BUX9#xjzxSdM4IWOxkE{#^YXJ3root-XtDe%Y) zqo7UEq6vBrQ3jj8AYLq|NwTR$VNj{Lu(-eR?AxskP{mj#%5eymNVEThVZsDRcz0cm z#G^47^yzoH2gBjP*5;gRqp|{VgkY;dZ)1jJfF|;|grSVB8wtaNd2VvKTv=^*p0D+D z*pG26?!;#TFc|c{Ul1QKsvtrTBcj3FxK*5;Yb-5y8qK!vJB}ks63Lfv|4dOIj*~?Z zISfM;M-(OLIHh87p-UfeJU3C_W8o?cnqxtS?I z<@YtYKfis_)BFVw(Z|$v%QPWKOw%9~NMNMT-1m+-l80XYpr(+e0Dx=4@aX*LwePb% m`sqn7iFZ(i7(_7yi&PV&00YK2eQ?)wOcj_aFje4xs=$99#c@6W literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp new file mode 100644 index 0000000000000000000000000000000000000000..50e22225ba60d5cb541770ab1d44ce6e7d38587c GIT binary patch literal 6966 zcmeH~X>-~}9L9xiBq4-A0&_+p1_9>E#5joo1CB|?#*WitCdstL?X>-*{a}4|7gWkL zeFNx4%Z`wCS7P_4=YQ;Kc0VX^v~l=#l_&$_4MItlu{)UZ!wOiaTkF;BF`I&YA4LRovvha&5Czk z59a;e=h@`v4-eI>!%Vi0{e$ZR9!-)h-N+`bV#Wzdm6x^pywmwIz54C(!>DtnaGcB& zpP_*t5sw+yGDZRt)e5CSt$x?<|2Uoea(nyj+nFAVDFSt667>=Bz=hJfagwrEJl*bc zI$6GZx4d7ZkfE4YlUR%4*gcNEHUdd6)L!7R5oK1YUMyeKgPTUPquorknLH+yj za5EpScOB8`gZu**g1yell}W4larowbJdA$5VET{{ljNkL7A%|CtJ}GIb>1wT=sa0Z zS1E^B?cn;b_)>X67eq@^yo~$0bvEgD$NerAcNr@wa+E~3){*Qt;5jMXAkM66Mbl~* zE3aGarthbdCfRAwutH>^tX=49$#u7WvY(;*RYA~12|T`&ZIvqhvWGL4*Kqc*vfF(B z`ftEMe4fXb4$D8bk*MbKjbho)xNcl0K0^y&);kThzOQfW?+WEHG`{h0fF~Z0Cv+YA z9|V`98I~Z?Z7R(;bdN!vr-iPo`{P)T#CSMSz#*%uuIu=kFfcp4 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp new file mode 100644 index 0000000000000000000000000000000000000000..561f830ffce87e7d22e589208d9c86e059e074e5 GIT binary patch literal 6966 zcmeH~`EMIV6vy|z?Deki+i`rwiDNg39XD~45Yod=V%jF5l$%0Q+Nzu_S0Nx3gs8+1 z9I7ZPmjEFU@Iw!1Q7aA=Pzh<8Y@GN=id*0ZB>oECdJ`vw@<2&Cm)SAVC9?q2$IZ#DifA zuF4XDV(_=oCGUK(xs`X+3fV`lPB&S8gw}AAQ8Wqzneb+(amMZ&?-41fIij96BfnLOPv3fBt;2 zSj-l3fHZM&ESH%q7V^_$V?gru;lsoG_C30H@9rHtw)gkl(4Fe(?cTU)Lu_qxAP_Jb zjRXOaUTFas#YIa?%h|JMf4OpHeC)!sG%=IQ6bo4p=iHey?;Lsk=|>;ib?4o??;g5+ z+s!xi4fJp6OK#YdXkFLP6b;se8ly40!%Z)TVQWM4AX-`Rr5G z1LM>tj8ZL&W-cQ@Isk>NX46lF{P@U^v(wqj*}@NBetr1Rp`EvE@9FI9Y;8+K6XCk3 z+g>MoW#(=oPh9K*Fj_tjb7pI-FKl!b9Tn1l!!*Q_L6g(o|t0 zlO4VI%AptU+J1BQ`VH5&bu>4|>uMSTHH|KJ2m}EPo2$WW59`bUL07F7oGP`A;fyqE zpcoy=h!yexjD}+$*uAHanfi6+r`$#9y(345ZoBiwEq(2Ywzcs@Bog!bA`mB5N1fFb z)|+d!#u`EISBoCC;No}(!+0iGzOd0A(3*X=stAzqS}zAAf=i`wa-5A}OeCqrNglx& z1fx-6A$Kf^O5q_(dx?Wj4MXI7bNbBw-Fy2trF+-+G&Z!>HzpdII{-#7y7kroZ}iX_ zr$+Aq5{7qxGAflF#32YBit-2svOwo>1YhQoSk{Ln$n?h4xwBtA|IBl@ZoR3uGZhQR zg0;~={aSx0?((e>Eq+FHG8#K4I%(b}8)uUdfsaLdpe5rh?9agwfx_k!x0vk>k=UAWG!$%fx`Kk zTC}sgg;E)Sgyi%TtA*)|5-dz26a!5ZL12>#`%6g3r5rlH;4cGgF%K?B5IDpwHjh8p z0Fk3JyE#xsWxyF3gP;Y-k{HR!Bq+ec(+i^myC!*wFT*VSvjna(4~QnGuo^ zNec=LhB2juN>)LpN9B(ousJ{FN@Cd(drF0XEiUFSrzCrx9UQa zm1E|r*UXb#b+fXIc^=sd)Zybxtr2)$&wxIquu&3$Jc;Caq>wMXQjuukdL?QleHJ@H z8I}haf>z66j4JDlGOz#4^B2Iyek!UjqJj@#Ql8o{!7+dVS>%8(*}unAQD;^kUR7XK PfmH=o6D!Kw literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ae79b2df84af0f368499f2ee56fe10ecf045b74 GIT binary patch literal 6966 zcmeI0`EwKJ8OK-Bp4vlNX|=i~OSWv;*v8nw7PSrG@WB-*6ACmXP(n!4W@wwEi3te} zlgT8VY0A)2j_I@+aC1S^PD$J8v`MD{jBo2cF-hAW_&54pt?ih^=`0hb)6TH-c>QWE ztv>sG&e!XIFtIm*DZHR_fG&gp&FYj5k za`WJZNA`c?nI{jw^x}~pzA$uT=$UUn{^-sJw{INW0JfIqcwH<47%R{40;@-qaUPvS z$AB6zxCWX?4C!;)>%)O)(1(Zb?&{pOdDBzhJ$&I;zZ|=EHJ3?eQprLto6lyj7`r}l z`TgIY`uWcuJ#?_Ms{=gYh~MpXvR1?rMKhK=<$#HuGgB9a-{@JLa43??En6tUjPEdZz*#zsURB^Jp0)rc9tm|cH$L>> zS1+79ot>OaPE3La424_{h6NaMx!lamOeT}5R4V0iIfFlyN~KCAlh4lHEMNT1TW#&l z&8a%P?K`&6tocrPP;yaZ03&h8Yq^?7%l7Tw z`TnI#|GH7S38&0V7po))UQofRQJmAy$(a;5O2sl>0t?JI{`$e6kG}Za#?5^mp8|h@ z%9uP_ow1_gQKUrEswCC={p~HygX`A6J$#{*&D|TxmJ8sC-67OR#oWD&fY*L24r zhV(@RuuvzNMu5HY^2=Kv*wVDDF&Oe`!Ms#cT9OdK15b%8uS0`4z^3w6q zD_3vcxPd$4VG*M9FhKegM#IQuQ&W?(#nR1EIXjj7M|n0gIdksR>2Do6)ZN`3jYfTb zFKV^%`i$U#n`D9aIUMz&P;Xaa$Cj-heefaf51#4CNhA^CcAf`dxA7qN%lTY6moH|r zrEGp;Wc2LGQ~Mv<+rPfAG2RsL2iJPuF&;CtUMq%)Pg zmP+Yl5_yCS`XV0a1D<>;4W7yCV?TZU#GV~H2i9%qSbkq!Z9~8xb}1^yTG8$e(GUb0 zgkqC?E+tkI?p)EfbztzF3&VI`AR)mKJV;~|nWcCTHku`;rvQ(FaO%X#y}Q5Oe}7+Z zS5I@iwJsVD_-asGF&~*tM(eX=qdi@naMtwL_zhH-3<|GSaNsM=WpnYo z*k2k>uo1wYsY#(Hw7yhU#2$z$FK5yo%1ukfL!O_{-&V1pU5veJs(r^5~Hx z3u&%}F^;O&@~FHhdT0~*JTw6bx+fGI85tQG8rt^2_SL;>nwKq))oC$f7gZ=@r!OonUV8VN2lhjpNF?G9hFoqBUB?BM=U@wYOinb`8^n*0ZXW2PInP(Q0E6^$1`&Os5cM{f2c-O-(+Z zPf^{X%?@QWPa(mz9SM-IJE7)wg+}Ee@EP!6E5}QM;&z4WYF~T($Kb)#03NNgSMv)D zm`?Q>73X)~ehcEXtymtasZmr_b}B4pcSZyc#b`Vr(YL6d?sJVb3~cu}D{jWIsH6_N z$LIUn?%l~Wx`lQiiV(n6(_m6F(~t-?`Q(Y8^!0B*QL1>z0Sr(1hZnw9!wY~Y~oA4NtYiw)`u?-%CO%X$TDviE2a`oy9 z&p+SV+S*Vb_j*uGy*9go$YHEDnv+Ocve0~W|G!8P!~OyfT#UUoS}?;f9LEKN!Ckv{ zfds|p)~#Dex2dVAN+GXVz5x5f<;#yh_84*;FfPU8kX?X5@KCHsGJ=H?m*821W@M>T zK`2?40j8?z@#DuwM@KQPBZQD;Ic&8s>g4hmz0SY!#sgcn=;Mvkq1tUu=!)P0jG3~+ zS%d`z*{~vC%%^#rATUAkhyz(Zd-kke8{xazQW5%G|L6+l#?z-x^{roDA8YWqy^7O~ zi9+WA3}Imj6Si8YeqV|QB>JJlB8reIe!u_Nv18-on{=BSmgLw%&g=I+_j}Gg z_uMl$-fqfBU+wgE{#-ZzGBfn)?=$%Slw9}|zWAm8zf~YJePsz(MrL+KR&G{KUUse| zH(#1xP*hMTFO;bjDveTIqEc(ssa~T}(HCnpdW}}CRHVOGsbod+qC#a+VL^Ugetv## zZf;`KE0ppAX<LQq%|1Sx)Oy}j-*9JQmHgAFApR^CGq+&hnp}t zIr%wx1$h!4sFo>;m1={wq)czDFqK)&X`huBP6$_JOYM6+OMH`UXb(hlYCw`&zq~xjH-QS{tnm&WhSDD5@RxWAmN8dj4VuzhB8&=3SjJ2HkY%mzq6~qvvXx{@5J!%riry%H*DOo zY0I9i+i%~rZPVC>iJ|e)zLBBM!H&B2T61lM&ca+Ya)qi$R*;j6N<29$BZIeyLE<*1 zz^^bmBzOx?D>s(bR9YJx&W`5R6@AM`28Y&-jBMMu@z?wIJ%0Ge@ncV)dj7=e<1d~$ z_1ej2UVQS<6L;@CFgd8Y%of5^HNJsp#)}Lr9~wYV3dWJDdjVQ znSg1kYv^ogThZIUe$Du8ngchp>$ml`^;DIXyK0@RI3!}x0VbYDDv@AlV38tTjI2n#4Bhk4?JRXXCH}`EK6c1htM7)u26W@eA;j?GnIdcEu zm3;%OKGvXCt|-cv=+qhvCphY&`p6^&!Yl}GI504EHI8NNovVk2CvVyK@NXV^^G|24 zOkD~GgI_0-kxJ9nA@jyK4kGyvBbi1nw9s-m! zCl~Px^YZgDQww=f9)&a|4lu+td>EMark0_;{w?coJ$(Pc_ul$zA{>oHA~axven0(e zA~BbkjYnd%L^K`?#Up`eB9feoUuW!_@djr+FFpVJfn_~LZE=ZGr6`aBBgq!!&xnJi zQsLKNM4Z;frh)F>^+PZEtr0r2^JfF%-%I8KBGeF1nP;b;^U!%;-T$Kt_I)E~HW*KS$9 zgefDANFH3yq|sIyO%6+CdqX4P?$)*Ijy>_D$L*#ilS#MR%}d2!7&PqjSeCxv7r?QcJF!rop-TOI2?||VwglcjBqCl zFd7JgjQ%W2bQW1E79Y-9#4LF{%?DB>}1Cw zNg#E}%E%PMgS{&BhWbitXMN+u(8~S0c6-0Nf;dPN3Itd|p7d&35)?3gx99jX&y5X_ zv^2QLSd=maFk*NNDmD5vRN1;3Tx0!%_w3yl^ZDUPgd^~PA*}8t@yx{%|N7{k`*!Z` zZtHM4>k0eVi{wfS5Al=rRcEQ{sB2g=F!aD3cg6jISRjZ)!V^fFY)LTOjJ@7?{mjVF z%352E!&(gwnUzTYA$SV*YOAfof9~0}C+hWuX{ZzmvF4NMp!b7F1O(J0LgHq^4J=7M zUYYvx(L+c3I(zMvHDpli(VPy@hb?u{_(MD_)9IZRmH6|@?w1%>xD|g#j=ITp-QN%$z*_^5pu>&2>$VDtmQ>&8RgXj!1npGC4fntvh7kzLcO!kAun#Y(Q0K?_JHuKz5&#oPvsIRHBm0QjFGOb*L^U%cD3m&#$ z_6wFgOKhZf`F(fZ<+=P7yCE*^^LPl;Kfwcl@LvX~#2B8ZpE$O9XtmQ;3lHKbrK!c9 zlbJ2%h{5K|{%$px2#Ku@XK!=s_D!2H8B6SXEFSXu7UdBz;K8dIU!A^&GY|C)!Bbw~Vg-$GP*k5GsN6 zV+I3Yo`;2oIP{mNzI@>B`JOYOXp*dK8WNGRis1oUKoT4Y-!9b_<3$~fE)2JEbnLf>4io>uNRl20!?9p^ zHl9QZ*ciaZm-I-)N59AS_8V{2+a09MC<94Bb`B&M3zLcA5sqmj+c*+dWBb6JkQzrq zC8$OR26t`U{_4qBIBT$R2i+Vk+)#Zpd!1At3}o?Kn<1qqpZ~+@R~^-M64d<6EX1LQ zMBu@h#q$XHzdXIx;DL$^AC*AD6UGKtZo75z(SwKneEN@5pIw{{$7sH5GdGfRf{l>n z<(Ezl^bhKF2Db9l({gfo8Zb1B1qp{8F+5-k5>Z&dkr0a6rH+TiCHMfPC(a#$JB{}B z69AW&MBA6 zsnJO!sY=GeXD%Esn*4CX!u#h9Clp~&o}y4{gHx(VYfC9?sx{>QcsmW78nngKF4RgT zw-uyon3PphHN&*v|J#e<5sIG+dn%ATlW9^TWxkZE*idNNbk6{Xr(sPRwJ&a4ZJeq~LE|L@}ni!cb z+PXm!WHj-L8_RY)5)YChdB?lsk&>)VwCEqvFGZt4fC4@R{iT2pFJBya$9q5beV+Gu z-{*;p1XK?!9Rc)qd^~qQ4?ZAY`uzc1zgAWF6n?nh-&f#&s=$h+qqMZNtgMVzQBlq3 zi-ba{SgerAR0@Sgt<`DuMuW*@v6`(mlg(~()LLtu&U%-<)@iZXtrnZvWHITDT9rm6 zS1J?=i9{k02>5(HuaaL;URhRJSyEhHyrPUFbxBDHU_ipJtQ1sLiEC=)QmI<0)N8dy zz20WF*4i8{XT96y@p^nde`BCA7zi~rg_?2V^EUY0UJouhoOYANtTPyNI+aQVB%x3! zs1{c7t3g#>R#8%1%8{p_3}pEaj7FsbiPda&*lZqWeS^yrYG`Z@Hnq33h1)y3!(F{y zJw1_boOd+0wuPEo8$&@)LqlzSoyCrS>2$h+N}?KZjZjowB>)n4o{G|Peg#h?s1a5P z6jC{4*D6#Fv$fIV14+Q`!*IPFk@11y$&vBNv5B>-9^SBaJ=&U;ldFcuCI&~wdIx&j zIy?NqklP0_VNqCFCY3`dkw{ctUe4q3&~wxWFx9*&Fz-6YlbG;8v;!(uh(jK7>p*ZMj;VPgaVE{5C@hrY4tXv z8J5C)>5Fv3SD!z04RR6D+3V*o z9Xt5^%I^NI#-txOZ}N)xoEpJ@x6A zES06wbed)`bUMRQY?h#zc#60gizmo*zNKKdWIQ&TOr#*!d?x#k?Bcg)XI?$>!XqOS zVSm75u^E+0l~f`Zi#YP+=eR=UG&>qy4Uv}4vHp>LyQTq?NwXwDLx)*{Op)mnMFRjZ zIH9vSlF8sJE|K_}fi_H|sbrc=XNWWg$sg$dYg@YbeFvfNhfIq8=G@G9_h7i8$!l`h zR0gd~&5_5T);LY(CYPtf=ifL!d3gG%Ycp5UNh(dTPylcJ{b2Vx12B|?VhoufqRC^2 zUg`~YgdE;ljYTifaO8m}*PCsa5%9p>o3{M!t#=pMIU73Syv{tGyY|(^ zRXszk^^J8pn?b7O$b)I_wmQOrCQORyEjzxua0yWb&Y4JpD0?qSesCT7fG3YMOR@yB zn9e@AZ6|mr262aPNGG zh$a4-SvYz8y*5|CXQ{U+jU0LGMw`#>iUe9WuUdEF^*3@$!7c9xG!sjv?uGD!>)^rk z#~%@n5R2}RZ1m!_4o}Esa4dtzU~jN{`dY%^Is4%!;F+T`so7*En~UP%%Q?W4NTrel z!O|IsJeQ>B6BJw;JZ6P~qdpF!13bf>y<1m5I`jFdd4fXxhd)F1{QO$Z0Um~Bfdn67 z32K4JEE1Wq&VIkmZItOa^4JY_zr)+#8hL#EW8a)Qw?NW(wOl3(<@57vIR|*yTrL`q zlSyKM$+B_sPKsGSyt2{ZHYt|DQ?S?ewHu*NHbKw{0x=EK_DAT0AdNK^t8FHghCbj~ z-9PFv*K+5v8LaSU=(BCjhA&TkSny}~4;D!*2g{KsAHV?vlVxa{PNwjvJ1J_gHR3Yb zx$|JYd#rWcq4rG^Yu?}*BnOK6l5p8w(!DEndjn7C5 zToyax^JMSf;XV8C5X3{w_t^ybBY08}iJ{0;Dx0Pjsm$pQJ`OtEPMt+3xtrPF)2p#Z ztutAh-M-=W$o935UOaUcn=4G%7}oNoRhzrXU@ySjirv05Kc6AUzh&oNc=AA#(`%M% zwPNKxNeVY$eXli|g4h-YLTd*{e|78?EQMJ*huM{n&&ym-sSI7Kxm#@=F3Y#Bn3zvH^8JbKJbc%pJSegS)7n}$B zs3lzW!Ddyj(m0G3?7&;$MI+wNY_B4(~Ff|Emp|{T=!$x%p>nMsI|yYTKvJj&MxE>?;n2~ z5ByVh9-fJ@GMW6snn)z#@i-V5hDj!|EZmi^0EXLgEK5dX|6Ew48ckH7YM(B%z!8jUJFc7}=?nTXGIKVQhdz@t;DVKtxA)!o)P z5b4>sbI%9A{%tyu#8?FeU=*le!gw@_9(ZU4m^>9W*f(yz_VUsGj!3iD@3Pfdb!KU` z7~%*kx#l}a+mW1NR}ZTp3xn05Qb(v|u&Wmd@`<vsG;RIA@h4af_UwGx{&o-=G*U{7* z@-;NnxlL-FPOedijMNTqIFR z<-AhVq$RC$Lrwlc!-c!1@YmZWyPha>Tu*KEh$6& zs-RNAw}AwqP=Z5o47C@4p^AbELw83QsWj>g!+isz14Bc-{k`F?aBF)@AcV>ca&7P% zG)Apbr!lK-Uv!SGHCUMydDFg&VWIK zK0nw1fQA$Ng5SXmuY-Z~8l4(GBT-6(QXwSgRY82z-vCowT+ETDcm?h*T~SnA0IRIv z@p)B3L5)N#mCF=}-UX*ZoeFZiXK`481w}&*be1B6#Y>8LjkZr1tgT<@cLQ}Dqng%>XuqP&hs@@r8-X{ oS3*)T>PSMFph~<1!-wn;2g(!`6+Kk+AV;42x7}CZ|5|~61MXg=>;M1& literal 0 HcmV?d00001 -- 1.7.1