diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index 78d4629e49..a163229f46 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1999,6 +1999,7 @@ + diff --git a/data/options/SharpDevelop-templates.xml b/data/options/SharpDevelop-templates.xml index 1006bd6eac..c2aa7da510 100644 --- a/data/options/SharpDevelop-templates.xml +++ b/data/options/SharpDevelop-templates.xml @@ -4,12 +4,10 @@ { ${Selection} } - for (|; ; ) { + for (|; ; ) { ${Selection} } - for (|; ; ) - ${Selection} - if (|) { + if (|) { ${Selection} } if (|) { @@ -17,8 +15,6 @@ } else { } - if (|) - ${Selection} switch (|) { case: break; @@ -26,12 +22,12 @@ ${Selection} break; } - switch (|) { + switch (|) { case : ${Selection} break; } - try { + try { ${Selection}| } catch (Exception) { @@ -48,11 +44,9 @@ } finally { } - while (|) { + while (|) { ${Selection} } - while (|) - ${Selection} System.Console.WriteLine(${Selection}|); System.Console.Write(${Selection}|); diff --git a/samples/CSharpCodeCompletion/CodeCompletionData.cs b/samples/CSharpCodeCompletion/CodeCompletionData.cs index 8b954e9613..0ad63e0467 100644 --- a/samples/CSharpCodeCompletion/CodeCompletionData.cs +++ b/samples/CSharpCodeCompletion/CodeCompletionData.cs @@ -14,6 +14,7 @@ using System.Xml; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom.CSharp; +using ICSharpCode.SharpDevelop.Dom.VBNet; using ICSharpCode.TextEditor.Gui.CompletionWindow; namespace CSharpEditor @@ -76,8 +77,8 @@ namespace CSharpEditor string ICompletionData.Description { get { if (description == null) { - IDecoration entity = (IDecoration)member ?? c; - description = GetCSharpText(entity); + IEntity entity = (IEntity)member ?? c; + description = GetText(entity); if (overloads > 1) { description += " (+" + overloads + " overloads)"; } @@ -89,21 +90,22 @@ namespace CSharpEditor /// /// Converts a member to text. - /// Returns the declaration of the member as C# code, e.g. + /// Returns the declaration of the member as C# or VB code, e.g. /// "public void MemberName(string parameter)" /// - static string GetCSharpText(IDecoration entity) + static string GetText(IEntity entity) { + IAmbience ambience = MainForm.IsVisualBasic ? (IAmbience)VBNetAmbience.Instance : CSharpAmbience.Instance; if (entity is IMethod) - return CSharpAmbience.Instance.Convert(entity as IMethod); + return ambience.Convert(entity as IMethod); if (entity is IProperty) - return CSharpAmbience.Instance.Convert(entity as IProperty); + return ambience.Convert(entity as IProperty); if (entity is IEvent) - return CSharpAmbience.Instance.Convert(entity as IEvent); + return ambience.Convert(entity as IEvent); if (entity is IField) - return CSharpAmbience.Instance.Convert(entity as IField); + return ambience.Convert(entity as IField); if (entity is IClass) - return CSharpAmbience.Instance.Convert(entity as IClass); + return ambience.Convert(entity as IClass); // unknown entity: return entity.ToString(); } diff --git a/samples/CSharpCodeCompletion/CodeCompletionProvider.cs b/samples/CSharpCodeCompletion/CodeCompletionProvider.cs index 23c697d5cb..5df81198f7 100644 --- a/samples/CSharpCodeCompletion/CodeCompletionProvider.cs +++ b/samples/CSharpCodeCompletion/CodeCompletionProvider.cs @@ -119,12 +119,16 @@ namespace CSharpEditor } else { finder = new Dom.CSharp.CSharpExpressionFinder(mainForm.parseInformation); } - return finder.FindExpression(textArea.Document.TextContent, textArea.Caret.Offset); + Dom.ExpressionResult expression = finder.FindExpression(textArea.Document.TextContent, textArea.Caret.Offset); + if (expression.Region.IsEmpty) { + expression.Region = new Dom.DomRegion(textArea.Caret.Line + 1, textArea.Caret.Column + 1); + } + return expression; } void AddCompletionData(List resultList, ArrayList completionData) { - // used to store method the names for grouping overloads + // used to store the method names for grouping overloads Dictionary nameDictionary = new Dictionary(); // Add the completion data as returned by SharpDevelop.Dom to the diff --git a/samples/CSharpCodeCompletion/MainForm.cs b/samples/CSharpCodeCompletion/MainForm.cs index 88aaa3abbf..7c6db05835 100644 --- a/samples/CSharpCodeCompletion/MainForm.cs +++ b/samples/CSharpCodeCompletion/MainForm.cs @@ -181,7 +181,7 @@ class A // Remove information from lastCompilationUnit and add information from newCompilationUnit. myProjectContent.UpdateCompilationUnit(lastCompilationUnit, newCompilationUnit, DummyFileName); lastCompilationUnit = newCompilationUnit; - parseInformation.ValidCompilationUnit = newCompilationUnit; + parseInformation.SetCompilationUnit(newCompilationUnit); } Dom.ICompilationUnit ConvertCompilationUnit(NRefactory.Ast.CompilationUnit cu) diff --git a/samples/CSharpCodeCompletion/ToolTipProvider.cs b/samples/CSharpCodeCompletion/ToolTipProvider.cs index 54d94724a2..54bd58534f 100644 --- a/samples/CSharpCodeCompletion/ToolTipProvider.cs +++ b/samples/CSharpCodeCompletion/ToolTipProvider.cs @@ -64,6 +64,9 @@ namespace CSharpEditor ExpressionResult expression = expressionFinder.FindFullExpression( editor.Text, editor.Document.PositionToOffset(e.LogicalPosition)); + if (expression.Region.IsEmpty) { + expression.Region = new DomRegion(e.LogicalPosition.Line + 1, e.LogicalPosition.Column + 1); + } TextEditor.TextArea textArea = editor.ActiveTextAreaControl.TextArea; NRefactoryResolver resolver = new NRefactoryResolver(mainForm.myProjectContent.Language); @@ -119,7 +122,7 @@ namespace CSharpEditor } } - static string GetMemberText(IAmbience ambience, IDecoration member) + static string GetMemberText(IAmbience ambience, IEntity member) { StringBuilder text = new StringBuilder(); if (member is IField) { diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionData.cs b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionData.cs index 56c7c71b72..0dd231e573 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionData.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionData.cs @@ -101,13 +101,5 @@ namespace ICSharpCode.XmlEditor } return false; } - - public int CompareTo(object obj) - { - if ((obj == null) || !(obj is XmlCompletionData)) { - return -1; - } - return text.CompareTo(((XmlCompletionData)obj).text); - } } } diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Completion/FirstCompletionListItemSelectedTestFixture.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Completion/FirstCompletionListItemSelectedTestFixture.cs index cd9a9f4156..d94da565fe 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Completion/FirstCompletionListItemSelectedTestFixture.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Completion/FirstCompletionListItemSelectedTestFixture.cs @@ -85,7 +85,7 @@ namespace XmlEditor.Tests.Completion public void SelectedCompletionDataMatches() { List items = new List(completionDataItems); - items.Sort(); + items.Sort(DefaultCompletionData.Compare); Assert.AreEqual(items[0].Text, selectedCompletionData.Text); } } diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj b/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj index e65755d244..3cbaf704d2 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj +++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj @@ -73,7 +73,6 @@ Always - \ No newline at end of file diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionListView.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionListView.cs index 8536fe3f14..e7bfb11948 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionListView.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionListView.cs @@ -65,7 +65,7 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow public CodeCompletionListView(ICompletionData[] completionData) { - Array.Sort(completionData); + Array.Sort(completionData, DefaultCompletionData.Compare); this.completionData = completionData; // this.KeyDown += new System.Windows.Forms.KeyEventHandler(OnKey); diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs index b7676b437d..2694e2eaac 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/CodeCompletionWindow.cs @@ -246,8 +246,10 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow codeCompletionListView.SelectPrevItem(); return true; case Keys.Tab: + InsertSelectedItem('\t'); + return true; case Keys.Return: - InsertSelectedItem('\0'); + InsertSelectedItem('\n'); return true; } return base.ProcessTextAreaKey(keyData); diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/ICompletionData.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/ICompletionData.cs index c803227179..8a174345bd 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/ICompletionData.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/CompletionWindow/ICompletionData.cs @@ -9,7 +9,7 @@ using System; namespace ICSharpCode.TextEditor.Gui.CompletionWindow { - public interface ICompletionData : IComparable + public interface ICompletionData { int ImageIndex { get; @@ -96,12 +96,13 @@ namespace ICSharpCode.TextEditor.Gui.CompletionWindow this.imageIndex = imageIndex; } - public int CompareTo(object obj) + public static int Compare(ICompletionData a, ICompletionData b) { - if (obj == null || !(obj is DefaultCompletionData)) { - return -1; - } - return text.CompareTo(((DefaultCompletionData)obj).Text); + if (a == null) + throw new ArgumentNullException("a"); + if (b == null) + throw new ArgumentNullException("b"); + return string.Compare(a.Text, b.Text, StringComparison.InvariantCultureIgnoreCase); } } } diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs index a98b2ddf83..d4f3a306ae 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextEditorControlBase.cs @@ -473,6 +473,7 @@ namespace ICSharpCode.TextEditor /// purposes. /// [Browsable(true)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [Description("The base font of the text area. No bold or italic fonts can be used because bold/italic is reserved for highlighting purposes.")] public override Font Font { get { diff --git a/src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs b/src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs index b77a37d9fb..7a6a2aa54a 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs @@ -71,39 +71,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } } - [Obsolete] - public class TemplateScript - { - string languageName; - string runAt; - string scriptSourceCode; - - public string LanguageName { - get { - return languageName; - } - } - - public string RunAt { - get { - return runAt; - } - } - string SourceText { - get { - return "public class ScriptObject : System.MarshalByRefObject { " + scriptSourceCode + "}"; - } - } - - - public TemplateScript(XmlElement scriptConfig) - { - languageName = scriptConfig.GetAttribute("language"); - runAt = scriptConfig.GetAttribute("runAt"); - scriptSourceCode = scriptConfig.InnerText; - } - } - public class TemplateType { string name; @@ -244,20 +211,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } } - [Obsolete] - public List Scripts { - get { - return new List(); - } - } - - [Obsolete] - public bool HasScripts { - get { - return false; - } - } - public FileTemplate(string filename) { XmlDocument doc = new XmlDocument(); diff --git a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs index a6a820b407..22dac71290 100644 --- a/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs +++ b/src/Main/Base/Project/Src/Services/ClassBrowserIcons/ClassBrowserIconService.cs @@ -23,8 +23,10 @@ namespace ICSharpCode.SharpDevelop public const int LocalVariableIndex = 16; public const int ParameterIndex = 17; + public const int KeywordIndex = NamespaceIndex; // TODO: give keywords their own icon + public const int CodeTemplateIndex = 18; - public const int ClassIndex = 18; + public const int ClassIndex = 19; public const int StructIndex = ClassIndex + 1 * 4; public const int InterfaceIndex = ClassIndex + 2 * 4; public const int EnumIndex = ClassIndex + 3 * 4; @@ -240,8 +242,9 @@ namespace ICSharpCode.SharpDevelop imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Local")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Parameter")); + imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.TextFileIcon")); - imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Class")); //18 + imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Class")); //19 imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.InternalClass")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ProtectedClass")); imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PrivateClass")); diff --git a/src/Main/Base/Project/Src/TextEditor/Actions.cs b/src/Main/Base/Project/Src/TextEditor/Actions.cs index b1616e2325..f7c6d657f2 100644 --- a/src/Main/Base/Project/Src/TextEditor/Actions.cs +++ b/src/Main/Base/Project/Src/TextEditor/Actions.cs @@ -21,27 +21,37 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions { SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)services.MotherTextEditorControl; services.AutoClearSelection = false; - sdtac.ShowCompletionWindow(new TemplateCompletionDataProvider(), '\0'); + sdtac.ShowCompletionWindow(new TemplateCompletionDataProvider() { AutomaticInsert = true }, '\0'); } } public class CodeCompletionPopup : AbstractEditAction { - public override void Execute(TextArea services) + public override void Execute(TextArea textArea) { - SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)services.MotherTextEditorControl; + SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl; CtrlSpaceCompletionDataProvider provider = new CtrlSpaceCompletionDataProvider(); provider.AllowCompleteExistingExpression = true; sdtac.ShowCompletionWindow(provider, '\0'); } } + public class ExpandTemplateAction : Tab + { + public override void Execute(TextArea textArea) + { + SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl; + if (!sdtac.ExpandTemplateOnTab()) + base.Execute(textArea); + } + } + #if DEBUG internal class DebugCtrlSpaceCodeCompletionAction : AbstractEditAction { - public override void Execute(TextArea services) + public override void Execute(TextArea textArea) { - SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)services.MotherTextEditorControl; + SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl; CtrlSpaceCompletionDataProvider provider = new CtrlSpaceCompletionDataProvider(); provider.AllowCompleteExistingExpression = true; provider.DebugMode = true; @@ -51,9 +61,9 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Actions internal class DebugDotCompletionAction : AbstractEditAction { - public override void Execute(TextArea services) + public override void Execute(TextArea textArea) { - SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)services.MotherTextEditorControl; + SharpDevelopTextAreaControl sdtac = (SharpDevelopTextAreaControl)textArea.MotherTextEditorControl; CodeCompletionDataProvider ccdp = new CodeCompletionDataProvider(); ccdp.DebugMode = true; sdtac.ShowCompletionWindow(ccdp, '.'); diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs index 83af99adc5..d1ff254404 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/AbstractCompletionDataProvider.cs @@ -7,6 +7,7 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Windows.Forms; using ICSharpCode.SharpDevelop.Dom; @@ -105,7 +106,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor protected int caretColumn; protected string fileName; - protected ArrayList completionData = null; + protected List completionData = null; protected ExpressionContext overrideContext; /// @@ -113,7 +114,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor /// public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) { - completionData = new ArrayList(); + completionData = new List(); this.fileName = fileName; IDocument document = textArea.Document; @@ -123,7 +124,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor GenerateCompletionData(textArea, charTyped); - return (ICompletionData[])completionData.ToArray(typeof(ICompletionData)); + return completionData.ToArray(); } protected ExpressionResult GetExpression(TextArea textArea) @@ -155,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor CodeCompletionData ccd = CreateItem(o, context); if (object.Equals(o, context.SuggestedItem)) suggestedData = ccd; - if (ccd != null && !ccd.Text.StartsWith("___")) + if (ccd != null) completionData.Add(ccd); } if (context.SuggestedItem != null) { diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs index 00b330a1eb..e28587e6a6 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionData.cs @@ -309,15 +309,5 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } return cref; } - - #region System.IComparable interface implementation - public int CompareTo(object obj) - { - if (obj == null || !(obj is CodeCompletionData)) { - return -1; - } - return text.CompareTo(((CodeCompletionData)obj).text); - } - #endregion } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataUsageCache.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataUsageCache.cs index 5d6a6d934a..c5811b9f3a 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataUsageCache.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CodeCompletionDataUsageCache.cs @@ -143,7 +143,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor public int Compare(KeyValuePair x, KeyValuePair y) { double a = ((double)x.Value.Uses / x.Value.ShowCount); - return a.CompareTo((double)y.Value.Uses / y.Value.ShowCount); + return -a.CompareTo((double)y.Value.Uses / y.Value.ShowCount); } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CommentCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CommentCompletionDataProvider.cs index 518d217501..3d413dd616 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CommentCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CommentCompletionDataProvider.cs @@ -113,16 +113,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor this.text = text; this.description = description; } - #region System.IComparable interface implementation - public int CompareTo(object obj) - { - if (obj == null || !(obj is CommentCompletionData)) { - return -1; - } - return text.CompareTo(((CommentCompletionData)obj).text); - } - #endregion - } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs index f97bd6d7f3..450e93ee81 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/CtrlSpaceCompletionDataProvider.cs @@ -11,6 +11,7 @@ using System.Diagnostics; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.Core; using ICSharpCode.TextEditor; +using ICSharpCode.TextEditor.Gui.CompletionWindow; namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor { @@ -52,6 +53,24 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } ExpressionContext context = overrideContext ?? ExpressionContext.Default; AddResolveResults(ParserService.CtrlSpace(caretLineNumber, caretColumn, fileName, textArea.Document.TextContent, context), context); + ICompletionData[] templateCompletionData = new TemplateCompletionDataProvider().GenerateCompletionData(fileName, textArea, charTyped); + for (int i = 0; i < completionData.Count; i++) { + if (completionData[i].ImageIndex == ClassBrowserIconService.KeywordIndex) { + string text = completionData[i].Text; + for (int j = 0; j < templateCompletionData.Length; j++) { + if (templateCompletionData[j] != null && templateCompletionData[j].Text == text) { + // replace keyword with template + completionData[i] = templateCompletionData[j]; + templateCompletionData[j] = null; + } + } + } + } + // add non-keyword code templates + for (int j = 0; j < templateCompletionData.Length; j++) { + if (templateCompletionData[j] != null) + completionData.Add(templateCompletionData[j]); + } return; } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs index eac955e028..e2bba826bd 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/CompletionWindow/TemplateCompletionDataProvider.cs @@ -7,6 +7,8 @@ using System; using System.Collections; +using System.Collections.Generic; +using ICSharpCode.Core; using System.Windows.Forms; using ICSharpCode.SharpDevelop.Internal.Templates; @@ -17,86 +19,54 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor { public class TemplateCompletionDataProvider : AbstractCompletionDataProvider { - ImageList imageList = new ImageList(); - public override ImageList ImageList { get { - return imageList; + return ClassBrowserIconService.ImageList; } } + public bool AutomaticInsert; + public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped) { preSelection = ""; - imageList.Images.Add(IconService.GetBitmap("Icons.16x16.TextFileIcon")); CodeTemplateGroup templateGroup = CodeTemplateLoader.GetTemplateGroupPerFilename(fileName); if (templateGroup == null) { return null; } - ArrayList completionData = new ArrayList(); + bool automaticInsert = this.AutomaticInsert || DefaultEditor.Gui.Editor.SharpDevelopTextEditorProperties.Instance.AutoInsertTemplates; + List completionData = new List(); foreach (CodeTemplate template in templateGroup.Templates) { - completionData.Add(new TemplateCompletionData(template)); + completionData.Add(new TemplateCompletionData(template, automaticInsert)); } - return (ICompletionData[])completionData.ToArray(typeof(ICompletionData)); + return completionData.ToArray(); } - class TemplateCompletionData : ICompletionData, IComparable + class TemplateCompletionData : DefaultCompletionData { CodeTemplate template; + bool automaticInsert; - public int ImageIndex { - get { - return 0; - } - } - - public string Text { - get { - return template.Shortcut + "\t" + template.Description; - } - set { - throw new NotSupportedException(); - } - } - - public string Description { - get { - return template.Text; - } - } - - public double Priority { - get { - return 0; - } - } - - public bool InsertAction(TextArea textArea, char ch) + public override bool InsertAction(TextArea textArea, char ch) { - ((SharpDevelopTextAreaControl)textArea.MotherTextEditorControl).InsertTemplate(template); - return false; + if (ch == '\t' || automaticInsert) { + ((SharpDevelopTextAreaControl)textArea.MotherTextEditorControl).InsertTemplate(template); + return false; + } else { + return base.InsertAction(textArea, ch); + } } - public TemplateCompletionData(CodeTemplate template) + 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; } - - - - #region System.IComparable interface implementation - public int CompareTo(object obj) - { - if (obj == null || !(obj is TemplateCompletionData)) { - return -1; - } - return template.Shortcut.CompareTo(((TemplateCompletionData)obj).template.Shortcut); - } - #endregion - - } } } diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs index 6d07a5db7f..89c748e5cc 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/NRefactoryCodeCompletionBinding.cs @@ -168,7 +168,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor cache.activationKey = charTyped; cache.GenerateCompletionData(editor.FileName, editor.ActiveTextAreaControl.TextArea, charTyped); ICompletionData[] completionData = cache.CompletionData; - Array.Sort(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) { diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs index 3ede44107d..df52f31e5a 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextAreaControl.cs @@ -23,10 +23,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor { public class SharpDevelopTextAreaControl : TextEditorControl { - readonly static string contextMenuPath = "/SharpDevelop/ViewContent/DefaultTextEditor/ContextMenu"; - readonly static string editActionsPath = "/AddIns/DefaultTextEditor/EditActions"; - readonly static string formatingStrategyPath = "/AddIns/DefaultTextEditor/Formatter"; - readonly static string advancedHighlighterPath = "/AddIns/DefaultTextEditor/AdvancedHighlighter"; + const string contextMenuPath = "/SharpDevelop/ViewContent/DefaultTextEditor/ContextMenu"; + const string editActionsPath = "/AddIns/DefaultTextEditor/EditActions"; + const string formatingStrategyPath = "/AddIns/DefaultTextEditor/Formatter"; + const string advancedHighlighterPath = "/AddIns/DefaultTextEditor/AdvancedHighlighter"; QuickClassBrowserPanel quickClassBrowserPanel = null; Control customQuickClassBrowserPanel = null; @@ -316,26 +316,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor return false; } } - if (ch == ' ' && SharpDevelopTextEditorProperties.Instance.AutoInsertTemplates) { - string word = GetWordBeforeCaret(); - if (word != null) { - CodeTemplateGroup templateGroup = CodeTemplateLoader.GetTemplateGroupPerFilename(FileName); - if (templateGroup != null) { - foreach (CodeTemplate template in templateGroup.Templates) { - if (template.Shortcut == word) { - if (word.Length > 0) { - int newCaretOffset = DeleteWordBeforeCaret(); - //// set new position in text area - ActiveTextAreaControl.TextArea.Caret.Position = Document.OffsetToPosition(newCaretOffset); - } - - InsertTemplate(template); - return true; - } - } - } - } - } } catch (Exception ex) { LogException(ex); } finally { @@ -344,6 +324,29 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor return false; } + internal bool ExpandTemplateOnTab() + { + string word = GetWordBeforeCaret(); + if (word != null) { + CodeTemplateGroup templateGroup = CodeTemplateLoader.GetTemplateGroupPerFilename(FileName); + if (templateGroup != null) { + foreach (CodeTemplate template in templateGroup.Templates) { + if (template.Shortcut == word) { + if (word.Length > 0) { + int newCaretOffset = DeleteWordBeforeCaret(); + //// set new position in text area + ActiveTextAreaControl.TextArea.Caret.Position = Document.OffsetToPosition(newCaretOffset); + } + + InsertTemplate(template); + return true; + } + } + } + } + return false; + } + public void ShowInsightWindow(IInsightDataProvider insightDataProvider) { if (insightWindow == null || insightWindow.IsDisposed) { diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs index 0c29ccda16..f59c2668f8 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/SharpDevelopTextEditorProperties.cs @@ -301,7 +301,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } public bool AutoInsertTemplates { get { - return properties.Get("AutoInsertTemplates", true); + return properties.Get("AutoInsertTemplates", false); } set { properties.Set("AutoInsertTemplates", value); diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs index f00fdb7aeb..0fdcbe91e3 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs @@ -328,7 +328,7 @@ namespace ICSharpCode.SharpDevelop.Dom newParts.Add(addClass); // construct a replacement CompoundClass with the new part list addClass = CompoundClass.Create(newParts); - LoggingService.Debug("Added new part / Replaced part! (old part count=" + compound.Parts.Count +", new part count=" + newParts.Count + ")"); + LoggingService.Debug("Added new part (old part count=" + compound.Parts.Count +", new part count=" + newParts.Count + ")"); } else { // Instead of overwriting a class with another, treat both parts as partial. // This fixes SD2-1217.