diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2012-10-29 16:28:50 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2012-10-29 16:31:54 +0400 |
commit | bd02a7b4f92735a32c6ea679640769ad2991d401 (patch) | |
tree | c7ed0ed802808f4b89a1fae4c39ccb1ca410cc0f /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content | |
parent | 1a74c202e879d03a0143302fab60c1e23d3fd7ec (diff) |
Fixed 'Bug 5737 - MD doesn't filter tooltips on named argument'.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content/CompletionTextEditorExtension.cs | 53 |
1 files changed, 42 insertions, 11 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content/CompletionTextEditorExtension.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content/CompletionTextEditorExtension.cs index 46b9e840d3..5b2b04343d 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content/CompletionTextEditorExtension.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Content/CompletionTextEditorExtension.cs @@ -41,7 +41,7 @@ namespace MonoDevelop.Ide.Gui.Content { CodeCompletionContext currentCompletionContext; - bool autoHideCompletionWindow = true; + bool autoHideCompletionWindow = true, autoHideParameterWindow = true; #region Completion related IDE public readonly static PropertyWrapper<bool> EnableCodeCompletion = PropertyService.Wrap ("EnableCodeCompletion", true); @@ -78,20 +78,24 @@ namespace MonoDevelop.Ide.Gui.Content if (CompletionWindowManager.PreProcessKeyEvent (key, keyChar, modifier)) { CompletionWindowManager.PostProcessKeyEvent (key, keyChar, modifier); autoHideCompletionWindow = true; + // in named parameter case leave the parameter window open. + autoHideParameterWindow = keyChar != ':'; + if (!autoHideParameterWindow && ParameterInformationWindowManager.IsWindowVisible) + ParameterInformationWindowManager.PostProcessKeyEvent (this, CompletionWidget, key, modifier); + return false; } - autoHideCompletionWindow = false; + autoHideCompletionWindow = autoHideParameterWindow = false; } if (ParameterInformationWindowManager.IsWindowVisible) { if (ParameterInformationWindowManager.ProcessKeyEvent (this, CompletionWidget, key, modifier)) return false; - autoHideCompletionWindow = false; + autoHideCompletionWindow = autoHideParameterWindow = false; } // int oldPos = Editor.CursorPosition; // int oldLen = Editor.TextLength; - res = base.KeyPress (key, keyChar, modifier); CompletionWindowManager.PostProcessKeyEvent (key, keyChar, modifier); @@ -102,7 +106,7 @@ namespace MonoDevelop.Ide.Gui.Content if (ParameterInformationWindowManager.IsWindowVisible) { ParameterInformationWindowManager.PostProcessKeyEvent (this, CompletionWidget, key, modifier); } - + if ((modifier & ignoreMods) != 0) return res; @@ -136,9 +140,8 @@ namespace MonoDevelop.Ide.Gui.Content if (paramProvider != null) ParameterInformationWindowManager.ShowWindow (this, CompletionWidget, ctx, paramProvider); } - - autoHideCompletionWindow = true; - +/* autoHideCompletionWindow = true; + autoHideParameterWindow = keyChar != ':';*/ return res; } @@ -158,7 +161,7 @@ namespace MonoDevelop.Ide.Gui.Content else currentCompletionContext = null; } - autoHideCompletionWindow = true; + autoHideCompletionWindow = autoHideParameterWindow = true; } public virtual int GetCurrentParameterIndex (int startOffset) @@ -169,10 +172,10 @@ namespace MonoDevelop.Ide.Gui.Content protected void OnCompletionContextChanged (object o, EventArgs a) { - if (autoHideCompletionWindow) { + if (autoHideCompletionWindow) CompletionWindowManager.HideWindow (); + if (autoHideParameterWindow) ParameterInformationWindowManager.HideWindow (this, CompletionWidget); - } } [CommandUpdateHandler (TextEditorCommands.ShowCompletionWindow)] @@ -392,6 +395,34 @@ namespace MonoDevelop.Ide.Gui.Content return cp; return null; } + + public virtual int GuessBestMethodOverload (IParameterDataProvider provider, int currentOverload) + { + int cparam = GetCurrentParameterIndex (provider.StartOffset); + + if (cparam > provider.GetParameterCount (currentOverload) && !provider.AllowParameterList (currentOverload)) { + // Look for an overload which has more parameters + int bestOverload = -1; + int bestParamCount = int.MaxValue; + for (int n=0; n<provider.Count; n++) { + int pc = provider.GetParameterCount (n); + if (pc < bestParamCount && pc >= cparam) { + bestOverload = n; + bestParamCount = pc; + } + } + if (bestOverload == -1) { + for (int n=0; n<provider.Count; n++) { + if (provider.AllowParameterList (n)) { + bestOverload = n; + break; + } + } + } + return bestOverload; + } + return -1; + } public override void Initialize () { |