Browse Source

Allow completion list and items to handle insertion of text.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3929 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
7f94fc4146
  1. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditTextEditorAdapter.cs
  2. 26
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs
  3. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/DocumentColorizingTransformer.cs
  4. 7
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs
  5. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs
  6. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 5
      src/Main/Base/Project/Src/TextEditor/CodeCompletionItemProvider.cs
  8. 37
      src/Main/Base/Project/Src/TextEditor/CompletionContext.cs
  9. 5
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs
  10. 1
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs
  11. 10
      src/Main/Base/Project/Src/TextEditor/ICompletionItem.cs
  12. 15
      src/Main/Base/Project/Src/TextEditor/ICompletionItemList.cs

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditTextEditorAdapter.cs

@ -115,7 +115,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -115,7 +115,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
protected virtual CompletionWindow CreateCompletionWindow(ICompletionItemList data)
{
return new SharpDevelopCompletionWindow(textEditor.TextArea, data);
return new SharpDevelopCompletionWindow(this, textEditor.TextArea, data);
}
public object GetService(Type serviceType)

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

@ -22,14 +22,23 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -22,14 +22,23 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
readonly ICompletionItemList itemList;
public SharpDevelopCompletionWindow(TextArea textArea, ICompletionItemList itemList) : base(textArea)
public ICompletionItemList ItemList {
get { return itemList; }
}
public ITextEditor Editor { get; private set; }
public SharpDevelopCompletionWindow(ITextEditor editor, TextArea textArea, ICompletionItemList itemList) : base(textArea)
{
if (editor == null)
throw new ArgumentNullException("editor");
if (itemList == null)
throw new ArgumentNullException("itemList");
this.Editor = editor;
this.itemList = itemList;
ICompletionItem suggestedItem = itemList.SuggestedItem;
foreach (ICompletionItem item in itemList.Items) {
ICompletionData adapter = new CodeCompletionDataAdapter(item);
ICompletionData adapter = new CodeCompletionDataAdapter(this, item);
this.CompletionList.CompletionData.Add(adapter);
if (item == suggestedItem)
this.CompletionList.SelectedItem = adapter;
@ -68,12 +77,16 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -68,12 +77,16 @@ namespace ICSharpCode.AvalonEdit.AddIn
sealed class CodeCompletionDataAdapter : ICompletionData
{
readonly SharpDevelopCompletionWindow window;
readonly ICompletionItem item;
public CodeCompletionDataAdapter(ICompletionItem item)
public CodeCompletionDataAdapter(SharpDevelopCompletionWindow window, ICompletionItem item)
{
if (window == null)
throw new ArgumentNullException("window");
if (item == null)
throw new ArgumentNullException("item");
this.window = window;
this.item = item;
}
@ -97,7 +110,12 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -97,7 +110,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
public void Complete(TextArea textArea, ISegment completionSegment)
{
textArea.Document.Replace(completionSegment, item.Text);
CompletionContext context = new CompletionContext {
Editor = window.Editor,
StartOffset = window.StartOffset,
EndOffset = window.EndOffset
};
window.ItemList.Complete(context, item);
}
}
}

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Gui/DocumentColorizingTransformer.cs

@ -30,6 +30,8 @@ namespace ICSharpCode.AvalonEdit.Gui @@ -30,6 +30,8 @@ namespace ICSharpCode.AvalonEdit.Gui
/// <inheritdoc/>
protected override void Colorize(ITextRunConstructionContext context)
{
if (context == null)
throw new ArgumentNullException("context");
this.CurrentContext = context;
currentDocumentLine = context.VisualLine.FirstDocumentLine;

7
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs

@ -28,6 +28,13 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -28,6 +28,13 @@ namespace ICSharpCode.AvalonEdit.Highlighting
readonly TextDocument document;
readonly HighlightingRuleSet baseRuleSet;
/// <summary>
/// Gets the document that this DocumentHighlighter is highlighting.
/// </summary>
public TextDocument Document {
get { return document; }
}
/// <summary>
/// Creates a new DocumentHighlighter instance.
/// </summary>

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs

@ -142,7 +142,9 @@ namespace ICSharpCode.AvalonEdit.Highlighting @@ -142,7 +142,9 @@ namespace ICSharpCode.AvalonEdit.Highlighting
{
base.OnHighlightStateChanged(line, lineNumber);
if (colorizer.currentLineEndOffset >= 0) {
int length = colorizer.CurrentContext.Document.TextLength - colorizer.currentLineEndOffset;
// Do not use colorizer.CurrentContext - the colorizer might not be the only
// class calling DocumentHighlighter.HighlightLine, the the context might be null.
int length = this.Document.TextLength - colorizer.currentLineEndOffset;
if (length != 0) {
// don't redraw if length == 0: at the end of the document, this would cause
// the last line which was already constructed to be redrawn ->

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

@ -555,6 +555,7 @@ @@ -555,6 +555,7 @@
<Compile Include="Src\TextEditor\Actions.cs" />
<Compile Include="Src\TextEditor\CharacterEncodings.cs" />
<Compile Include="Src\TextEditor\Gui\TextEditorAdapter.cs" />
<Compile Include="Src\TextEditor\CompletionContext.cs" />
<Compile Include="Src\TextEditor\ICompletionItem.cs" />
<Compile Include="Src\TextEditor\ICompletionItemList.cs" />
<Compile Include="Src\TextEditor\ITextEditor.cs" />

5
src/Main/Base/Project/Src/TextEditor/CodeCompletionItemProvider.cs

@ -203,6 +203,11 @@ namespace ICSharpCode.SharpDevelop @@ -203,6 +203,11 @@ namespace ICSharpCode.SharpDevelop
public int Overloads { get; set; }
public virtual void Complete(CompletionContext context)
{
context.Editor.Document.Replace(context.StartOffset, context.Length, this.Text);
}
#region Description
string description;
bool descriptionCreated;

37
src/Main/Base/Project/Src/TextEditor/CompletionContext.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision: 3925 $</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop
{
/// <summary>
/// Container class for the parameters available to the Complete function.
/// </summary>
public class CompletionContext
{
/// <summary>
/// Gets/Sets the editor in which completion is performed.
/// </summary>
public ITextEditor Editor { get; set; }
/// <summary>
/// Gets/Sets the start offset of the completion range.
/// </summary>
public int StartOffset { get; set; }
/// <summary>
/// Gets/Sets the end offset of the completion range.
/// </summary>
public int EndOffset { get; set; }
/// <summary>
/// Gets the length between EndOffset and StartOffset.
/// </summary>
public int Length { get { return EndOffset - StartOffset; } }
}
}

5
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs

@ -57,6 +57,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -57,6 +57,11 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
+ template.Text;
}
}
public void Complete(CompletionContext context)
{
context.Editor.Document.Replace(context.StartOffset, context.Length, template.Text);
}
}
}
}

