Browse Source

dynamic help: some improvements, works with expressions now (ignores documents with more than 1 DevLang attribute)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@510 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Mathias Simmack 20 years ago
parent
commit
7c59ad1435
  1. 85
      src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
  2. 1
      src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs
  3. 26
      src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
  4. 32
      src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs

85
src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs

@ -30,11 +30,6 @@ namespace HtmlHelp2
using MSHelpServices; using MSHelpServices;
// TODO: if there are no DH results, implement Keyword search (index)
// I'm a little stupid at this point, I guess, :o(
// How to get the word UNDER the cursor for an ordinary simple keyword search?
public class ShowDynamicHelpMenuCommand : AbstractMenuCommand public class ShowDynamicHelpMenuCommand : AbstractMenuCommand
{ {
public override void Run() public override void Run()
@ -48,6 +43,7 @@ namespace HtmlHelp2
{ {
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser;
private StringCollection dynamicHelpTerms = new StringCollection(); private StringCollection dynamicHelpTerms = new StringCollection();
private Point lastPoint = Point.Empty;
private string debugPreElement = String.Empty; private string debugPreElement = String.Empty;
private bool enableDebugInfo = false; private bool enableDebugInfo = false;
@ -64,34 +60,45 @@ namespace HtmlHelp2
public HtmlHelp2DynamicHelpPad() public HtmlHelp2DynamicHelpPad()
{ {
dynamicHelpBrowser = new HtmlHelp2DynamicHelpBrowserControl(); dynamicHelpBrowser = new HtmlHelp2DynamicHelpBrowserControl();
dynamicHelpBrowser.BuildANothing();
ParserService.ParserUpdateStepFinished += UpdateTick; ParserService.ParserUpdateStepFinished += UpdateTick;
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);
} }
#region WebBrowser Scripting #region Dynamic Help Calls
private void BuildDynamicHelpList() private void BuildDynamicHelpList()
{ {
if(this.dynamicHelpTerms.Count == 0) return; if(this.dynamicHelpTerms.Count == 0) return;
this.RemoveAllChildren(); dynamicHelpBrowser.RemoveAllChildren();
this.debugPreElement = String.Empty; this.debugPreElement = String.Empty;
bool helpResults = false; bool helpResults = false;
Cursor.Current = Cursors.WaitCursor; Cursor.Current = Cursors.WaitCursor;
foreach(string currentHelpTerm in this.dynamicHelpTerms) foreach(string currentHelpTerm in this.dynamicHelpTerms)
{ {
helpResults = (this.CallDynamicHelp(currentHelpTerm, false) || helpResults); if(!currentHelpTerm.StartsWith("!"))
{
helpResults = (this.CallDynamicHelp(currentHelpTerm, false) || helpResults);
}
} }
// if(!helpResults)
if(!helpResults) // {
{
foreach(string currentHelpTerm in this.dynamicHelpTerms) foreach(string currentHelpTerm in this.dynamicHelpTerms)
{ {
this.CallDynamicHelp(currentHelpTerm, true); if(currentHelpTerm.StartsWith("!"))
{
helpResults = (this.CallDynamicHelp(currentHelpTerm.Substring(1), true) || helpResults);
}
} }
// }
if(!helpResults)
{
dynamicHelpBrowser.BuildANothing();
} }
dynamicHelpBrowser.BuildDefaultHelpEntries(); // dynamicHelpBrowser.BuildDefaultHelpEntries();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
this.debugPreElement += String.Format("<br>Current project language: {0}", this.debugPreElement += String.Format("<br>Current project language: {0}",
@ -107,8 +114,7 @@ namespace HtmlHelp2
try try
{ {
if(keywordSearch) topics = HtmlHelp2Environment.GetMatchingTopicsForKeywordSearch(searchTerm); topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm);
else topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm);
result = (topics != null && topics.Count > 0); result = (topics != null && topics.Count > 0);
this.debugPreElement += String.Format("{0} ({1}): {2} {3}<br>", this.debugPreElement += String.Format("{0} ({1}): {2} {3}<br>",
@ -122,10 +128,10 @@ namespace HtmlHelp2
List<IHxTopic> newTopics = this.SortTopics(topics); List<IHxTopic> newTopics = this.SortTopics(topics);
foreach(IHxTopic topic in newTopics) foreach(IHxTopic topic in newTopics)
{ {
if(SharpDevLanguage.CheckTopicLanguage(topic)) if((keywordSearch)?SharpDevLanguage.CheckUniqueTopicLanguage(topic):SharpDevLanguage.CheckTopicLanguage(topic))
{ {
this.BuildNewChild(topic.Location, this.BuildNewChild(topic.Location,
topic.get_Title(HxTopicGetTitleType.HxTopicGetTOCTitle, topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle,
HxTopicGetTitleDefVal.HxTopicGetTitleFileName), HxTopicGetTitleDefVal.HxTopicGetTitleFileName),
topic.URL); topic.URL);
} }
@ -138,11 +144,6 @@ namespace HtmlHelp2
{ {
dynamicHelpBrowser.BuildNewChild(sectionName, topicName, topicUrl); dynamicHelpBrowser.BuildNewChild(sectionName, topicName, topicUrl);
} }
private void RemoveAllChildren()
{
dynamicHelpBrowser.RemoveAllChildren();
}
#endregion #endregion
#region Taken from DefinitionView.cs #region Taken from DefinitionView.cs
@ -201,6 +202,11 @@ namespace HtmlHelp2
ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset); ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset);
if (expr.Expression == null) return null; if (expr.Expression == null) return null;
// save the current position
if(this.lastPoint != null && this.lastPoint == caret.Position) return null;
this.lastPoint = caret.Position;
this.AddToStringCollection(String.Format("!{0}", expr.Expression));
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content); return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content);
} }
#endregion #endregion
@ -243,7 +249,8 @@ namespace HtmlHelp2
private void SolutionClosed(object sender, EventArgs e) private void SolutionClosed(object sender, EventArgs e)
{ {
this.RemoveAllChildren(); dynamicHelpBrowser.RemoveAllChildren();
dynamicHelpBrowser.BuildANothing();
} }
#region StringCollection & Sorting #region StringCollection & Sorting
@ -292,6 +299,7 @@ namespace HtmlHelp2
{ {
int result = CompareType("kbSyntax", x, y); int result = CompareType("kbSyntax", x, y);
if(result == 0) result = CompareType("kbHowTo", x, y); if(result == 0) result = CompareType("kbHowTo", x, y);
if(result == 0) result = CompareType("kbOrient", x, y);
if(result == 0) result = CompareType("kbArticle", x, y); if(result == 0) result = CompareType("kbArticle", x, y);
return result; return result;
@ -312,8 +320,8 @@ namespace HtmlHelp2
public class HtmlHelp2DynamicHelpBrowserControl : UserControl public class HtmlHelp2DynamicHelpBrowserControl : UserControl
{ {
WebBrowser axWebBrowser = new WebBrowser(); WebBrowser axWebBrowser = null;
ToolStrip dynamicHelpToolbar = new ToolStrip(); ToolStrip dynamicHelpToolbar = null;
int internalIndex = 0; int internalIndex = 0;
string[] toolbarButtons = new string[] { string[] toolbarButtons = new string[] {
"${res:AddIns.HtmlHelp2.Contents}", "${res:AddIns.HtmlHelp2.Contents}",
@ -332,7 +340,6 @@ namespace HtmlHelp2
public HtmlHelp2DynamicHelpBrowserControl() public HtmlHelp2DynamicHelpBrowserControl()
{ {
this.InitializeComponents(); this.InitializeComponents();
this.LoadDynamicHelpPage();
} }
private void InitializeComponents() private void InitializeComponents()
@ -340,20 +347,24 @@ namespace HtmlHelp2
Dock = DockStyle.Fill; Dock = DockStyle.Fill;
Size = new Size(500, 500); Size = new Size(500, 500);
axWebBrowser = new WebBrowser();
Controls.Add(axWebBrowser); Controls.Add(axWebBrowser);
axWebBrowser.Dock = DockStyle.Fill; axWebBrowser.Dock = DockStyle.Fill;
axWebBrowser.WebBrowserShortcutsEnabled = false; axWebBrowser.WebBrowserShortcutsEnabled = false;
axWebBrowser.IsWebBrowserContextMenuEnabled = false; axWebBrowser.IsWebBrowserContextMenuEnabled = false;
axWebBrowser.AllowWebBrowserDrop = false; axWebBrowser.AllowWebBrowserDrop = false;
this.LoadDynamicHelpPage();
dynamicHelpToolbar = new ToolStrip();
Controls.Add(dynamicHelpToolbar); Controls.Add(dynamicHelpToolbar);
dynamicHelpToolbar.Dock = DockStyle.Top; dynamicHelpToolbar.Dock = DockStyle.Top;
dynamicHelpToolbar.AllowItemReorder = false; dynamicHelpToolbar.AllowItemReorder = false;
dynamicHelpToolbar.ShowItemToolTips = false;
dynamicHelpToolbar.Enabled = HtmlHelp2Environment.IsReady; dynamicHelpToolbar.Enabled = HtmlHelp2Environment.IsReady;
for(int i = 0; i < toolbarButtons.Length; i++) for(int i = 0; i < toolbarButtons.Length; i++)
{ {
ToolStripButton button = new ToolStripButton(); ToolStripButton button = new ToolStripButton();
button.ToolTipText = StringParser.Parse(toolbarButtons[i]); button.Text = StringParser.Parse(toolbarButtons[i]);
button.ImageIndex = i; button.ImageIndex = i;
button.Click += new EventHandler(this.ToolStripButtonClicked); button.Click += new EventHandler(this.ToolStripButtonClicked);
@ -372,10 +383,6 @@ namespace HtmlHelp2
} }
} }
private void DynamicHelpBrowserCreated(object sender, EventArgs e)
{
}
private void LoadDynamicHelpPage() private void LoadDynamicHelpPage()
{ {
if(!HtmlHelp2Environment.IsReady) return; if(!HtmlHelp2Environment.IsReady) return;
@ -484,7 +491,7 @@ namespace HtmlHelp2
HtmlElement b = axWebBrowser.Document.CreateElement("b"); HtmlElement b = axWebBrowser.Document.CreateElement("b");
b.InnerText = sectionName; b.InnerText = sectionName;
b.Style = "cursor:pointer"; b.Style = "cursor:auto";
b.Id = this.internalIndex.ToString(); b.Id = this.internalIndex.ToString();
b.Click += new HtmlElementEventHandler(this.OnSectionClick); b.Click += new HtmlElementEventHandler(this.OnSectionClick);
span.AppendChild(b); span.AppendChild(b);
@ -536,6 +543,20 @@ namespace HtmlHelp2
return br; return br;
} }
public void BuildANothing()
{
try
{
HtmlElement nothing = axWebBrowser.Document.CreateElement("b");
nothing.InnerText = "No data is available for the current selection.";
nothing.SetAttribute("title", nothing.InnerText);
axWebBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin,
nothing);
}
catch {}
}
private bool DoesLinkExist(HtmlElement parentNode, string topicName, string topicUrl) private bool DoesLinkExist(HtmlElement parentNode, string topicName, string topicUrl)
{ {
try try

1
src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs

@ -93,6 +93,7 @@ namespace HtmlHelp2.HelperDialog
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;
this.ControlBox = false;
this.Name = "HtmlHelp2Dialog"; this.Name = "HtmlHelp2Dialog";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "HtmlHelp2Dialog"; this.Text = "HtmlHelp2Dialog";

26
src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs

@ -93,8 +93,7 @@ namespace HtmlHelp2.Environment
XmlNode node = xmldoc.SelectSingleNode("/help2environment/collection"); XmlNode node = xmldoc.SelectSingleNode("/help2environment/collection");
if(node != null) DefaultNamespaceName = node.InnerText; if(node != null) DefaultNamespaceName = node.InnerText;
LoggingService.Info(String.Format("Help 2.0: using \"{0}\" as default namespace", LoggingService.Info("Help 2.0: using saved configuration");
DefaultNamespaceName));
} }
catch catch
{ {
@ -283,8 +282,8 @@ namespace HtmlHelp2.Environment
try try
{ {
topics = ((IHxIndex)dynamicHelp).GetTopicsFromString(searchTerm, 0); topics = dynamicHelp.GetTopicsFromString(searchTerm, 0);
LoggingService.Info("Help 2.0: Dynamic Help successfully called"); LoggingService.Info("Help 2.0: Dynamic Help called");
} }
catch catch
{ {
@ -293,25 +292,6 @@ namespace HtmlHelp2.Environment
dynamicHelpIsBusy = false; dynamicHelpIsBusy = false;
return topics; return topics;
} }
public static IHxTopicList GetMatchingTopicsForKeywordSearch(string searchTerm)
{
if(dynamicHelpIsBusy) return null;
IHxTopicList topics = null;
dynamicHelpIsBusy = true;
try
{
topics = GetIndex(currentSelectedFilterQuery).GetTopicsFromString(searchTerm, 0);
LoggingService.Info("Help 2.0: Keyword search successfully called");
}
catch
{
LoggingService.Error("Help 2.0: Keyword search failed");
}
dynamicHelpIsBusy = false;
return topics;
}
#endregion #endregion
#region Event Handling #region Event Handling

32
src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs

@ -9,6 +9,7 @@ namespace HtmlHelp2.SharpDevLanguageClass
{ {
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using MSHelpServices; using MSHelpServices;
@ -26,6 +27,27 @@ namespace HtmlHelp2.SharpDevLanguageClass
{ {
} }
private static int DevLangCounter(IHxTopic topic)
{
try
{
int counter = 0;
IHxAttributeList topicAttributes = topic.Attributes;
foreach(IHxAttribute attr in topicAttributes)
{
if(String.Compare(attr.DisplayName, "DevLang") == 0)
{
counter++;
}
}
return counter;
}
catch
{
return 0;
}
}
public static bool CheckTopicLanguage(IHxTopic topic) public static bool CheckTopicLanguage(IHxTopic topic)
{ {
return CheckTopicLanguage(topic, ProjectService.CurrentProject.Language); return CheckTopicLanguage(topic, ProjectService.CurrentProject.Language);
@ -46,6 +68,16 @@ namespace HtmlHelp2.SharpDevLanguageClass
return (tempLanguage == String.Empty || topic.HasAttribute("DevLang", tempLanguage)); return (tempLanguage == String.Empty || topic.HasAttribute("DevLang", tempLanguage));
} }
public static bool CheckUniqueTopicLanguage(IHxTopic topic)
{
return CheckUniqueTopicLanguage(topic, ProjectService.CurrentProject.Language);
}
public static bool CheckUniqueTopicLanguage(IHxTopic topic, string expectedLanguage)
{
return (CheckTopicLanguage(topic, expectedLanguage) && DevLangCounter(topic) == 1);
}
public static string GetPatchedLanguage() public static string GetPatchedLanguage()
{ {
return GetPatchedLanguage(ProjectService.CurrentProject.Language); return GetPatchedLanguage(ProjectService.CurrentProject.Language);

Loading…
Cancel
Save