Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@134 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
12 changed files with 321 additions and 195 deletions
@ -0,0 +1,101 @@
@@ -0,0 +1,101 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
|
||||
// <version value="$version"/>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Text; |
||||
using System.ComponentModel; |
||||
using System.Runtime.InteropServices; |
||||
using System.Windows.Forms; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding |
||||
{ |
||||
public delegate void NewWindowExtendedEventHandler(object sender, NewWindowExtendedEventArgs e); |
||||
|
||||
public class NewWindowExtendedEventArgs : CancelEventArgs |
||||
{ |
||||
Uri url; |
||||
|
||||
public Uri Url { |
||||
get { |
||||
return url; |
||||
} |
||||
} |
||||
|
||||
public NewWindowExtendedEventArgs(Uri url) |
||||
{ |
||||
this.url = url; |
||||
} |
||||
} |
||||
|
||||
/// <summary>
|
||||
/// Microsoft didn't include the URL being surfed to in the NewWindow event args,
|
||||
/// but here is the workaround:
|
||||
/// </summary>
|
||||
public class ExtendedWebBrowser : WebBrowser |
||||
{ |
||||
class WebBrowserExtendedEvents : System.Runtime.InteropServices.StandardOleMarshalObject, DWebBrowserEvents2 |
||||
{ |
||||
private ExtendedWebBrowser browser; |
||||
|
||||
public WebBrowserExtendedEvents(ExtendedWebBrowser browser) |
||||
{ |
||||
this.browser = browser; |
||||
} |
||||
|
||||
public void NewWindow3(object pDisp, ref bool cancel, ref object flags, ref string urlContext, ref string url) |
||||
{ |
||||
NewWindowExtendedEventArgs e = new NewWindowExtendedEventArgs(new Uri(url)); |
||||
browser.OnNewWindowExtended(e); |
||||
cancel = e.Cancel; |
||||
} |
||||
} |
||||
|
||||
|
||||
[ComImport()] |
||||
[Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D")] |
||||
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)] |
||||
[TypeLibType(TypeLibTypeFlags.FHidden)] |
||||
interface DWebBrowserEvents2 |
||||
{ |
||||
[DispId(273)] |
||||
void NewWindow3([InAttribute(), MarshalAs(UnmanagedType.IDispatch)] object pDisp, |
||||
[InAttribute(), OutAttribute()] ref bool cancel, |
||||
[InAttribute()] ref object flags, |
||||
[InAttribute(), MarshalAs(UnmanagedType.BStr)] ref string urlContext, |
||||
[InAttribute(), MarshalAs(UnmanagedType.BStr)] ref string url); |
||||
} |
||||
|
||||
public event NewWindowExtendedEventHandler NewWindowExtended; |
||||
|
||||
private AxHost.ConnectionPointCookie cookie; |
||||
private WebBrowserExtendedEvents wevents; |
||||
|
||||
protected override void CreateSink() |
||||
{ |
||||
base.CreateSink(); |
||||
wevents = new WebBrowserExtendedEvents(this); |
||||
cookie = new AxHost.ConnectionPointCookie(this.ActiveXInstance, wevents, typeof(DWebBrowserEvents2)); |
||||
} |
||||
|
||||
protected override void DetachSink() |
||||
{ |
||||
if (cookie != null) { |
||||
cookie.Disconnect(); |
||||
cookie = null; |
||||
} |
||||
base.DetachSink(); |
||||
} |
||||
|
||||
protected virtual void OnNewWindowExtended(NewWindowExtendedEventArgs e) |
||||
{ |
||||
if (NewWindowExtended != null) { |
||||
NewWindowExtended(this, e); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt"/>
|
||||
// <license see="prj:///doc/license.txt"/>
|
||||
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
|
||||
// <version value="$version"/>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections; |
||||
using System.Drawing; |
||||
using System.Windows.Forms; |
||||
using ICSharpCode.Core; |
||||
|
||||
namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding |
||||
{ |
||||
public interface ISchemeExtension |
||||
{ |
||||
void InterceptNavigate(HtmlViewPane pane, WebBrowserNavigatingEventArgs e); |
||||
} |
||||
|
||||
public class SchemeExtensionDescriptor |
||||
{ |
||||
string schemeName; |
||||
|
||||
public string SchemeName { |
||||
get { |
||||
return schemeName; |
||||
} |
||||
} |
||||
|
||||
Codon codon; |
||||
|
||||
public SchemeExtensionDescriptor(Codon codon) |
||||
{ |
||||
this.codon = codon; |
||||
schemeName = codon.Properties["scheme"]; |
||||
if (schemeName == null || schemeName.Length == 0) |
||||
schemeName = codon.Id; |
||||
} |
||||
|
||||
ISchemeExtension ext; |
||||
|
||||
public void InterceptNavigate(HtmlViewPane pane, WebBrowserNavigatingEventArgs e) |
||||
{ |
||||
if (ext == null) { |
||||
ext = (ISchemeExtension)codon.AddIn.CreateObject(codon.Properties["class"]); |
||||
} |
||||
ext.InterceptNavigate(pane, e); |
||||
} |
||||
} |
||||
|
||||
public class SchemeExtensionErbauer : IErbauer |
||||
{ |
||||
public object BuildItem(object caller, Codon codon, ArrayList subItems) |
||||
{ |
||||
return new SchemeExtensionDescriptor(codon); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue