Browse Source

ResourceToolkit: Provide '{res' as code completion when typing '$' in an ICSharpCore.Core based project.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1939 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Christian Hornung 20 years ago
parent
commit
0dee13342f
  1. 3
      src/AddIns/Misc/ResourceToolkit/Project/ResourceToolkit.csproj
  2. 14
      src/AddIns/Misc/ResourceToolkit/Project/Src/CodeCompletion/ICSharpCodeCoreResourceCodeCompletionBinding.cs
  3. 86
      src/AddIns/Misc/ResourceToolkit/Project/Src/CodeCompletion/ICSharpCodeCoreTagCompletionDataProvider.cs
  4. 2
      src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/ICSharpCodeCoreResourceResolver.cs

3
src/AddIns/Misc/ResourceToolkit/Project/ResourceToolkit.csproj

@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunCodeAnalysis>False</RunCodeAnalysis>
<CodeAnalysisRules>-Microsoft.Design#CA1020</CodeAnalysisRules>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
@ -93,6 +95,7 @@ @@ -93,6 +95,7 @@
<EmbeddedResource Include="Resources\EditStringResourceDialog.xfrm" />
<Compile Include="Src\Resolver\MemberFindAstVisitor.cs" />
<Compile Include="Src\Resolver\MemberEqualityComparer.cs" />
<Compile Include="Src\CodeCompletion\ICSharpCodeCoreTagCompletionDataProvider.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">

14
src/AddIns/Misc/ResourceToolkit/Project/Src/CodeCompletion/ICSharpCodeCoreResourceCodeCompletionBinding.cs

@ -19,7 +19,7 @@ namespace Hornung.ResourceToolkit.CodeCompletion @@ -19,7 +19,7 @@ namespace Hornung.ResourceToolkit.CodeCompletion
{
/// <summary>
/// Provides code completion for inserting resource keys
/// for ICSharpCode.Core resources references ("${res:...}").
/// for ICSharpCode.Core resources references ("${res: ... }").
/// </summary>
public class ICSharpCodeCoreResourceCodeCompletionBinding : DefaultCodeCompletionBinding
{
@ -60,6 +60,18 @@ namespace Hornung.ResourceToolkit.CodeCompletion @@ -60,6 +60,18 @@ namespace Hornung.ResourceToolkit.CodeCompletion
}
} else if (ch == '$') {
// Provide ${res: as code completion
// in an ICSharpCode.Core application
if (ICSharpCodeCoreResourceResolver.GetICSharpCodeCoreHostResourceFileName(editor.FileName) != null ||
ICSharpCodeCoreResourceResolver.GetICSharpCodeCoreLocalResourceFileName(editor.FileName) != null) {
editor.ShowCompletionWindow(new ICSharpCodeCoreTagCompletionDataProvider(), ch);
return true;
}
}
return false;

86
src/AddIns/Misc/ResourceToolkit/Project/Src/CodeCompletion/ICSharpCodeCoreTagCompletionDataProvider.cs

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Christian Hornung" email="c-hornung@gmx.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Gui.CompletionWindow;
namespace Hornung.ResourceToolkit.CodeCompletion
{
/// <summary>
/// Provides code completion data for the ${res tag.
/// </summary>
public class ICSharpCodeCoreTagCompletionDataProvider : AbstractCompletionDataProvider
{
int startOffset;
TextArea textArea;
bool nonMatchingCharTyped;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", MessageId = "ICSharpCode.TextEditor.Gui.CompletionWindow.DefaultCompletionData.#ctor(System.String,System.String,System.Int32)")]
public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
{
this.textArea = textArea;
this.startOffset = textArea.Caret.Offset;
this.nonMatchingCharTyped = false;
this.DefaultIndex = 0;
return new ICompletionData[] { new DefaultCompletionData("{res", null, ClassBrowserIconService.GotoArrowIndex) };
}
public override CompletionDataProviderKeyResult ProcessKey(char key)
{
// Return NormalKey as long as:
// - the typed string matches the ${res tag
// - ':' is not pressed
// Return InsertionKey when:
// - ':' is pressed and the typed string matches the ${res tag
// - the typed string does not match the ${res tag and more than one
// character has already been typed (to close the completion window)
string typedTag = this.GetTypedText();
if (key != ':') {
typedTag += key;
}
bool match = "${res:".StartsWith(typedTag, StringComparison.InvariantCultureIgnoreCase);
if (key == ':') {
if (match || this.nonMatchingCharTyped) {
return CompletionDataProviderKeyResult.InsertionKey;
} else {
this.nonMatchingCharTyped = true;
return CompletionDataProviderKeyResult.NormalKey;
}
} else {
if (match) {
this.nonMatchingCharTyped = false;
return CompletionDataProviderKeyResult.NormalKey;
} else {
if (this.nonMatchingCharTyped) {
return CompletionDataProviderKeyResult.InsertionKey;
} else {
this.nonMatchingCharTyped = true;
return CompletionDataProviderKeyResult.NormalKey;
}
}
}
}
string GetTypedText()
{
if (this.textArea == null) {
return String.Empty;
}
int offset = Math.Max(this.startOffset, 0);
return this.textArea.Document.GetText(offset, Math.Min(Math.Max(this.textArea.Caret.Offset - offset, 0), this.textArea.Document.TextLength - offset));
}
}
}

2
src/AddIns/Misc/ResourceToolkit/Project/Src/Resolver/ICSharpCodeCoreResourceResolver.cs

@ -20,7 +20,7 @@ namespace Hornung.ResourceToolkit.Resolver @@ -20,7 +20,7 @@ namespace Hornung.ResourceToolkit.Resolver
{
/// <summary>
/// Resolves references to resources that are accessed using ICSharpCode.Core
/// ("${res:...}").
/// ("${res: ... }").
/// </summary>
public class ICSharpCodeCoreResourceResolver : AbstractResourceResolver
{

Loading…
Cancel
Save