diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
index 50ba1774fa..e2649242a6 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
+++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
@@ -35,9 +35,11 @@ namespace HtmlHelp2
public class HtmlHelp2DynamicHelpPad : AbstractPadContent
{
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser;
- private int internalIndex = 0;
+ private int internalIndex = 0;
private string lastDynamicHelpWord = String.Empty;
private string lastSpecialHelpWord = String.Empty;
+ private string lastKeywordSearch = String.Empty;
+ private string debugPreElement = String.Empty;
public override Control Control
{
@@ -62,6 +64,8 @@ namespace HtmlHelp2
{
dynamicHelpBrowser = new HtmlHelp2DynamicHelpBrowserControl();
ParserService.ParserUpdateStepFinished += UpdateTick;
+ PropertyPad.SelectedObjectChanged += new EventHandler(this.FormsDesignerSelectedObjectChanged);
+ PropertyPad.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(this.FormsDesignerSelectedGridItemChanged);
}
#region WebBrowser Scripting
@@ -69,7 +73,8 @@ namespace HtmlHelp2
string specialDynamicHelpString,
string expectedLanguage)
{
- if(!HtmlHelp2Environment.IsReady || HtmlHelp2Environment.DynamicHelpIsBusy) {
+ if(!HtmlHelp2Environment.IsReady || HtmlHelp2Environment.DynamicHelpIsBusy)
+ {
return;
}
@@ -81,62 +86,64 @@ namespace HtmlHelp2
try
{
this.RemoveAllChildren();
-
- IHxTopicList topics = null;
- IHxTopicList specialTopics = null;
- Cursor.Current = Cursors.WaitCursor;
+ this.debugPreElement = "--- Dynamic Help Debug ---
";
- if(dynamicHelpString != "") topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(dynamicHelpString);
- if(specialDynamicHelpString != "") specialTopics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(specialDynamicHelpString);
+ bool result1 = this.CallDynamicHelp(specialDynamicHelpString, expectedLanguage, false);
+ bool result2 = this.CallDynamicHelp(dynamicHelpString, expectedLanguage, false);
+ if(!result1 && !result2) this.CallDynamicHelp(this.lastKeywordSearch, expectedLanguage, true);
- Cursor.Current = Cursors.Default;
+ this.lastDynamicHelpWord = dynamicHelpString;
+ this.lastSpecialHelpWord = specialDynamicHelpString;
- try
- {
- if(specialTopics.Count > 0)
- {
- foreach(IHxTopic topic in specialTopics)
- {
- if(expectedLanguage == null ||
- expectedLanguage == "" ||
- topic.HasAttribute("DevLang", expectedLanguage))
- {
- this.BuildNewChild(topic.Location,
- topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle, HxTopicGetTitleDefVal.HxTopicGetTitleFileName),
- topic.URL);
- }
- }
- }
- }
- catch {}
+ this.CreateDebugPre();
+ }
+ catch {}
+ }
- try
+ private bool CallDynamicHelp(string searchTerm, string expectedLanguage, bool keywordSearch)
+ {
+ if(!HtmlHelp2Environment.IsReady || HtmlHelp2Environment.DynamicHelpIsBusy) return false;
+ bool result = false;
+
+ try
+ {
+ IHxTopicList topics = null;
+ Cursor.Current = Cursors.WaitCursor;
+
+ if(keywordSearch) topics = HtmlHelp2Environment.GetMatchingTopicsForKeywordSearch(searchTerm);
+ else topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm);
+
+ Cursor.Current = Cursors.Default;
+ if(topics.Count > 0)
{
- if(topics.Count > 0)
+ this.debugPreElement += String.Format("{0} ({1}): {2} {3}
",
+ searchTerm,
+ (keywordSearch)?"Kwd":"DH",
+ topics.Count.ToString(),
+ (topics.Count == 1)?"topic":"topics");
+
+ result = true;
+
+ foreach(IHxTopic topic in topics)
{
- foreach(IHxTopic topic in topics)
+ if(expectedLanguage == String.Empty ||
+ topic.HasAttribute("DevLang", expectedLanguage))
{
- if(expectedLanguage == null ||
- expectedLanguage == "" ||
- topic.HasAttribute("DevLang", expectedLanguage))
- {
- this.BuildNewChild(topic.Location,
- topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle, HxTopicGetTitleDefVal.HxTopicGetTitleFileName),
- topic.URL);
- }
+ this.BuildNewChild(topic.Location,
+ topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle,
+ HxTopicGetTitleDefVal.HxTopicGetTitleFileName),
+ topic.URL);
+
}
}
}
- catch {}
-
- this.CreateDebugPre(dynamicHelpString, specialDynamicHelpString);
-
- this.lastDynamicHelpWord = dynamicHelpString;
- this.lastSpecialHelpWord = specialDynamicHelpString;
}
catch {}
+
+ return result;
}
+
private void RemoveAllChildren()
{
this.internalIndex = 0;
@@ -284,16 +291,15 @@ namespace HtmlHelp2
}
- private void CreateDebugPre(string dynamicHelpString, string specialDynamicHelpString)
+ private void CreateDebugPre()
{
try
{
- HtmlElement br = dynamicHelpBrowser.CreateHtmlElement("br");
- dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, br);
+ dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak());
+ dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak());
HtmlElement pre = dynamicHelpBrowser.CreateHtmlElement("pre");
- pre.InnerHtml = String.Format("--- Dynamic Help Debug ---
" +
- "{0}
{1}", dynamicHelpString, specialDynamicHelpString);
+ pre.InnerHtml = this.debugPreElement;
dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, pre);
}
@@ -399,7 +405,7 @@ namespace HtmlHelp2
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;
@@ -410,9 +416,50 @@ namespace HtmlHelp2
ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset);
if (expr.Expression == null) return null;
+ this.lastKeywordSearch = expr.Expression;
+
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content);
}
#endregion
+
+ #region Dynamic Help for Forms Designer
+ private void FormsDesignerSelectedObjectChanged(object sender, EventArgs e)
+ {
+ this.CallDynamicHelpForFormsDesigner(PropertyPad.Grid.SelectedObject,
+ PropertyPad.Grid.SelectedGridItem);
+ }
+
+ private void FormsDesignerSelectedGridItemChanged(object sender, SelectedGridItemChangedEventArgs e)
+ {
+ this.CallDynamicHelpForFormsDesigner(PropertyPad.Grid.SelectedObject,
+ e.NewSelection);
+ }
+
+ private void CallDynamicHelpForFormsDesigner(object selectedObject, GridItem selectedItem)
+ {
+ if(selectedObject == null) return;
+
+ try
+ {
+ string selectedObjectString = selectedObject.GetType().FullName;
+ string selectedItemString = String.Empty;
+
+ if(selectedItem != null)
+ {
+ selectedItemString = String.Format("{0}.{1}",
+ selectedObjectString,
+ selectedItem.Label);
+ }
+
+ WorkbenchSingleton.SafeThreadAsyncCall(this,
+ "BuildDynamicHelpList",
+ selectedObjectString,
+ selectedItemString,
+ "");
+ }
+ catch {}
+ }
+ #endregion
}
public class HtmlHelp2DynamicHelpBrowserControl : UserControl
@@ -529,7 +576,7 @@ namespace HtmlHelp2
{
ToolStripItem item = (ToolStripItem)sender;
PadDescriptor pad = null;
-
+
switch(item.ImageIndex)
{
case 0:
diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
index d2ed3ae358..3663ac05b7 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
+++ b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs
@@ -293,6 +293,22 @@ namespace HtmlHelp2.Environment
dynamicHelpIsBusy = false;
}
}
+
+ public static IHxTopicList GetMatchingTopicsForKeywordSearch(string searchTerm)
+ {
+ if(dynamicHelpIsBusy) return null;
+
+ try
+ {
+ dynamicHelpIsBusy = true;
+ IHxTopicList topics = GetIndex(currentSelectedFilterQuery).GetTopicsFromString(searchTerm, 0);
+ return topics;
+ }
+ finally
+ {
+ dynamicHelpIsBusy = false;
+ }
+ }
#endregion
#region Event Handling