Browse Source

AvalonEdit code completion

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3909 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
fd9e16c394
  1. 6
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/CompletionBinding.cs
  2. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/InteractiveInterpreter.cs
  3. 16
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  4. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs
  5. 13
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonCodeCompletionBinding.cs
  6. 4
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockTextEditorViewContent.cs
  7. 8
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  8. 8
      src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs
  9. 12
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditTextEditorAdapter.cs
  10. 6
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlView.cs
  11. 2
      src/Libraries/NRefactory/Project/NRefactory.csproj
  12. 28
      src/Main/Base/Project/Src/TextEditor/Actions.cs
  13. 43
      src/Main/Base/Project/Src/TextEditor/CodeCompletionItemProvider.cs
  14. 59
      src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs
  15. 4
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs
  16. 31
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AttributesDataProvider.cs
  17. 65
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs
  18. 54
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs
  19. 2
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/ITextAreaControlProvider.cs
  20. 49
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs
  21. 8
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs
  22. 6
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs
  23. 6
      src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs
  24. 5
      src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs
  25. 15
      src/Main/Base/Project/Src/TextEditor/ICompletionItemList.cs
  26. 15
      src/Main/Base/Project/Src/TextEditor/ITextEditor.cs
  27. 2
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
  28. 1
      src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj
  29. 4
      src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs
  30. 23
      src/Main/ICSharpCode.Core.Presentation/Properties/CodeAnalysisDictionary.xml
  31. 4
      src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs

6
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/CompletionBinding.cs

@ -27,7 +27,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -27,7 +27,7 @@ namespace Grunwald.BooBinding.CodeCompletion
char c = editor.Document.GetCharAt(i);
if (c == '\n' || c == '(' || c == ',') {
// -> Attribute completion
editor.ShowCompletionWindow(new AttributesDataProvider(ExpressionFinder.BooAttributeContext.Instance), ch);
new AttributesItemProvider(ExpressionFinder.BooAttributeContext.Instance).ShowCompletion(editor);
return CodeCompletionKeyPressResult.Completed;
}
if (!char.IsWhiteSpace(c))
@ -48,12 +48,12 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -48,12 +48,12 @@ namespace Grunwald.BooBinding.CodeCompletion
{
switch (word.ToLowerInvariant()) {
case "import":
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Importable), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Importable).ShowCompletion(editor);
return true;
case "as":
case "isa":
if (!IsInComment(editor)) {
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
}
break;

2
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/InteractiveInterpreter.cs

@ -5,10 +5,10 @@ @@ -5,10 +5,10 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using System;
using System.Reflection;
using System.Windows.Forms;
using Boo.Lang.Interpreter;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;

16
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs

@ -41,7 +41,7 @@ namespace CSharpBinding @@ -41,7 +41,7 @@ namespace CSharpBinding
if (ch == '(') {
if (context != null) {
if (IsInComment(editor)) return CodeCompletionKeyPressResult.None;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(context), ch);
new CtrlSpaceCompletionItemProvider(context).ShowCompletion(editor);
return CodeCompletionKeyPressResult.Completed;
} else if (EnableMethodInsight && CodeCompletionOptions.InsightEnabled) {
editor.ShowInsightWindow(new MethodInsightDataProvider());
@ -126,10 +126,10 @@ namespace CSharpBinding @@ -126,10 +126,10 @@ namespace CSharpBinding
ExpressionResult result = ef.FindExpression(editor.Document.Text, cursor);
LoggingService.Debug("CC: Beginning to type a word, result=" + result);
if (result.Context != ExpressionContext.IdentifierExpected) {
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(result.Context) {
ShowTemplates = true,
AllowCompleteExistingExpression = afterUnderscore
}, '\0');
var ctrlSpaceProvider = new CtrlSpaceCompletionItemProvider(result.Context);
ctrlSpaceProvider.ShowTemplates = true;
ctrlSpaceProvider.AllowCompleteExistingExpression = afterUnderscore;
ctrlSpaceProvider.ShowCompletion(editor);
return CodeCompletionKeyPressResult.Completed;
}
}
@ -187,7 +187,7 @@ namespace CSharpBinding @@ -187,7 +187,7 @@ namespace CSharpBinding
if (parseInfo != null) {
IClass innerMostClass = parseInfo.MostRecentCompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column);
if (innerMostClass == null) {
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Namespace), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Namespace).ShowCompletion(editor);
return true;
}
}
@ -195,7 +195,7 @@ namespace CSharpBinding @@ -195,7 +195,7 @@ namespace CSharpBinding
case "as":
case "is":
if (IsInComment(editor)) return false;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
case "override":
if (IsInComment(editor)) return false;
@ -237,7 +237,7 @@ namespace CSharpBinding @@ -237,7 +237,7 @@ namespace CSharpBinding
if (context != null)
expressionResult.Context = context;
}
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(expressionResult.Context), ' ');
new CtrlSpaceCompletionItemProvider(expressionResult.Context).ShowCompletion(editor);
return true;
}
return false;

