Browse Source

Simplify code using FileFilter

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6299 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
c96e64b46f
  1. 14
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  2. 8
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  3. 25
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  4. 33
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs

14
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -168,10 +168,10 @@ namespace ICSharpCode.SharpDevelop.Commands
fdiag.OverwritePrompt = true; fdiag.OverwritePrompt = true;
fdiag.AddExtension = true; fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(null)).ToArray(typeof(string)); var fileFilters = ProjectService.GetFileFilters();
fdiag.Filter = String.Join("|", fileFilters); fdiag.Filter = String.Join("|", fileFilters);
for (int i = 0; i < fileFilters.Length; ++i) { for (int i = 0; i < fileFilters.Count; ++i) {
if (fileFilters[i].IndexOf(Path.GetExtension(file.FileName)) >= 0) { if (fileFilters[i].ContainsExtension(Path.GetExtension(file.FileName))) {
fdiag.FilterIndex = i + 1; fdiag.FilterIndex = i + 1;
break; break;
} }
@ -220,7 +220,7 @@ namespace ICSharpCode.SharpDevelop.Commands
using (OpenFileDialog fdiag = new OpenFileDialog()) { using (OpenFileDialog fdiag = new OpenFileDialog()) {
fdiag.AddExtension = true; fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string)); var fileFilters = ProjectService.GetFileFilters();
fdiag.Filter = String.Join("|", fileFilters); fdiag.Filter = String.Join("|", fileFilters);
bool foundFilter = false; bool foundFilter = false;
@ -230,8 +230,8 @@ namespace ICSharpCode.SharpDevelop.Commands
if (content != null) { if (content != null) {
string extension = Path.GetExtension(content.PrimaryFileName); string extension = Path.GetExtension(content.PrimaryFileName);
if (string.IsNullOrEmpty(extension) == false) { if (string.IsNullOrEmpty(extension) == false) {
for (int i = 0; i < fileFilters.Length; ++i) { for (int i = 0; i < fileFilters.Count; ++i) {
if (fileFilters[i].IndexOf(extension) >= 0) { if (fileFilters[i].ContainsExtension(extension)) {
fdiag.FilterIndex = i + 1; fdiag.FilterIndex = i + 1;
foundFilter = true; foundFilter = true;
break; break;
@ -242,7 +242,7 @@ namespace ICSharpCode.SharpDevelop.Commands
} }
if (!foundFilter) { if (!foundFilter) {
fdiag.FilterIndex = fileFilters.Length; fdiag.FilterIndex = fileFilters.Count;
} }
fdiag.Multiselect = true; fdiag.Multiselect = true;

8
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

@ -45,14 +45,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
} }
} }
int GetFileFilterIndex(IProject project, string[] fileFilters) int GetFileFilterIndex(IProject project, IList<FileFilterDescriptor> fileFilters)
{ {
if (project != null) { if (project != null) {
ProjectBindingDescriptor projectCodon = ProjectBindingService.GetCodonPerLanguageName(project.Language); ProjectBindingDescriptor projectCodon = ProjectBindingService.GetCodonPerLanguageName(project.Language);
if (projectCodon != null) { if (projectCodon != null) {
for (int i = 0; i < fileFilters.Length; ++i) { for (int i = 0; i < fileFilters.Count; ++i) {
for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) { for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) {
if (fileFilters[i].ToUpperInvariant().IndexOf(projectCodon.CodeFileExtensions[j].ToUpperInvariant()) >= 0) { if (fileFilters[i].ContainsExtension(projectCodon.CodeFileExtensions[j])) {
return i + 1; return i + 1;
} }
} }
@ -180,7 +180,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
using (OpenFileDialog fdiag = new OpenFileDialog()) { using (OpenFileDialog fdiag = new OpenFileDialog()) {
fdiag.AddExtension = true; fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string)); var fileFilters = ProjectService.GetFileFilters();
fdiag.InitialDirectory = node.Directory; fdiag.InitialDirectory = node.Directory;
fdiag.FilterIndex = GetFileFilterIndex(node.Project, fileFilters); fdiag.FilterIndex = GetFileFilterIndex(node.Project, fileFilters);

25
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -6,6 +6,7 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -429,18 +430,26 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
/// <summary>
/// Gets the list of file filters.
/// </summary>
public static IList<FileFilterDescriptor> GetFileFilters()
{
return AddInTree.BuildItems<FileFilterDescriptor>("/SharpDevelop/Workbench/FileFilter", null);
}
/// <summary> /// <summary>
/// Returns a File Dialog filter that can be used to filter on all registered project formats /// Returns a File Dialog filter that can be used to filter on all registered project formats
/// </summary> /// </summary>
public static string GetAllProjectsFilter(object caller, bool includeSolutions) public static string GetAllProjectsFilter(object caller, bool includeSolutions)
{ {
AddInTreeNode addinTreeNode = AddInTree.GetTreeNode("/SharpDevelop/Workbench/Combine/FileFilter"); var filters = AddInTree.BuildItems<FileFilterDescriptor>("/SharpDevelop/Workbench/Combine/FileFilter", null);
if (!includeSolutions)
filters.RemoveAll(f => f.ContainsExtension(".sln"));
StringBuilder b = new StringBuilder(StringParser.Parse("${res:SharpDevelop.Solution.AllKnownProjectFormats}|")); StringBuilder b = new StringBuilder(StringParser.Parse("${res:SharpDevelop.Solution.AllKnownProjectFormats}|"));
bool first = true; bool first = true;
foreach (Codon c in addinTreeNode.Codons) { foreach (var filter in filters) {
string ext = c.Properties.Get("extensions", ""); string ext = filter.Extensions;
if (!includeSolutions && ext == "*.sln")
continue;
if (ext != "*.*" && ext.Length > 0) { if (ext != "*.*" && ext.Length > 0) {
if (!first) { if (!first) {
b.Append(';'); b.Append(';');
@ -450,11 +459,9 @@ namespace ICSharpCode.SharpDevelop.Project
b.Append(ext); b.Append(ext);
} }
} }
foreach (string entry in addinTreeNode.BuildChildItems(caller)) { foreach (var filter in filters) {
if (!includeSolutions && entry.EndsWith("*.sln"))
continue;
b.Append('|'); b.Append('|');
b.Append(entry); b.Append(filter.ToString());
} }
return b.ToString(); return b.ToString();
} }

33
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.Core
/// </attribute> /// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/FileFilter</usage> /// <usage>Only in /SharpDevelop/Workbench/FileFilter</usage>
/// <returns> /// <returns>
/// String in the format "name|extensions". /// <see cref="FileFilterDescriptor"/> in the format "name|extensions".
/// </returns> /// </returns>
public class FileFilterDoozer : IDoozer public class FileFilterDoozer : IDoozer
{ {
@ -37,7 +37,36 @@ namespace ICSharpCode.Core
public object BuildItem(object caller, Codon codon, ArrayList subItems) public object BuildItem(object caller, Codon codon, ArrayList subItems)
{ {
return StringParser.Parse(codon.Properties["name"]) + "|" + codon.Properties["extensions"]; return new FileFilterDescriptor {
Name = StringParser.Parse(codon.Properties["name"]),
Extensions = codon.Properties["extensions"]
};
}
}
public sealed class FileFilterDescriptor
{
public string Name { get; set; }
public string Extensions { get; set; }
/// <summary>
/// Gets whether this descriptor matches the specified file extension.
/// </summary>
/// <param name="extension">File extension starting with '.'</param>
public bool ContainsExtension(string extension)
{
if (string.IsNullOrEmpty(extension))
return false;
int index = this.Extensions.IndexOf("*" + extension, StringComparison.OrdinalIgnoreCase);
if (index < 0 || index + extension.Length < this.Extensions.Length)
return false;
return index + extension.Length < this.Extensions.Length
|| this.Extensions[index + extension.Length] == ';';
}
public override string ToString()
{
return Name + "|" + Extensions;
} }
} }
} }

Loading…
Cancel
Save