|
|
|
@ -12,43 +12,32 @@ namespace HtmlHelp2
@@ -12,43 +12,32 @@ namespace HtmlHelp2
|
|
|
|
|
using System.Windows.Forms; |
|
|
|
|
using System.Reflection; |
|
|
|
|
using System.IO; |
|
|
|
|
using ICSharpCode.Core.AddIns; |
|
|
|
|
using ICSharpCode.Core.AddIns.Codons; |
|
|
|
|
using System.Xml; |
|
|
|
|
using ICSharpCode.Core; |
|
|
|
|
using ICSharpCode.SharpDevelop; |
|
|
|
|
using ICSharpCode.SharpDevelop.Gui; |
|
|
|
|
using ICSharpCode.Core.Services; |
|
|
|
|
using ICSharpCode.SharpDevelop.BrowserDisplayBinding; |
|
|
|
|
using ICSharpCode.SharpDevelop.Services; |
|
|
|
|
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
|
|
|
|
using ICSharpCode.SharpDevelop.Dom; |
|
|
|
|
using ICSharpCode.TextEditor; |
|
|
|
|
using HtmlHelp2Service; |
|
|
|
|
using HtmlHelp2Browser; |
|
|
|
|
using MSHelpServices; |
|
|
|
|
using mshtml; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Note: The dynamic help is disabled at the moment. Technically it's |
|
|
|
|
* possible. You can patch the default editor, trying to integrate the |
|
|
|
|
* dynamic help. :o) But if you are doing so, don't forget to use the |
|
|
|
|
* second version of "HtmlHelp2.addin", located in the "DynamicHelpResources" |
|
|
|
|
* folder. |
|
|
|
|
* |
|
|
|
|
* Mathias. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
public class ShowDynamicHelpMenuCommand : AbstractMenuCommand |
|
|
|
|
{ |
|
|
|
|
public override void Run() |
|
|
|
|
{ |
|
|
|
|
HtmlHelp2DynamicHelpPad dynamicHelp = (HtmlHelp2DynamicHelpPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2DynamicHelpPad)); |
|
|
|
|
PadDescriptor dynamicHelp = WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2DynamicHelpPad)); |
|
|
|
|
if(dynamicHelp != null) dynamicHelp.BringPadToFront(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class HtmlHelp2DynamicHelpPad : AbstractPadContent |
|
|
|
|
{ |
|
|
|
|
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; |
|
|
|
|
HtmlHelp2Environment h2env = null; |
|
|
|
|
int internalIndex = 0; |
|
|
|
|
private int internalIndex = 0; |
|
|
|
|
private string lastDynamicHelpWord = String.Empty; |
|
|
|
|
|
|
|
|
|
public override Control Control |
|
|
|
|
{ |
|
|
|
@ -71,25 +60,26 @@ namespace HtmlHelp2
@@ -71,25 +60,26 @@ namespace HtmlHelp2
|
|
|
|
|
dynamicHelpBrowser.RedrawContent(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public HtmlHelp2DynamicHelpPad() : base("${res:AddIns.HtmlHelp2.DynamicHelp}", "HtmlHelp2.16x16.DynamicHelp") |
|
|
|
|
public HtmlHelp2DynamicHelpPad() |
|
|
|
|
{ |
|
|
|
|
h2env = (HtmlHelp2Environment)ServiceManager.Services.GetService(typeof(HtmlHelp2Environment)); |
|
|
|
|
dynamicHelpBrowser = new HtmlHelp2DynamicHelpBrowserControl(); |
|
|
|
|
ParserService.ParserUpdateStepFinished += UpdateTick; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#region WebBrowser Scripting
|
|
|
|
|
public void BuildDynamicHelpList(string dynamicHelpString, string expectedLanguage) |
|
|
|
|
{ |
|
|
|
|
if(h2env == null || !h2env.Help2EnvironmentIsReady || h2env.DynamicHelpIsBusy) { |
|
|
|
|
if(!HtmlHelp2Environment.IsReady || HtmlHelp2Environment.DynamicHelpIsBusy) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.BringPadToFront(); |
|
|
|
|
if(String.Compare(dynamicHelpString, this.lastDynamicHelpWord) == 0) return; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
this.RemoveAllChildren(); |
|
|
|
|
|
|
|
|
|
Cursor.Current = Cursors.WaitCursor; |
|
|
|
|
IHxTopicList topics = h2env.GetMatchingTopicsForDynamicHelp(dynamicHelpString); |
|
|
|
|
IHxTopicList topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(dynamicHelpString); |
|
|
|
|
Cursor.Current = Cursors.Default; |
|
|
|
|
|
|
|
|
|
if(topics.Count > 0) { |
|
|
|
@ -103,6 +93,8 @@ namespace HtmlHelp2
@@ -103,6 +93,8 @@ namespace HtmlHelp2
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.lastDynamicHelpWord = dynamicHelpString; |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
@ -111,7 +103,7 @@ namespace HtmlHelp2
@@ -111,7 +103,7 @@ namespace HtmlHelp2
|
|
|
|
|
private void RemoveAllChildren() |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
dynamicHelpBrowser.Document.body.innerHTML = ""; |
|
|
|
|
dynamicHelpBrowser.Document.Body.InnerHtml = ""; |
|
|
|
|
this.internalIndex = 0; |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
@ -120,201 +112,277 @@ namespace HtmlHelp2
@@ -120,201 +112,277 @@ namespace HtmlHelp2
|
|
|
|
|
|
|
|
|
|
private void BuildNewChild(string sectionName, string topicName, string topicUrl) |
|
|
|
|
{ |
|
|
|
|
mshtml.IHTMLElementCollection children = (mshtml.IHTMLElementCollection)((mshtml.IHTMLElement2)dynamicHelpBrowser.Document.body).getElementsByTagName("span"); |
|
|
|
|
for(int i = 0; i < children.length; i++) { |
|
|
|
|
mshtml.IHTMLElement span = (mshtml.IHTMLElement)children.item(i,0); |
|
|
|
|
|
|
|
|
|
if((string)span.getAttribute("className", 0) == "section") { |
|
|
|
|
try { |
|
|
|
|
mshtml.IHTMLElementCollection spanChildren = (mshtml.IHTMLElementCollection)span.children; |
|
|
|
|
mshtml.IHTMLElement firstChild = (mshtml.IHTMLElement)spanChildren.item(1,0); |
|
|
|
|
mshtml.IHTMLElement spanChild = (mshtml.IHTMLElement)spanChildren.item(3,0); |
|
|
|
|
|
|
|
|
|
if(firstChild.tagName == "B" && firstChild.innerText == sectionName) { |
|
|
|
|
if(spanChild.tagName == "SPAN" && (string)spanChild.getAttribute("className", 0) == "content") { |
|
|
|
|
spanChild.insertAdjacentHTML("beforeEnd", |
|
|
|
|
String.Format("<span class=\"link\" onmouseover=\"window.status='{0}'\" onmouseout=\"window.status=''\" onclick=\"Click('{0}');\">{1}</span><br>", |
|
|
|
|
topicUrl, topicName) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
try { |
|
|
|
|
HtmlElementCollection children = dynamicHelpBrowser.Document.Body.GetElementsByTagName("span"); |
|
|
|
|
|
|
|
|
|
if(children.Count > 0) { |
|
|
|
|
foreach(HtmlElement elem in children) { |
|
|
|
|
if(elem.GetAttribute("className") == "section") { |
|
|
|
|
try { |
|
|
|
|
HtmlElement sectionBlock = elem.FirstChild.NextSibling; |
|
|
|
|
HtmlElement contentSpan = sectionBlock.NextSibling.NextSibling; |
|
|
|
|
|
|
|
|
|
if(sectionBlock.TagName == "B" && sectionBlock.InnerText == sectionName && |
|
|
|
|
contentSpan.TagName == "SPAN" && contentSpan.GetAttribute("className") == "content") |
|
|
|
|
{ |
|
|
|
|
contentSpan.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
contentSpan.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
finally { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
this.CreateABreak()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
HtmlElement linkContent = null; |
|
|
|
|
HtmlElement htmlSection = this.CreateNewSection(sectionName, out linkContent); |
|
|
|
|
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, htmlSection); |
|
|
|
|
linkContent.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
linkContent.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
this.internalIndex++; |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private HtmlElement CreateNewSection(string sectionName, out HtmlElement linkNode) |
|
|
|
|
{ |
|
|
|
|
HtmlElement span = null; |
|
|
|
|
linkNode = null; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
if(children.length > 0) { |
|
|
|
|
dynamicHelpBrowser.Document.body.insertAdjacentHTML("beforeEnd", "<br>"); |
|
|
|
|
} |
|
|
|
|
span = dynamicHelpBrowser.Document.CreateElement("span"); |
|
|
|
|
span.SetAttribute("className", "section"); |
|
|
|
|
|
|
|
|
|
HtmlElement img = dynamicHelpBrowser.Document.CreateElement("img"); |
|
|
|
|
img.Style = "width:16px;height:16px;margin-right:5px"; |
|
|
|
|
img.Id = String.Format("image_{0}", this.internalIndex.ToString()); |
|
|
|
|
img.SetAttribute("src", "OpenBook.png"); |
|
|
|
|
span.AppendChild(img); |
|
|
|
|
|
|
|
|
|
HtmlElement b = dynamicHelpBrowser.Document.CreateElement("b"); |
|
|
|
|
b.InnerText = sectionName; |
|
|
|
|
b.Style = "cursor:pointer"; |
|
|
|
|
b.SetAttribute("title", this.internalIndex.ToString()); |
|
|
|
|
b.Click += new HtmlElementEventHandler(this.OnSectionClick); |
|
|
|
|
span.AppendChild(b); |
|
|
|
|
|
|
|
|
|
span.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
HtmlElement content = dynamicHelpBrowser.Document.CreateElement("span"); |
|
|
|
|
content.Id = String.Format("content_{0}", this.internalIndex.ToString()); |
|
|
|
|
content.SetAttribute("className", "content"); |
|
|
|
|
span.AppendChild(content); |
|
|
|
|
|
|
|
|
|
linkNode = content; |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dynamicHelpBrowser.Document.body.insertAdjacentHTML("beforeEnd", |
|
|
|
|
String.Format("<span class=\"section\"><img id=\"image_{0}\" src=\"OpenBook.png\" style=\"width:16px;height:16px;margin-right:5px;\">" + |
|
|
|
|
"<b style=\"cursor:pointer\" onclick=\"ExpandCollapse({0})\">{1}</b><br>" + |
|
|
|
|
"<span class=\"content\" id=\"content_{0}\">" + |
|
|
|
|
"<span class=\"link\" onmouseover=\"window.status='{2}'\" onmouseout=\"window.status=''\" onclick=\"Click('{2}');\">{3}</span><br></span></span>", |
|
|
|
|
this.internalIndex.ToString(), sectionName, topicUrl, topicName) |
|
|
|
|
); |
|
|
|
|
return span; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.internalIndex++; |
|
|
|
|
private HtmlElement CreateNewLink(string topicUrl, string topicName) |
|
|
|
|
{ |
|
|
|
|
HtmlElement span = null; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
span = dynamicHelpBrowser.Document.CreateElement("span"); |
|
|
|
|
span.InnerText = topicName; |
|
|
|
|
span.SetAttribute("className", "link"); |
|
|
|
|
span.SetAttribute("title", topicUrl); |
|
|
|
|
span.MouseOver += new HtmlElementEventHandler(OnMouseOver); |
|
|
|
|
span.MouseLeave += new HtmlElementEventHandler(OnMouseOut); |
|
|
|
|
span.Click += new HtmlElementEventHandler(OnLinkClick); |
|
|
|
|
} |
|
|
|
|
finally { |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return span; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private HtmlElement CreateABreak() |
|
|
|
|
{ |
|
|
|
|
HtmlElement br = dynamicHelpBrowser.Document.CreateElement("br"); |
|
|
|
|
return br; |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void OnMouseOver(object sender, HtmlElementEventArgs e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
StatusBarService.SetMessage(((HtmlElement)sender).GetAttribute("title")); |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void OnMouseOut(object sender, HtmlElementEventArgs e) |
|
|
|
|
{ |
|
|
|
|
StatusBarService.SetMessage(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void OnSectionClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
string sectionId = ((HtmlElement)sender).GetAttribute("title"); |
|
|
|
|
object[] objArray = new object[1]; |
|
|
|
|
objArray[0] = (object)sectionId; |
|
|
|
|
dynamicHelpBrowser.Document.InvokeScript("ExpandCollapse", objArray); |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void OnLinkClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
string url = ((HtmlElement)sender).GetAttribute("title"); |
|
|
|
|
if(url != null && url != String.Empty) ShowHelpBrowser.OpenHelpView(url); |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#region Taken from DefinitionView.cs
|
|
|
|
|
private void UpdateTick(object sender, ParserUpdateStepEventArgs e) |
|
|
|
|
{ |
|
|
|
|
// if (!this.IsVisible) return;
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
ResolveResult res = ResolveAtCaret(e); |
|
|
|
|
if (res == null || res.ResolvedType == null) return; |
|
|
|
|
WorkbenchSingleton.SafeThreadAsyncCall(this, |
|
|
|
|
"BuildDynamicHelpList", |
|
|
|
|
res.ResolvedType.FullyQualifiedName, |
|
|
|
|
""); |
|
|
|
|
// thanks again to Daniel and Robert
|
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e) |
|
|
|
|
{ |
|
|
|
|
IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow; |
|
|
|
|
if (window == null) return null; |
|
|
|
|
ITextEditorControlProvider provider = window.ActiveViewContent as ITextEditorControlProvider; |
|
|
|
|
if (provider == null) return null; |
|
|
|
|
TextEditorControl ctl = provider.TextEditorControl; |
|
|
|
|
|
|
|
|
|
// e might be null when this is a manually triggered update
|
|
|
|
|
string fileName = (e == null) ? ctl.FileName : e.FileName; |
|
|
|
|
if (ctl.FileName != fileName) return null; |
|
|
|
|
IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(fileName); |
|
|
|
|
if (expressionFinder == null) return null; |
|
|
|
|
Caret caret = ctl.ActiveTextAreaControl.Caret; |
|
|
|
|
string content = (e == null) ? ctl.Text : e.Content; |
|
|
|
|
ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset); |
|
|
|
|
if (expr.Expression == null) return null; |
|
|
|
|
|
|
|
|
|
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content); |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public class HtmlHelp2DynamicHelpBrowserControl : UserControl |
|
|
|
|
{ |
|
|
|
|
AxWebBrowser axWebBrowser = null; |
|
|
|
|
ToolBar dynamicHelpToolbar = new ToolBar(); |
|
|
|
|
mshtml.HTMLDocument doc = null; |
|
|
|
|
string[] toolbarButtons = new string[] { |
|
|
|
|
ExtendedWebBrowser axWebBrowser = new ExtendedWebBrowser(); |
|
|
|
|
ToolStrip dynamicHelpToolbar = new ToolStrip(); |
|
|
|
|
string[] toolbarButtons = new string[] { |
|
|
|
|
"${res:AddIns.HtmlHelp2.Contents}", |
|
|
|
|
"${res:AddIns.HtmlHelp2.Index}", |
|
|
|
|
"${res:AddIns.HtmlHelp2.Search}" |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
public mshtml.HTMLDocument Document |
|
|
|
|
public HtmlDocument Document |
|
|
|
|
{ |
|
|
|
|
get { |
|
|
|
|
return doc; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override void Dispose(bool disposing) |
|
|
|
|
{ |
|
|
|
|
if (doc != null) { |
|
|
|
|
mshtml.HTMLDocumentEvents2_Event docEvents = (mshtml.HTMLDocumentEvents2_Event)doc; |
|
|
|
|
docEvents.oncontextmenu -= new HTMLDocumentEvents2_oncontextmenuEventHandler(DocumentEventsOnContextMenu); |
|
|
|
|
int c = Marshal.ReleaseComObject(doc); |
|
|
|
|
doc = null; |
|
|
|
|
return axWebBrowser.Document; |
|
|
|
|
} |
|
|
|
|
base.Dispose(disposing); |
|
|
|
|
if (disposing) axWebBrowser.Dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void RedrawContent() |
|
|
|
|
{ |
|
|
|
|
StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService)); |
|
|
|
|
for(int i = 0; i < toolbarButtons.Length; i++) { |
|
|
|
|
dynamicHelpToolbar.Buttons[i].ToolTipText = sps.Parse(toolbarButtons[i]); |
|
|
|
|
dynamicHelpToolbar.Items[i].ToolTipText = StringParser.Parse(toolbarButtons[i]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public HtmlHelp2DynamicHelpBrowserControl() |
|
|
|
|
{ |
|
|
|
|
HtmlHelp2Environment h2env = (HtmlHelp2Environment)ServiceManager.Services.GetService(typeof(HtmlHelp2Environment)); |
|
|
|
|
bool Help2EnvIsReady = (h2env != null && h2env.Help2EnvironmentIsReady); |
|
|
|
|
|
|
|
|
|
Dock = DockStyle.Fill; |
|
|
|
|
Size = new Size(500, 500); |
|
|
|
|
|
|
|
|
|
axWebBrowser = new AxWebBrowser(); |
|
|
|
|
axWebBrowser.BeginInit(); |
|
|
|
|
axWebBrowser.Dock = DockStyle.Fill; |
|
|
|
|
axWebBrowser.Enabled = Help2EnvIsReady; |
|
|
|
|
axWebBrowser.HandleCreated += new EventHandler(this.CreatedWebBrowserHandle); |
|
|
|
|
axWebBrowser.NewWindow2 += new DWebBrowserEvents2_NewWindow2EventHandler(this.NewBrowserWindow); |
|
|
|
|
axWebBrowser.StatusTextChange += new DWebBrowserEvents2_StatusTextChangeEventHandler(this.StatusBarChanged); |
|
|
|
|
axWebBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.DocumentComplete); |
|
|
|
|
axWebBrowser.EndInit(); |
|
|
|
|
this.InitializeComponents(); |
|
|
|
|
this.LoadDynamicHelpPage(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void InitializeComponents() |
|
|
|
|
{ |
|
|
|
|
Dock = DockStyle.Fill; |
|
|
|
|
Size = new Size(500, 500); |
|
|
|
|
|
|
|
|
|
Controls.Add(axWebBrowser); |
|
|
|
|
axWebBrowser.Dock = DockStyle.Fill; |
|
|
|
|
axWebBrowser.WebBrowserShortcutsEnabled = false; |
|
|
|
|
axWebBrowser.IsWebBrowserContextMenuEnabled = false; |
|
|
|
|
axWebBrowser.AllowWebBrowserDrop = false; |
|
|
|
|
|
|
|
|
|
Controls.Add(dynamicHelpToolbar); |
|
|
|
|
dynamicHelpToolbar.Dock = DockStyle.Top; |
|
|
|
|
dynamicHelpToolbar.Appearance = ToolBarAppearance.Flat; |
|
|
|
|
dynamicHelpToolbar.Divider = false; |
|
|
|
|
dynamicHelpToolbar.ButtonClick += new ToolBarButtonClickEventHandler(ToolBarButtonClicked); |
|
|
|
|
|
|
|
|
|
StringParserService sps = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService)); |
|
|
|
|
dynamicHelpToolbar.Dock = DockStyle.Top; |
|
|
|
|
dynamicHelpToolbar.AllowItemReorder = false; |
|
|
|
|
for(int i = 0; i < toolbarButtons.Length; i++) { |
|
|
|
|
ToolBarButton button = new ToolBarButton(); |
|
|
|
|
button.ToolTipText = sps.Parse(toolbarButtons[i]); |
|
|
|
|
button.ImageIndex = i; |
|
|
|
|
dynamicHelpToolbar.Buttons.Add(button); |
|
|
|
|
ToolStripButton button = new ToolStripButton(); |
|
|
|
|
button.ToolTipText = StringParser.Parse(toolbarButtons[i]); |
|
|
|
|
button.ImageIndex = i; |
|
|
|
|
button.Click += new EventHandler(this.ToolStripButtonClicked); |
|
|
|
|
|
|
|
|
|
dynamicHelpToolbar.Items.Add(button); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dynamicHelpToolbar.ImageList = new ImageList(); |
|
|
|
|
dynamicHelpToolbar.ImageList = new ImageList(); |
|
|
|
|
dynamicHelpToolbar.ImageList.ColorDepth = ColorDepth.Depth32Bit; |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetImage("HtmlHelp2.16x16.Toc")); |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetImage("HtmlHelp2.16x16.Index")); |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetImage("HtmlHelp2.16x16.Search")); |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Toc.png")); |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Index.png")); |
|
|
|
|
dynamicHelpToolbar.ImageList.Images.Add(ResourcesHelper.GetBitmap("HtmlHelp2.16x16.Search.png")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void CreatedWebBrowserHandle(object sender, EventArgs evArgs) |
|
|
|
|
private void LoadDynamicHelpPage() |
|
|
|
|
{ |
|
|
|
|
object arg = System.Reflection.Missing.Value; |
|
|
|
|
try { |
|
|
|
|
string url = "about:blank"; |
|
|
|
|
string url = String.Format("{0}\\context.html", |
|
|
|
|
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); |
|
|
|
|
|
|
|
|
|
if(File.Exists(String.Format("{0}\\context.html",Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)))) { |
|
|
|
|
url = String.Format("file://{0}\\context.html",Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); |
|
|
|
|
} |
|
|
|
|
axWebBrowser.Navigate(url, ref arg, ref arg, ref arg, ref arg); |
|
|
|
|
} catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void NewBrowserWindow(object sender, DWebBrowserEvents2_NewWindow2Event e) |
|
|
|
|
{ |
|
|
|
|
HtmlHelp2BrowserPane help2Browser = ShowHelpBrowser.GetActiveHelp2BrowserView(); |
|
|
|
|
help2Browser.WorkbenchWindow.SelectWindow(); |
|
|
|
|
AxWebBrowser newBrowser = (AxWebBrowser)((HtmlHelp2BrowserControl)help2Browser.Control).AxWebBrowser; |
|
|
|
|
e.ppDisp = newBrowser.Application; |
|
|
|
|
newBrowser.RegisterAsBrowser = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void DocumentComplete(object sender, DWebBrowserEvents2_DocumentCompleteEvent e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
mshtml.HTMLDocumentEvents2_Event docEvents; |
|
|
|
|
if (doc != null) { |
|
|
|
|
docEvents = (mshtml.HTMLDocumentEvents2_Event)doc; |
|
|
|
|
docEvents.oncontextmenu -= new HTMLDocumentEvents2_oncontextmenuEventHandler(DocumentEventsOnContextMenu); |
|
|
|
|
Marshal.ReleaseComObject(doc); |
|
|
|
|
} |
|
|
|
|
doc = (mshtml.HTMLDocument)axWebBrowser.Document; |
|
|
|
|
docEvents = (mshtml.HTMLDocumentEvents2_Event)doc; |
|
|
|
|
docEvents.oncontextmenu += new HTMLDocumentEvents2_oncontextmenuEventHandler(DocumentEventsOnContextMenu); |
|
|
|
|
if(!File.Exists(url)) url = "about:blank"; |
|
|
|
|
axWebBrowser.Navigate(url); |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void StatusBarChanged(object sender, DWebBrowserEvents2_StatusTextChangeEvent e) |
|
|
|
|
private void ToolStripButtonClicked(object sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
IStatusBarService statusBarService = (IStatusBarService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IStatusBarService)); |
|
|
|
|
statusBarService.SetMessage(e.text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private bool DocumentEventsOnContextMenu(IHTMLEventObj e) |
|
|
|
|
{ |
|
|
|
|
e.cancelBubble = true; |
|
|
|
|
e.returnValue = false; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void ToolBarButtonClicked(object sender, ToolBarButtonClickEventArgs e) |
|
|
|
|
{ |
|
|
|
|
switch(dynamicHelpToolbar.Buttons.IndexOf(e.Button)) { |
|
|
|
|
ToolStripItem item = (ToolStripItem)sender; |
|
|
|
|
PadDescriptor pad = null; |
|
|
|
|
|
|
|
|
|
switch(item.ImageIndex) { |
|
|
|
|
case 0: |
|
|
|
|
HtmlHelp2TocPad toc = (HtmlHelp2TocPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2TocPad)); |
|
|
|
|
if(toc != null) toc.BringPadToFront(); |
|
|
|
|
pad = WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2TocPad)); |
|
|
|
|
break; |
|
|
|
|
case 1: |
|
|
|
|
HtmlHelp2IndexPad index = (HtmlHelp2IndexPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2IndexPad)); |
|
|
|
|
if(index != null) index.BringPadToFront(); |
|
|
|
|
pad = WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2IndexPad)); |
|
|
|
|
break; |
|
|
|
|
case 2: |
|
|
|
|
HtmlHelp2SearchPad search = (HtmlHelp2SearchPad)WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2SearchPad)); |
|
|
|
|
if(search != null) search.BringPadToFront(); |
|
|
|
|
pad = WorkbenchSingleton.Workbench.GetPad(typeof(HtmlHelp2SearchPad)); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(pad != null) pad.BringPadToFront(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|