13
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonCodeCompletionBinding.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using System;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
@ -32,7 +33,7 @@ namespace ICSharpCode.PythonBinding @@ -32,7 +33,7 @@ namespace ICSharpCode.PythonBinding
switch (word.ToLowerInvariant()) {
case "import":
case "from":
CtrlSpaceCompletionDataProvider dataProvider = CreateCtrlSpaceCompletionDataProvider(ExpressionContext.Importable);
CtrlSpaceCompletionItemProvider dataProvider = CreateCtrlSpaceCompletionDataProvider(ExpressionContext.Importable);
ShowCodeCompletionWindow(editor, dataProvider, ' ');
return true;
}
@ -41,19 +42,19 @@ namespace ICSharpCode.PythonBinding @@ -41,19 +42,19 @@ namespace ICSharpCode.PythonBinding
}
/// <summary>
/// Creates a CtrlSpaceCompletionDataProvider.
/// Creates a CtrlSpaceCompletionItemProvider.
/// </summary>
protected virtual CtrlSpaceCompletionDataProvider CreateCtrlSpaceCompletionDataProvider(ExpressionContext expressionContext)
protected virtual CtrlSpaceCompletionItemProvider CreateCtrlSpaceCompletionDataProvider(ExpressionContext expressionContext)
{
return new CtrlSpaceCompletionDataProvider(expressionContext);
return new CtrlSpaceCompletionItemProvider(expressionContext);
}
/// <summary>
/// Shows the code completion window.
/// </summary>
protected virtual void ShowCodeCompletionWindow(ICSharpCode.SharpDevelop.ITextEditor textAreaControl, ICompletionDataProvider completionDataProvider, char ch)
protected virtual void ShowCodeCompletionWindow(ICSharpCode.SharpDevelop.ITextEditor editor, AbstractCompletionItemProvider completionItemProvider, char ch)
{
textAreaControl.ShowCompletionWindow(completionDataProvider, ch);
completionItemProvider.ShowCompletion(editor);
}
}
}

13
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/DerivedPythonCodeCompletionBinding.cs

@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop;
using System;
using ICSharpCode.PythonBinding;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
@ -22,8 +23,8 @@ namespace PythonBinding.Tests.Utils @@ -22,8 +23,8 @@ namespace PythonBinding.Tests.Utils
bool ctrlSpaceCompletionDataProviderCreated;
bool codeCompletionWindowDisplayed;
ICSharpCode.SharpDevelop.ITextEditor textAreaControlUsedToShowCompletionWindow;
ICompletionDataProvider completionProviderUsedWhenDisplayingCodeCompletionWindow;
CtrlSpaceCompletionDataProvider ctrlSpaceCompletionDataProvider;
AbstractCompletionItemProvider completionProviderUsedWhenDisplayingCodeCompletionWindow;
CtrlSpaceCompletionItemProvider ctrlSpaceCompletionDataProvider;
char completionCharacter = '\0';
ExpressionContext expressionContext;
@ -57,7 +58,7 @@ namespace PythonBinding.Tests.Utils @@ -57,7 +58,7 @@ namespace PythonBinding.Tests.Utils
}
}
public ICompletionDataProvider CompletionProviderUsedWhenDisplayingCodeCompletionWindow {
public AbstractCompletionItemProvider CompletionProviderUsedWhenDisplayingCodeCompletionWindow {
get {
return completionProviderUsedWhenDisplayingCodeCompletionWindow;
}
@ -67,7 +68,7 @@ namespace PythonBinding.Tests.Utils @@ -67,7 +68,7 @@ namespace PythonBinding.Tests.Utils
/// Gets the CtrlSpaceCompletionDataProvider created via the
/// CreateCtrlSpaceCompletionDataProvider method.
/// </summary>
public CtrlSpaceCompletionDataProvider CtrlSpaceCompletionDataProvider {
public CtrlSpaceCompletionItemProvider CtrlSpaceCompletionDataProvider {
get {
return ctrlSpaceCompletionDataProvider;
}
@ -97,7 +98,7 @@ namespace PythonBinding.Tests.Utils @@ -97,7 +98,7 @@ namespace PythonBinding.Tests.Utils
/// Overrides the completion data provider creation to make sure
/// it is called at the correct time.
/// </summary>
protected override CtrlSpaceCompletionDataProvider CreateCtrlSpaceCompletionDataProvider(ExpressionContext expressionContext)
protected override CtrlSpaceCompletionItemProvider CreateCtrlSpaceCompletionDataProvider(ExpressionContext expressionContext)
{
ctrlSpaceCompletionDataProviderCreated = true;
this.expressionContext = expressionContext;
@ -110,7 +111,7 @@ namespace PythonBinding.Tests.Utils @@ -110,7 +111,7 @@ namespace PythonBinding.Tests.Utils
/// not displayed but the fact that this method is called is
/// recorded.
/// </summary>
protected override void ShowCodeCompletionWindow(ICSharpCode.SharpDevelop.ITextEditor textEditor, ICompletionDataProvider completionDataProvider, char ch)
protected override void ShowCodeCompletionWindow(ICSharpCode.SharpDevelop.ITextEditor textEditor, AbstractCompletionItemProvider completionDataProvider, char ch)
{
textAreaControlUsedToShowCompletionWindow = textEditor;
codeCompletionWindowDisplayed = true;

4
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockTextEditorViewContent.cs

@ -30,6 +30,10 @@ namespace PythonBinding.Tests.Utils @@ -30,6 +30,10 @@ namespace PythonBinding.Tests.Utils
get { return textEditor; }
}
public ITextEditor TextEditor {
get { throw new NotImplementedException(); }
}
public IDocument GetDocumentForFile(OpenedFile file)
{
throw new NotImplementedException();

8
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs

@ -65,19 +65,19 @@ namespace VBNetBinding @@ -65,19 +65,19 @@ namespace VBNetBinding
return true;
case "as":
if (IsInComment(editor)) return false;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
case "new":
if (IsInComment(editor)) return false;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.ObjectCreation), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.ObjectCreation).ShowCompletion(editor);
return true;
case "inherits":
if (IsInComment(editor)) return false;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Type), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Type).ShowCompletion(editor);
return true;
case "implements":
if (IsInComment(editor)) return false;
editor.ShowCompletionWindow(new CtrlSpaceCompletionDataProvider(ExpressionContext.Interface), ' ');
new CtrlSpaceCompletionItemProvider(ExpressionContext.Interface).ShowCompletion(editor);
return true;
case "overrides":
if (IsInComment(editor)) return false;

8
src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs

@ -29,9 +29,11 @@ namespace WixBinding.Tests.Utils @@ -29,9 +29,11 @@ namespace WixBinding.Tests.Utils
#region ITextEditorControlProvider
public TextEditorControl TextEditorControl {
get {
return null;
}
get { throw new NotImplementedException(); }
}
public ITextEditor TextEditor {
get { throw new NotImplementedException(); }
}
public IDocument GetDocumentForFile(OpenedFile file)

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

@ -118,11 +118,6 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -118,11 +118,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
return new SharpDevelopCompletionWindow(textEditor.TextArea, data);
}
public string GetWordBeforeCaret()
{
throw new NotImplementedException();
}
public object GetService(Type serviceType)
{
return textEditor.TextArea.GetService(serviceType);
@ -144,5 +139,12 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -144,5 +139,12 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
textEditor.Select(selectionStart, selectionLength);
}
public void JumpTo(int line, int column)
{
textEditor.TextArea.Selection = Selection.Empty;
textEditor.TextArea.Caret.Position = new TextViewPosition(line, column, -1);
textEditor.TextArea.Caret.BringCaretToView();
}
}
}

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

