|
|
@ -27,11 +27,9 @@ namespace HtmlHelp2 |
|
|
|
using HtmlHelp2.Environment; |
|
|
|
using HtmlHelp2.Environment; |
|
|
|
using HtmlHelp2.ResourcesHelperClass; |
|
|
|
using HtmlHelp2.ResourcesHelperClass; |
|
|
|
using MSHelpServices; |
|
|
|
using MSHelpServices; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: detect the active language (CSharp, VB#, ...) to limit the results
|
|
|
|
|
|
|
|
// TODO: if there are no DH results, implement Keyword search (index)
|
|
|
|
// TODO: if there are no DH results, implement Keyword search (index)
|
|
|
|
// TODO: insert some default entries (Homepage, Wiki, Community, ...)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class ShowDynamicHelpMenuCommand : AbstractMenuCommand |
|
|
|
public class ShowDynamicHelpMenuCommand : AbstractMenuCommand |
|
|
@ -46,10 +44,10 @@ namespace HtmlHelp2 |
|
|
|
public class HtmlHelp2DynamicHelpPad : AbstractPadContent |
|
|
|
public class HtmlHelp2DynamicHelpPad : AbstractPadContent |
|
|
|
{ |
|
|
|
{ |
|
|
|
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; |
|
|
|
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; |
|
|
|
private int internalIndex = 0; |
|
|
|
private StringCollection dynamicHelpTerms = new StringCollection(); |
|
|
|
private StringCollection dynamicHelpTerms = new StringCollection(); |
|
|
|
private string debugPreElement = String.Empty; |
|
|
|
private string debugPreElement = String.Empty; |
|
|
|
private bool enableDebugInfo = true; |
|
|
|
private bool enableDebugInfo = false; |
|
|
|
private Dictionary<string, string>languages = new Dictionary<string, string>(); |
|
|
|
|
|
|
|
|
|
|
|
public override Control Control |
|
|
|
public override Control Control |
|
|
|
{ |
|
|
|
{ |
|
|
@ -73,6 +71,11 @@ namespace HtmlHelp2 |
|
|
|
PropertyPad.SelectedObjectChanged += new EventHandler(this.FormsDesignerSelectedObjectChanged); |
|
|
|
PropertyPad.SelectedObjectChanged += new EventHandler(this.FormsDesignerSelectedObjectChanged); |
|
|
|
PropertyPad.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(this.FormsDesignerSelectedGridItemChanged); |
|
|
|
PropertyPad.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(this.FormsDesignerSelectedGridItemChanged); |
|
|
|
ProjectService.SolutionClosed += new EventHandler(this.SolutionClosed); |
|
|
|
ProjectService.SolutionClosed += new EventHandler(this.SolutionClosed); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// I needed to patch SharpDevelop's current project language because
|
|
|
|
|
|
|
|
// the .NET Framework SDK documents use other names
|
|
|
|
|
|
|
|
languages.Add("C#", "CSharp"); |
|
|
|
|
|
|
|
languages.Add("VBNet", "VB"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#region WebBrowser Scripting
|
|
|
|
#region WebBrowser Scripting
|
|
|
@ -80,15 +83,29 @@ namespace HtmlHelp2 |
|
|
|
{ |
|
|
|
{ |
|
|
|
if(this.dynamicHelpTerms.Count == 0) return; |
|
|
|
if(this.dynamicHelpTerms.Count == 0) return; |
|
|
|
this.RemoveAllChildren(); |
|
|
|
this.RemoveAllChildren(); |
|
|
|
this.debugPreElement = String.Empty; |
|
|
|
this.debugPreElement = String.Empty; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string tempLanguage = String.Empty; |
|
|
|
|
|
|
|
if(languages.ContainsKey(expectedLanguage)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(!languages.TryGetValue(expectedLanguage, out tempLanguage)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
tempLanguage = String.Empty; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Cursor.Current = Cursors.WaitCursor; |
|
|
|
Cursor.Current = Cursors.WaitCursor; |
|
|
|
foreach(string currentHelpTerm in dynamicHelpTerms) |
|
|
|
foreach(string currentHelpTerm in dynamicHelpTerms) |
|
|
|
{ |
|
|
|
{ |
|
|
|
this.CallDynamicHelp(currentHelpTerm, expectedLanguage, false); |
|
|
|
this.CallDynamicHelp(currentHelpTerm, tempLanguage, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
dynamicHelpBrowser.BuildDefaultHelpEntries(); |
|
|
|
Cursor.Current = Cursors.Default; |
|
|
|
Cursor.Current = Cursors.Default; |
|
|
|
if(this.enableDebugInfo) this.CreateDebugPre(); |
|
|
|
|
|
|
|
|
|
|
|
this.debugPreElement += String.Format("<br>Current project language: {0}", |
|
|
|
|
|
|
|
(tempLanguage==String.Empty)?expectedLanguage:tempLanguage); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(this.enableDebugInfo) dynamicHelpBrowser.CreateDebugPre(this.debugPreElement); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private bool CallDynamicHelp(string searchTerm, string expectedLanguage, bool keywordSearch) |
|
|
|
private bool CallDynamicHelp(string searchTerm, string expectedLanguage, bool keywordSearch) |
|
|
@ -114,201 +131,29 @@ namespace HtmlHelp2 |
|
|
|
List<IHxTopic> newTopics = this.SortTopics(topics); |
|
|
|
List<IHxTopic> newTopics = this.SortTopics(topics); |
|
|
|
foreach(IHxTopic topic in newTopics) |
|
|
|
foreach(IHxTopic topic in newTopics) |
|
|
|
{ |
|
|
|
{ |
|
|
|
this.BuildNewChild(topic.Location, |
|
|
|
if(expectedLanguage == String.Empty || topic.HasAttribute("DevLang", expectedLanguage)) |
|
|
|
topic.get_Title(HxTopicGetTitleType.HxTopicGetTOCTitle, |
|
|
|
|
|
|
|
HxTopicGetTitleDefVal.HxTopicGetTitleFileName), |
|
|
|
|
|
|
|
topic.URL); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void RemoveAllChildren() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.internalIndex = 0; |
|
|
|
|
|
|
|
dynamicHelpBrowser.RemoveAllChildren(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void BuildNewChild(string sectionName, string topicName, string topicUrl) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElementCollection children = dynamicHelpBrowser.Document.Body.GetElementsByTagName("span"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(children.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach(HtmlElement elem in children) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if(elem.GetAttribute("className") == "section") |
|
|
|
this.BuildNewChild(topic.Location, |
|
|
|
{ |
|
|
|
topic.get_Title(HxTopicGetTitleType.HxTopicGetTOCTitle, |
|
|
|
HtmlElement sectionBlock = elem.FirstChild.NextSibling; |
|
|
|
HxTopicGetTitleDefVal.HxTopicGetTitleFileName), |
|
|
|
HtmlElement contentSpan = sectionBlock.NextSibling.NextSibling; |
|
|
|
topic.URL); |
|
|
|
|
|
|
|
|
|
|
|
if(sectionBlock.TagName == "B" && sectionBlock.InnerText == sectionName && |
|
|
|
|
|
|
|
contentSpan.TagName == "SPAN" && contentSpan.GetAttribute("className") == "content") |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(!this.DoesLinkExist(contentSpan, topicName, topicUrl)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
contentSpan.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
|
|
|
contentSpan.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
HtmlElement linkContent = null; |
|
|
|
|
|
|
|
HtmlElement htmlSection = this.CreateNewSection(sectionName, out linkContent); |
|
|
|
|
|
|
|
dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, htmlSection); |
|
|
|
|
|
|
|
linkContent.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
|
|
|
linkContent.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.internalIndex++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LoggingService.Error("Help 2.0: cannot build node for dynamic help; " + ex.ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateNewSection(string sectionName, out HtmlElement linkNode) |
|
|
|
private void BuildNewChild(string sectionName, string topicName, string topicUrl) |
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement span = null; |
|
|
|
|
|
|
|
linkNode = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
span = dynamicHelpBrowser.CreateHtmlElement("span"); |
|
|
|
|
|
|
|
span.SetAttribute("className", "section"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement img = dynamicHelpBrowser.CreateHtmlElement("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.CreateHtmlElement("b"); |
|
|
|
|
|
|
|
b.InnerText = sectionName; |
|
|
|
|
|
|
|
b.Style = "cursor:pointer"; |
|
|
|
|
|
|
|
b.Id = this.internalIndex.ToString(); |
|
|
|
|
|
|
|
b.Click += new HtmlElementEventHandler(this.OnSectionClick); |
|
|
|
|
|
|
|
span.AppendChild(b); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
span.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement content = dynamicHelpBrowser.CreateHtmlElement("span"); |
|
|
|
|
|
|
|
content.Id = String.Format("content_{0}", this.internalIndex.ToString()); |
|
|
|
|
|
|
|
content.SetAttribute("className", "content"); |
|
|
|
|
|
|
|
span.AppendChild(content); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linkNode = content; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return span; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateNewLink(string topicUrl, string topicName) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement span = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
span = dynamicHelpBrowser.CreateHtmlElement("a"); |
|
|
|
|
|
|
|
span.InnerText = topicName; |
|
|
|
|
|
|
|
span.SetAttribute("src", topicUrl); |
|
|
|
|
|
|
|
span.SetAttribute("className", "link"); |
|
|
|
|
|
|
|
span.SetAttribute("title", topicName); |
|
|
|
|
|
|
|
span.Click += new HtmlElementEventHandler(OnLinkClick); |
|
|
|
|
|
|
|
span.MouseOver += new HtmlElementEventHandler(OnMouseOver); |
|
|
|
|
|
|
|
span.MouseLeave += new HtmlElementEventHandler(OnMouseOut); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return span; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateABreak() |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
HtmlElement br = null; |
|
|
|
dynamicHelpBrowser.BuildNewChild(sectionName, topicName, topicUrl); |
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
br = dynamicHelpBrowser.CreateHtmlElement("br"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return br; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private bool DoesLinkExist(HtmlElement parentNode, string topicName, string topicUrl) |
|
|
|
private void RemoveAllChildren() |
|
|
|
{ |
|
|
|
{ |
|
|
|
try |
|
|
|
dynamicHelpBrowser.RemoveAllChildren(); |
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElementCollection allLinks = parentNode.GetElementsByTagName("a"); |
|
|
|
|
|
|
|
if(allLinks.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach(HtmlElement link in allLinks) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(String.Compare(topicName, link.InnerText) == 0 && |
|
|
|
|
|
|
|
String.Compare(topicUrl, link.GetAttribute("src")) == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch { } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
private void OnMouseOver(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StatusBarService.SetMessage(((HtmlElement)sender).GetAttribute("src")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnMouseOut(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StatusBarService.SetMessage(""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnSectionClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string sectionId = ((HtmlElement)sender).Id; |
|
|
|
|
|
|
|
object[] objArray = new object[1]; |
|
|
|
|
|
|
|
objArray[0] = (object)sectionId; |
|
|
|
|
|
|
|
dynamicHelpBrowser.Document.InvokeScript("ExpandCollapse", objArray); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LoggingService.Error("Help 2.0: cannot run script; " + ex.ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnLinkClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string url = ((HtmlElement)sender).GetAttribute("src"); |
|
|
|
|
|
|
|
if(url != null && url != String.Empty) ShowHelpBrowser.OpenHelpView(url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Taken from DefinitionView.cs
|
|
|
|
#region Taken from DefinitionView.cs
|
|
|
|
private void UpdateTick(object sender, ParserUpdateStepEventArgs e) |
|
|
|
private void UpdateTick(object sender, ParserUpdateStepEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -344,7 +189,9 @@ namespace HtmlHelp2 |
|
|
|
this.AddToStringCollection(0, types.ResolvedClass.FullyQualifiedName); |
|
|
|
this.AddToStringCollection(0, types.ResolvedClass.FullyQualifiedName); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
WorkbenchSingleton.SafeThreadAsyncCall(this, "BuildDynamicHelpList", ""); |
|
|
|
WorkbenchSingleton.SafeThreadAsyncCall(this, |
|
|
|
|
|
|
|
"BuildDynamicHelpList", |
|
|
|
|
|
|
|
ProjectService.CurrentProject.Language); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e) |
|
|
|
private ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e) |
|
|
@ -397,28 +244,9 @@ namespace HtmlHelp2 |
|
|
|
} |
|
|
|
} |
|
|
|
this.AddToStringCollection(myObject.FullName); |
|
|
|
this.AddToStringCollection(myObject.FullName); |
|
|
|
|
|
|
|
|
|
|
|
WorkbenchSingleton.SafeThreadAsyncCall(this, "BuildDynamicHelpList", ""); |
|
|
|
WorkbenchSingleton.SafeThreadAsyncCall(this, |
|
|
|
} |
|
|
|
"BuildDynamicHelpList", |
|
|
|
#endregion
|
|
|
|
ProjectService.CurrentProject.Language); |
|
|
|
|
|
|
|
|
|
|
|
#region DebugInfo
|
|
|
|
|
|
|
|
private void CreateDebugPre() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(this.debugPreElement == String.Empty) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement pre = dynamicHelpBrowser.CreateHtmlElement("pre"); |
|
|
|
|
|
|
|
pre.InnerHtml = "--- Dynamic Help Debug ---<br>" + this.debugPreElement; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, pre); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
@ -495,34 +323,13 @@ namespace HtmlHelp2 |
|
|
|
{ |
|
|
|
{ |
|
|
|
WebBrowser axWebBrowser = new WebBrowser(); |
|
|
|
WebBrowser axWebBrowser = new WebBrowser(); |
|
|
|
ToolStrip dynamicHelpToolbar = new ToolStrip(); |
|
|
|
ToolStrip dynamicHelpToolbar = new ToolStrip(); |
|
|
|
|
|
|
|
int internalIndex = 0; |
|
|
|
string[] toolbarButtons = new string[] { |
|
|
|
string[] toolbarButtons = new string[] { |
|
|
|
"${res:AddIns.HtmlHelp2.Contents}", |
|
|
|
"${res:AddIns.HtmlHelp2.Contents}", |
|
|
|
"${res:AddIns.HtmlHelp2.Index}", |
|
|
|
"${res:AddIns.HtmlHelp2.Index}", |
|
|
|
"${res:AddIns.HtmlHelp2.Search}" |
|
|
|
"${res:AddIns.HtmlHelp2.Search}" |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
public HtmlDocument Document |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return axWebBrowser.Document; } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void RemoveAllChildren() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InnerHtml = ""; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public HtmlElement CreateHtmlElement(string elementName) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement newElement = axWebBrowser.Document.CreateElement(elementName); |
|
|
|
|
|
|
|
return newElement; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void InsertHtmlElement(HtmlElementInsertionOrientation insertWhere, HtmlElement insertWhat) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(insertWhere, insertWhat); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void RedrawContent() |
|
|
|
public void RedrawContent() |
|
|
|
{ |
|
|
|
{ |
|
|
|
for(int i = 0; i < toolbarButtons.Length; i++) |
|
|
|
for(int i = 0; i < toolbarButtons.Length; i++) |
|
|
@ -610,6 +417,242 @@ namespace HtmlHelp2 |
|
|
|
private void NamespaceReloaded(object sender, EventArgs e) |
|
|
|
private void NamespaceReloaded(object sender, EventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
this.LoadDynamicHelpPage(); |
|
|
|
this.LoadDynamicHelpPage(); |
|
|
|
|
|
|
|
this.RemoveAllChildren(); |
|
|
|
|
|
|
|
this.BuildDefaultHelpEntries(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region WebBrowser Scripting
|
|
|
|
|
|
|
|
public void BuildNewChild(string sectionName, string topicName, string topicUrl) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElementCollection children = axWebBrowser.Document.Body.GetElementsByTagName("span"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(children.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach(HtmlElement elem in children) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(elem.GetAttribute("className") == "section") |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement sectionBlock = elem.FirstChild.NextSibling; |
|
|
|
|
|
|
|
HtmlElement contentSpan = sectionBlock.NextSibling.NextSibling; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(sectionBlock.TagName == "B" && sectionBlock.InnerText == sectionName && |
|
|
|
|
|
|
|
contentSpan.TagName == "SPAN" && contentSpan.GetAttribute("className") == "content") |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(!this.DoesLinkExist(contentSpan, topicName, topicUrl)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
contentSpan.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
|
|
|
contentSpan.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement linkContent = null; |
|
|
|
|
|
|
|
HtmlElement htmlSection = this.CreateNewSection(sectionName, out linkContent); |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
htmlSection); |
|
|
|
|
|
|
|
linkContent.AppendChild(this.CreateNewLink(topicUrl, topicName)); |
|
|
|
|
|
|
|
linkContent.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.internalIndex++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LoggingService.Error("Help 2.0: cannot build node for dynamic help; " + ex.ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateNewSection(string sectionName, out HtmlElement linkNode) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement span = null; |
|
|
|
|
|
|
|
linkNode = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
span = axWebBrowser.Document.CreateElement("span"); |
|
|
|
|
|
|
|
span.SetAttribute("className", "section"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement img = axWebBrowser.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 = axWebBrowser.Document.CreateElement("b"); |
|
|
|
|
|
|
|
b.InnerText = sectionName; |
|
|
|
|
|
|
|
b.Style = "cursor:pointer"; |
|
|
|
|
|
|
|
b.Id = this.internalIndex.ToString(); |
|
|
|
|
|
|
|
b.Click += new HtmlElementEventHandler(this.OnSectionClick); |
|
|
|
|
|
|
|
span.AppendChild(b); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
span.AppendChild(this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement content = axWebBrowser.Document.CreateElement("span"); |
|
|
|
|
|
|
|
content.Id = String.Format("content_{0}", this.internalIndex.ToString()); |
|
|
|
|
|
|
|
content.SetAttribute("className", "content"); |
|
|
|
|
|
|
|
span.AppendChild(content); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
linkNode = content; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return span; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateNewLink(string topicUrl, string topicName) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement span = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
span = axWebBrowser.Document.CreateElement("a"); |
|
|
|
|
|
|
|
span.InnerText = topicName; |
|
|
|
|
|
|
|
span.SetAttribute("src", topicUrl); |
|
|
|
|
|
|
|
span.SetAttribute("className", "link"); |
|
|
|
|
|
|
|
span.SetAttribute("title", topicName); |
|
|
|
|
|
|
|
span.Click += new HtmlElementEventHandler(OnLinkClick); |
|
|
|
|
|
|
|
span.MouseOver += new HtmlElementEventHandler(OnMouseOver); |
|
|
|
|
|
|
|
span.MouseLeave += new HtmlElementEventHandler(OnMouseOut); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return span; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private HtmlElement CreateABreak() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElement br = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
br = axWebBrowser.Document.CreateElement("br"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return br; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private bool DoesLinkExist(HtmlElement parentNode, string topicName, string topicUrl) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
HtmlElementCollection allLinks = parentNode.GetElementsByTagName("a"); |
|
|
|
|
|
|
|
if(allLinks.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach(HtmlElement link in allLinks) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(String.Compare(topicName, link.InnerText) == 0 && |
|
|
|
|
|
|
|
String.Compare(topicUrl, link.GetAttribute("src")) == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch { } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnMouseOver(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StatusBarService.SetMessage(((HtmlElement)sender).GetAttribute("src")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnMouseOut(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
StatusBarService.SetMessage(""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnSectionClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string sectionId = ((HtmlElement)sender).Id; |
|
|
|
|
|
|
|
object[] objArray = new object[1]; |
|
|
|
|
|
|
|
objArray[0] = (object)sectionId; |
|
|
|
|
|
|
|
axWebBrowser.Document.InvokeScript("ExpandCollapse", objArray); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch(Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LoggingService.Error("Help 2.0: cannot run script; " + ex.ToString()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void OnLinkClick(object sender, HtmlElementEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string url = ((HtmlElement)sender).GetAttribute("src"); |
|
|
|
|
|
|
|
if(url != null && url != String.Empty) ShowHelpBrowser.OpenHelpView(url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void RemoveAllChildren() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InnerHtml = ""; |
|
|
|
|
|
|
|
this.internalIndex = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void BuildDefaultHelpEntries() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
XmlDocument xmldoc = new XmlDocument(); |
|
|
|
|
|
|
|
xmldoc.Load(String.Format("{0}\\DynamicHelpDefaultEntries.xml", |
|
|
|
|
|
|
|
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XmlNodeList sectionNodes = xmldoc.SelectNodes("/defaultentries/section[@name]"); |
|
|
|
|
|
|
|
foreach(XmlNode sectionNode in sectionNodes) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
XmlNodeList urlNodes = sectionNode.SelectNodes("url[@name and text()!=\"\"]"); |
|
|
|
|
|
|
|
foreach(XmlNode urlNode in urlNodes) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string sectionName = sectionNode.Attributes.GetNamedItem("name").InnerText; |
|
|
|
|
|
|
|
string url = urlNode.InnerText; |
|
|
|
|
|
|
|
string id = urlNode.Attributes.GetNamedItem("name").InnerText; |
|
|
|
|
|
|
|
this.BuildNewChild(sectionName, id, url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch { /* I don't care about the results */ } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region DebugInfo
|
|
|
|
|
|
|
|
public void CreateDebugPre(string debugInformation) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(debugInformation == String.Empty) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
this.CreateABreak()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HtmlElement pre = axWebBrowser.Document.CreateElement("pre"); |
|
|
|
|
|
|
|
pre.InnerHtml = "--- Dynamic Help Debug ---<br>" + debugInformation; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, |
|
|
|
|
|
|
|
pre); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|