diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
index 6f56780a3e..04205f6196 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
+++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
@@ -27,11 +27,9 @@ namespace HtmlHelp2
using HtmlHelp2.Environment;
using HtmlHelp2.ResourcesHelperClass;
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: insert some default entries (Homepage, Wiki, Community, ...)
public class ShowDynamicHelpMenuCommand : AbstractMenuCommand
@@ -46,10 +44,10 @@ namespace HtmlHelp2
public class HtmlHelp2DynamicHelpPad : AbstractPadContent
{
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser;
- private int internalIndex = 0;
- private StringCollection dynamicHelpTerms = new StringCollection();
- private string debugPreElement = String.Empty;
- private bool enableDebugInfo = false;
+ private StringCollection dynamicHelpTerms = new StringCollection();
+ private string debugPreElement = String.Empty;
+ private bool enableDebugInfo = true;
+ private Dictionarylanguages = new Dictionary();
public override Control Control
{
@@ -73,6 +71,11 @@ namespace HtmlHelp2
PropertyPad.SelectedObjectChanged += new EventHandler(this.FormsDesignerSelectedObjectChanged);
PropertyPad.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(this.FormsDesignerSelectedGridItemChanged);
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
@@ -80,15 +83,29 @@ namespace HtmlHelp2
{
if(this.dynamicHelpTerms.Count == 0) return;
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;
foreach(string currentHelpTerm in dynamicHelpTerms)
{
- this.CallDynamicHelp(currentHelpTerm, expectedLanguage, false);
+ this.CallDynamicHelp(currentHelpTerm, tempLanguage, false);
}
+ dynamicHelpBrowser.BuildDefaultHelpEntries();
Cursor.Current = Cursors.Default;
- if(this.enableDebugInfo) this.CreateDebugPre();
+
+ this.debugPreElement += String.Format("
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)
@@ -114,201 +131,29 @@ namespace HtmlHelp2
List newTopics = this.SortTopics(topics);
foreach(IHxTopic topic in newTopics)
{
- this.BuildNewChild(topic.Location,
- 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(expectedLanguage == String.Empty || topic.HasAttribute("DevLang", expectedLanguage))
{
- 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;
- }
- }
+ this.BuildNewChild(topic.Location,
+ topic.get_Title(HxTopicGetTitleType.HxTopicGetTOCTitle,
+ HxTopicGetTitleDefVal.HxTopicGetTitleFileName),
+ topic.URL);
}
-
- 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)
- {
- 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()
+ private void BuildNewChild(string sectionName, string topicName, string topicUrl)
{
- HtmlElement br = null;
-
- try
- {
- br = dynamicHelpBrowser.CreateHtmlElement("br");
- }
- catch {}
-
- return br;
+ dynamicHelpBrowser.BuildNewChild(sectionName, topicName, topicUrl);
}
- private bool DoesLinkExist(HtmlElement parentNode, string topicName, string topicUrl)
+ private void RemoveAllChildren()
{
- 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;
+ dynamicHelpBrowser.RemoveAllChildren();
}
#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
private void UpdateTick(object sender, ParserUpdateStepEventArgs e)
{
@@ -344,7 +189,9 @@ namespace HtmlHelp2
this.AddToStringCollection(0, types.ResolvedClass.FullyQualifiedName);
}
- WorkbenchSingleton.SafeThreadAsyncCall(this, "BuildDynamicHelpList", "");
+ WorkbenchSingleton.SafeThreadAsyncCall(this,
+ "BuildDynamicHelpList",
+ ProjectService.CurrentProject.Language);
}
private ResolveResult ResolveAtCaret(ParserUpdateStepEventArgs e)
@@ -397,28 +244,9 @@ namespace HtmlHelp2
}
this.AddToStringCollection(myObject.FullName);
- WorkbenchSingleton.SafeThreadAsyncCall(this, "BuildDynamicHelpList", "");
- }
- #endregion
-
- #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 ---
" + this.debugPreElement;
-
- dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, pre);
- }
- catch {}
+ WorkbenchSingleton.SafeThreadAsyncCall(this,
+ "BuildDynamicHelpList",
+ ProjectService.CurrentProject.Language);
}
#endregion
@@ -495,34 +323,13 @@ namespace HtmlHelp2
{
WebBrowser axWebBrowser = new WebBrowser();
ToolStrip dynamicHelpToolbar = new ToolStrip();
+ int internalIndex = 0;
string[] toolbarButtons = new string[] {
"${res:AddIns.HtmlHelp2.Contents}",
"${res:AddIns.HtmlHelp2.Index}",
"${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()
{
for(int i = 0; i < toolbarButtons.Length; i++)
@@ -610,6 +417,242 @@ namespace HtmlHelp2
private void NamespaceReloaded(object sender, EventArgs e)
{
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 ---
" + debugInformation;
+
+ axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd,
+ pre);
+ }
+ catch {}
}
#endregion
}
diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
index 5acf021090..19c81ea30b 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
+++ b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
@@ -284,6 +284,7 @@ namespace HtmlHelp2.Environment
try
{
topics = ((IHxIndex)dynamicHelp).GetTopicsFromString(searchTerm, 0);
+ LoggingService.Info("Help 2.0: Dynamic Help successfully called");
}
catch
{
@@ -302,6 +303,7 @@ namespace HtmlHelp2.Environment
try
{
topics = GetIndex(currentSelectedFilterQuery).GetTopicsFromString(searchTerm, 0);
+ LoggingService.Info("Help 2.0: Keyword search successfully called");
}
catch
{