diff options
author | Silenio Quarti <silenio> | 2009-07-01 14:50:54 +0000 |
---|---|---|
committer | Silenio Quarti <silenio> | 2009-07-01 14:50:54 +0000 |
commit | 093c579a4ffd9551acb901bba9617e7aa776989d (patch) | |
tree | 71cf23798b651ef92f188390841a8d130908fb11 /bundles/org.eclipse.swt/Eclipse SWT Browser/forms | |
parent | f664d297f7bb009784868bf3fcf0b3e3bb9a646b (diff) | |
download | eclipse.platform.swt-093c579a4ffd9551acb901bba9617e7aa776989d.tar.gz eclipse.platform.swt-093c579a4ffd9551acb901bba9617e7aa776989d.tar.xz eclipse.platform.swt-093c579a4ffd9551acb901bba9617e7aa776989d.zip |
restore HEAD after accidental deletion by error in automated build script
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Browser/forms')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java new file mode 100644 index 0000000000..4a52398af0 --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/forms/org/eclipse/swt/browser/IE.java @@ -0,0 +1,280 @@ +/******************************************************************************* + * Copyright (c) 2003, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.browser; + +import org.eclipse.swt.*; +import org.eclipse.swt.internal.wpf.*; +import org.eclipse.swt.widgets.*; + +class IE extends WebBrowser { + + int webBrowser, host, jniRef; + + boolean ignoreDispose; + + static { + NativeClearSessions = new Runnable() { + public void run() { +// OS.InternetSetOption (0, OS.INTERNET_OPTION_END_BROWSER_SESSION, 0, 0); + } + }; + } + +public void create(Composite parent, int style) { + host = OS.gcnew_WindowsFormsHost(); + if (host == 0) SWT.error(SWT.ERROR_NO_HANDLES); + webBrowser = OS.gcnew_WebBrowser(); + if (webBrowser == 0) SWT.error(SWT.ERROR_NO_HANDLES); + OS.WindowsFormsHost_Child(host, webBrowser); + jniRef = OS.NewGlobalRef(this); + if (jniRef == 0) SWT.error(SWT.ERROR_NO_HANDLES); + OS.WebBrowser_ScriptErrorsSuppressed(webBrowser, true); + int handler = OS.gcnew_WebBrowserNavigatingEventHandler(jniRef, "HandleNavigating"); + OS.WebBrowser_Navigating(webBrowser, handler); + OS.GCHandle_Free(handler); + handler = OS.gcnew_WebBrowserProgressChangedEventHandler(jniRef, "HandleProgressChanged"); + OS.WebBrowser_ProgressChanged(webBrowser, handler); + OS.GCHandle_Free(handler); + handler = OS.gcnew_EventHandler(jniRef, "HandleStatusTextChanged"); + OS.WebBrowser_StatusTextChanged(webBrowser, handler); + OS.GCHandle_Free(handler); + handler = OS.gcnew_EventHandler(jniRef, "HandleDocumentTitleChanged"); + OS.WebBrowser_DocumentTitleChanged(webBrowser, handler); + OS.GCHandle_Free(handler); + handler = OS.gcnew_WebBrowserDocumentCompletedEventHandler(jniRef, "HandleDocumentCompleted"); + OS.WebBrowser_DocumentCompleted(webBrowser, handler); + OS.GCHandle_Free(handler); + + int parentHandle = browser.handle; + int children = OS.Panel_Children(parentHandle); + OS.UIElementCollection_Insert(children, 0, host); + OS.GCHandle_Free(children); + OS.FrameworkElement_Width(host, OS.FrameworkElement_Width(parentHandle)); + OS.FrameworkElement_Height(host, OS.FrameworkElement_Height(parentHandle)); + + Listener listener = new Listener() { + public void handleEvent(Event event) { + switch (event.type) { + case SWT.Dispose: { + if (ignoreDispose) { + ignoreDispose = false; + break; + } + ignoreDispose = true; + browser.notifyListeners (event.type, event); + event.type = SWT.NONE; + OS.GCHandle_Free(host); + OS.GCHandle_Free(webBrowser); + OS.DeleteGlobalRef(jniRef); + host = webBrowser = jniRef = 0; + break; + } + case SWT.Resize: { + OS.FrameworkElement_Width(host, OS.FrameworkElement_Width(browser.handle)); + OS.FrameworkElement_Height(host, OS.FrameworkElement_Height(browser.handle)); + break; + } + } + } + }; + browser.addListener(SWT.Resize, listener); + browser.addListener(SWT.Dispose, listener); +} + +public boolean back() { + return OS.WebBrowser_GoBack(webBrowser); +} + +public boolean execute(String script) { +// int document = OS.WebBrowser_Document(frame); +// int length = script.length (); +// char [] buffer = new char [length + 1]; +// script.getChars (0, length, buffer, 0); +// int str = OS.gcnew_String (buffer); +// int result = OS.HtmlDocument_InvokeScript(document, str); +// OS.GCHandle_Free(result); +// OS.GCHandle_Free(str); +// OS.GCHandle_Free(document); + return true; +} + +public boolean forward() { + return OS.WebBrowser_GoForward(webBrowser); +} + +public String getBrowserType () { + return "ie"; //$NON-NLS-1$ +} + +public String getText () { + // TODO + return ""; //$NON-NLS-1$ +} + +public String getUrl() { + int uri = OS.WebBrowser_Url(webBrowser); + String url = getUriString (uri); + if (uri != 0) OS.GCHandle_Free(uri); + return url; +} + +String getUriString(int uri) { + if (uri == 0) return null; + int str = OS.Object_ToString(uri); + int charArray = OS.String_ToCharArray(str); + char[] chars = new char[OS.String_Length(str)]; + OS.memcpy(chars, charArray, chars.length * 2); + OS.GCHandle_Free(charArray); + String url = new String(chars); + OS.GCHandle_Free(str); + return url; +} + +void HandleDocumentCompleted(int sender, int e) { + if (webBrowser == 0) return; + int uri = OS.WebBrowserDocumentCompletedEventArgs_Url(e); + String url = getUriString (uri); + if (uri != 0) OS.GCHandle_Free(uri); + LocationEvent newEvent = new LocationEvent(browser); + newEvent.display = browser.getDisplay(); + newEvent.widget = browser; + newEvent.location = url; + newEvent.doit = true; + for (int i = 0; i < locationListeners.length; i++) { + locationListeners[i].changing(newEvent); + } + if (browser.isDisposed()) return; + ProgressEvent progressEvent = new ProgressEvent(browser); + progressEvent.display = browser.getDisplay(); + progressEvent.widget = browser; + for (int i = 0; i < progressListeners.length; i++) { + progressListeners[i].completed(progressEvent); + } +} + +void HandleDocumentTitleChanged(int sender, int e) { + if (webBrowser == 0) return; + int str = OS.WebBrowser_DocumentTitle(webBrowser); + String title = ""; + if (str != 0) { + int charArray = OS.String_ToCharArray(str); + char[] chars = new char[OS.String_Length(str)]; + OS.memcpy(chars, charArray, chars.length * 2); + OS.GCHandle_Free(charArray); + OS.GCHandle_Free(str); + title = new String(chars); + } + TitleEvent newEvent = new TitleEvent(browser); + newEvent.display = browser.getDisplay(); + newEvent.widget = browser; + newEvent.title = title; + for (int i = 0; i < titleListeners.length; i++) { + titleListeners[i].changed(newEvent); + } +} + +void HandleNavigating(int sender, int e) { + if (webBrowser == 0) return; + int uri = OS.WebBrowserNavigatingEventArgs_Url(e); + String url = getUriString (uri); + if (uri != 0) OS.GCHandle_Free(uri); + LocationEvent newEvent = new LocationEvent(browser); + newEvent.display = browser.getDisplay(); + newEvent.widget = browser; + newEvent.location = url; + newEvent.doit = true; + for (int i = 0; i < locationListeners.length; i++) { + locationListeners[i].changing(newEvent); + } +} + +void HandleProgressChanged(int sender, int e) { + if (webBrowser == 0) return; + long nProgress = OS.WebBrowserProgressChangedEventArgs_CurrentProgress(e); + long nProgressMax = OS.WebBrowserProgressChangedEventArgs_MaximumProgress(e); + if (nProgress != -1) { + ProgressEvent newEvent = new ProgressEvent(browser); + newEvent.display = browser.getDisplay(); + newEvent.widget = browser; + newEvent.current = (int)nProgress; + newEvent.total = (int)nProgressMax; + for (int i = 0; i < progressListeners.length; i++) { + progressListeners[i].changed(newEvent); + } + } +} + +void HandleStatusTextChanged(int sender, int e) { + if (webBrowser == 0) return; + int str = OS.WebBrowser_StatusText(webBrowser); + String text = ""; + if (str != 0) { + int charArray = OS.String_ToCharArray(str); + char[] chars = new char[OS.String_Length(str)]; + OS.memcpy(chars, charArray, chars.length * 2); + OS.GCHandle_Free(charArray); + OS.GCHandle_Free(str); + text = new String(chars); + } + StatusTextEvent newEvent = new StatusTextEvent(browser); + newEvent.display = browser.getDisplay(); + newEvent.widget = browser; + newEvent.text = text; + for (int i = 0; i < statusTextListeners.length; i++) { + statusTextListeners[i].changed(newEvent); + } +} + +public boolean isBackEnabled() { + return OS.WebBrowser_CanGoBack(webBrowser); +} + +public boolean isForwardEnabled() { + return OS.WebBrowser_CanGoForward(webBrowser); +} + +public void refresh() { + OS.WebBrowser_Refresh(webBrowser); +} + +public boolean setText(String html) { + int state = OS.WebBrowser_ReadyState(webBrowser); + if (!(state == OS.WebBrowserReadyState_Uninitialized || state == OS.WebBrowserReadyState_Complete)) { + OS.WebBrowser_Stop(webBrowser); + } + int length = html.length (); + char [] buffer = new char [length + 1]; + html.getChars (0, length, buffer, 0); + int str = OS.gcnew_String (buffer); + if (str == 0) SWT.error (SWT.ERROR_NO_HANDLES); + OS.WebBrowser_DocumentText(webBrowser, str); + OS.GCHandle_Free(str); + return true; +} + +public boolean setUrl(String url) { + int state = OS.WebBrowser_ReadyState(webBrowser); + if (!(state == OS.WebBrowserReadyState_Uninitialized || state == OS.WebBrowserReadyState_Complete)) { + OS.WebBrowser_Stop(webBrowser); + } + int length = url.length (); + char [] buffer = new char [length + 1]; + url.getChars (0, length, buffer, 0); + int str = OS.gcnew_String (buffer); + OS.WebBrowser_Navigate(webBrowser, str); + OS.GCHandle_Free(str); + return true; +} + +public void stop() { + OS.WebBrowser_Stop(webBrowser); +} +} |