@ -700,6 +700,12 @@ namespace ICSharpCode.XmlEditor @@ -700,6 +700,12 @@ namespace ICSharpCode.XmlEditor
}
}
public ITextEditor TextEditor {
get {
return new TextEditorAdapter(xmlEditor);
}
}
public ICSharpCode.SharpDevelop.Dom.Refactoring.IDocument GetDocumentForFile(OpenedFile file)
{
if (file == this.PrimaryFile) {

2
src/Libraries/NRefactory/Project/NRefactory.csproj

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

28
src/Main/Base/Project/Src/TextEditor/Actions.cs

@ -21,7 +21,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions @@ -21,7 +21,8 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions
{
SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)services.MotherTextEditorControl;
services.AutoClearSelection = false;
sdtac.ShowCompletionWindow(new TemplateCompletionDataProvider() { AutomaticInsert = true }, '\0');
new TemplateCompletionItemProvider().ShowCompletion(sdtac.Adapter);
}
}
@ -44,31 +45,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions @@ -44,31 +45,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions
}
}
#if DEBUG
internal class DebugCtrlSpaceCodeCompletionAction : AbstractEditAction
{
public override void Execute(TextArea textArea)
{
SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl;
CtrlSpaceCompletionDataProvider provider = new CtrlSpaceCompletionDataProvider();
provider.AllowCompleteExistingExpression = true;
provider.DebugMode = true;
sdtac.ShowCompletionWindow(provider, '\0');
}
}
internal class DebugDotCompletionAction : AbstractEditAction
{
public override void Execute(TextArea textArea)
{
SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl;
CodeCompletionDataProvider ccdp = new CodeCompletionDataProvider();
ccdp.DebugMode = true;
sdtac.ShowCompletionWindow(ccdp, '.');
}
}
#endif
public class GoToDefinition : AbstractEditAction
{
public override void Execute(TextArea textArea)

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

@ -15,21 +15,37 @@ using System.Collections.Generic; @@ -15,21 +15,37 @@ using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop
{
/// <summary>
/// Allows creating a <see cref="ICompletionDataList"/> from code-completion information.
/// Base class for completion item providers.
/// </summary>
public class CodeCompletionItemProvider
/// <remarks>A completion item provider is not necessary to use code completion - it's
/// just a helper class.</remarks>
public abstract class AbstractCompletionItemProvider
{
/// <summary>
/// Shows code completion for the specified editor.
/// </summary>
public virtual void ShowCompletion(ITextEditor editor)
{
if (editor == null)
throw new ArgumentNullException("editor");
ICompletionItemList itemList = GenerateCompletionList(editor);
if (itemList != null)
editor.ShowCompletionWindow(itemList);
}
public virtual ICompletionItemList GenerateCompletionList(ITextEditor editor)
/// <summary>
/// Generates the completion list.
/// </summary>
public abstract ICompletionItemList GenerateCompletionList(ITextEditor editor);
}
/// <summary>
/// Allows creating a <see cref="ICompletionDataList"/> from code-completion information.
/// </summary>
public class CodeCompletionItemProvider : AbstractCompletionItemProvider
{
/// <inheritdoc/>
public override ICompletionItemList GenerateCompletionList(ITextEditor editor)
{
if (editor == null)
throw new ArgumentNullException("textEditor");
@ -91,8 +107,7 @@ namespace ICSharpCode.SharpDevelop @@ -91,8 +107,7 @@ namespace ICSharpCode.SharpDevelop
if (arr == null)
return null;
List<ICompletionItem> resultItems = new List<ICompletionItem>();
DefaultCompletionItemList result = new DefaultCompletionItemList(resultItems);
DefaultCompletionItemList result = new DefaultCompletionItemList();
Dictionary<string, CodeCompletionItem> methodItems = new Dictionary<string, CodeCompletionItem>();
foreach (object o in arr) {
if (context != null && !context.ShowEntry(o))
@ -109,7 +124,7 @@ namespace ICSharpCode.SharpDevelop @@ -109,7 +124,7 @@ namespace ICSharpCode.SharpDevelop
ICompletionItem item = CreateCompletionItem(o, context);
if (item != null) {
resultItems.Add(item);
result.Items.Add(item);
CodeCompletionItem codeItem = item as CodeCompletionItem;
if (method != null && codeItem != null) {
methodItems[method.Name] = codeItem;
@ -118,13 +133,13 @@ namespace ICSharpCode.SharpDevelop @@ -118,13 +133,13 @@ namespace ICSharpCode.SharpDevelop
result.SuggestedItem = item;
}
}
resultItems.Sort((a,b) => string.Compare(a.Text, b.Text, StringComparison.OrdinalIgnoreCase));
result.SortItems();
if (context.SuggestedItem != null) {
if (result.SuggestedItem == null) {
result.SuggestedItem = CreateCompletionItem(context.SuggestedItem, context);
if (result.SuggestedItem != null) {
resultItems.Insert(0, result.SuggestedItem);
result.Items.Insert(0, result.SuggestedItem);
}
}
}
@ -148,6 +163,12 @@ namespace ICSharpCode.SharpDevelop @@ -148,6 +163,12 @@ namespace ICSharpCode.SharpDevelop
public class CodeCompletionItem : ICompletionItem
{
// TODO: what to do with these properties?
[Obsolete]
public int ImageIndex { get; set; }
[Obsolete]
public double Priority { get; set; }
readonly IEntity entity;
public CodeCompletionItem(IEntity entity)
@ -164,7 +185,11 @@ namespace ICSharpCode.SharpDevelop @@ -164,7 +185,11 @@ namespace ICSharpCode.SharpDevelop
this.Overloads = 1;
}
public string Text { get; private set; }
public IEntity Entity {
get { return entity; }
}
public string Text { get; set; }
public int Overloads { get; set; }

59
src/Main/Base/Project/Src/TextEditor/Gui/Dialogs/GotoDialog.cs

@ -5,22 +5,20 @@ @@ -5,22 +5,20 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace ICSharpCode.SharpDevelop.Gui
{
@ -107,31 +105,34 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -107,31 +105,34 @@ namespace ICSharpCode.SharpDevelop.Gui
listBox.ScrollIntoView(listBox.Items[index]);
}
ICompletionData[] ctrlSpaceCompletionData;
IList<ICompletionItem> ctrlSpaceCompletionData;
ICompletionData[] GetCompletionData()
IList<ICompletionItem> GetCompletionData()
{
if (ctrlSpaceCompletionData != null)
return ctrlSpaceCompletionData;
TextEditorControl editor = GetEditor();
ITextEditor editor = GetEditor();
if (editor != null) {
CtrlSpaceCompletionDataProvider cdp = new CtrlSpaceCompletionDataProvider(ExpressionContext.Default);
ctrlSpaceCompletionData = cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '\0');
CtrlSpaceCompletionItemProvider cdp = new CtrlSpaceCompletionItemProvider(ExpressionContext.Default);
var completionList = cdp.GenerateCompletionList(editor);
ctrlSpaceCompletionData = completionList != null ? completionList.Items.ToList() : null;
}
if (ctrlSpaceCompletionData == null)
ctrlSpaceCompletionData = new ICompletionData[0];
ctrlSpaceCompletionData = emptyList;
return ctrlSpaceCompletionData;
}
ICompletionData[] Resolve(string expression)
static readonly IList<ICompletionItem> emptyList = new ICompletionItem[0];
IList<ICompletionItem> Resolve(string expression)
{
TextEditorControl editor = GetEditor();
ITextEditor editor = GetEditor();
if (editor != null) {
CodeCompletionDataProvider cdp = new CodeCompletionDataProvider(new ExpressionResult(expression));
return cdp.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, '.')
?? new ICompletionData[0];
CodeCompletionItemProvider cdp = new DotCodeCompletionItemProvider();
var list = cdp.GenerateCompletionListForExpression(editor, new ExpressionResult(expression));
return list != null ? list.Items.ToList() : emptyList;
}
return new ICompletionData[0];
return emptyList;
}
protected override void OnClosed(EventArgs e)
@ -249,7 +250,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -249,7 +250,7 @@ namespace ICSharpCode.SharpDevelop.Gui
{
int num;
if (int.TryParse(text, out num)) {
TextEditorControl editor = GetEditor();
ITextEditor editor = GetEditor();
if (editor != null) {
num = Math.Min(editor.Document.TotalNumberOfLines, Math.Max(1, num));
AddItem(StringParser.Parse("${res:Dialog.Goto.GotoLine} ") + num, ClassBrowserIconService.GotoArrowIndex, num, 0, int.MaxValue);
@ -257,20 +258,14 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -257,20 +258,14 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
void ShowCompletionData(ICompletionData[] dataList, string text)
void ShowCompletionData(IList<ICompletionItem> dataList, string text)
{
string lowerText = text.ToLowerInvariant();
foreach (ICompletionData data in dataList) {
CodeCompletionData ccd = data as CodeCompletionData;
if (ccd == null)
return;
string dataText = ccd.Text;
foreach (CodeCompletionItem data in dataList.OfType<CodeCompletionItem>()) {
string dataText = data.Text;
int matchType = GetMatchType(text, dataText);
if (matchType >= 0) {
if (ccd.Class != null)
AddItem(ccd.Class, data.ImageIndex, data.Priority, matchType);
else if (ccd.Member != null)
AddItem(ccd.Member, data.ImageIndex, data.Priority, matchType);
AddItem(data.Entity, data.ImageIndex, data.Priority, matchType);
}
}
}
@ -399,11 +394,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -399,11 +394,11 @@ namespace ICSharpCode.SharpDevelop.Gui
}
}
TextEditorControl GetEditor()
ITextEditor GetEditor()
{
IViewContent viewContent = WorkbenchSingleton.Workbench.ActiveViewContent;
if (viewContent is ITextEditorControlProvider) {
return ((ITextEditorControlProvider)viewContent).TextEditorControl;
if (viewContent is ITextEditorProvider) {
return ((ITextEditorProvider)viewContent).TextEditor;
}
return null;
}
@ -415,10 +410,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -415,10 +410,10 @@ namespace ICSharpCode.SharpDevelop.Gui
return;
object tag = ((ListBoxItem)listBox.SelectedItem).Tag;
if (tag is int) {
TextEditorControl editor = GetEditor();
ITextEditor editor = GetEditor();
if (editor != null) {
int i = Math.Min(editor.Document.TotalNumberOfLines, Math.Max(1, (int)tag));
editor.ActiveTextAreaControl.JumpTo(i - 1, int.MaxValue);
editor.JumpTo(i, int.MaxValue);
}
} else if (tag is IClass) {
IClass c = tag as IClass;

4
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CodeCompletionBinding.cs

@ -208,9 +208,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -208,9 +208,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
public virtual bool CtrlSpace(ITextEditor editor)
{
CtrlSpaceCompletionDataProvider provider = new CtrlSpaceCompletionDataProvider();
CtrlSpaceCompletionItemProvider provider = new CtrlSpaceCompletionItemProvider();
provider.AllowCompleteExistingExpression = true;
editor.ShowCompletionWindow(provider, '\0');
provider.ShowCompletion(editor);
return true;
}
}

31
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AttributesDataProvider.cs

@ -6,48 +6,39 @@ @@ -6,48 +6,39 @@
// </file>
using System;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
/// <summary>
/// Provides code completion for attribute names.
/// </summary>
public class AttributesDataProvider : CtrlSpaceCompletionDataProvider
public class AttributesItemProvider : CtrlSpaceCompletionItemProvider
{
public AttributesDataProvider(IProjectContent pc)
public AttributesItemProvider(IProjectContent pc)
: this(ExpressionContext.Attribute)
{
}
public AttributesDataProvider(ExpressionContext context) : base(context)
public AttributesItemProvider(ExpressionContext context) : base(context)
{
this.RemoveAttributeSuffix = true;
}
bool removeAttributeSuffix = true;
public bool RemoveAttributeSuffix { get; set; }
public bool RemoveAttributeSuffix {
get {
return removeAttributeSuffix;
}
set {
removeAttributeSuffix = value;
}
}
public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
public override ICompletionItemList GenerateCompletionList(ITextEditor editor)
{
ICompletionData[] data = base.GenerateCompletionData(fileName, textArea, charTyped);
if (removeAttributeSuffix && data != null) {
foreach (ICompletionData d in data) {
ICompletionItemList list = base.GenerateCompletionList(editor);
if (this.RemoveAttributeSuffix && list != null) {
foreach (CodeCompletionItem d in list.Items.OfType<CodeCompletionItem>()) {
if (d.Text.EndsWith("Attribute")) {
d.Text = d.Text.Substring(0, d.Text.Length - 9);
}
}
}
return data;
return list;
}
}
}

65
src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs

@ -10,22 +10,22 @@ using System.Collections; @@ -10,22 +10,22 @@ using System.Collections;
using System.Diagnostics;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
public class CtrlSpaceCompletionDataProvider : CodeCompletionDataProvider
public class CtrlSpaceCompletionItemProvider : CodeCompletionItemProvider
{
public CtrlSpaceCompletionDataProvider()
public CtrlSpaceCompletionItemProvider()
{
}
public CtrlSpaceCompletionDataProvider(ExpressionContext overrideContext)
public CtrlSpaceCompletionItemProvider(ExpressionContext overrideContext)
{
this.overrideContext = overrideContext;
}
ExpressionContext overrideContext;
bool allowCompleteExistingExpression;
/// <summary>
@ -43,13 +43,15 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -43,13 +43,15 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
/// </summary>
public bool ShowTemplates { get; set; }
void AddTemplates(TextArea textArea, char charTyped)
// TODO: AVALONEDIT implement templates
/*
void AddTemplates(ITextEditor editor, char charTyped)
{
if (!ShowTemplates)
return;
ICompletionData suggestedData = DefaultIndex >= 0 ? completionData[DefaultIndex] : null;
ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped);
if (templateCompletionData == null || templateCompletionData.Length == 0)
var templateCompletion = new TemplateCompletionItemProvider().GenerateCompletionList(editor);
if (templateCompletion == null || templateCompletionData.Length == 0)
return;
for (int i = 0; i < completionData.Count; i++) {
if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) {
@ -73,56 +75,33 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -73,56 +75,33 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
DefaultIndex = completionData.IndexOf(suggestedData);
}
}
*/
protected override void GenerateCompletionData(TextArea textArea, char charTyped)
public override ICompletionItemList GenerateCompletionList(ITextEditor editor)
{
#if DEBUG
if (DebugMode) {
Debugger.Break();
}
#endif
if (!allowCompleteExistingExpression) {
preSelection = "";
if (charTyped != '\0') {
preSelection = null;
}
ExpressionContext context = overrideContext ?? ExpressionContext.Default;
AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, context), context);
AddTemplates(textArea, charTyped);
return;
var ctrlSpace = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, context);
return GenerateCompletionListForCompletionData(ctrlSpace, context);
}
ExpressionResult expressionResult = GetExpression(textArea);
ExpressionResult expressionResult = GetExpression(editor);
LoggingService.Debug("Ctrl-Space got expression " + expressionResult.ToString());
string expression = expressionResult.Expression;
preSelection = null;
if (expression == null || expression.Length == 0) {
preSelection = "";
if (charTyped != '\0') {
preSelection = null;
}
AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context), expressionResult.Context);
AddTemplates(textArea, charTyped);
return;
var ctrlSpace = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, expressionResult.Context);
return GenerateCompletionListForCompletionData(ctrlSpace, expressionResult.Context);
}
int idx = expression.LastIndexOf('.');
if (idx > 0) {
preSelection = expression.Substring(idx + 1);
//string preSelection = expression.Substring(idx + 1);
expressionResult.Expression = expression.Substring(0, idx);
if (charTyped != '\0') {
preSelection = null;
}
GenerateCompletionData(textArea, expressionResult);
return GenerateCompletionListForExpression(editor, expressionResult);
} else {
preSelection = expression;
if (charTyped != '\0') {
preSelection = null;
}
ArrayList results = ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, expressionResult.Context);
AddResolveResults(results, expressionResult.Context);
AddTemplates(textArea, charTyped);
//preSelection = expression;
ArrayList results = ParserService.CtrlSpace(editor.Caret.Line, editor.Caret.Column, editor.FileName, editor.Document.Text, expressionResult.Context);
return GenerateCompletionListForCompletionData(results, expressionResult.Context);
}
}
}

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

