Browse Source

Implemented ExtendedWebBrowser to get the NewWindow event.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@134 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
e0697cfcdd
  1. 71
      src/AddIns/Misc/StartPage/Project/Src/ICSharpCodePage.cs
  2. 19
      src/AddIns/Misc/StartPage/Project/Src/Main.cs
  3. 164
      src/AddIns/Misc/StartPage/Project/Src/StartPage.cs
  4. 5
      src/AddIns/Misc/StartPage/Project/StartPage.addin
  5. 1
      src/AddIns/Misc/StartPage/Project/StartPage.csproj
  6. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 13
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs
  8. 101
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/ExtendedWebBrowser.cs
  9. 77
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs
  10. 59
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs
  11. 3
      src/Main/Core/Project/Src/AddInTree/AddIn/Runtime.cs
  12. 1
      src/Main/StartUp/Project/SharpDevelopMain.cs

71
src/AddIns/Misc/StartPage/Project/Src/ICSharpCodePage.cs

@ -133,10 +133,10 @@ namespace ICSharpCode.StartPage @@ -133,10 +133,10 @@ namespace ICSharpCode.StartPage
{
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.StartMenu.Name}"), "/Start/opensection"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.ChangeLogMenu.Name}"), "/ChangeLog/opensection"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.AuthorsMenu.Name}"), "/Authors/opensection"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.HelpWantedMenu.Name}"), "/HelpWanted/opensection"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.StartMenu.Name}"), "startpage://Start"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.ChangeLogMenu.Name}"), "startpage://ChangeLog"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.AuthorsMenu.Name}"), "startpage://Authors"));
TopMenu.Add(new MenuItem(StringParser.Parse("${res:StartPage.HelpWantedMenu.Name}"), "startpage://HelpWanted"));
}
public virtual void PopulateLeftMenu()
@ -472,7 +472,7 @@ namespace ICSharpCode.StartPage @@ -472,7 +472,7 @@ namespace ICSharpCode.StartPage
builder.Append(m_strMainColColor);
builder.Append("\" class=\"copy\"><img src=\""+ startPageLocation + "/Layout/Common/blind.gif\" width=15 height=1>");
builder.Append("<font size=\"-2\">");
builder.Append("Copyright &copy;2000-2004 <A HREF=\"mailto:webmaster@icsharpcode.net\" title=\"Contact Us\">IC#SharpCode</a>. Released under the terms of the GNU General Public License. </font></td>\r\n");
builder.Append("Copyright &copy;2000-2005 <A HREF=\"mailto:webmaster@icsharpcode.net\" title=\"Contact Us\">IC#SharpCode</a>. Released under the terms of the GNU General Public License. </font></td>\r\n");
if (ShowRightBox)
{
@ -536,7 +536,7 @@ namespace ICSharpCode.StartPage @@ -536,7 +536,7 @@ namespace ICSharpCode.StartPage
}
projectFiles[i] = fileName;
projectSection.Append("<TR><TD>");
projectSection.Append("<a href=\"project://" + i + "\">");
projectSection.Append("<a href=\"startpage://project/" + i + "\">");
projectSection.Append(Path.GetFileNameWithoutExtension(fileName));
projectSection.Append("</A>");
projectSection.Append("</TD><TD>");
@ -548,10 +548,10 @@ namespace ICSharpCode.StartPage @@ -548,10 +548,10 @@ namespace ICSharpCode.StartPage
}
} catch {}
projectSection.Append("</TABLE></DIV><BR/><BR/>");
projectSection.Append(String.Format("<input type=button value='{0}' onClick=\"location.href = '/opencombine';\">\n",
projectSection.Append(String.Format("<input type=button value='{0}' onClick=\"location.href = 'startpage://opencombine/';\">\n",
StringParser.Parse("${res:StartPage.StartMenu.OpenCombineButton}")
));
projectSection.Append(String.Format("<input type=button value='{0}' onClick=\"location.href('/newcombine');\">\n",
projectSection.Append(String.Format("<input type=button value='{0}' onClick=\"location.href('startpage://newcombine/');\">\n",
StringParser.Parse("${res:StartPage.StartMenu.NewCombineButton}")
));
projectSection.Append("<BR/><BR/><BR/>");
@ -562,7 +562,7 @@ namespace ICSharpCode.StartPage @@ -562,7 +562,7 @@ namespace ICSharpCode.StartPage
public void RenderSectionAuthorBody(StringBuilder builder)
{
try {
builder.Append("<iframe src=\"http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.Contributors\" width=\"800\" height=\"1400\" />");
builder.Append("<iframe name=\"iframe\" src=\"http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.Contributors\" width=\"800\" height=\"1400\" />");
//
//
//
@ -582,28 +582,27 @@ namespace ICSharpCode.StartPage @@ -582,28 +582,27 @@ namespace ICSharpCode.StartPage
public void RenderSectionChangeLogBody(StringBuilder builder)
{
// try {
//
// string html = ConvertXml.ConvertToString(Application.StartupPath +
// Path.DirectorySeparatorChar + ".." +
// Path.DirectorySeparatorChar + "doc" +
// Path.DirectorySeparatorChar + "ChangeLog.xml",
//
// Application.StartupPath +
// Path.DirectorySeparatorChar + ".." +
// Path.DirectorySeparatorChar + "data" +
// Path.DirectorySeparatorChar + "ConversionStyleSheets" +
// Path.DirectorySeparatorChar + "ShowChangeLog.xsl");
// builder.Append(html);
// } catch (Exception e) {
// MessageBox.Show(e.ToString());
// }
try {
/*string html = ConvertXml.ConvertToString(Application.StartupPath +
Path.DirectorySeparatorChar + ".." +
Path.DirectorySeparatorChar + "doc" +
Path.DirectorySeparatorChar + "ChangeLog.xml",
Application.StartupPath +
Path.DirectorySeparatorChar + ".." +
Path.DirectorySeparatorChar + "data" +
Path.DirectorySeparatorChar + "ConversionStyleSheets" +
Path.DirectorySeparatorChar + "ShowChangeLog.xsl");
builder.Append(html);*/
} catch (Exception e) {
MessageBox.Show(e.ToString());
}
}
public void RenderSectionHelpWantedBody(StringBuilder builder)
{
try {
builder.Append("<iframe src=\"http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.FeaturesYouCouldHelpUsWith\" width=\"800\" height=\"1000\" />");
builder.Append("<iframe name=\"iframe\" src=\"http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.FeaturesYouCouldHelpUsWith\" width=\"800\" height=\"1000\" />");
//
// string html = ConvertXml.ConvertToString(Application.StartupPath +
// Path.DirectorySeparatorChar + ".." +
@ -624,17 +623,17 @@ namespace ICSharpCode.StartPage @@ -624,17 +623,17 @@ namespace ICSharpCode.StartPage
public string Render(string section)
{
startPageLocation = FileUtility.Combine(Application.StartupPath, "..", "data", "resources", "startpage");
switch (section) {
case "Start":
switch (section.ToLower()) {
case "start":
ContentBarText = StringParser.Parse("${res:StartPage.StartMenu.BarNameName}");
break;
case "ChangeLog":
case "changelog":
ContentBarText = StringParser.Parse("${res:StartPage.ChangeLogMenu.BarNameName}");
break;
case "Authors":
case "authors":
ContentBarText = StringParser.Parse("${res:StartPage.AuthorsMenu.BarNameName}");
break;
case "HelpWanted":
case "helpwanted":
ContentBarText = StringParser.Parse("${res:StartPage.HelpWantedMenu.BarNameName}");
break;
}
@ -644,17 +643,17 @@ namespace ICSharpCode.StartPage @@ -644,17 +643,17 @@ namespace ICSharpCode.StartPage
RenderPageTopSection(builder);
RenderFirstPageBodySection(builder);
switch (section) {
case "Start":
switch (section.ToLower()) {
case "start":
RenderSectionStartBody(builder);
break;
case "ChangeLog":
case "changelog":
RenderSectionChangeLogBody(builder);
break;
case "Authors":
case "authors":
RenderSectionAuthorBody(builder);
break;
case "HelpWanted":
case "helpwanted":
RenderSectionHelpWantedBody(builder);
break;
}

19
src/AddIns/Misc/StartPage/Project/Src/Main.cs

@ -4,10 +4,21 @@ using System.Drawing; @@ -4,10 +4,21 @@ using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.BrowserDisplayBinding;
namespace ICSharpCode.StartPage {
namespace ICSharpCode.StartPage
{
/// <summary>
/// This is the ViewContent implementation for the Start Page.
/// </summary>
public class StartPageView : BrowserPane
{
public StartPageView() : base(new Uri("startpage://start/"))
{
}
}
public class ShowStartPageCommand : AbstractMenuCommand
{
@ -19,9 +30,7 @@ namespace ICSharpCode.StartPage { @@ -19,9 +30,7 @@ namespace ICSharpCode.StartPage {
return;
}
}
// if (SharpDevelopMain.CommandLineArgs != null) {
WorkbenchSingleton.Workbench.ShowView(new StartPageView());
// }
WorkbenchSingleton.Workbench.ShowView(new StartPageView());
}
}
}

164
src/AddIns/Misc/StartPage/Project/Src/StartPage.cs

@ -1,151 +1,39 @@ @@ -1,151 +1,39 @@
// <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.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.BrowserDisplayBinding;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.BrowserDisplayBinding;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.StartPage
namespace ICSharpCode.StartPage
{
/// <summary>
/// This is the ViewContent implementation for the Start Page.
/// </summary>
public class StartPageView : AbstractViewContent
public class StartPageScheme : ISchemeExtension
{
// defining the control variables used
WebBrowser webBrowser;
// return the panel that contains all of our controls
public override Control Control
{
get {
return webBrowser;
}
}
// the content cannot be modified
public override bool IsViewOnly
{
get {
return true;
}
}
public override bool IsReadOnly
{
get {
return false;
}
}
// these methods are unused in this view
public override void Save(string fileName)
{
}
public override void Load(string fileName)
{
}
ICSharpCodePage page;
// the redraw should get new add-in tree information
// and update the view, the language or layout manager
// may have changed.
public override void RedrawContent()
{
}
// Dispose all controls contained in this panel
public override void Dispose()
{
try {
webBrowser.Dispose();
} catch {}
}
string curSection = "Start";
ICSharpCodePage page = new ICSharpCodePage();
// Default constructor: Initialize controls and display recent projects.
public StartPageView()
{
webBrowser = new WebBrowser();
webBrowser.Dock = DockStyle.Fill;
webBrowser.DocumentText = page.Render(curSection);
webBrowser.Navigating += new WebBrowserNavigatingEventHandler(HtmlControlBeforeNavigate);
// Description of the tab shown in #develop
TitleName = StringParser.Parse("${res:StartPage.StartPageContentName}");
ProjectService.SolutionLoaded += new SolutionEventHandler(HandleCombineOpened);
}
void HandleCombineOpened(object sender, SolutionEventArgs e)
{
WorkbenchWindow.CloseWindow(true);
}
void HtmlControlBeforeNavigate(object sender, WebBrowserNavigatingEventArgs e)
public void InterceptNavigate(HtmlViewPane pane, WebBrowserNavigatingEventArgs e)
{
e.Cancel = true;
// bug in webbrowser control?
string url = e.Url.AbsoluteUri.Replace("about:blank", "");
if (url.StartsWith("project://")) {
try {
ICSharpCode.Core.RecentOpen recOpen = (ICSharpCode.Core.RecentOpen)FileService.RecentOpen;
string prjNumber = e.Url.AbsoluteUri.Substring("project://".Length);
prjNumber = prjNumber.Substring(0, prjNumber.Length - 1);
string projectFile = page.projectFiles[int.Parse(prjNumber)];
FileUtility.ObservedLoad(new NamedFileOperationDelegate(ProjectService.LoadSolution), projectFile);
} catch (Exception ex) {
MessageBox.Show("Could not access project service or load project:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} else if (url.EndsWith("/opencombine")) {
OpenBtnClicked(this, EventArgs.Empty);
} else if (url.EndsWith("/newcombine")) {
NewBtnClicked(this, EventArgs.Empty);
} else if (url.EndsWith("/newcombine")) {
NewBtnClicked(this, EventArgs.Empty);
} else if (url.EndsWith("/opensection")) {
Regex section = new Regex(@".*/(?<section>.+)/opensection", RegexOptions.Compiled);
Match match = section.Match(e.Url.AbsoluteUri);
if (match.Success) {
curSection = match.Result("${section}");
webBrowser.DocumentText = page.Render(curSection);
}
} else {
System.Diagnostics.Process.Start(e.Url.AbsoluteUri);
if (page == null) {
page = new ICSharpCodePage();
page.Title = ICSharpCode.Core.StringParser.Parse("${res:StartPage.StartPageContentName}");
}
e.Cancel = true;
}
public void OpenBtnClicked(object sender, EventArgs e)
{
try {
ICSharpCode.SharpDevelop.Project.Commands.LoadSolution cmd = new ICSharpCode.SharpDevelop.Project.Commands.LoadSolution();
cmd.Run();
} catch (Exception ex) {
MessageBox.Show("Could not access command:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void NewBtnClicked(object sender, EventArgs e)
{
try {
ICSharpCode.SharpDevelop.Project.Commands.CreateNewSolution cmd = new ICSharpCode.SharpDevelop.Project.Commands.CreateNewSolution();
cmd.Run();
} catch (Exception ex) {
MessageBox.Show("Could not access command:\n\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
string host = e.Url.Host;
if (host == "project") {
string projectFile = page.projectFiles[int.Parse(e.Url.LocalPath.Trim('/'))];
FileUtility.ObservedLoad(new NamedFileOperationDelegate(ProjectService.LoadSolution), projectFile);
} else if (host == "opencombine") {
new ICSharpCode.SharpDevelop.Project.Commands.LoadSolution().Run();
} else if (host == "newcombine") {
new ICSharpCode.SharpDevelop.Project.Commands.CreateNewSolution().Run();
} else {
pane.WebBrowser.DocumentText = page.Render(host);
}
}
}

5
src/AddIns/Misc/StartPage/Project/StartPage.addin

@ -25,4 +25,9 @@ @@ -25,4 +25,9 @@
<Class id = "ShowStartPageCommand"
class = "ICSharpCode.StartPage.ShowStartPageCommand"/>
</Path>
<Path name = "/SharpDevelop/Views/Browser/SchemeExtensions">
<BrowserSchemeExtension id = "startpage"
class = "ICSharpCode.StartPage.StartPageScheme"/>
</Path>
</AddIn>

1
src/AddIns/Misc/StartPage/Project/StartPage.csproj

@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
<NoConfig>False</NoConfig>
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.StartPage</RootNamespace>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -646,6 +646,8 @@ @@ -646,6 +646,8 @@
<Compile Include="Src\Dom\Implementations\ArrayReturnType.cs" />
<Compile Include="Src\Dom\Implementations\SpecificReturnType.cs" />
<Compile Include="Src\Dom\LanguageProperties.cs" />
<Compile Include="Src\Gui\BrowserDisplayBinding\SchemeExtension.cs" />
<Compile Include="Src\Gui\BrowserDisplayBinding\ExtendedWebBrowser.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

13
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserDisplayBinding.cs

@ -21,7 +21,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -21,7 +21,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
{
public bool CanCreateContentForFile(string fileName)
{
return fileName.StartsWith("http") || fileName.StartsWith("ftp");
return fileName.StartsWith("http:")
|| fileName.StartsWith("https:")
|| fileName.StartsWith("ftp:")
|| fileName.StartsWith("browser:");
}
public bool CanCreateContentForLanguage(string language)
@ -32,13 +35,17 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -32,13 +35,17 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
public IViewContent CreateContentForFile(string fileName)
{
BrowserPane browserPane = new BrowserPane();
browserPane.Load(fileName);
if (fileName.StartsWith("browser:")) {
browserPane.Load(fileName.Substring("browser:".Length));
} else {
browserPane.Load(fileName);
}
return browserPane;
}
public IViewContent CreateContentForLanguage(string language, string content)
{
return null;
}
}
}
}

101
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/ExtendedWebBrowser.cs

@ -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);
}
}
}
}

77
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
@ -47,6 +48,11 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -47,6 +48,11 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
htmlViewPane.WebBrowser.DocumentTitleChanged += new EventHandler(TitleChange);
}
public BrowserPane(Uri uri) : this(true)
{
htmlViewPane.Navigate(uri);
}
public BrowserPane() : this(true)
{
}
@ -68,13 +74,17 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -68,13 +74,17 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
void TitleChange(object sender, EventArgs e)
{
TitleName = htmlViewPane.WebBrowser.DocumentTitle;
string title = htmlViewPane.WebBrowser.DocumentTitle;
if (title == null || title.Length == 0)
TitleName = "Browser";
else
TitleName = title;
}
}
public class HtmlViewPane : UserControl
{
WebBrowser webBrowser = null;
ExtendedWebBrowser webBrowser = null;
Panel topPanel = new Panel();
ToolBar toolBar = new ToolBar();
@ -82,7 +92,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -82,7 +92,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
// string lastUrl = null;
public WebBrowser WebBrowser {
public ExtendedWebBrowser WebBrowser {
get {
return webBrowser;
}
@ -141,21 +151,22 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -141,21 +151,22 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
topPanel.Controls.Add(urlTextBox);
}
}
webBrowser = new WebBrowser();
webBrowser = new ExtendedWebBrowser();
// axWebBrowser.BeginInit();
// if (showNavigation) {
// int height = 48;
// axWebBrowser.Location = new Point(0, height);
// axWebBrowser.Size = new Size(Width, Height - height);
// axWebBrowser.Size = new Size(Width, Height - height);
// axWebBrowser.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top;
// axWebBrowser.Dock = DockStyle.Fill;
// } else {
webBrowser.Dock = DockStyle.Fill;
webBrowser.Dock = DockStyle.Fill;
// }
webBrowser.DocumentTitleChanged += new EventHandler(TitleChange);
webBrowser.Navigating += WebBrowserNavigating;
webBrowser.NewWindowExtended += NewWindow;
webBrowser.Navigated += WebBrowserNavigated;
Controls.Add(webBrowser);
if (showNavigation) {
@ -165,14 +176,49 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -165,14 +176,49 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
// axWebBrowser.EndInit();
}
void TitleChange(object sender, EventArgs e)
void NewWindow(object sender, NewWindowExtendedEventArgs e)
{
e.Cancel = true;
WorkbenchSingleton.Workbench.ShowView(new BrowserPane(e.Url));
}
void WebBrowserNavigated(object sender, WebBrowserNavigatedEventArgs e)
{
urlTextBox.Text = webBrowser.Url.ToString();
}
static ArrayList descriptors;
void WebBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
urlTextBox.Text = webBrowser.DocumentTitle ;
try {
if (descriptors == null) {
AddInTreeNode treeNode = null;
try {
treeNode = AddInTree.GetTreeNode("/SharpDevelop/Views/Browser/SchemeExtensions");
} catch (Exception) {
}
if (treeNode != null) {
descriptors = treeNode.BuildChildItems(null);
} else {
descriptors = new ArrayList();
}
}
string scheme = e.Url.Scheme;
foreach (SchemeExtensionDescriptor descriptor in descriptors) {
if (string.Equals(scheme, descriptor.SchemeName, StringComparison.OrdinalIgnoreCase)) {
descriptor.InterceptNavigate(this, e);
}
}
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void KeyPressEvent(object sender, KeyPressEventArgs ex)
{
if (ex.KeyChar == '\r') {
ex.Handled = true;
Navigate(urlTextBox.Text);
}
}
@ -188,10 +234,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -188,10 +234,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
webBrowser.GoForward();
break;
case 2:
// webBrowser.Stop();
webBrowser.Stop();
break;
case 3:
// webBrowser.CtlRefresh();
webBrowser.Refresh();
break;
}
} catch (Exception) {
@ -202,5 +248,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -202,5 +248,10 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
{
webBrowser.Navigate(new Uri(name));
}
public void Navigate(Uri url)
{
webBrowser.Navigate(url);
}
}
}

59
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/SchemeExtension.cs

@ -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);
}
}
}

3
src/Main/Core/Project/Src/AddInTree/AddIn/Runtime.cs

@ -29,6 +29,9 @@ namespace ICSharpCode.Core @@ -29,6 +29,9 @@ namespace ICSharpCode.Core
public Assembly LoadedAssembly {
get {
if (loadedAssembly == null) {
#if DEBUG
Console.WriteLine("Loading addin " + assembly + "...");
#endif
if (assembly[0] == '/') {
loadedAssembly = System.Reflection.Assembly.Load(assembly.Substring(1));
} else {

1
src/Main/StartUp/Project/SharpDevelopMain.cs

@ -146,6 +146,7 @@ namespace ICSharpCode.SharpDevelop @@ -146,6 +146,7 @@ namespace ICSharpCode.SharpDevelop
AddInTree.Erbauer.Add("Parser", new ParserErbauer());
AddInTree.Erbauer.Add("EditAction", new ICSharpCode.SharpDevelop.DefaultEditor.Codons.EditActionErbauer());
AddInTree.Erbauer.Add("SyntaxMode", new ICSharpCode.SharpDevelop.DefaultEditor.Codons.SyntaxModeErbauer());
AddInTree.Erbauer.Add("BrowserSchemeExtension", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionErbauer());
PropertyService.Load();

Loading…
Cancel
Save