1
src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs

@ -185,7 +185,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -185,7 +185,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
private class ContextCompletionItemList : DefaultCompletionItemList
{
internal char activationKey;
readonly ICompletionItemList baseList;
public override CompletionItemListKeyResult ProcessInput(char key)
{

10
src/Main/Base/Project/Src/TextEditor/ICompletionItem.cs

@ -16,6 +16,11 @@ namespace ICSharpCode.SharpDevelop @@ -16,6 +16,11 @@ namespace ICSharpCode.SharpDevelop
{
string Text { get; }
string Description { get; }
/// <summary>
/// Performs code completion for the item.
/// </summary>
void Complete(CompletionContext context);
}
public class DefaultCompletionItem : ICompletionItem
@ -27,5 +32,10 @@ namespace ICSharpCode.SharpDevelop @@ -27,5 +32,10 @@ namespace ICSharpCode.SharpDevelop
{
this.Text = text;
}
public virtual void Complete(CompletionContext context)
{
context.Editor.Document.Replace(context.StartOffset, context.Length, this.Text);
}
}
}

15
src/Main/Base/Project/Src/TextEditor/ICompletionItemList.cs

@ -36,8 +36,15 @@ namespace ICSharpCode.SharpDevelop @@ -36,8 +36,15 @@ namespace ICSharpCode.SharpDevelop
/// Processes the specified key press.
/// </summary>
CompletionItemListKeyResult ProcessInput(char key);
/// <summary>
/// Performs code completion for the selected item.
/// </summary>
void Complete(CompletionContext context, ICompletionItem item);
}
public enum CompletionItemListKeyResult
{
/// <summary>
@ -102,5 +109,13 @@ namespace ICSharpCode.SharpDevelop @@ -102,5 +109,13 @@ namespace ICSharpCode.SharpDevelop
return CompletionItemListKeyResult.InsertionKey;
}
}
/// <inheritdoc/>
public virtual void Complete(CompletionContext context, ICompletionItem item)
{
if (item == null)
throw new ArgumentNullException("item");
item.Complete(context);
}
}
}

Loading…
Cancel
Save