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

Loading…
Cancel
Save