@ -12,60 +12,50 @@ using ICSharpCode.Core; @@ -12,60 +12,50 @@ using ICSharpCode.Core;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
public class TemplateCompletionDataProvider : AbstractCompletionDataProvider
public class TemplateCompletionItemProvider : AbstractCompletionItemProvider
{
public override ImageList ImageList {
get {
return ClassBrowserIconService.ImageList;
}
}
public bool AutomaticInsert;
public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
/// <inheritdoc/>
public override ICompletionItemList GenerateCompletionList(ITextEditor editor)
{
preSelection = "";
CodeTemplateGroup templateGroup = CodeTemplateLoader.GetTemplateGroupPerFilename(fileName);
CodeTemplateGroup templateGroup = CodeTemplateLoader.GetTemplateGroupPerFilename(editor.FileName);
if (templateGroup == null) {
return null;
}
DefaultCompletionItemList result = new DefaultCompletionItemList();
bool automaticInsert = this.AutomaticInsert || DefaultEditor.Gui.Editor.SharpDevelopTextEditorProperties.Instance.AutoInsertTemplates;
List<ICompletionData> completionData = new List<ICompletionData>();
foreach (CodeTemplate template in templateGroup.Templates) {
completionData.Add(new TemplateCompletionData(template, automaticInsert));
result.Items.Add(new TemplateCompletionItem(template));
}
result.SortItems();
return completionData.ToArray();
return result;
}
class TemplateCompletionData : DefaultCompletionData
sealed class TemplateCompletionItem : ICompletionItem
{
CodeTemplate template;
bool automaticInsert;
public readonly CodeTemplate template;
public override bool InsertAction(TextArea textArea, char ch)
public TemplateCompletionItem(CodeTemplate template)
{
if (ch == '\t' || automaticInsert) {
((SharpDevelopTextAreaControl)textArea.MotherTextEditorControl).InsertTemplate(template);
return false;
} else {
return base.InsertAction(textArea, ch);
this.template = template;
}
public string Text {
get {
return template.Shortcut;
}
}
public TemplateCompletionData(CodeTemplate template, bool automaticInsert)
: base(template.Shortcut,
template.Description + StringParser.Parse("\n${res:Dialog.Options.CodeTemplate.PressTabToInsertTemplate}\n\n") + template.Text,
ClassBrowserIconService.CodeTemplateIndex)
{
this.template = template;
this.automaticInsert = automaticInsert;
public string Description {
get {
return template.Description + StringParser.Parse("\n${res:Dialog.Options.CodeTemplate.PressTabToInsertTemplate}\n\n")
+ template.Text;
}
}
}
}

2
src/Main/Base/Project/Src/TextEditor/Gui/Editor/ITextAreaControlProvider.cs

@ -10,7 +10,7 @@ using ICSharpCode.TextEditor; @@ -10,7 +10,7 @@ using ICSharpCode.TextEditor;
namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
{
public interface ITextEditorControlProvider : IFileDocumentProvider
public interface ITextEditorControlProvider : ITextEditorProvider
{
TextEditorControl TextEditorControl {
get;

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

@ -9,17 +9,13 @@ using ICSharpCode.TextEditor; @@ -9,17 +9,13 @@ using ICSharpCode.TextEditor;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Parser;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Dom.VBNet;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
using CSTokens = ICSharpCode.NRefactory.Parser.CSharp.Tokens;
using VBTokens = ICSharpCode.NRefactory.Parser.VB.Tokens;
@ -164,44 +160,39 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -164,44 +160,39 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
IClass c = expected.GetUnderlyingClass();
if (c == null) return false;
if (c.ClassType == ClassType.Enum) {
CtrlSpaceCompletionDataProvider cdp = new CtrlSpaceCompletionDataProvider();
ContextCompletionDataProvider cache = new ContextCompletionDataProvider(cdp);
cache.activationKey = charTyped;
cache.GenerateCompletionData(editor.FileName, (TextArea)editor.GetService(typeof(TextArea)), charTyped);
ICompletionData[] completionData = cache.CompletionData;
Array.Sort(completionData, DefaultCompletionData.Compare);
for (int i = 0; i < completionData.Length; i++) {
CodeCompletionData ccd = completionData[i] as CodeCompletionData;
if (ccd != null && ccd.Class != null) {
if (ccd.Class.FullyQualifiedName == expected.FullyQualifiedName) {
cache.DefaultIndex = i;
break;
}
CtrlSpaceCompletionItemProvider cdp = new CtrlSpaceCompletionItemProvider();
var ctrlSpaceList = cdp.GenerateCompletionList(editor);
if (ctrlSpaceList == null) return false;
ContextCompletionItemList contextList = new ContextCompletionItemList();
contextList.Items.AddRange(ctrlSpaceList.Items);
contextList.activationKey = charTyped;
foreach (CodeCompletionItem item in contextList.Items.OfType<CodeCompletionItem>()) {
IClass itemClass = item.Entity as IClass;
if (c != null && c.FullyQualifiedName == itemClass.FullyQualifiedName && c.TypeParameters.Count == itemClass.TypeParameters.Count) {
contextList.SuggestedItem = item;
break;
}
}
if (cache.DefaultIndex >= 0) {
if (charTyped != ' ') cdp.InsertSpace = true;
editor.ShowCompletionWindow(cache, charTyped);
if (contextList.SuggestedItem != null) {
if (charTyped != ' ') contextList.InsertSpace = true;
editor.ShowCompletionWindow(contextList);
return true;
}
}
return false;
}
private class ContextCompletionDataProvider : CachedCompletionDataProvider
private class ContextCompletionItemList : DefaultCompletionItemList
{
internal char activationKey;
readonly ICompletionItemList baseList;
internal ContextCompletionDataProvider(ICompletionDataProvider baseProvider) : base(baseProvider)
{
}
public override CompletionDataProviderKeyResult ProcessKey(char key)
public override CompletionItemListKeyResult ProcessInput(char key)
{
if (key == '=' && activationKey == '=')
return CompletionDataProviderKeyResult.BeforeStartKey;
return CompletionItemListKeyResult.BeforeStartKey;
activationKey = '\0';
return base.ProcessKey(key);
return base.ProcessInput(key);
}
}

8
src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs

@ -31,6 +31,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -31,6 +31,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
readonly TextEditorAdapter adapter;
public TextEditorAdapter Adapter {
get { return adapter; }
}
QuickClassBrowserPanel quickClassBrowserPanel = null;
Control customQuickClassBrowserPanel = null;
ErrorDrawer errorDrawer;
@ -218,10 +222,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -218,10 +222,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
void GenerateEditActions()
{
#if DEBUG
editactions[DebugBreakModifiers | Keys.OemPeriod] = new DebugDotCompletionAction();
editactions[DebugBreakModifiers | Keys.Space] = new DebugCtrlSpaceCodeCompletionAction();
#endif
try {
IEditAction[] actions = (IEditAction[])(AddInTree.GetTreeNode(editActionsPath).BuildChildItems(this)).ToArray(typeof(IEditAction));

6
src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorBasedPad.cs

@ -24,6 +24,12 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -24,6 +24,12 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
get;
}
public virtual ICSharpCode.SharpDevelop.ITextEditor TextEditor {
get {
return new TextEditorAdapter(this.TextEditorControl);
}
}
public override object Content {
get { return this.TextEditorControl; }
}

6
src/Main/Base/Project/Src/TextEditor/Gui/Editor/TextEditorDisplayBinding.cs

@ -84,10 +84,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor @@ -84,10 +84,14 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor
}
}
public ITextEditor TextEditor {
get { return textEditorControl.Adapter; }
}
public ICSharpCode.SharpDevelop.Dom.Refactoring.IDocument GetDocumentForFile(OpenedFile file)
{
if (file == this.PrimaryFile) {
return new TextEditorDocument(this.TextEditorControl.Document);
return this.TextEditor.Document;
} else {
return null;
}

5
src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs

@ -154,6 +154,11 @@ namespace ICSharpCode.SharpDevelop @@ -154,6 +154,11 @@ namespace ICSharpCode.SharpDevelop
sdtac.ActiveTextAreaControl.SelectionManager.SetSelection(
doc.OffsetToPosition(selectionStart), doc.OffsetToPosition(selectionStart + selectionLength));
}
public void JumpTo(int line, int column)
{
sdtac.ActiveTextAreaControl.JumpTo(line - 1, column - 1);
}
}
sealed class CompletionItemListAdapter : ICompletionDataProvider

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

@ -45,20 +45,15 @@ namespace ICSharpCode.SharpDevelop @@ -45,20 +45,15 @@ namespace ICSharpCode.SharpDevelop
public class DefaultCompletionItemList : ICompletionItemList
{
IList<ICompletionItem> items;
List<ICompletionItem> items = new List<ICompletionItem>();
public DefaultCompletionItemList()
: this(new List<ICompletionItem>())
{
public List<ICompletionItem> Items {
get { return items; }
}
public DefaultCompletionItemList(IList<ICompletionItem> items)
public void SortItems()
{
this.items = items;
}
public IList<ICompletionItem> Items {
get { return items; }
items.Sort((a,b) => string.Compare(a.Text, b.Text, StringComparison.OrdinalIgnoreCase));
}
public ICompletionItem SuggestedItem { get; set; }

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

@ -5,13 +5,21 @@ @@ -5,13 +5,21 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using System;
using System.Collections.Generic;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop
{
public interface ITextEditorProvider : IFileDocumentProvider
{
ITextEditor TextEditor {
get;
}
}
/// <summary>
/// Interface for text editors.
/// </summary>
@ -37,6 +45,11 @@ namespace ICSharpCode.SharpDevelop @@ -37,6 +45,11 @@ namespace ICSharpCode.SharpDevelop
/// <param name="selectionLength">End offset of the selection</param>
void Select(int selectionStart, int selectionLength);
/// <summary>
/// Sets the caret to the specified line/column and brings the caret into view.
/// </summary>
void JumpTo(int line, int column);
string FileName { get; }
void ShowInsightWindow(ICSharpCode.TextEditor.Gui.InsightWindow.IInsightDataProvider provider);

2
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs

@ -78,6 +78,8 @@ namespace ICSharpCode.Core @@ -78,6 +78,8 @@ namespace ICSharpCode.Core
public MenuItemDescriptor(object caller, Codon codon, IList subItems)
{
if (codon == null)
throw new ArgumentNullException("codon");
this.Caller = caller;
this.Codon = codon;
this.SubItems = subItems;

1
src/Main/ICSharpCode.Core.Presentation/ICSharpCode.Core.Presentation.csproj

@ -78,6 +78,7 @@ @@ -78,6 +78,7 @@
<Compile Include="ToolBar\ToolBarComboBox.cs" />
<Compile Include="ToolBar\ToolBarService.cs" />
<Compile Include="ToolBar\ToolBarSplitButton.cs" />
<CodeAnalysisDictionary Include="Properties\CodeAnalysisDictionary.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Core\Project\ICSharpCode.Core.csproj">

4
src/Main/ICSharpCode.Core.Presentation/Menu/MenuService.cs

@ -51,6 +51,8 @@ namespace ICSharpCode.Core.Presentation @@ -51,6 +51,8 @@ namespace ICSharpCode.Core.Presentation
public static IList CreateMenuItems(UIElement inputBindingOwner, object owner, string addInTreePath)
{
if (inputBindingOwner == null)
throw new ArgumentNullException("inputBindingOwner");
return CreateMenuItems(inputBindingOwner, AddInTree.BuildItems<MenuItemDescriptor>(addInTreePath, owner, false));
}
@ -144,7 +146,7 @@ namespace ICSharpCode.Core.Presentation @@ -144,7 +146,7 @@ namespace ICSharpCode.Core.Presentation
}
// HACK: find a better way to allow the host app to process link commands
public static Converter<string, ICommand> LinkCommandCreator;
public static Converter<string, ICommand> LinkCommandCreator { get; set; }
/// <summary>
/// Creates an KeyGesture for a shortcut.

23
src/Main/ICSharpCode.Core.Presentation/Properties/CodeAnalysisDictionary.xml

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
<?xml version="1.0"?>
<Dictionary>
<Words>
<Recognized>
<!-- add words specific to your application here -->
<Word>Codon</Word>
</Recognized>
<Unrecognized>
<!-- Disable Lineup as a single word - LineUp is the spelling used in WPF -->
<Word>Lineup</Word>
</Unrecognized>
<Deprecated>
<!-- Use this section to deprecate terms -->
<Term PreferredAlternate="Best">Bestest</Term>
</Deprecated>
</Words>
<Acronyms>
<CasingExceptions>
<!-- Use this section to tell FxCop the correct casing of acronyms. -->
<Acronym>WiX</Acronym>
</CasingExceptions>
</Acronyms>
</Dictionary>

4
src/Main/ICSharpCode.Core.Presentation/ToolBar/ToolBarService.cs

@ -37,8 +37,8 @@ namespace ICSharpCode.Core.Presentation @@ -37,8 +37,8 @@ namespace ICSharpCode.Core.Presentation
ArrayList result = new ArrayList();
foreach (ToolbarItemDescriptor descriptor in descriptors) {
object item = CreateToolBarItemFromDescriptor(descriptor);
if (item is IMenuItemBuilder) {
IMenuItemBuilder submenuBuilder = (IMenuItemBuilder)item;
IMenuItemBuilder submenuBuilder = item as IMenuItemBuilder;
if (submenuBuilder != null) {
result.AddRange(submenuBuilder.BuildItems(descriptor.Codon, descriptor.Caller));
} else {
result.Add(item);

Loading…
Cancel
Save