Browse Source

CC window shows the hint "Press Ctrl+Space to show items from all namespaces" only if Ctrl+Space was not already pressed, and only for NRefactoryCodeCompletionBinding (C# and VB languages).

Implementation:
- added bool ICompletionItemList.ContainsAllAvailableItems - the list tells if it could contain even more items and anyone displaying it (SharpDevelopCompletionWindow) can handle this
- bool ContainsAllAvailableItems is always true except for NRefactoryCompletionItemList returned by NRefactoryCtrlSpaceCompletionItemProvider, where it can be set to false

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5906 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Martin Koníček 15 years ago
parent
commit
f2a39ffa73
  1. 9
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs
  2. 6
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionItemCollection.cs
  3. 14
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs
  4. 42
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindowBase.cs
  5. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  6. 5
      src/Main/Base/Project/Src/Editor/CodeCompletion/CtrlSpaceCompletionItemProvider.cs
  7. 12
      src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItemList.cs
  8. 2
      src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCodeCompletionBinding.cs
  9. 29
      src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCompletionItemList.cs

9
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs

@ -74,7 +74,10 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -74,7 +74,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (itemList == null)
throw new ArgumentNullException("itemList");
this.EmptyText = StringParser.Parse("${res:ICSharpCode.AvalonEdit.AddIn.SharpDevelopCompletionWindow.EmptyText}");
if (!itemList.ContainsAllAvailableItems) {
// If more items are available (Ctrl+Space wasn't pressed), show this hint
this.EmptyText = StringParser.Parse("${res:ICSharpCode.AvalonEdit.AddIn.SharpDevelopCompletionWindow.EmptyText}");
}
InitializeComponent();
this.Editor = editor;
@ -92,7 +95,9 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -92,7 +95,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
public static readonly DependencyProperty EmptyTextProperty =
DependencyProperty.Register("EmptyText", typeof(string), typeof(SharpDevelopCompletionWindow),
new FrameworkPropertyMetadata());
/// <summary>
/// The text thats is displayed when the <see cref="ItemList" /> is empty.
/// </summary>
public string EmptyText {
get { return (string)GetValue(EmptyTextProperty); }
set { SetValue(EmptyTextProperty, value); }

6
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionItemCollection.cs

@ -38,6 +38,12 @@ namespace ICSharpCode.XmlEditor @@ -38,6 +38,12 @@ namespace ICSharpCode.XmlEditor
get { return Count > 0; }
}
public bool ContainsAllAvailableItems {
get {
return true;
}
}
public void Sort()
{
List<XmlCompletionItem> items = base.Items as List<XmlCompletionItem>;

14
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindow.cs

@ -26,6 +26,13 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -26,6 +26,13 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
readonly CompletionList completionList = new CompletionList();
ToolTip toolTip = new ToolTip();
/// <summary>
/// Gets the completion list used in this completion window.
/// </summary>
public CompletionList CompletionList {
get { return completionList; }
}
/// <summary>
/// Creates a new code completion window.
/// </summary>
@ -181,12 +188,5 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -181,12 +188,5 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
}
}
}
/// <summary>
/// Gets the completion list used in this completion window.
/// </summary>
public CompletionList CompletionList {
get { return completionList; }
}
}
}

42
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/CodeCompletion/CompletionWindowBase.cs

