From 7c59ad14352301e6e6d126bf13db6696fb343ef0 Mon Sep 17 00:00:00 2001 From: Mathias Simmack Date: Sun, 25 Sep 2005 14:42:17 +0000 Subject: [PATCH] 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 --- .../src/BaseControls/DynamicHelpPad.cs | 85 ++++++++++++------- .../Project/src/Service/HtmlHelp2Dialog.cs | 1 + .../Project/src/Service/HtmlHelp2Service.cs | 26 +----- .../src/Service/SharpDevLanguageClass.cs | 32 +++++++ 4 files changed, 89 insertions(+), 55 deletions(-) diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs index 540a7a3c23..f96379b432 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs @@ -30,11 +30,6 @@ namespace HtmlHelp2 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 override void Run() @@ -48,6 +43,7 @@ namespace HtmlHelp2 { protected HtmlHelp2DynamicHelpBrowserControl dynamicHelpBrowser; private StringCollection dynamicHelpTerms = new StringCollection(); + private Point lastPoint = Point.Empty; private string debugPreElement = String.Empty; private bool enableDebugInfo = false; @@ -64,34 +60,45 @@ namespace HtmlHelp2 public HtmlHelp2DynamicHelpPad() { dynamicHelpBrowser = new HtmlHelp2DynamicHelpBrowserControl(); + dynamicHelpBrowser.BuildANothing(); ParserService.ParserUpdateStepFinished += UpdateTick; PropertyPad.SelectedObjectChanged += new EventHandler(this.FormsDesignerSelectedObjectChanged); PropertyPad.SelectedGridItemChanged += new SelectedGridItemChangedEventHandler(this.FormsDesignerSelectedGridItemChanged); ProjectService.SolutionClosed += new EventHandler(this.SolutionClosed); } - #region WebBrowser Scripting + #region Dynamic Help Calls private void BuildDynamicHelpList() { if(this.dynamicHelpTerms.Count == 0) return; - this.RemoveAllChildren(); + dynamicHelpBrowser.RemoveAllChildren(); + this.debugPreElement = String.Empty; bool helpResults = false; Cursor.Current = Cursors.WaitCursor; 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) { - 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; this.debugPreElement += String.Format("
Current project language: {0}", @@ -107,8 +114,7 @@ namespace HtmlHelp2 try { - if(keywordSearch) topics = HtmlHelp2Environment.GetMatchingTopicsForKeywordSearch(searchTerm); - else topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm); + topics = HtmlHelp2Environment.GetMatchingTopicsForDynamicHelp(searchTerm); result = (topics != null && topics.Count > 0); this.debugPreElement += String.Format("{0} ({1}): {2} {3}
", @@ -122,10 +128,10 @@ namespace HtmlHelp2 List newTopics = this.SortTopics(topics); foreach(IHxTopic topic in newTopics) { - if(SharpDevLanguage.CheckTopicLanguage(topic)) + if((keywordSearch)?SharpDevLanguage.CheckUniqueTopicLanguage(topic):SharpDevLanguage.CheckTopicLanguage(topic)) { this.BuildNewChild(topic.Location, - topic.get_Title(HxTopicGetTitleType.HxTopicGetTOCTitle, + topic.get_Title(HxTopicGetTitleType.HxTopicGetRLTitle, HxTopicGetTitleDefVal.HxTopicGetTitleFileName), topic.URL); } @@ -138,11 +144,6 @@ namespace HtmlHelp2 { dynamicHelpBrowser.BuildNewChild(sectionName, topicName, topicUrl); } - - private void RemoveAllChildren() - { - dynamicHelpBrowser.RemoveAllChildren(); - } #endregion #region Taken from DefinitionView.cs @@ -201,6 +202,11 @@ namespace HtmlHelp2 ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset); 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); } #endregion @@ -243,7 +249,8 @@ namespace HtmlHelp2 private void SolutionClosed(object sender, EventArgs e) { - this.RemoveAllChildren(); + dynamicHelpBrowser.RemoveAllChildren(); + dynamicHelpBrowser.BuildANothing(); } #region StringCollection & Sorting @@ -292,6 +299,7 @@ namespace HtmlHelp2 { int result = CompareType("kbSyntax", 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); return result; @@ -312,8 +320,8 @@ namespace HtmlHelp2 public class HtmlHelp2DynamicHelpBrowserControl : UserControl { - WebBrowser axWebBrowser = new WebBrowser(); - ToolStrip dynamicHelpToolbar = new ToolStrip(); + WebBrowser axWebBrowser = null; + ToolStrip dynamicHelpToolbar = null; int internalIndex = 0; string[] toolbarButtons = new string[] { "${res:AddIns.HtmlHelp2.Contents}", @@ -332,7 +340,6 @@ namespace HtmlHelp2 public HtmlHelp2DynamicHelpBrowserControl() { this.InitializeComponents(); - this.LoadDynamicHelpPage(); } private void InitializeComponents() @@ -340,20 +347,24 @@ namespace HtmlHelp2 Dock = DockStyle.Fill; Size = new Size(500, 500); + axWebBrowser = new WebBrowser(); Controls.Add(axWebBrowser); axWebBrowser.Dock = DockStyle.Fill; axWebBrowser.WebBrowserShortcutsEnabled = false; axWebBrowser.IsWebBrowserContextMenuEnabled = false; axWebBrowser.AllowWebBrowserDrop = false; + this.LoadDynamicHelpPage(); + dynamicHelpToolbar = new ToolStrip(); Controls.Add(dynamicHelpToolbar); dynamicHelpToolbar.Dock = DockStyle.Top; dynamicHelpToolbar.AllowItemReorder = false; + dynamicHelpToolbar.ShowItemToolTips = false; dynamicHelpToolbar.Enabled = HtmlHelp2Environment.IsReady; for(int i = 0; i < toolbarButtons.Length; i++) { ToolStripButton button = new ToolStripButton(); - button.ToolTipText = StringParser.Parse(toolbarButtons[i]); + button.Text = StringParser.Parse(toolbarButtons[i]); button.ImageIndex = i; button.Click += new EventHandler(this.ToolStripButtonClicked); @@ -372,10 +383,6 @@ namespace HtmlHelp2 } } - private void DynamicHelpBrowserCreated(object sender, EventArgs e) - { - } - private void LoadDynamicHelpPage() { if(!HtmlHelp2Environment.IsReady) return; @@ -484,7 +491,7 @@ namespace HtmlHelp2 HtmlElement b = axWebBrowser.Document.CreateElement("b"); b.InnerText = sectionName; - b.Style = "cursor:pointer"; + b.Style = "cursor:auto"; b.Id = this.internalIndex.ToString(); b.Click += new HtmlElementEventHandler(this.OnSectionClick); span.AppendChild(b); @@ -536,6 +543,20 @@ namespace HtmlHelp2 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) { try diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs index 262e0b6528..a625318011 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Dialog.cs @@ -93,6 +93,7 @@ namespace HtmlHelp2.HelperDialog this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; + this.ControlBox = false; this.Name = "HtmlHelp2Dialog"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "HtmlHelp2Dialog"; diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs index 19c81ea30b..78894ff4e4 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/HtmlHelp2Service.cs @@ -93,8 +93,7 @@ namespace HtmlHelp2.Environment XmlNode node = xmldoc.SelectSingleNode("/help2environment/collection"); if(node != null) DefaultNamespaceName = node.InnerText; - LoggingService.Info(String.Format("Help 2.0: using \"{0}\" as default namespace", - DefaultNamespaceName)); + LoggingService.Info("Help 2.0: using saved configuration"); } catch { @@ -283,8 +282,8 @@ namespace HtmlHelp2.Environment try { - topics = ((IHxIndex)dynamicHelp).GetTopicsFromString(searchTerm, 0); - LoggingService.Info("Help 2.0: Dynamic Help successfully called"); + topics = dynamicHelp.GetTopicsFromString(searchTerm, 0); + LoggingService.Info("Help 2.0: Dynamic Help called"); } catch { @@ -293,25 +292,6 @@ namespace HtmlHelp2.Environment dynamicHelpIsBusy = false; 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 #region Event Handling diff --git a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs index a9f505a054..0c7c6dc439 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs +++ b/src/AddIns/Misc/HtmlHelp2/Project/src/Service/SharpDevLanguageClass.cs @@ -9,6 +9,7 @@ namespace HtmlHelp2.SharpDevLanguageClass { using System; using System.Collections.Generic; + using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; 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) { return CheckTopicLanguage(topic, ProjectService.CurrentProject.Language); @@ -46,6 +68,16 @@ namespace HtmlHelp2.SharpDevLanguageClass 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() { return GetPatchedLanguage(ProjectService.CurrentProject.Language);