Browse Source

dynamic help: some changes and fixes and (I hope) improvements

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@471 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Mathias Simmack 21 years ago
parent
commit
e4832b28fa
  1. 130
      src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs

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

@ -8,6 +8,8 @@
namespace HtmlHelp2 namespace HtmlHelp2
{ {
using System; using System;
using System.Collections;
using System.Collections.Specialized;
using System.Drawing; using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using System.Reflection; using System.Reflection;
@ -35,11 +37,10 @@ namespace HtmlHelp2
public class HtmlHelp2DynamicHelpPad : AbstractPadContent public class HtmlHelp2DynamicHelpPad : AbstractPadContent
{ {
protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser;
private int internalIndex = 0; private int internalIndex = 0;
private string lastDynamicHelpWord = String.Empty; private StringCollection dynamicHelpTerms = new StringCollection();
private string lastSpecialHelpWord = String.Empty; private ResolveResult lastResolveResult = null;
private string lastKeywordSearch = String.Empty; private string debugPreElement = String.Empty;
private string debugPreElement = String.Empty;
public override Control Control public override Control Control
{ {
@ -69,31 +70,29 @@ namespace HtmlHelp2
} }
#region WebBrowser Scripting #region WebBrowser Scripting
public void BuildDynamicHelpList(string dynamicHelpString, private void BuildDynamicHelpList(string expectedLanguage)
string specialDynamicHelpString,
string expectedLanguage)
{ {
if(!HtmlHelp2Environment.IsReady || HtmlHelp2Environment.DynamicHelpIsBusy) if(this.dynamicHelpTerms.Count == 0) return;
{
return;
}
if(dynamicHelpString == "" && specialDynamicHelpString == "") return;
if(String.Compare(dynamicHelpString, this.lastDynamicHelpWord) == 0 &&
String.Compare(specialDynamicHelpString, this.lastSpecialHelpWord) == 0) return;
try try
{ {
this.RemoveAllChildren(); this.RemoveAllChildren();
this.debugPreElement = "--- Dynamic Help Debug ---<br>"; this.debugPreElement = String.Empty;
bool result = false;
bool result1 = this.CallDynamicHelp(specialDynamicHelpString, expectedLanguage, false); Cursor.Current = Cursors.WaitCursor;
bool result2 = this.CallDynamicHelp(dynamicHelpString, expectedLanguage, false); foreach(string currentHelpTerm in dynamicHelpTerms)
if(!result1 && !result2) this.CallDynamicHelp(this.lastKeywordSearch, expectedLanguage, true); {
if(currentHelpTerm.StartsWith("!") && !result)
this.lastDynamicHelpWord = dynamicHelpString; {
this.lastSpecialHelpWord = specialDynamicHelpString; result = this.CallDynamicHelp(currentHelpTerm.Substring(1), expectedLanguage, false);
}
else
{
this.CallDynamicHelp(currentHelpTerm, expectedLanguage, false);
}
}
Cursor.Current = Cursors.Default;
this.CreateDebugPre(); this.CreateDebugPre();
} }
@ -108,20 +107,18 @@ namespace HtmlHelp2
try try
{ {
IHxTopicList topics = null; IHxTopicList topics = null;
Cursor.Current = Cursors.WaitCursor;
if(keywordSearch) topics = HtmlHelp2Environment.GetMatchingTopicsForKeywordSearch(searchTerm); if(keywordSearch) topics = HtmlHelp2Environment.GetMatchingTopicsForKeywordSearch(searchTerm);
else topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm); else topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm);
Cursor.Current = Cursors.Default;
this.debugPreElement += String.Format("{0} ({1}): {2} {3}<br>",
(searchTerm.StartsWith("!"))?searchTerm.Substring(1):searchTerm,
(keywordSearch)?"Kwd":"DH",
topics.Count.ToString(),
(topics.Count == 1)?"topic":"topics");
if(topics.Count > 0) if(topics.Count > 0)
{ {
this.debugPreElement += String.Format("{0} ({1}): {2} {3}<br>",
searchTerm,
(keywordSearch)?"Kwd":"DH",
topics.Count.ToString(),
(topics.Count == 1)?"topic":"topics");
result = true; result = true;
foreach(IHxTopic topic in topics) foreach(IHxTopic topic in topics)
@ -293,13 +290,15 @@ namespace HtmlHelp2
private void CreateDebugPre() private void CreateDebugPre()
{ {
if(this.debugPreElement == String.Empty) return;
try try
{ {
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak()); dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak());
dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak()); dynamicHelpBrowser.Document.Body.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeEnd, this.CreateABreak());
HtmlElement pre = dynamicHelpBrowser.CreateHtmlElement("pre"); HtmlElement pre = dynamicHelpBrowser.CreateHtmlElement("pre");
pre.InnerHtml = this.debugPreElement; pre.InnerHtml = "--- Dynamic Help Debug ---<br>" + this.debugPreElement;
dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, pre); dynamicHelpBrowser.InsertHtmlElement(HtmlElementInsertionOrientation.BeforeEnd, pre);
} }
@ -348,52 +347,42 @@ namespace HtmlHelp2
{ {
try try
{ {
string regularHelpWord = String.Empty; this.dynamicHelpTerms.Clear();
string specialHelpWord = String.Empty;
// TODO: I need the word under the cursor, "if" for example, ResolveResult res = ResolveAtCaret(e);
// to do a simple, ordinary keyword search :-) if(res == null || res == this.lastResolveResult) return;
ResolveResult res = ResolveAtCaret(e);
if(res != null && res.ResolvedType != null) if(res != null && res.ResolvedType != null)
{ {
regularHelpWord = res.ResolvedType.FullyQualifiedName; this.dynamicHelpTerms.Add(res.ResolvedType.FullyQualifiedName);
} }
if(res == null) return;
MemberResolveResult member = res as MemberResolveResult; MemberResolveResult member = res as MemberResolveResult;
NamespaceResolveResult nspace = res as NamespaceResolveResult; NamespaceResolveResult nspace = res as NamespaceResolveResult;
MethodResolveResult method = res as MethodResolveResult; MethodResolveResult method = res as MethodResolveResult;
TypeResolveResult typeRes = res as TypeResolveResult; TypeResolveResult types = res as TypeResolveResult;
if(member != null && member.ResolvedMember != null) if(member != null && member.ResolvedMember != null)
{ {
specialHelpWord = member.ResolvedMember.FullyQualifiedName; this.dynamicHelpTerms.Insert(0, member.ResolvedMember.FullyQualifiedName);
} }
else if(nspace != null) if(nspace != null)
{ {
specialHelpWord = nspace.Name; this.dynamicHelpTerms.Insert(0, nspace.Name);
} }
else if(method != null && method.ContainingType != null) if(method != null && method.ContainingType != null)
{ {
specialHelpWord = method.ContainingType.FullyQualifiedName; this.dynamicHelpTerms.Insert(0, method.ContainingType.FullyQualifiedName);
} }
else if(typeRes != null && typeRes.ResolvedClass != null) if(types != null && types.ResolvedClass != null)
{ {
specialHelpWord = typeRes.ResolvedClass.FullyQualifiedName; this.dynamicHelpTerms.Insert(0, types.ResolvedClass.FullyQualifiedName);
} }
if(String.Compare(regularHelpWord, specialHelpWord) == 0) // set "lastResolveResult" to block an endless browser update
specialHelpWord = ""; this.lastResolveResult = res;
// call dynamic help WorkbenchSingleton.SafeThreadAsyncCall(this, "BuildDynamicHelpList", "");
WorkbenchSingleton.SafeThreadAsyncCall(this,
"BuildDynamicHelpList",
regularHelpWord,
specialHelpWord,
"");
// thanks again to Daniel and Robert
} }
catch {} catch {}
} }
@ -416,8 +405,6 @@ 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;
this.lastKeywordSearch = expr.Expression;
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content); return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content);
} }
#endregion #endregion
@ -438,23 +425,28 @@ namespace HtmlHelp2
private void CallDynamicHelpForFormsDesigner(object selectedObject, GridItem selectedItem) private void CallDynamicHelpForFormsDesigner(object selectedObject, GridItem selectedItem)
{ {
if(selectedObject == null) return; if(selectedObject == null) return;
try try
{ {
string selectedObjectString = selectedObject.GetType().FullName; this.dynamicHelpTerms.Clear();
string selectedItemString = String.Empty;
Type myObject = selectedObject.GetType();
if(selectedItem != null) if(selectedItem != null)
{ {
selectedItemString = String.Format("{0}.{1}", this.dynamicHelpTerms.Add(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label));
selectedObjectString,
selectedItem.Label); while(myObject.BaseType != null)
{
myObject = myObject.BaseType;
this.dynamicHelpTerms.Add(String.Format("!{0}.{1}", myObject.FullName, selectedItem.Label));
}
} }
myObject = selectedObject.GetType();
this.dynamicHelpTerms.Add(myObject.FullName);
WorkbenchSingleton.SafeThreadAsyncCall(this, WorkbenchSingleton.SafeThreadAsyncCall(this,
"BuildDynamicHelpList", "BuildDynamicHelpList",
selectedObjectString,
selectedItemString,
""); "");
} }
catch {} catch {}

Loading…
Cancel
Save