@ -38,8 +38,18 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -38,8 +38,18 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
Window parentWindow;
TextDocument document;
int startOffset;
int endOffset;
/// <summary>
/// Gets/Sets the start of the text range in which the completion window stays open.
/// This text portion is used to determine the text used to select an entry in the completion list by typing.
/// </summary>
public int StartOffset { get; set; }
/// <summary>
/// Gets/Sets the end of the text range in which the completion window stays open.
/// This text portion is used to determine the text used to select an entry in the completion list by typing.
/// </summary>
public int EndOffset { get; set; }
/// <summary>
/// Creates a new CompletionWindowBase.
@ -53,7 +63,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -53,7 +63,7 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
this.Owner = parentWindow;
this.AddHandler(MouseUpEvent, new MouseButtonEventHandler(OnMouseUp), true);
startOffset = endOffset = this.TextArea.Caret.Offset;
StartOffset = EndOffset = this.TextArea.Caret.Offset;
AttachEvents();
}
@ -312,24 +322,6 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -312,24 +322,6 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
this.Top = bounds.Y;
}
/// <summary>
/// Gets/Sets the start of the text range in which the completion window stays open.
/// This text portion is used to determine the text used to select an entry in the completion list by typing.
/// </summary>
public int StartOffset {
get { return startOffset; }
set { startOffset = value; }
}
/// <summary>
/// Gets/Sets the end of the text range in which the completion window stays open.
/// This text portion is used to determine the text used to select an entry in the completion list by typing.
/// </summary>
public int EndOffset {
get { return endOffset; }
set { endOffset = value; }
}
/// <summary>
/// Gets/sets whether the completion window should expect text insertion at the start offset,
/// which not go into the completion region, but before it.
@ -344,13 +336,13 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion @@ -344,13 +336,13 @@ namespace ICSharpCode.AvalonEdit.CodeCompletion
Close(); // removal immediately in front of completion segment: close the window
// this is necessary when pressing backspace after dot-completion
}
if (e.Offset == startOffset && e.RemovalLength == 0 && ExpectInsertionBeforeStart) {
startOffset = e.GetNewOffset(startOffset, AnchorMovementType.AfterInsertion);
if (e.Offset == StartOffset && e.RemovalLength == 0 && ExpectInsertionBeforeStart) {
StartOffset = e.GetNewOffset(StartOffset, AnchorMovementType.AfterInsertion);
this.ExpectInsertionBeforeStart = false;
} else {
startOffset = e.GetNewOffset(startOffset, AnchorMovementType.BeforeInsertion);
StartOffset = e.GetNewOffset(StartOffset, AnchorMovementType.BeforeInsertion);
}
endOffset = e.GetNewOffset(endOffset, AnchorMovementType.AfterInsertion);
EndOffset = e.GetNewOffset(EndOffset, AnchorMovementType.AfterInsertion);
}
}
}

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -92,6 +92,7 @@ @@ -92,6 +92,7 @@
<Compile Include="Src\Editor\AvalonEdit\IndentationStrategyAdapter.cs" />
<Compile Include="Src\Editor\AvalonEdit\ISnippetElementProvider.cs" />
<Compile Include="Src\Editor\CodeCompletion\ICompletionItemHandler.cs" />
<Compile Include="Src\Editor\CodeCompletion\NRefactoryCompletionItemList.cs" />
<Compile Include="Src\Editor\IEditorUIService.cs" />
<Compile Include="Src\Editor\CodeCompletion\AttributesItemProvider.cs" />
<Compile Include="Src\Editor\CodeCompletion\CodeCompletionBinding.cs" />

5
src/Main/Base/Project/Src/Editor/CodeCompletion/CtrlSpaceCompletionItemProvider.cs

@ -116,6 +116,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -116,6 +116,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
this.language = language;
}
protected override DefaultCompletionItemList CreateCompletionItemList()
{
return new NRefactoryCompletionItemList() { ContainsItemsFromAllNamespaces = this.ShowItemsFromAllNamespaces };
}
protected override List<ICompletionEntry> CtrlSpace(ITextEditor editor, ExpressionContext context)
{
var resolver = new Dom.NRefactoryResolver.NRefactoryResolver(language);

12
src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItemList.cs

@ -34,6 +34,13 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -34,6 +34,13 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// </summary>
CompletionItemListKeyResult ProcessInput(char key);
/// <summary>
/// True if this list contains all items that were available.
/// False if this list could contain even more items
/// (e.g. by including items from all referenced projects, regardless of imports).
/// </summary>
bool ContainsAllAvailableItems { get; }
/// <summary>
/// Performs code completion for the selected item.
/// </summary>
@ -68,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -68,6 +75,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
get { return items; }
}
/// <inheritdoc />
public virtual bool ContainsAllAvailableItems {
get { return true; }
}
/// <summary>
/// Sorts the items by their text.
/// </summary>

2
src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCodeCompletionBinding.cs

@ -64,7 +64,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -64,7 +64,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
NRefactoryCtrlSpaceCompletionItemProvider provider = new NRefactoryCtrlSpaceCompletionItemProvider(languageProperties);
provider.AllowCompleteExistingExpression = true;
// on Ctrl+Space, include members (e.g. extension methods) from all namespaces, regardless of imports
// on Ctrl+Space, include items (e.g. types / extension methods) from all namespaces, regardless of imports
provider.ShowItemsFromAllNamespaces = true;
provider.ShowCompletion(editor);
return true;

29
src/Main/Base/Project/Src/Editor/CodeCompletion/NRefactoryCompletionItemList.cs

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Martin Konicek" email="martin.konicek@gmail.com"/>
// <version>$Revision: $</version>
// </file>
using System;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
{
/// <summary>
/// <see cref="ICompletionItemList" /> created by <see cref="NRefactoryCtrlSpaceCompletionItemProvider" />.
/// </summary>
public class NRefactoryCompletionItemList : DefaultCompletionItemList
{
/// <summary>
/// <see cref="NRefactoryCtrlSpaceCompletionItemProvider" /> sets this to true if this list contains items
/// from all namespaces, regardless of current imports.
/// </summary>
public bool ContainsItemsFromAllNamespaces { get; set; }
/// <inheritdoc />
public override bool ContainsAllAvailableItems
{
get { return ContainsItemsFromAllNamespaces; }
}
}
}
Loading…
Cancel
Save